private TestSuite CreateFixture(IGrouping <string, TestResultInfo> resultsByType)
        {
            var element = new XElement("test-suite");

            int      total        = 0;
            int      passed       = 0;
            int      failed       = 0;
            int      skipped      = 0;
            int      inconclusive = 0;
            int      error        = 0;
            var      time         = TimeSpan.Zero;
            DateTime?startTime    = null;
            DateTime?endTime      = null;

            var testFixtureType = ReflectionUtility.GetTestFixtureType(resultsByType.FirstOrDefault());
            var properties      = this.CreateFixturePropertiesElement(testFixtureType);

            element.Add(properties);

            var group = resultsByType
                        .GroupBy(x => x.TestResultKey())
                        .OrderBy(x => x.Key);

            foreach (var entry in group)
            {
                if (entry.Count() == 1)
                {
                    var testResult        = entry.First();
                    var propertiesElement = CreatePropertiesElement(testResult);
                    var testCase          = CreateTestCase(testResult);
                    testCase.Element.Add(propertiesElement);

                    failed       += testCase.Failed;
                    passed       += testCase.Passed;
                    skipped      += testCase.Skipped;
                    inconclusive += testCase.Inconclusive;
                    total++;
                    time += testCase.Time;

                    if (!startTime.HasValue || testCase.StartTime < startTime)
                    {
                        startTime = testCase.StartTime;
                    }

                    if (!endTime.HasValue || testCase.EndTime > endTime)
                    {
                        endTime = testCase.EndTime;
                    }

                    element.Add(testCase.Element);
                }
                else
                {
                    var testSuite = AggregateTestCases(entry.Select(CreateTestCase), entry.Key.fullTypeName, entry.Key.methodName);
                    failed       += testSuite.Failed;
                    passed       += testSuite.Passed;
                    skipped      += testSuite.Skipped;
                    inconclusive += testSuite.Inconclusive;
                    total        += testSuite.Total;
                    time         += testSuite.Time;

                    if (!startTime.HasValue || testSuite.StartTime < startTime)
                    {
                        startTime = testSuite.StartTime;
                    }

                    if (!endTime.HasValue || testSuite.EndTime > endTime)
                    {
                        endTime = testSuite.EndTime;
                    }

                    var firstTestResult   = entry.First();
                    var propertiesElement = CreatePropertiesElement(firstTestResult);
                    testSuite.Element.AddFirst(propertiesElement);

                    element.Add(testSuite.Element);
                }
            }

            // Create test-suite element for the TestFixture
            var name = resultsByType.Key.SubstringAfterDot();

            element.SetAttributeValue("type", "TestFixture");
            element.SetAttributeValue("name", name);
            element.SetAttributeValue("fullname", resultsByType.Key);

            element.SetAttributeValue("total", total);
            element.SetAttributeValue("passed", passed);
            element.SetAttributeValue("failed", failed);
            element.SetAttributeValue("inconclusive", inconclusive);
            element.SetAttributeValue("skipped", skipped);

            var resultString = failed > 0 ? ResultStatusFailed : ResultStatusPassed;

            element.SetAttributeValue("result", resultString);

            if (startTime.HasValue)
            {
                element.SetAttributeValue("start-time", startTime.Value.ToString(DateFormat, CultureInfo.InvariantCulture));
            }

            if (endTime.HasValue)
            {
                element.SetAttributeValue("end-time", endTime.Value.ToString(DateFormat, CultureInfo.InvariantCulture));
            }

            element.SetAttributeValue("duration", time.TotalSeconds);

            return(new TestSuite
            {
                Element = element,
                Name = name,
                FullName = resultsByType.Key,
                Total = total,
                Passed = passed,
                Failed = failed,
                Inconclusive = inconclusive,
                Skipped = skipped,
                Error = error,
                StartTime = startTime,
                EndTime = endTime,
                Time = time
            });
        }