Пример #1
0
        public PreProcessedTesRuns PreProcess(PreProcessedTesRuns preProcessed)
        {
            var details = preProcessed.RunInfos;

            foreach (var info in details)
            {
                info.AddTestsToRun(getTestsFor(info, _resultCache.Failed));
                info.AddTestsToRun(getTestsFor(info, _resultCache.Ignored));
                info.ShouldOnlyRunSpcifiedTestsFor(TestRunner.Any);
                info.ShouldRerunAllTestWhenFinishedFor(TestRunner.Any);
            }
            return(new PreProcessedTesRuns(preProcessed.ProcessWrapper, details));
        }
        PreProcessedTesRuns IPreProcessTestruns.PreProcess(PreProcessedTesRuns preProcessed)
        {
            if (!_isActive)
            {
                return(preProcessed);
            }
            var runDetails = new List <RunInfo>();

            foreach (var run in _addToNextRun)
            {
                Logger.WriteDebug("On demand run for preprocessing " + run.Project);
            }
            foreach (var detail in preProcessed.RunInfos)
            {
                var project = "Invalid project";
                if (detail.Project != null)
                {
                    project = detail.Project.Key;
                }
                Logger.WriteDebug(string.Format("On demand preprocessor handling {0} ({1})", detail.Assembly, project));
                var runs = _addToNextRun.Where(x => detail.Project != null && x.Project.Equals(detail.Project.Key));
                foreach (var run in runs)
                {
                    Logger.WriteDebug(string.Format("Detail matched to run {0} for runner {1}", run.Project, run.Runner));
                    if (!run.RunAllTestsInProject)
                    {
                        Logger.WriteDebug(string.Format("Should run only specified tests for {0}", run.Runner));
                        detail.ShouldOnlyRunSpcifiedTestsFor(run.Runner);
                        var tests = getList(run.Runner, run.Tests);
                        Logger.WriteDebug(string.Format("Containins {0} tests", tests.Length));
                        detail.AddTestsToRun(tests);
                        var members = getList(run.Runner, run.Members);
                        Logger.WriteDebug(string.Format("Containins {0} members", members.Length));
                        detail.AddMembersToRun(members);
                        var namespaces = getList(run.Runner, run.Namespaces);
                        Logger.WriteDebug(string.Format("Containins {0} namespaces", namespaces.Length));
                        detail.AddNamespacesToRun(namespaces);
                    }
                    else
                    {
                        Logger.WriteDebug(string.Format("Should run all tests for {0}", run.Runner));
                    }
                }
                if (runs.Count() > 0)
                {
                    runDetails.Add(detail);
                }
            }
            _addToNextRun.Clear();
            return(new PreProcessedTesRuns(preProcessed.ProcessWrapper, runDetails.ToArray()));
        }
        public PreProcessedTesRuns PreProcess(PreProcessedTesRuns preProcessed)
        {
            // Clean up profiler logs before we start
            var logFiles = getProfilerOutput();

            cleanUpFiles(logFiles);

            var runMinimized = !(_isFullRun || minimizerIsDisabled() || _minimizerPaused);

            Logger.WriteDebug("Run minimized is " + runMinimized.ToString());
            if (runMinimized)
            {
                _bus.Publish(new RunInformationMessage(InformationType.PreProcessing, "", "", typeof(MinimizingPreProcessor)));
            }
            var finalDetails = new List <RunInfo>();
            var details      = preProcessed.RunInfos;

            if (!minimizerGraphsAndRiskIsOff())
            {
                try
                {
                    var assemblies = GetAssemblies();
                    //var hash = details.ToDictionary(current => current.Assembly);
                    if (!runMinimized || _runCount % 10 == 0)
                    {
                        _minimizer.LoadOldCachedFiles(assemblies);
                    }
                    _runCount++;
                    var tests = _minimizer.GetTestsFor(assemblies);
                    Logger.WriteDebug("minimizer returns " + tests.Count + " tests");

                    if (runMinimized)
                    {
                        var profiled = GetProfiledEntries();
                        Logger.WriteDebug("profiler returns " + profiled.Count() + " tests");
                        var all = Combine(tests, profiled);

                        //TODO THIS IS A HACK TO ENRICH PROFILED TESTS, REFACTOR ME
                        foreach (var t in all)
                        {
                            var original = t.TestAssembly
                                           .Replace(".mm.dll", ".dll")
                                           .Replace(".mm.exe", ".exe");
                            var testAssembly = original;
                            testAssembly = new PathTranslator(_configuration.WatchToken).TranslateFrom(testAssembly);
                            if (testAssembly == null)
                            {
                                testAssembly = original;
                            }
                            Logger.WriteDebug("Translated TestAssembly is: " + testAssembly + " original is: " + t.TestAssembly);
                            var current = details.FirstOrDefault(x => x.Assembly.Equals(testAssembly));
                            if (current == null)
                            {
                                current = finalDetails.FirstOrDefault(x => x.Assembly.Equals(testAssembly));
                                if (current == null)
                                {
                                    current = GetRunInfoFromAssembly(testAssembly);
                                }
                                if (current == null)
                                {
                                    throw new Exception("unable to match assembly for test. - assembly is " + testAssembly);
                                }
                                if (!finalDetails.Exists(x => x.Assembly.Equals(testAssembly)))
                                {
                                    finalDetails.Add(current);
                                }
                            }

                            foreach (var s in t.TestRunners)
                            {
                                var runner = ConvertStringToTestRunnerEnum(s);
                                var test   = getTestSignature(t, runner);
                                Logger.WriteDetails(string.Format("Adding test {0} to runner {1} on run info {2}", test,
                                                                  runner, current.Assembly));
                                current.AddTestsToRun(runner, test);
                            }
                        }

                        if (runMinimized)
                        {
                            addCurrentBrokenTests(details);
                        }

                        foreach (var detail in details)
                        {
                            detail.ShouldOnlyRunSpcifiedTestsFor(TestRunner.Any);
                        }
                        Logger.WritePreprocessor(string.Format("Found {0} affected tests", tests.Count));
                        _bus.Publish(new AssembliesMinimizedMessage());
                        finalDetails.AddRange(details);
                    }
                }
                catch (Exception ex)
                {
                    Logger.WriteError(ex.ToString());
                    var newDetails = new List <RunInfo>();
                    foreach (var detail in details)
                    {
                        var newDetail = new RunInfo(detail.Project);
                        newDetail.SetAssembly(detail.Assembly);
                        if (detail.ShouldBeBuilt)
                        {
                            newDetail.ShouldBuild();
                        }
                        newDetails.Add(newDetail);
                    }
                }

                Logger.WriteDebug("Running 2nd generation garbage collection");
                GC.Collect(2);
                Logger.WriteDebug("Waiting for finalizers");
                GC.WaitForPendingFinalizers();
                Logger.WriteDebug("GC done");
            }

            Logger.WriteDebug("Getting profiler wrapper");
            _profilerWrapper = getProfilerWrapper();
            if (!runMinimized)
            {
                var wrapper = _profilerWrapper;
                _profilerWrapper = null;
                Logger.WriteDebug("Returning original runinfos");
                return(new PreProcessedTesRuns(wrapper, preProcessed.RunInfos)); // return original runInfos
            }
            finalDetails.ForEach(x => _runsToProfile.Add(x.CloneToTestRunInfo()));
            Logger.WriteDebug("Returning modified details");
            return(new PreProcessedTesRuns(_profilerWrapper, finalDetails.ToArray()));
        }
Пример #4
0
 public PreProcessedTesRuns PreProcess(PreProcessedTesRuns preProcessed)
 {
     return(preProcessed);
 }