public void Test() { var targetDirectory = AppDomain.CurrentDomain.BaseDirectory; var solutionDirectory = Path.Combine(targetDirectory, @"TestReferences\Projects\MacroResolverProject\"); var solution = new TestSolution(solutionDirectory); solution.RestoreNuget(); var usageLibrary = solution.Project("UsageLibrary"); var errors = new List <string>(); using (var runner = new BuildEngineRunner(usageLibrary.Path)) { var preBuildTask = runner.Create <PreBuildAdaptationExecutionTask>(); preBuildTask.Setup(usageLibrary); preBuildTask.References = usageLibrary.GetReferences().ToArray(); preBuildTask.Execute(); var postBuildTask = runner.Create <PostBuildAdaptationExecutionTask>(); postBuildTask.Execute(); errors.AddRange(CheckTaskEvents(solutionDirectory, runner.GetEvents(preBuildTask))); errors.AddRange(CheckTaskEvents(solutionDirectory, runner.GetEvents(postBuildTask))); } if (errors.Any()) { Assert.Fail(string.Join(Environment.NewLine, errors)); } }
public void AttributeUsageTest() { var targetDirectory = AppDomain.CurrentDomain.BaseDirectory; var solutionDirectory = Path.Combine(targetDirectory, @"TestReferences\Projects\GenericProject\"); var solution = new TestSolution(solutionDirectory); var usageLibrary = solution.Project("UsageLibrary"); var errors = new List <string>(); using (var runner = new BuildEngineRunner(usageLibrary.Path)) { var preBuildTask = runner.Create <PreBuildAdaptationExecutionTask>(); preBuildTask.Setup(usageLibrary); preBuildTask.References = usageLibrary.GetReferences().ToArray(); preBuildTask.Execute(); var postBuildTask = runner.Create <PostBuildAdaptationExecutionTask>(); postBuildTask.Execute(); var preMessages = runner.GetEvents(preBuildTask).Messages; var postMessages = runner.GetEvents(postBuildTask).Messages; var preWarnings = runner.GetEvents(preBuildTask).Warnings; errors.AddRange(preWarnings.AssertContains(0, "Unexpected internal error")); errors.AddRange(runner.GetEvents(postBuildTask).Warnings.AssertEmpty()); errors.AddRange(runner.GetEvents(preBuildTask).Errors.AssertEmpty()); errors.AddRange(runner.GetEvents(postBuildTask).Errors.AssertEmpty()); errors.AddRange(runner.GetEvents(preBuildTask).Custom.AssertEmpty()); errors.AddRange(runner.GetEvents(postBuildTask).Custom.AssertEmpty()); foreach (AttributeTargets value in Enum.GetValues(typeof(AttributeTargets))) { if (value == AttributeTargets.All) { continue; } errors.AddRange(preWarnings.AssertContains(1, $"DefinitionLibrary.{value}.EmptyAttribute has no Setup, PreBuid or PostBuild entries. Skipping...")); var expectedCount = 1; if (value == AttributeTargets.Field) { expectedCount = 2; } errors.AddRange(preMessages.AssertContains(expectedCount, string.Join(",", "PreBuild", value, "PreBuildAttribute"))); errors.AddRange(postMessages.AssertContains(expectedCount, string.Join(",", "PostBuild", value, "PostBuildAttribute"))); errors.AddRange(preMessages.AssertContains(expectedCount, string.Join(",", "PreBuild", value, "AllAttribute"))); errors.AddRange(postMessages.AssertContains(expectedCount, string.Join(",", "PostBuild", value, "AllAttribute"))); } } if (errors.Any()) { Assert.Fail(string.Join(Environment.NewLine, errors)); } }
public void Test() { var targetDirectory = AppDomain.CurrentDomain.BaseDirectory; var solutionDirectory = Path.Combine(targetDirectory, @"TestReferences\Projects\GenericProject\"); var solution = new TestSolution(solutionDirectory); var usageLibrary = solution.Project("UsageAttributeInitialization"); var errors = new List <string>(); using (var runner = new BuildEngineRunner(usageLibrary.Path)) { var preBuildTask = runner.Create <PreBuildAdaptationExecutionTask>(); preBuildTask.Setup(usageLibrary); preBuildTask.References = usageLibrary.GetReferences().ToArray(); preBuildTask.Execute(); var postBuildTask = runner.Create <PostBuildAdaptationExecutionTask>(); postBuildTask.Execute(); errors.AddRange(runner.GetEvents(preBuildTask).Warnings.AssertEmpty()); errors.AddRange(runner.GetEvents(postBuildTask).Warnings.AssertEmpty()); errors.AddRange(runner.GetEvents(preBuildTask).Errors.AssertEmpty()); errors.AddRange(runner.GetEvents(postBuildTask).Errors.AssertEmpty()); errors.AddRange(runner.GetEvents(preBuildTask).Custom.AssertEmpty()); errors.AddRange(runner.GetEvents(postBuildTask).Custom.AssertEmpty()); } if (errors.Any()) { Assert.Fail(string.Join(Environment.NewLine, errors)); } }
public void Test() { var targetDirectory = AppDomain.CurrentDomain.BaseDirectory; var solutionDirectory = Path.Combine(targetDirectory, @"TestReferences\Projects\SourceCodeIsolationProject\"); var solution = new TestSolution(solutionDirectory); solution.RestoreNuget(); var usageLibrary = solution.Project("UsageLibrary"); var errors = new List <string>(); using (var runner = new BuildEngineRunner(usageLibrary.Path)) { var preBuildTask = runner.Create <PreBuildAdaptationExecutionTask>(); preBuildTask.Setup(usageLibrary); preBuildTask.References = usageLibrary.GetReferences().ToArray(); preBuildTask.Execute(); errors.AddRange(runner.GetEvents(preBuildTask).Messages.AssertContains(1, string.Join(",", "PreBuild", "Escaped"))); errors.AddRange(runner.GetEvents(preBuildTask).Messages.AssertContains(2, string.Join(",", "PreBuild", "Mixed"))); errors.AddRange(runner.GetEvents(preBuildTask).Messages.AssertContains(1, string.Join(",", "PreBuild", "Unescaped"))); errors.AddRange(runner.GetEvents(preBuildTask).Messages.AssertContains(3, "Suspicious attributes isolation test")); errors.AddRange(runner.GetEvents(preBuildTask).Warnings.AssertEmpty()); errors.AddRange(runner.GetEvents(preBuildTask).Errors.AssertEmpty()); errors.AddRange(runner.GetEvents(preBuildTask).Custom.AssertEmpty()); if (errors.Any()) { Assert.Fail(string.Join(Environment.NewLine, errors)); } var replaceCompileItemsTask = runner.Create <ReplaceCompileItemsTask>(); replaceCompileItemsTask.Test = true; replaceCompileItemsTask.ItemsCompile = preBuildTask.ArtifactsCompile.Enumerate().Union(preBuildTask.ItemsCompile).ToArray(); replaceCompileItemsTask.Execute(); errors.AddRange(runner.GetEvents(replaceCompileItemsTask).Messages.AssertContains(1, "2 files will be replaced")); errors.AddRange(runner.GetEvents(replaceCompileItemsTask).Warnings.AssertCount(1)); errors.AddRange(runner.GetEvents(replaceCompileItemsTask).Warnings.AssertContains(1, "Mixed isolation detected in")); errors.AddRange(runner.GetEvents(replaceCompileItemsTask).Errors.AssertEmpty()); errors.AddRange(runner.GetEvents(replaceCompileItemsTask).Custom.AssertEmpty()); if (errors.Any()) { Assert.Fail(string.Join(Environment.NewLine, errors)); } Assert.AreEqual(2, replaceCompileItemsTask.CompilesToRemove.Length); Assert.AreEqual(2, replaceCompileItemsTask.CompilesToAdd.Length); Assert.IsTrue(replaceCompileItemsTask.CompilesToRemove.Count(i => i.ItemSpec.EndsWith("Mixed.cs")) == 1); Assert.IsTrue(replaceCompileItemsTask.CompilesToRemove.Count(i => i.ItemSpec.EndsWith("Unescaped.cs")) == 1); } }
public void Test() { var targetDirectory = AppDomain.CurrentDomain.BaseDirectory; var solutionDirectory = Path.Combine(targetDirectory, @"TestReferences\Projects\SetupProject\"); var solution = new TestSolution(solutionDirectory); var usageLibrary = solution.Project("UsageLibrary"); var errors = new List <string>(); using (var runner = new BuildEngineRunner(usageLibrary.Path)) { var preBuildTask = runner.Create <PreBuildAdaptationExecutionTask>(); preBuildTask.Setup(usageLibrary); preBuildTask.References = usageLibrary.GetReferences().ToArray(); preBuildTask.Execute(); var postBuildTask = runner.Create <PostBuildAdaptationExecutionTask>(); postBuildTask.Execute(); var preBuildMessages = runner.GetEvents(preBuildTask).Messages; errors.AddRange(preBuildMessages.AssertContains(1, "@Setup Base")); errors.AddRange(preBuildMessages.AssertContains(1, "@Setup EmptyAttribute")); errors.AddRange(preBuildMessages.AssertContains(1, "@Setup PostBuildAttribute")); errors.AddRange(preBuildMessages.AssertContains(1, "@Setup PreBuildAttribute")); errors.AddRange(preBuildMessages.AssertContains(1, "@PreBuildAttribute")); if (!errors.Any()) { for (int i = 0; i < preBuildMessages.Count; i++) { if (preBuildMessages[i].Message.Contains("@Setup base")) { break; } if (preBuildMessages[i].Message.Contains("@Setup EmptyAttribute") || preBuildMessages[i].Message.Contains("@Setup PostBuildAttribute") || preBuildMessages[i].Message.Contains("@Setup PreBuildAttribute")) { errors.Add($"Wrong setup call order, {preBuildMessages[i].Message} was before base"); } } } var postBuildMessages = runner.GetEvents(postBuildTask).Messages; errors.AddRange(postBuildMessages.AssertContains(1, "@PostBuildAttribute")); errors.AddRange(runner.GetEvents(preBuildTask).Warnings.AssertEmpty()); errors.AddRange(runner.GetEvents(postBuildTask).Warnings.AssertEmpty()); errors.AddRange(runner.GetEvents(preBuildTask).Errors.AssertEmpty()); errors.AddRange(runner.GetEvents(postBuildTask).Errors.AssertEmpty()); errors.AddRange(runner.GetEvents(preBuildTask).Custom.AssertEmpty()); errors.AddRange(runner.GetEvents(postBuildTask).Custom.AssertEmpty()); } if (errors.Any()) { Assert.Fail(string.Join(Environment.NewLine, errors)); } }
public void CallOrderingTest() { var targetDirectory = AppDomain.CurrentDomain.BaseDirectory; var solutionDirectory = Path.Combine(targetDirectory, @"TestReferences\Projects\GenericProject\"); var solution = new TestSolution(solutionDirectory); var usageLibrary = solution.Project("UsageOrderingLibrary"); var errors = new List <string>(); using (var runner = new BuildEngineRunner(usageLibrary.Path)) { var preBuildTask = runner.Create <PreBuildAdaptationExecutionTask>(); preBuildTask.Setup(usageLibrary); preBuildTask.References = usageLibrary.GetReferences().ToArray(); preBuildTask.Execute(); var postBuildTask = runner.Create <PostBuildAdaptationExecutionTask>(); postBuildTask.Execute(); var preMessages = runner.GetEvents(preBuildTask).Messages; var postMessages = runner.GetEvents(postBuildTask).Messages; errors.AddRange(runner.GetEvents(preBuildTask).Warnings.AssertContains(0, "Unexpected internal error")); errors.AddRange(runner.GetEvents(postBuildTask).Warnings.AssertEmpty()); errors.AddRange(runner.GetEvents(preBuildTask).Errors.AssertEmpty()); errors.AddRange(runner.GetEvents(postBuildTask).Errors.AssertEmpty()); errors.AddRange(runner.GetEvents(preBuildTask).Custom.AssertEmpty()); errors.AddRange(runner.GetEvents(postBuildTask).Custom.AssertEmpty()); var regex = new Regex("^[^,]+,[^,]+,[^,]+,[^,]+,[^,]+$"); var sequence = new List <AttributeTargets> { AttributeTargets.Assembly, AttributeTargets.Field | AttributeTargets.Event, //event as field AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, //param of method AttributeTargets.Constructor | AttributeTargets.Method, AttributeTargets.Property | AttributeTargets.Event, //event as property AttributeTargets.GenericParameter, //param of type definition AttributeTargets.Interface | AttributeTargets.Enum | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Delegate, AttributeTargets.Module }; var filteredMessages = preMessages.Select(m => m.Message).Where(m => regex.IsMatch(m)).ToList(); var minIndex = 0; for (int i = 0; i < filteredMessages.Count; i++) { var message = filteredMessages[i]; var index = sequence.Skip(minIndex) .ToList() .FindIndex(p => p.HasFlag((AttributeTargets)Enum.Parse(typeof(AttributeTargets), message.Split(',')[1]))); if (index == -1) { Assert.Fail($"Unexpected message {i}: {message} min({minIndex}:{sequence[minIndex]}) position"); } minIndex += index; } filteredMessages = postMessages.Select(m => m.Message).Where(m => regex.IsMatch(m)).ToList(); minIndex = 0; for (int i = 0; i < filteredMessages.Count; i++) { var message = filteredMessages[i]; var index = sequence.Skip(minIndex) .ToList() .FindIndex(p => p.HasFlag((AttributeTargets)Enum.Parse(typeof(AttributeTargets), message.Split(',')[1]))); if (index == -1) { Assert.Fail($"Unexpected message {i}: {message} min({minIndex}:{sequence[minIndex]}) position"); } minIndex += index; } } if (errors.Any()) { Assert.Fail(string.Join(Environment.NewLine, errors)); } }