private static BuildRunResults runBuild(string buildExecutable, string arguments, string target, Func <bool> abortIfTrue) { var timer = Stopwatch.StartNew(); DebugLog.Debug.WriteInfo("Running build: {0} {1}", buildExecutable, arguments); Process process = new Process(); process.StartInfo = new ProcessStartInfo(buildExecutable, arguments); process.StartInfo.RedirectStandardOutput = true; process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; process.StartInfo.UseShellExecute = false; process.StartInfo.CreateNoWindow = true; process.Start(); string line; var buildResults = new BuildRunResults(target); var lines = new List <string>(); while ((line = process.StandardOutput.ReadLine()) != null) { if (abortIfTrue.Invoke()) { AutoTest.Core.DebugLog.Debug.WriteDebug("Aborting build run"); return(new BuildRunResults(target)); } lines.Add(line); } process.WaitForExit(); timer.Stop(); var parser = new MSBuildOutputParser(buildResults, lines.ToArray()); parser.Parse(); buildResults.SetTimeSpent(timer.Elapsed); return(buildResults); }
public BuildRunResults PostProcessBuildResults(BuildRunResults buildResults) { if (!_isActive) { return(buildResults); } if (buildResults == null) { return(null); } //rewritePdbs(buildResults); updateBuildProject(ref buildResults); foreach (var x in buildResults.Errors) { updateMessage(x); } foreach (var x in buildResults.Warnings) { updateMessage(x); } return(buildResults); }
public void Should_serialize_build_run_message() { var results = new BuildRunResults("Project"); results.AddError(new BuildMessage() { File = "file", LineNumber = 15, LinePosition = 20, ErrorMessage = "Error message" }); results.AddWarning(new BuildMessage() { File = "file2", LineNumber = 35, LinePosition = 40, ErrorMessage = "Error message2" }); results.SetTimeSpent(new TimeSpan(23567)); var message = new BuildRunMessage(results); var output = serializeDeserialize <BuildRunMessage>(message); output.Results.Project.ShouldEqual("Project"); output.Results.TimeSpent.ShouldEqual(new TimeSpan(23567)); output.Results.ErrorCount.ShouldEqual(1); output.Results.Errors[0].File.ShouldEqual("file"); output.Results.Errors[0].LineNumber.ShouldEqual(15); output.Results.Errors[0].LinePosition.ShouldEqual(20); output.Results.Errors[0].ErrorMessage.ShouldEqual("Error message"); output.Results.WarningCount.ShouldEqual(1); output.Results.Warnings[0].File.ShouldEqual("file2"); output.Results.Warnings[0].LineNumber.ShouldEqual(35); output.Results.Warnings[0].LinePosition.ShouldEqual(40); output.Results.Warnings[0].ErrorMessage.ShouldEqual("Error message2"); }
public void Should_add_build_warnings() { var results = new BuildRunResults("project"); results.AddWarning(new BuildMessage()); _runResultCache.Merge(results); _runResultCache.Warnings.Length.ShouldEqual(1); _runResultCache.Warnings[0].Key.ShouldEqual("project"); }
public void Should_add_build_errors() { var results = new BuildRunResults("project"); results.AddError(new BuildMessage()); _runResultCache.Merge(results); _runResultCache.Errors.Length.ShouldEqual(1); _runResultCache.Errors[0].Key.ShouldEqual("project"); }
private BuildRunResults postProcessBuildReports(BuildRunResults report) { foreach (var preProcessor in _preBuildProcessors) { report = preProcessor.PostProcessBuildResults(report); } return(report); }
public void Merge(BuildRunResults results) { lock (_padLock) { mergeBuildList(_errors, results.Project, results.Errors); mergeBuildList(_warnings, results.Project, results.Warnings); } }
public void Should_parse_succeeded() { var resultfile = string.Format("TestResources{0}MSBuild{0}msbuild_succeeded.txt", Path.DirectorySeparatorChar); var result = new BuildRunResults(""); var parser = new MSBuildOutputParser(result, File.ReadAllLines(resultfile)); parser.Parse(); result.WarningCount.ShouldEqual(0); result.ErrorCount.ShouldEqual(0); }
public void Should_parse_succeeded() { var resultfile = getPath(string.Format("TestResources{0}MSBuild{0}msbuild_succeeded.txt", Path.DirectorySeparatorChar)); var result = new BuildRunResults(""); var parser = new MSBuildOutputParser(result, File.ReadAllLines(resultfile)); parser.Parse(); result.WarningCount.ShouldEqual(0); result.ErrorCount.ShouldEqual(0); }
public void Merge(BuildRunResults results) { lock (_padLock) { Debug.WriteDebug("Merging build run results"); mergeBuildList(_errors, results.Project, results.Errors); mergeBuildList(_warnings, results.Project, results.Warnings); } }
public void Should_not_add_duplicate_warnings() { var result = new BuildRunResults(""); var line = "Session.cs(32,46): warning CS0109: The member `Desktopcouch.Session.GType' does not hide an inherited member. The new keyword is not required"; var parser = new MSBuildOutputParser(result, line); parser.Parse(); parser.Parse(); result.WarningCount.ShouldEqual(1); }
public void Should_not_add_duplicate_errors() { var result = new BuildRunResults(""); var line = "Class1.cs(5,7): error CS0246: The type or namespace name 'Nunit' could not be found (are you missing a using directive or an assembly reference?)"; var parser = new MSBuildOutputParser(result, line); parser.Parse(); parser.Parse(); result.ErrorCount.ShouldEqual(1); }
public BuildRunResults PostProcessBuildResults(BuildRunResults runResults) { var buildProject = runResults.Project; if (_tmpProjects.Contains(buildProject)) { runResults.UpdateProject(getOriginalProject(buildProject)); } return(runResults); }
public void Should_not_merge_same_build_errors_from_different_project() { var results = new BuildRunResults("project"); results.AddError(new BuildMessage() { File = "some file", ErrorMessage = "some error message" }); _runResultCache.Merge(results); results = new BuildRunResults("another project"); results.AddError(new BuildMessage() { File = "some file", ErrorMessage = "some error message" }); _runResultCache.Merge(results); _runResultCache.Errors.Length.ShouldEqual(2); }
public void Should_merge_build_errors() { var results = new BuildRunResults("project"); results.AddError(new BuildMessage() {File = "some file", ErrorMessage = "some error message"}); _runResultCache.Merge(results); results = new BuildRunResults("project"); results.AddError(new BuildMessage() { File = "some file", ErrorMessage = "some error message" }); results.AddError(new BuildMessage() { File = "some other file", ErrorMessage = "some other error message" }); _runResultCache.Merge(results); _runResultCache.Errors.Length.ShouldEqual(2); }
public void Should_parse_error() { var result = new BuildRunResults(""); var line = "Class1.cs(5,7): error CS0246: The type or namespace name 'Nunit' could not be found (are you missing a using directive or an assembly reference?)"; var parser = new MSBuildOutputParser(result, line); parser.Parse(); result.ErrorCount.ShouldEqual(1); result.Errors[0].File.ShouldEqual("Class1.cs"); result.Errors[0].LineNumber.ShouldEqual(5); result.Errors[0].LinePosition.ShouldEqual(7); result.Errors[0].ErrorMessage.ShouldEqual("CS0246: The type or namespace name 'Nunit' could not be found (are you missing a using directive or an assembly reference?)"); }
public void Should_parse_warning() { var result = new BuildRunResults(""); var line = "Session.cs(32,46): warning CS0109: The member `Desktopcouch.Session.GType' does not hide an inherited member. The new keyword is not required"; var parser = new MSBuildOutputParser(result, line); parser.Parse(); result.WarningCount.ShouldEqual(1); result.Warnings[0].File.ShouldEqual("Session.cs"); result.Warnings[0].LineNumber.ShouldEqual(32); result.Warnings[0].LinePosition.ShouldEqual(46); result.Warnings[0].ErrorMessage.ShouldEqual("CS0109: The member `Desktopcouch.Session.GType' does not hide an inherited member. The new keyword is not required"); }
public void Should_parse_errors() { var resultfile = string.Format("TestResources{0}MSBuild{0}msbuild_errors.txt", Path.DirectorySeparatorChar); var result = new BuildRunResults(""); var parser = new MSBuildOutputParser(result, File.ReadAllLines(resultfile)); parser.Parse(); result.ErrorCount.ShouldEqual(1); result.Errors[0].File .Replace('/', Path.DirectorySeparatorChar) .ShouldEqual("/home/ack/src/AutoTest.Net/src/AutoTest.Core/Messaging/MessageConsumers/ProjectChangeConsumer.cs".Replace('/', Path.DirectorySeparatorChar)); result.Errors[0].LineNumber.ShouldEqual(62); result.Errors[0].LinePosition.ShouldEqual(50); result.Errors[0].ErrorMessage.ShouldEqual("CS1003: ; expected"); }
public void Should_parse_errors() { var resultfile = getPath(string.Format("TestResources{0}MSBuild{0}msbuild_errors.txt", Path.DirectorySeparatorChar)); var result = new BuildRunResults(""); var parser = new MSBuildOutputParser(result, File.ReadAllLines(resultfile)); parser.Parse(); result.ErrorCount.ShouldEqual(1); result.Errors[0].File .Replace('/', Path.DirectorySeparatorChar) .ShouldEqual("/home/ack/src/AutoTest.Net/src/AutoTest.Core/Messaging/MessageConsumers/ProjectChangeConsumer.cs".Replace('/', Path.DirectorySeparatorChar)); result.Errors[0].LineNumber.ShouldEqual(62); result.Errors[0].LinePosition.ShouldEqual(50); result.Errors[0].ErrorMessage.ShouldEqual("CS1003: ; expected"); }
public void Should_remove_cached_build_errors_that_now_works() { var results = new BuildRunResults("project"); results.AddError(new BuildMessage() { File = "some file", ErrorMessage = "some error message" }); _runResultCache.Merge(results); results = new BuildRunResults("another project"); results.AddError(new BuildMessage() { File = "some file", ErrorMessage = "some error message" }); _runResultCache.Merge(results); results = new BuildRunResults("project"); _runResultCache.Merge(results); _runResultCache.Errors.Length.ShouldEqual(1); }
private void updateBuildProject(ref BuildRunResults buildResults) { if (compare(buildResults.Project, _files.Solution.Tempfile)) { buildResults.UpdateProject(_files.Solution.Original); } else { var buildProject = buildResults.Project; var project = _files.Files.FirstOrDefault(f => compare(f.Tempfile, buildProject)); if (project != null) { buildResults.UpdateProject(project.Original); } } }
public void Should_parse_so_called_compatible_msbuild_output_with_warnings() { // Test will fail on other platforms than windows because of Path.GetDirectoryName if (!isWindows()) return; var resultfile = getPath(string.Format("TestResources{0}MSBuild{0}msbuild_windows_warnings.txt", Path.DirectorySeparatorChar)); var result = new BuildRunResults(""); var parser = new MSBuildOutputParser(result, File.ReadAllLines(resultfile)); parser.Parse(); result.Warnings.Length.ShouldEqual(1); result.Warnings[0].File .Replace('/', Path.DirectorySeparatorChar) .ShouldEqual(@"C:\Users\ack\src\EventStore\EventStore\Program.cs"); result.Warnings[0].LineNumber.ShouldEqual(21); result.Warnings[0].LinePosition.ShouldEqual(8); result.Warnings[0].ErrorMessage.ShouldEqual("CS0219: The variable 'a' is assigned but its value is never used"); }
public void Should_parse_so_called_compatible_msbuild_output() { // Test will fail on other platforms than windows because of Path.GetDirectoryName if (!isWindows()) return; var resultfile = getPath(string.Format("TestResources{0}MSBuild{0}msbuild_windows.txt", Path.DirectorySeparatorChar)); var result = new BuildRunResults(""); var parser = new MSBuildOutputParser(result, File.ReadAllLines(resultfile)); parser.Parse(); result.ErrorCount.ShouldEqual(3); result.Errors[0].File .Replace('/', Path.DirectorySeparatorChar) .ShouldEqual(@"C:\Users\ack\src\EventStore\EventStore\Program.cs"); result.Errors[0].LineNumber.ShouldEqual(20); result.Errors[0].LinePosition.ShouldEqual(20); result.Errors[0].ErrorMessage.ShouldEqual("CS1002: ; expected"); }
public void Should_not_merge_same_build_warnings_from_different_project() { var results = new BuildRunResults("project"); results.AddWarning(new BuildMessage() { File = "some file", ErrorMessage = "some error message" }); _runResultCache.Merge(results); results = new BuildRunResults("another project"); results.AddWarning(new BuildMessage() { File = "some file", ErrorMessage = "some error message" }); _runResultCache.Merge(results); _runResultCache.Warnings.Length.ShouldEqual(2); }
public void Should_parse_msbuild_solution_errors() { // Test will fail on other platforms than windows because of Path.GetDirectoryName if (!isWindows()) { return; } var resultfile = getPath(string.Format("TestResources{0}MSBuild{0}msbuild_solution_error.txt", Path.DirectorySeparatorChar)); var result = new BuildRunResults(""); var parser = new MSBuildOutputParser(result, File.ReadAllLines(resultfile)); parser.Parse(); result.Errors.Length.ShouldEqual(1); result.Errors[0].File .Replace('/', Path.DirectorySeparatorChar) .ShouldEqual(@"C:\Some\Solution\File.sln"); result.Errors[0].LineNumber.ShouldEqual(200); result.Errors[0].LinePosition.ShouldEqual(0); result.Errors[0].ErrorMessage.ShouldEqual("MSB 5023: Error parsing solution file."); }
private bool buildAll(RunInfo[] projectList, RunReport runReport) { if (projectList.Where(x => x.ShouldBeBuilt).Select(x => x).Count() == 0) { return(true); } Debug.WriteInfo("Running builds"); BuildRunResults results = null; if (_configuration.ShouldBuildSolution) { results = buildSolution(projectList, runReport); } else { results = buildProjects(projectList, runReport); } projectList = postProcessBuildRuns(projectList, ref runReport); return(results == null); }
public void Should_remove_cached_build_warnings_that_now_works() { var results = new BuildRunResults("project"); results.AddWarning(new BuildMessage() { File = "some file", ErrorMessage = "some error message" }); _runResultCache.Merge(results); results = new BuildRunResults("another project"); results.AddWarning(new BuildMessage() { File = "some file", ErrorMessage = "some error message" }); _runResultCache.Merge(results); results = new BuildRunResults("project"); _runResultCache.Merge(results); _runResultCache.Warnings.Length.ShouldEqual(1); }
public void Should_parse_warning() { var resultfile = getPath(string.Format("TestResources{0}MSBuild{0}msbuild_warnings.txt", Path.DirectorySeparatorChar)); var result = new BuildRunResults(""); var parser = new MSBuildOutputParser(result, File.ReadAllLines(resultfile)); parser.Parse(); result.WarningCount.ShouldEqual(2); result.Warnings[0].File .Replace('/', Path.DirectorySeparatorChar) .ShouldEqual("/home/ack/src/AutoTest.Net/src/AutoTest.Core/BuildRunners/MSBuildOutputParser.cs".Replace('/', Path.DirectorySeparatorChar)); result.Warnings[0].LineNumber.ShouldEqual(21); result.Warnings[0].LinePosition.ShouldEqual(29); result.Warnings[0].ErrorMessage.ShouldEqual("CS1717: Assignment made to same variable; did you mean to assign something else?"); result.Warnings[1].File .Replace('/', Path.DirectorySeparatorChar) .ShouldEqual("/home/ack/src/AutoTest.Net/src/AutoTest.Test/Core/BuildRunners/MSBuildOutputParserTest.cs".Replace('/', Path.DirectorySeparatorChar)); result.Warnings[1].LineNumber.ShouldEqual(27); result.Warnings[1].LinePosition.ShouldEqual(29); result.Warnings[1].ErrorMessage.ShouldEqual("CS1717: Assignment made to same variable; did you mean to assign something else?"); }
public void Should_merge_build_errors() { var results = new BuildRunResults("project"); results.AddError(new BuildMessage() { File = "some file", ErrorMessage = "some error message" }); _runResultCache.Merge(results); results = new BuildRunResults("project"); results.AddError(new BuildMessage() { File = "some file", ErrorMessage = "some error message" }); results.AddError(new BuildMessage() { File = "some other file", ErrorMessage = "some other error message" }); _runResultCache.Merge(results); _runResultCache.Errors.Length.ShouldEqual(2); }
public void Should_clear_cache_when_issuing_clear() { var results = new BuildRunResults("another project"); results.AddError(new BuildMessage() { File = "some files", ErrorMessage = "some error messages" }); results.AddWarning(new BuildMessage() { File = "some file", ErrorMessage = "some error message" }); _runResultCache.Merge(results); _runResultCache.Merge(new TestRunResults("project", "assembly", false, TestRunner.NUnit, new TestResult[] { new TestResult(TestRunner.NUnit, TestRunStatus.Ignored, "Test name", "Message", new IStackLine[] { }) })); _runResultCache.Merge(new TestRunResults("project", "assembly", true, TestRunner.NUnit, new TestResult[] { new TestResult(TestRunner.NUnit, TestRunStatus.Failed, "Test name", "Message", new IStackLine[] { new StackLineMessage("method", "file", 10) }) })); _runResultCache.Clear(); _runResultCache.Errors.Length.ShouldEqual(0); _runResultCache.Warnings.Length.ShouldEqual(0); _runResultCache.Failed.Length.ShouldEqual(0); _runResultCache.Ignored.Length.ShouldEqual(0); }
public void Should_parse_warning() { var resultfile = string.Format("TestResources{0}MSBuild{0}msbuild_warnings.txt", Path.DirectorySeparatorChar); var result = new BuildRunResults(""); var parser = new MSBuildOutputParser(result, File.ReadAllLines(resultfile)); parser.Parse(); result.WarningCount.ShouldEqual(2); result.Warnings[0].File .Replace('/', Path.DirectorySeparatorChar) .ShouldEqual("/home/ack/src/AutoTest.Net/src/AutoTest.Core/BuildRunners/MSBuildOutputParser.cs".Replace('/', Path.DirectorySeparatorChar)); result.Warnings[0].LineNumber.ShouldEqual(21); result.Warnings[0].LinePosition.ShouldEqual(29); result.Warnings[0].ErrorMessage.ShouldEqual("CS1717: Assignment made to same variable; did you mean to assign something else?"); result.Warnings[1].File .Replace('/', Path.DirectorySeparatorChar) .ShouldEqual("/home/ack/src/AutoTest.Net/src/AutoTest.Test/Core/BuildRunners/MSBuildOutputParserTest.cs".Replace('/', Path.DirectorySeparatorChar)); result.Warnings[1].LineNumber.ShouldEqual(27); result.Warnings[1].LinePosition.ShouldEqual(29); result.Warnings[1].ErrorMessage.ShouldEqual("CS1717: Assignment made to same variable; did you mean to assign something else?"); }
public bool Build(string[] originalProjects, RunInfo[] projectList, RunReport runReport, Func <bool> exit) { _exit = exit; projectList = preProcessBuildRun(projectList); if (projectList.Where(x => x.ShouldBeBuilt).Select(x => x).Count() == 0) { return(true); } Debug.WriteInfo("Running builds"); BuildRunResults results = null; if (_configuration.ShouldBuildSolution) { results = buildSolution(projectList, runReport); } else { results = buildProjects(originalProjects, projectList, runReport); } postProcessBuildRuns(projectList, ref runReport); return(results == null); }
public void Should_find_build_warning_delta() { _runResultCache.EnabledDeltas(); var results = new BuildRunResults("project"); results.AddWarning(new BuildMessage() { File = "some file", ErrorMessage = "some warning message" }); _runResultCache.Merge(results); _runResultCache.PopDeltas(); results = new BuildRunResults("project"); results.AddWarning(new BuildMessage() { File = "some other file", ErrorMessage = "some other warning message" }); _runResultCache.Merge(results); var deltas = _runResultCache.PopDeltas(); deltas.AddedWarnings.Length.ShouldEqual(1); deltas.RemovedWarnings.Length.ShouldEqual(1); }
public BuildRunResults RunBuild(string projectName, string buildExecutable) { var timer = Stopwatch.StartNew(); _buildExecutable = buildExecutable; Process process = new Process(); process.StartInfo = new ProcessStartInfo(_buildExecutable, string.Format("\"{0}\"", projectName)); process.StartInfo.RedirectStandardOutput = true; process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; process.StartInfo.UseShellExecute = false; process.StartInfo.CreateNoWindow = true; process.Start(); string line; var buildResults = new BuildRunResults(projectName); var lines = new List<string>(); while ((line = process.StandardOutput.ReadLine()) != null) lines.Add(line); process.WaitForExit(); timer.Stop(); var parser = new MSBuildOutputParser(buildResults, lines.ToArray()); parser.Parse(); buildResults.SetTimeSpent(timer.Elapsed); return buildResults; }
public MSBuildOutputParser(BuildRunResults results, string[] lines) { _results = results; _lines = lines; }
public BuildRunMessage(BuildRunResults results) { _results = results; }
public void Merge(BuildRunResults results) { HasMergedBuildResults = true; }
public BuildRunResults PostProcessBuildResults(BuildRunResults runResults) { return(runResults); }
public void SetUp() { _results = new BuildRunResults(""); }
BuildRunResults IPreProcessBuildruns.PostProcessBuildResults(BuildRunResults buildResults) { return(buildResults); }