public void OnTestCompletionShouldUpdateInProgressListWhenTestHasSameId()
        {
            long cacheSize = 2;
            var  tester    = new TestCacheTester {
                ExpectedCacheSize = cacheSize
            };

            var cache = new TestRunCache(cacheSize, TimeSpan.MaxValue, tester.CacheHitOnSize);

            for (var i = 0; i < cacheSize; i++)
            {
                var tr = this.GetTestResult(i);
                cache.OnTestStarted(tr.TestCase);

                var clone = new TestCase(
                    tr.TestCase.FullyQualifiedName,
                    tr.TestCase.ExecutorUri,
                    tr.TestCase.Source);
                clone.Id = tr.TestCase.Id;

                Assert.IsTrue(cache.OnTestCompletion(clone));

                Assert.AreEqual(0, cache.InProgressTests.Count);
            }
        }
        public void TestRunStatsShouldReturnCurrentStats()
        {
            long cacheSize = 10;
            var  tester    = new TestCacheTester {
                ExpectedCacheSize = cacheSize
            };

            var cache = new TestRunCache(cacheSize, TimeSpan.MaxValue, tester.CacheHitOnSize);

            for (var i = 0; i < cacheSize; i++)
            {
                var tr = this.GetTestResult(i);
                if (i < 5)
                {
                    tr.Outcome = TestOutcome.Passed;
                }
                else
                {
                    tr.Outcome = TestOutcome.Failed;
                }

                cache.OnNewTestResult(tr);
            }

            var stats = cache.TestRunStatistics;

            Assert.AreEqual(cacheSize, stats.ExecutedTests);
            Assert.AreEqual(5, stats.Stats[TestOutcome.Passed]);
            Assert.AreEqual(5, stats.Stats[TestOutcome.Failed]);
        }
        public void OnTestCompletionShouldReturnFalseIfInProgressTestsIsEmpty()
        {
            long cacheSize = 10;
            var  tester    = new TestCacheTester {
                ExpectedCacheSize = cacheSize
            };

            var cache = new TestRunCache(cacheSize, TimeSpan.MaxValue, tester.CacheHitOnSize);

            Assert.IsFalse(cache.OnTestCompletion(this.GetTestResult(0).TestCase));
        }
        public void OnTestCompletionShouldNotThrowIfCompletedTestIsNull()
        {
            long cacheSize = 10;
            var  tester    = new TestCacheTester {
                ExpectedCacheSize = cacheSize
            };

            var cache = new TestRunCache(cacheSize, TimeSpan.MaxValue, tester.CacheHitOnSize);

            Assert.IsFalse(cache.OnTestCompletion(null));
        }
        public void OnTestStartedShouldAddToInProgressTests()
        {
            var tester = new TestCacheTester {
                ExpectedCacheSize = int.MaxValue
            };

            var cache = new TestRunCache(int.MaxValue, TimeSpan.MaxValue, tester.CacheHitOnSize);

            var tr = this.GetTestResult(0);

            cache.OnTestStarted(tr.TestCase);

            CollectionAssert.Contains(cache.InProgressTests.ToList(), tr.TestCase);
        }
        public void OnNewTestResultShouldAddToTestResultCache()
        {
            long cacheSize = 10;
            var  tester    = new TestCacheTester {
                ExpectedCacheSize = cacheSize
            };

            var cache = new TestRunCache(cacheSize, TimeSpan.MaxValue, tester.CacheHitOnSize);

            for (var i = 0; i < 2; i++)
            {
                var tr = this.GetTestResult(i);
                cache.OnNewTestResult(tr);
                CollectionAssert.Contains(cache.TestResults.ToList(), tr);
            }
        }
        public void OnNewTestResultShouldAddToTotalExecutedTests()
        {
            long cacheSize = 10;
            var  tester    = new TestCacheTester {
                ExpectedCacheSize = cacheSize
            };

            var cache = new TestRunCache(cacheSize, TimeSpan.MaxValue, tester.CacheHitOnSize);

            for (var i = 0; i < 2; i++)
            {
                var tr = this.GetTestResult(i);
                cache.OnNewTestResult(tr);
            }

            Assert.AreEqual(2, cache.TotalExecutedTests);
        }
        public void OnTestStartedShouldAddMultipleInProgressTestsTillCacheHit()
        {
            long cacheSize = 10;
            var  tester    = new TestCacheTester {
                ExpectedCacheSize = cacheSize
            };

            var cache = new TestRunCache(cacheSize, TimeSpan.MaxValue, tester.CacheHitOnSize);

            for (var i = 0; i < (cacheSize - 1); i++)
            {
                var tr = this.GetTestResult(i);
                cache.OnTestStarted(tr.TestCase);

                Assert.AreEqual(i, cache.InProgressTests.Count - 1);
            }
        }
        public void OnTestCompletionShouldUpdateInProgressList()
        {
            long cacheSize = 2;
            var  tester    = new TestCacheTester {
                ExpectedCacheSize = cacheSize
            };

            var cache = new TestRunCache(cacheSize, TimeSpan.MaxValue, tester.CacheHitOnSize);

            for (int i = 0; i < cacheSize; i++)
            {
                var tr = this.GetTestResult(i);
                cache.OnTestStarted(tr.TestCase);
                Assert.IsTrue(cache.OnTestCompletion(tr.TestCase));

                Assert.AreEqual(0, cache.InProgressTests.Count);
            }
        }
        public void OnNewTestResultShouldRemoveTestCaseFromInProgressList()
        {
            long cacheSize = 10;
            var  tester    = new TestCacheTester {
                ExpectedCacheSize = cacheSize
            };

            var cache = new TestRunCache(cacheSize, TimeSpan.MaxValue, tester.CacheHitOnSize);

            for (var i = 0; i < 2; i++)
            {
                var tr = this.GetTestResult(i);
                cache.OnTestStarted(tr.TestCase);
                cache.OnNewTestResult(tr);
            }

            Assert.AreEqual(0, cache.InProgressTests.Count);
        }
        public void GetLastChunkShouldResetTestResultsInCache()
        {
            long cacheSize = 10;
            var  tester    = new TestCacheTester {
                ExpectedCacheSize = cacheSize
            };

            var cache = new TestRunCache(cacheSize, TimeSpan.MaxValue, tester.CacheHitOnSize);

            for (var i = 0; i < 2; i++)
            {
                var tr = this.GetTestResult(i);
                cache.OnNewTestResult(tr);
            }

            cache.GetLastChunk();
            Assert.AreEqual(0, cache.TestResults.Count);
        }
        public void OnTestCompleteShouldNotRemoveTestCaseFromInProgressListForUnrelatedTestResult()
        {
            long cacheSize = 10;
            var  tester    = new TestCacheTester {
                ExpectedCacheSize = cacheSize
            };

            var cache = new TestRunCache(cacheSize, TimeSpan.MaxValue, tester.CacheHitOnSize);

            var tr1 = this.GetTestResult(0);

            cache.OnTestStarted(tr1.TestCase);

            var tr2 = this.GetTestResult(1);

            Assert.IsFalse(cache.OnTestCompletion(tr2.TestCase));

            Assert.AreEqual(1, cache.InProgressTests.Count);
        }
        public void OnNewTestResultShouldReportTestResultsWhenMaxCacheSizeIsHit()
        {
            long cacheSize = 10;
            var  tester    = new TestCacheTester {
                ExpectedCacheSize = cacheSize
            };

            var cache = new TestRunCache(cacheSize, TimeSpan.MaxValue, tester.CacheHitOnSize);

            for (var i = 0; i < cacheSize; i++)
            {
                var tr = this.GetTestResult(i);
                cache.OnNewTestResult(tr);
            }

            Assert.AreEqual(1, tester.CacheHitCount);
            Assert.AreEqual(cacheSize, cache.TotalExecutedTests);
            Assert.AreEqual(0, cache.TestResults.Count);
        }
        public void OnNewTestResultShouldUpdateRunStats()
        {
            long cacheSize = 10;
            var  tester    = new TestCacheTester {
                ExpectedCacheSize = cacheSize
            };

            var cache = new TestRunCache(cacheSize, TimeSpan.MaxValue, tester.CacheHitOnSize);

            for (var i = 0; i < 2; i++)
            {
                var tr = this.GetTestResult(i);
                tr.Outcome = TestOutcome.Passed;
                cache.OnNewTestResult(tr);
            }

            Assert.AreEqual(2, cache.TestRunStatistics.ExecutedTests);
            Assert.AreEqual(2, cache.TestRunStatistics.Stats[TestOutcome.Passed]);
        }
        public void OnNewTestResultShouldNotFireIfMaxCacheSizeIsNotHit()
        {
            long cacheSize = 10;
            var  tester    = new TestCacheTester {
                ExpectedCacheSize = cacheSize
            };

            var cache         = new TestRunCache(cacheSize, TimeSpan.MaxValue, tester.CacheHitOnSize);
            var executedTests = cacheSize - 1;

            for (var i = 0; i < executedTests; i++)
            {
                var tr = this.GetTestResult(i);
                cache.OnNewTestResult(tr);
            }

            Assert.AreEqual(0, tester.CacheHitCount);
            Assert.AreEqual(executedTests, cache.TotalExecutedTests);
            Assert.AreEqual(executedTests, cache.TestResults.Count);
        }
        public void OnNewTestResultShouldReportResultsMultipleTimes()
        {
            long cacheSize = 10;
            var  tester    = new TestCacheTester {
                ExpectedCacheSize = cacheSize
            };

            var  cache         = new TestRunCache(cacheSize, TimeSpan.MaxValue, tester.CacheHitOnSize);
            long executedTests = 45;

            for (var i = 0; i < executedTests; i++)
            {
                var tr = this.GetTestResult(i);
                cache.OnNewTestResult(tr);
            }

            Assert.AreEqual(4, tester.CacheHitCount);
            Assert.AreEqual(executedTests, cache.TotalExecutedTests);
            Assert.AreEqual(5, cache.TestResults.Count);
        }
        public void OnTestStartedShouldReportResultsOnCacheHit()
        {
            long cacheSize = 2;
            var  tester    = new TestCacheTester {
                ExpectedCacheSize = cacheSize
            };

            var cache = new TestRunCache(cacheSize, TimeSpan.MaxValue, tester.CacheHitOnSize);

            for (var i = 0; i < cacheSize; i++)
            {
                var tr = this.GetTestResult(i);
                cache.OnTestStarted(tr.TestCase);
            }

            Assert.AreEqual(1, tester.CacheHitCount);
            Assert.AreEqual(0, cache.TotalExecutedTests);
            Assert.AreEqual(0, cache.TestResults.Count);
            Assert.AreEqual(0, cache.InProgressTests.Count);
            Assert.AreEqual(2, tester.TotalInProgressTestsReceived);
        }
        public void GetLastChunkShouldReturnTestResultsInCache()
        {
            long cacheSize = 10;
            var  tester    = new TestCacheTester {
                ExpectedCacheSize = cacheSize
            };

            var cache = new TestRunCache(cacheSize, TimeSpan.MaxValue, tester.CacheHitOnSize);
            List <Microsoft.VisualStudio.TestPlatform.ObjectModel.TestResult> pushedTestResults = new List <Microsoft.VisualStudio.TestPlatform.ObjectModel.TestResult>();

            for (var i = 0; i < 2; i++)
            {
                var tr = this.GetTestResult(i);
                cache.OnNewTestResult(tr);
                pushedTestResults.Add(tr);
            }

            var testResultsInCache = cache.GetLastChunk();

            CollectionAssert.AreEqual(pushedTestResults, testResultsInCache.ToList());
        }