Ejemplo n.º 1
0
        public LineCoverage[] RunAllTestsInDocument(RewrittenDocument rewrittenDocument,
            ISemanticModel semanticModel,
            Project project,
            string[] rewrittenAssemblies)
        {
            var allReferences = _solutionExplorer.GetAllProjectReferences(project.Name);

            var compiledTestInfo = new CompiledTestFixtureInfo
            {
                AllReferences = allReferences.Union(rewrittenAssemblies).ToArray(),
                TestDocumentPath = rewrittenDocument.DocumentPath,
                SemanticModel = semanticModel
            };

            var coverage = new List<LineCoverage>();

            var testClasses = _testsExtractor.GetTestClasses(rewrittenDocument.SyntaxTree.GetRoot());

            if (testClasses.Length == 0)
                return null;

            foreach (ClassDeclarationSyntax testClass in testClasses)
            {
                compiledTestInfo.TestClass = testClass;

                var partialCoverage = RunAllTestsInFixture(compiledTestInfo, project.Name);
                coverage.AddRange(partialCoverage);
            }

            return coverage.ToArray();
        }
Ejemplo n.º 2
0
        public LineCoverage[] RunTest(Project project,
            RewrittenDocument rewrittenDocument,
            MethodDeclarationSyntax method,
            ISemanticModel semanticModel,
            string[] rewrittenAssemblies)
        {
            var testClass = method.GetParentClass();
            var rewrittenTestClass =
                rewrittenDocument.SyntaxTree
                    .GetRoot()
                    .DescendantNodes()
                    .OfType<ClassDeclarationSyntax>().First(x => x.Identifier.ToString() == testClass.Identifier.ToString());

            var fixtureDetails = _testsExtractor.GetTestFixtureDetails(rewrittenTestClass, semanticModel);
            var allReferences = _solutionExplorer.GetAllProjectReferences(project.Name);

            fixtureDetails.Cases.RemoveAll(x => x.MethodName != method.Identifier.ToString());

            if (fixtureDetails.Cases.Count == 0)
                return null;

            var compiledTestInfo = new CompiledTestFixtureInfo
            {
                AllReferences = allReferences.Union(rewrittenAssemblies).ToArray(),
                TestDocumentPath = rewrittenDocument.DocumentPath,
                SemanticModel = semanticModel
            };

            var coverage = RunTestFixture(fixtureDetails, compiledTestInfo, project.Name);

            return coverage;
        }
Ejemplo n.º 3
0
        private LineCoverage[] RunAllTestsInFixture(CompiledTestFixtureInfo compiledTestFixtureInfo, string testProjectName)
        {
            TestFixtureDetails testFixtureDetails = _testsExtractor.GetTestFixtureDetails(compiledTestFixtureInfo.TestClass, compiledTestFixtureInfo.SemanticModel);

            var coverage = RunTestFixture(testFixtureDetails, compiledTestFixtureInfo, testProjectName);

            return coverage;
        }
Ejemplo n.º 4
0
        private LineCoverage[] RunTestFixture(TestFixtureDetails testFixtureDetails,
            CompiledTestFixtureInfo compiledTestFixtureInfo,
            string testProjectName)
        {
            var testFixtureExecutionScriptParameters = new TestFixtureExecutionScriptParameters
            {
                TestFixtureTypeFullName = testFixtureDetails.FullClassName,
                TestFixtureAssemblyName=testFixtureDetails.AssemblyName,
                TestCases = new List<TestExecutionScriptParameters>(),
                TestFixtureSetUpMethodName = testFixtureDetails.TestFixtureSetUpMethodName,
                TestFixtureTearDownMethodName = testFixtureDetails.TestFixtureTearDownMethodName,
                TestSetUpMethodName = testFixtureDetails.TestSetUpMethodName,
                TestTearDownMethodName = testFixtureDetails.TestTearDownMethodName,
            };

            foreach (var testCase in testFixtureDetails.Cases)
            {
                var scriptParameters = new TestExecutionScriptParameters
                {
                    TestName = testCase.MethodName,
                    TestParameters = testCase.Arguments,
                    IsAsync = testCase.IsAsync
                };

                testFixtureExecutionScriptParameters.TestCases.Add(scriptParameters);
            }

            var results = _testExecutorScriptEngine.RunTestFixture(compiledTestFixtureInfo.AllReferences, testFixtureExecutionScriptParameters);

            return GetCoverage(testFixtureDetails, compiledTestFixtureInfo, testProjectName, results);
        }
Ejemplo n.º 5
0
        private static LineCoverage[] GetCoverage(TestFixtureDetails testFixtureDetails,
            CompiledTestFixtureInfo compiledTestFixtureInfo, string testProjectName, ITestRunResult[] results)
        {
            var coverage = new List<LineCoverage>(results.Length);

            foreach (var testRunResult in results)
            {
                var methodSyntaxNode = testFixtureDetails.Cases.
                    FirstOrDefault(x => x.MethodName == testRunResult.TestName)?.SyntaxNode;

                var partialCoverage = testRunResult.GetCoverage(methodSyntaxNode, testProjectName, compiledTestFixtureInfo.TestDocumentPath);
                coverage.AddRange(partialCoverage);
            }

            return coverage.OrderBy(x => x.TestPath).ToArray();
        }