public IEnumerable<TestRunResults> Parse()
        {
            var doc = new XPathDocument(_reportFile);
            var nav = doc.CreateNavigator();

            var assemblies = nav.Select("/MSpec/assembly").OfType<XPathNavigator>();

            return assemblies
                .Select(assembly => new Assembly
                                    {
                                        AssemblyLocation = assembly.GetAttribute("location", ""),
                                        TimeSpent = ReadTimeSpan(assembly),
                                        ContextSpecifications = ContextSpecificationsFor(assembly)
                                    })
                .Select(x =>
                    {
                        x.AssociatedRunInfo = FindRunInfo(_run, x);
                        return x;
                    })
                .Where(x => x.AssociatedRunInfo != null)
                .Select(x =>
                    {
                        var results = new TestRunResults(x.AssociatedRunInfo.Project.Key,
                                                         x.AssociatedRunInfo.Assembly,
                                                         _run.RunInfos.Any(),
                                                         TestRunner.MSpec,
                                                         TestResultsFor(x.ContextSpecifications));
                        results.SetTimeSpent(x.TimeSpent);
                        return results;
                    })
                .ToList();
        }
 public TestRunResults SetRemovedTestsAsPassed(TestRunResults results, TestRunInfo[] infos)
 {
     _results = results;
     _infos = infos;
     var tests = new List<TestResult>();
     tests.AddRange(results.All);
     tests.AddRange(getTests(_cache.Failed));
     tests.AddRange(getTests(_cache.Ignored));
     var modified = new TestRunResults(_results.Project, _results.Assembly, _results.IsPartialTestRun, _results.Runner, tests.ToArray());
     modified.SetTimeSpent(_results.TimeSpent);
     return modified;
 }
 private static void handleSuite(XmlNodeList suites, List<TestRunResults> results, string testLocation) {
     foreach (XmlNode suite in suites) {
         handleSuite(suite.SelectNodes("testsuite"), results, testLocation);
         var tests = getTests(suite);
         if (tests.Count() > 0) {
             var result 
                 = new TestRunResults(
                     suite.Attributes["name"].Value,
                     testLocation,
                     false,
                     TestRunner.PhpUnit, tests.ToArray());
             result.SetTimeSpent(TimeSpan.FromMilliseconds(1000*double.Parse(suite.Attributes["time"].Value)));
             results.Add(result);
         }
     }
 }
 private TestRunResults[] getResults(IEnumerable<AutoTest.TestRunners.Shared.Results.TestResult> tests, TestRunInfo[] runInfos)
 {
     var results = new List<TestRunResults>();
     foreach (var byRunner in tests.GroupBy(x => x.Runner))
     {
         var runner = TestRunnerConverter.FromString(byRunner.Key);
         foreach (var byAssembly in byRunner.GroupBy(x => x.Assembly))
         {
             var info = runInfos.Where(x => x.Assembly.Equals(byAssembly.Key)).FirstOrDefault();
             var project = "";
             var partial = false;
             if (info != null)
             {
                 if (info.Project != null)
                     project = info.Project.Key;
                 partial = info.OnlyRunSpcifiedTestsFor(runner) ||
                           info.GetTestsFor(runner).Count() > 0 ||
                           info.GetMembersFor(runner).Count() > 0 ||
                           info.GetNamespacesFor(runner).Count() > 0;
             }
             DebugLog.Debug.WriteDetail(string.Format("Partial run is {0} for runner {1}", partial, runner));
             
             var result = new TestRunResults(
                                 project,
                                 byAssembly.Key,
                                 partial,
                                 runner,
                                 byAssembly.Select(x => ConvertResult(x)).ToArray());
             result.SetTimeSpent(TimeSpan.FromMilliseconds(byAssembly.Sum(x => x.DurationInMilliseconds)));
             results.Add(result);
         }
     }
     return results.ToArray();
 }