Skip to content

Commit d3eb00e

Browse files
authored
Merge pull request #496 from tonyhallett/include-test-assembly-in-incudes-only-when-necessary
Include test assembly in incudes only when necessary
2 parents 135c613 + dac99c2 commit d3eb00e

15 files changed

+629
-188
lines changed

FineCodeCoverageTests/CoverletConsole_Tests.cs

+88-1
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@
1515

1616
namespace Test
1717
{
18-
1918
public class CoverletExeArgumentsProvider_Tests
2019
{
20+
private const string testProjectName = "TestProject";
2121
[Test]
2222
public void Should_Have_ExcludeByAttribute_Setting_For_Each_ExcludeByAttribute()
2323
{
@@ -43,12 +43,99 @@ public void Should_Unqualified_Qualified_ExcludeByAttribute()
4343
AssertHasSetting(coverletSettings, "--exclude-by-attribute ExcludeByAttribute1");
4444
}
4545

46+
[Test]
47+
public void Should_Not_Add_Test_Test_Assembly_To_Includes_When_IncludeTestAssembly_And_No_Other_Includes()
48+
{
49+
var mockCoverageProject = SafeMockCoverageProject();
50+
mockCoverageProject.SetupGet(cp => cp.Settings.IncludeTestAssembly).Returns(true);
51+
52+
var coverletExeArgumentsProvider = new CoverletExeArgumentsProvider();
53+
var coverletSettings = coverletExeArgumentsProvider.GetArguments(mockCoverageProject.Object);
54+
55+
Assert.IsFalse(HasIncludedTestAssemblySetting(coverletSettings));
56+
}
57+
58+
private bool HasIncludedTestAssemblySetting(List<string> coverletSettings)
59+
{
60+
return coverletSettings.Any(coverletSetting => coverletSetting == $@"--include ""[{testProjectName}]*""");
61+
}
62+
63+
[Test]
64+
public void Should_Add_Test_Test_Assembly_To_Includes_When_IncludeTestAssembly_And_Other_Includes()
65+
{
66+
var mockCoverageProject = SafeMockCoverageProject();
67+
mockCoverageProject.SetupGet(cp => cp.Settings.IncludeTestAssembly).Returns(true);
68+
mockCoverageProject.SetupGet(cp => cp.Settings.Include).Returns(new string[] { "[anassembly]*" });
69+
70+
var coverletExeArgumentsProvider = new CoverletExeArgumentsProvider();
71+
var coverletSettings = coverletExeArgumentsProvider.GetArguments(mockCoverageProject.Object);
72+
73+
Assert.IsTrue(HasIncludedTestAssemblySetting(coverletSettings));
74+
}
75+
76+
[Test]
77+
public void Should_Add_IncludedReferencedProjects_As_Include()
78+
{
79+
var mockCoverageProject = SafeMockCoverageProject();
80+
var mockReferencedProject = new Mock<IReferencedProject>();
81+
mockReferencedProject.SetupGet(rp => rp.AssemblyName).Returns("ReferencedProject");
82+
mockCoverageProject.SetupGet(cp => cp.IncludedReferencedProjects).Returns(new List<IReferencedProject> { mockReferencedProject.Object});
83+
84+
var coverletExeArgumentsProvider = new CoverletExeArgumentsProvider();
85+
var coverletSettings = coverletExeArgumentsProvider.GetArguments(mockCoverageProject.Object);
86+
87+
Assert.True(coverletSettings.Contains($@"--include ""[ReferencedProject]*"""));
88+
89+
}
90+
91+
[Test]
92+
public void Should_Include_From_Settings()
93+
{
94+
var mockCoverageProject = SafeMockCoverageProject();
95+
mockCoverageProject.SetupGet(cp => cp.Settings.Include).Returns(new string[]{ "[Include]*" });
96+
97+
var coverletExeArgumentsProvider = new CoverletExeArgumentsProvider();
98+
var coverletSettings = coverletExeArgumentsProvider.GetArguments(mockCoverageProject.Object);
99+
100+
Assert.True(coverletSettings.Contains($@"--include ""[Include]*"""));
101+
102+
}
103+
104+
public void Should_Add_ExcludedReferencedProjects_As_Exclude()
105+
{
106+
var mockCoverageProject = SafeMockCoverageProject();
107+
var mockReferencedProject = new Mock<IReferencedProject>();
108+
mockReferencedProject.SetupGet(rp => rp.AssemblyName).Returns("ReferencedProject");
109+
mockCoverageProject.SetupGet(cp => cp.ExcludedReferencedProjects).Returns(new List<IReferencedProject> { mockReferencedProject.Object });
110+
111+
var coverletExeArgumentsProvider = new CoverletExeArgumentsProvider();
112+
var coverletSettings = coverletExeArgumentsProvider.GetArguments(mockCoverageProject.Object);
113+
114+
Assert.True(coverletSettings.Contains($@"--exclude ""[ReferencedProject]*"""));
115+
116+
}
117+
118+
[Test]
119+
public void Should_Exclude_From_Settings()
120+
{
121+
var mockCoverageProject = SafeMockCoverageProject();
122+
mockCoverageProject.SetupGet(cp => cp.Settings.Exclude).Returns(new string[] { "[Exclude]*" });
123+
124+
var coverletExeArgumentsProvider = new CoverletExeArgumentsProvider();
125+
var coverletSettings = coverletExeArgumentsProvider.GetArguments(mockCoverageProject.Object);
126+
127+
Assert.True(coverletSettings.Contains($@"--exclude ""[Exclude]*"""));
128+
129+
}
130+
131+
46132
private Mock<ICoverageProject> SafeMockCoverageProject()
47133
{
48134
var mockCoverageProject = new Mock<ICoverageProject>();
49135
mockCoverageProject.SetupGet(coverageProject => coverageProject.IncludedReferencedProjects).Returns(new List<IReferencedProject>());
50136
mockCoverageProject.SetupGet(coverageProject => coverageProject.ExcludedReferencedProjects).Returns(new List<IReferencedProject>());
51137
mockCoverageProject.SetupGet(coverageProject => coverageProject.Settings).Returns(new Mock<IAppOptions>().Object);
138+
mockCoverageProject.Setup(coverageProject => coverageProject.ProjectName).Returns(testProjectName);
52139
return mockCoverageProject;
53140
}
54141

FineCodeCoverageTests/CoverletDataCollectorUtil_RunAsync_Tests.cs

+43-2
Original file line numberDiff line numberDiff line change
@@ -118,17 +118,58 @@ public async Task Should_Get_Settings_With_ExcludeByAttribute_From_CoverageProje
118118
}
119119

120120
[Test]
121-
public async Task Should_Get_Settings_With_Include_From_CoverageProject_And_RunSettings_Async()
121+
public async Task Should_Include_From_CoverageProject_Settings_Include_And_RunSettings_Async()
122122
{
123123
var projectInclude= new string[] { "included" };
124124
mockCoverageProject.Setup(cp => cp.Settings.Include).Returns(projectInclude);
125125
mockCoverageProject.Setup(cp => cp.CoverageOutputFolder).Returns("");
126126

127+
await coverletDataCollectorUtil.RunAsync(CancellationToken.None);
128+
mockDataCollectorSettingsBuilder.Verify(b => b.WithInclude(projectInclude, It.IsAny<string>()));
129+
}
130+
131+
[Test]
132+
public async Task Should_Include_From_CoverageProject_IncludedReferencedProjects_And_RunSettings_Async()
133+
{
134+
var projectInclude = new string[] { "[ReferencedProject]*" };
135+
mockCoverageProject.Setup(cp => cp.CoverageOutputFolder).Returns("");
136+
var mockReferencedProject = new Mock<IReferencedProject>();
137+
mockReferencedProject.SetupGet(rp => rp.AssemblyName).Returns("ReferencedProject");
138+
mockCoverageProject.Setup(cp => cp.IncludedReferencedProjects).Returns(new List<IReferencedProject> { mockReferencedProject.Object });
139+
140+
await coverletDataCollectorUtil.RunAsync(CancellationToken.None);
141+
mockDataCollectorSettingsBuilder.Verify(b => b.WithInclude(projectInclude, It.IsAny<string>()));
142+
}
143+
144+
[Test]
145+
public async Task Should_Not_Include_Test_Assembly_When_IncludeTestAssembly_True_And_No_Other_Includes_Async()
146+
{
147+
mockCoverageProject.Setup(cp => cp.CoverageOutputFolder).Returns("");
148+
mockCoverageProject.Setup(cp => cp.Settings.IncludeTestAssembly).Returns(true);
127149
mockRunSettingsCoverletConfiguration.Setup(rsc => rsc.Include).Returns("rsincluded");
150+
151+
await coverletDataCollectorUtil.RunAsync(CancellationToken.None);
152+
mockDataCollectorSettingsBuilder.Verify(b => b.WithInclude(new string[] { },It.IsAny<string>()));
153+
}
154+
155+
[Test]
156+
public async Task Should_Include_Test_Assembly_When_IncludeTestAssembly_True_And_Other_Includes_Async()
157+
{
158+
mockCoverageProject.Setup(cp => cp.CoverageOutputFolder).Returns("");
159+
var projectInclude = new string[] { "included" };
160+
mockCoverageProject.Setup(cp => cp.Settings.Include).Returns(projectInclude);
161+
mockCoverageProject.Setup(cp => cp.Settings.IncludeTestAssembly).Returns(true);
162+
mockCoverageProject.Setup(cp => cp.ProjectName).Returns("TestProject");
163+
mockRunSettingsCoverletConfiguration.Setup(rsc => rsc.Include).Returns("rsincluded");
164+
128165
await coverletDataCollectorUtil.RunAsync(CancellationToken.None);
129-
mockDataCollectorSettingsBuilder.Verify(b => b.WithInclude(projectInclude, "rsincluded"));
166+
mockDataCollectorSettingsBuilder.Verify(
167+
b => b.WithInclude(
168+
It.Is<string[]>(includes => includes.OrderBy(incl => incl).SequenceEqual(new string[] { "[TestProject]*", "included"})),
169+
It.IsAny<string>()));
130170
}
131171

172+
132173
[TestCase(true,"true")]
133174
[TestCase(false, "false")]
134175
public async Task Should_Get_Settings_With_IncludeTestAssembly_From_CoverageProject_And_RunSettings_Async(bool projectIncludeTestAssembly, string runSettingsIncludeTestAssembly)

0 commit comments

Comments
 (0)