예제 #1
0
        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);
        }
예제 #3
0
        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");
        }
예제 #4
0
 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");
 }
예제 #5
0
 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);
 }
예제 #7
0
 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_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");
        }
예제 #10
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);
        }
예제 #11
0
        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");
        }
예제 #12
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);
     }
 }
예제 #13
0
 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);
 }
예제 #14
0
 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);
 }
예제 #15
0
        public BuildRunResults PostProcessBuildResults(BuildRunResults runResults)
        {
            var buildProject = runResults.Project;

            if (_tmpProjects.Contains(buildProject))
            {
                runResults.UpdateProject(getOriginalProject(buildProject));
            }
            return(runResults);
        }
예제 #16
0
        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);
        }
예제 #17
0
        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);
        }
예제 #18
0
 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?)");
 }
예제 #19
0
 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");
        }
예제 #21
0
        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");
        }
예제 #22
0
        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);
         }
     }
 }
예제 #24
0
        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");
        }
예제 #25
0
        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");
        }
예제 #26
0
        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.");
        }
예제 #28
0
        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);
        }
예제 #29
0
        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);
        }
예제 #30
0
        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?");
        }
예제 #31
0
        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);
        }
예제 #32
0
        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?");
        }
예제 #34
0
        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);
        }
예제 #35
0
        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);
        }
예제 #36
0
        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;
 }
예제 #38
0
 public BuildRunMessage(BuildRunResults results)
 {
     _results = results;
 }
예제 #39
0
 public void Merge(BuildRunResults results)
 {
     HasMergedBuildResults = true;
 }
예제 #40
0
 public void Merge(BuildRunResults results)
 {
     HasMergedBuildResults = true;
 }
 public BuildRunResults PostProcessBuildResults(BuildRunResults runResults)
 {
     return(runResults);
 }
예제 #42
0
 public void SetUp()
 {
     _results = new BuildRunResults("");
 }
예제 #43
0
 public void SetUp()
 {
     _results = new BuildRunResults("");
 }
 BuildRunResults IPreProcessBuildruns.PostProcessBuildResults(BuildRunResults buildResults)
 {
     return(buildResults);
 }