public void TestClass_Equality_Default()
        {
            var a = new TestRunInterval.TestClassResult();
            var b = new TestRunInterval.TestClassResult();

            Assert.AreEqual(a, b);
        }
        public void TestClass_Equality_TestMethods()
        {
            var a = new TestRunInterval.TestClassResult
            {
                TestMethods = { new TestRunInterval.TestMethodResult {
                                    TestMethodName = "a"
                                } }
            };
            var b = new TestRunInterval.TestClassResult
            {
                TestMethods = { new TestRunInterval.TestMethodResult {
                                    TestMethodName = "a"
                                } }
            };
            var c = new TestRunInterval.TestClassResult
            {
                TestMethods = { new TestRunInterval.TestMethodResult {
                                    TestMethodName = "c"
                                } }
            };

            Assert.AreEqual(a, b);
            Assert.AreNotEqual(b, c);
        }
        public void ProcessEvent(IDEEvent @event)
        {
            Asserts.That(@event.TriggeredAt.HasValue);

            var testRunEvent = @event as TestRunEvent;

            if (testRunEvent != null)
            {
                var testsByProject = testRunEvent.Tests.GroupBy(t => t.TestMethod.DeclaringType.Assembly.Name);
                foreach (var testProject in testsByProject)
                {
                    var interval = _context.CreateIntervalFromEvent <TestRunInterval>(@event);
                    interval.ProjectName = testProject.Key;

                    foreach (var testClass in testProject.GroupBy(p => p.TestMethod.DeclaringType.FullName))
                    {
                        var testClassResult = new TestRunInterval.TestClassResult {
                            TestClassName = testClass.Key
                        };

                        var firstStarted = DateTimeOffset.MaxValue;
                        var lastEnded    = DateTimeOffset.MinValue;

                        foreach (var testMethod in testClass)
                        {
                            // TODO untested (
                            if (testMethod.StartTime.HasValue)
                            {
                                var delta =
                                    Math.Round((@event.TriggeredAt.Value - testMethod.StartTime.Value).TotalHours);

                                var now      = DateTime.Now;
                                var detltaTs = now.AddHours(delta) - now;
                                testMethod.StartTime = testMethod.StartTime.Value + detltaTs;
                            }
                            var startedAt = testMethod.StartTime ?? @event.TriggeredAt.Value;
                            var endedAt   = startedAt + testMethod.Duration;

                            if (startedAt < firstStarted)
                            {
                                firstStarted = startedAt;
                            }
                            if (endedAt > lastEnded)
                            {
                                lastEnded = endedAt;
                            }
                            // )

                            var testMethodResult = new TestRunInterval.TestMethodResult
                            {
                                TestMethodName = testMethod.TestMethod.Name + testMethod.Parameters,
                                // TODO untested
                                StartedAt = startedAt,
                                Duration  = testMethod.Duration,
                                Result    = testMethod.Result
                            };

                            testClassResult.TestMethods.Add(testMethodResult);

                            testClassResult.Result = UpdateCumulativeTestResult(
                                testClassResult.Result,
                                testMethod.Result);

                            interval.Result = UpdateCumulativeTestResult(
                                testClassResult.Result,
                                testMethod.Result);
                        }
                        // untested (
                        testClassResult.StartedAt = firstStarted;
                        testClassResult.Duration  = lastEnded - firstStarted;
                        // )
                        interval.TestClasses.Add(testClassResult);

                        interval.Duration += testClassResult.Duration;
                    }

                    _currentIntervals.Add(interval);
                }
            }
        }