public void CalculateForAllTests_Should_Return_OneCoverage_From_AllTests_When_There_IsOneProject_And_OneLineCoverage() { // arrange var rewrittenItemsByProject = new Dictionary<Project, List<RewrittenDocument>>(); var workspace = new AdhocWorkspace(); var project1 = workspace.AddProject("foo1.dll", LanguageNames.CSharp); RewriteResult rewriteResult = new RewriteResult(rewrittenItemsByProject); var rewrittenTree = CSharpSyntaxTree.ParseText(""); var rewrittenDocument1 = new RewrittenDocument( rewrittenTree, null, true); rewriteResult.Items[project1] = new List<RewrittenDocument>() { rewrittenDocument1 }; var semanticModel = Substitute.For<ISemanticModel>(); var compiledItem = Substitute.For<ICompiledItem>(); string assembly = "assembly path"; compiledItem.Project.Returns(project1); compiledItem.DllPath.Returns(assembly); compiledItem.GetSemanticModel(rewrittenDocument1.SyntaxTree).Returns(semanticModel); _compiledAllItems.Add(compiledItem); var expectedLineCoverage = new[] {new LineCoverage()}; _testRunnerMock.RunAllTestsInDocument(rewrittenDocument1, semanticModel, project1, Arg.Is<string[]>(x=>assembly==x[0])) .Returns(expectedLineCoverage); // act LineCoverage[] output = _sut.CalculateForAllTests(rewriteResult); // assert Assert.That(output, Is.EquivalentTo(expectedLineCoverage)); }
public void CalculateForAllTests_Should_CompileProvidedDocuments() { // arrange var rewrittenItemsByProject = new Dictionary<Project, List<RewrittenDocument>>(); var workspace = new AdhocWorkspace(); var project1 = workspace.AddProject("foo1.dll", LanguageNames.CSharp); RewriteResult rewriteResult = new RewriteResult(rewrittenItemsByProject); var rewrittenTree = CSharpSyntaxTree.ParseText(""); var rewrittenDocument1 = new RewrittenDocument( rewrittenTree, null, false); rewriteResult.Items[project1] = new List<RewrittenDocument>() { rewrittenDocument1 }; var compiledItem = Substitute.For<ICompiledItem>(); compiledItem.Project.Returns(project1); _compiledAllItems.Add(compiledItem); // act _sut.CalculateForAllTests(rewriteResult); // assert _compilerMock.Received(1).Compile (Arg.Is<IEnumerable<CompilationItem>>(x => x.First().SyntaxTrees[0] == rewriteResult.ToCompilationItems().First().SyntaxTrees[0])); }
public LineCoverage[] CalculateForAllTests(RewriteResult rewritenResult) { var compiledItems = _compiler.Compile(rewritenResult.ToCompilationItems()); var allAssemblies = compiledItems.Select(x => x.DllPath).ToArray(); var finalCoverage = new List<LineCoverage>(); foreach (Project project in rewritenResult.Items.Keys) { foreach (RewrittenDocument rewrittenItem in rewritenResult.Items[project]) { if (!rewrittenItem.ContainsTest) continue; var testProjectCompiltedItem = compiledItems.Single(x => x.Project == project); ISemanticModel semanticModel = testProjectCompiltedItem.GetSemanticModel(rewrittenItem.SyntaxTree); LineCoverage[] partialCoverage = _testRunner.RunAllTestsInDocument(rewrittenItem, semanticModel, project, allAssemblies); if (partialCoverage != null) finalCoverage.AddRange(partialCoverage); } } return finalCoverage.ToArray(); }
public void CalculateForAllTests_Should_Return_TwoLinesCoverage_From_AllTests_When_There_AreTwoProjects_And_EachProjectHasOneLineCoverage() { // arrange var rewrittenItemsByProject = new Dictionary<Project, List<RewrittenDocument>>(); var workspace = new AdhocWorkspace(); var project1 = workspace.AddProject("foo1.dll", LanguageNames.CSharp); var project2 = workspace.AddProject("foo2.dll", LanguageNames.CSharp); RewriteResult rewriteResult = new RewriteResult(rewrittenItemsByProject); var rewrittenTree = CSharpSyntaxTree.ParseText(""); var rewrittenDocument1 = new RewrittenDocument(rewrittenTree, null, true); rewriteResult.Items[project1] = new List<RewrittenDocument>() { rewrittenDocument1 }; rewriteResult.Items[project2] = new List<RewrittenDocument>() { rewrittenDocument1 }; var compiledItem1 = Substitute.For<ICompiledItem>(); var compiledItem2 = Substitute.For<ICompiledItem>(); compiledItem1.Project.Returns(project1); compiledItem2.Project.Returns(project2); _compiledAllItems.Add(compiledItem1); _compiledAllItems.Add(compiledItem2); var expectedLineCoverage = new[] { new LineCoverage() }; _testRunnerMock.RunAllTestsInDocument(rewrittenDocument1, Arg.Any<ISemanticModel>(), project1, Arg.Any<string[]>()) .Returns(expectedLineCoverage); _testRunnerMock.RunAllTestsInDocument(rewrittenDocument1, Arg.Any<ISemanticModel>(), project2, Arg.Any<string[]>()) .Returns(expectedLineCoverage); // act LineCoverage[] output = _sut.CalculateForAllTests(rewriteResult); // assert Assert.That(output.Length, Is.EqualTo(2)); }
public void CalculateForDocument_Should_Execute_TestsInReferencedTestDocuments_When_ProvidedDocumentIsNotTestDocument() { // arrange var rewrittenItemsByProject = new Dictionary<Project, List<RewrittenDocument>>(); var workspace = new AdhocWorkspace(); var testProject = workspace.AddProject("TestProject.dll", LanguageNames.CSharp); var businessLogicProject = workspace.AddProject("BusinessLogicProject.dll", LanguageNames.CSharp); RewriteResult rewriteResult = new RewriteResult(rewrittenItemsByProject); var rewrittenTree = CSharpSyntaxTree.ParseText(""); var businessLogicDocument = new RewrittenDocument( rewrittenTree, null, false); var testDocument = new RewrittenDocument( rewrittenTree, null, false); rewriteResult.Items[businessLogicProject] = new List<RewrittenDocument>() { businessLogicDocument }; rewriteResult.Items[testProject] = new List<RewrittenDocument>() { testDocument }; var compiledItem1 = Substitute.For<ICompiledItem>(); compiledItem1.Project.Returns(testProject); _compiledSingleProjectItems.Add(compiledItem1); _testRunnerMock.RunAllTestsInDocument(businessLogicDocument, Arg.Any<ISemanticModel>(), businessLogicProject, Arg.Any<string[]>()) .Returns((LineCoverage[])null); var expectedLineCoverage = new[] { new LineCoverage() }; _testRunnerMock.RunAllTestsInDocument(testDocument, Arg.Any<ISemanticModel>(), testProject, Arg.Any<string[]>()) .Returns(expectedLineCoverage); _testExplorerMock.GetReferencedTests(businessLogicDocument, businessLogicProject.Name) .Returns(new[] {testDocument}); _solutionExplorerMock.GetProjectByDocument(testDocument.DocumentPath).Returns(testProject); // act LineCoverage[] output = _sut.CalculateForDocument(businessLogicProject, businessLogicDocument); // assert Assert.That(output, Is.EquivalentTo(expectedLineCoverage)); }