Skip to content

Commit c3905a1

Browse files
Joseph SunJosephSun2003
Joseph Sun
authored andcommitted
Add unit tests to new methods
1 parent cbe14cc commit c3905a1

File tree

3 files changed

+80
-7
lines changed

3 files changed

+80
-7
lines changed

src/coverlet.console/Program.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ bool unloadCoverletFromModulesOnly
239239

240240
if (unloadCoverletFromModulesOnly)
241241
{
242-
int unloadModuleExitCode = coverage.UnloadModule();
242+
int unloadModuleExitCode = coverage.UnloadModules();
243243
return Task.FromResult(unloadModuleExitCode);
244244
}
245245

src/coverlet.core/Coverage.cs

+8-6
Original file line numberDiff line numberDiff line change
@@ -330,17 +330,19 @@ public CoverageResult GetCoverageResult()
330330
/// unloads all modules that were instrumented
331331
/// </summary>
332332
/// <returns> exit code of module unloading </returns>
333-
public int UnloadModule()
333+
public int UnloadModules()
334334
{
335335
string[] modules = _instrumentationHelper.GetCoverableModules(_moduleOrAppDirectory,
336336
_parameters.IncludeDirectories, _parameters.IncludeTestAssembly);
337337

338-
IReadOnlyList<string> validModules = _instrumentationHelper
339-
.SelectModules(modules, _parameters.IncludeFilters, _parameters.ExcludeFilters).ToList();
340-
foreach (string modulePath in validModules) {
338+
var validModules = _instrumentationHelper
339+
.SelectModules(modules, _parameters.IncludeFilters, _parameters.ExcludeFilters);
340+
var validModulesAsList = validModules.ToList();
341+
foreach (string modulePath in validModulesAsList) {
341342
try
342343
{
343344
_instrumentationHelper.RestoreOriginalModule(modulePath, Identifier);
345+
_logger.LogVerbose("All Modules unloaded.");
344346
}
345347
catch (Exception e)
346348
{
@@ -353,8 +355,7 @@ public int UnloadModule()
353355
}
354356

355357
/// <summary>
356-
/// Invoke the unloading of modules and restoration of the original assembly files, made public to allow unloading
357-
/// of instrumentation in large scale testing utilising parallelization
358+
/// Invoke the unloading of modules and restoration of the original assembly files
358359
/// </summary>
359360
/// <param name="modulePath"></param>
360361
/// <returns> exist code of unloading modules </returns>
@@ -363,6 +364,7 @@ public void UnloadModule(string modulePath)
363364
try
364365
{
365366
_instrumentationHelper.RestoreOriginalModule(modulePath, Identifier);
367+
_logger.LogVerbose($"Module at {modulePath} is unloaded.");
366368
}
367369
catch (Exception e)
368370
{

test/coverlet.core.tests/Coverage/CoverageTests.cs

+71
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,77 @@ public void TestCoverageMergeWithWrongParameter()
177177

178178
directory.Delete(true);
179179
}
180+
181+
[Fact]
182+
public void TestCoverageUnloadWithParameters()
183+
{
184+
string module = GetType().Assembly.Location;
185+
string pdb = Path.Combine(Path.GetDirectoryName(module), Path.GetFileNameWithoutExtension(module) + ".pdb");
186+
187+
DirectoryInfo directory = Directory.CreateDirectory(Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()));
188+
189+
File.Copy(module, Path.Combine(directory.FullName, Path.GetFileName(module)), true);
190+
File.Copy(pdb, Path.Combine(directory.FullName, Path.GetFileName(pdb)), true);
191+
192+
var mockInstrumentationHelper = new Mock<IInstrumentationHelper>();
193+
194+
var parameters = new CoverageParameters
195+
{
196+
IncludeFilters = new string[] { "[coverlet.tests.projectsample.excludedbyattribute*]*" },
197+
IncludeDirectories = Array.Empty<string>(),
198+
ExcludeFilters = Array.Empty<string>(),
199+
ExcludedSourceFiles = Array.Empty<string>(),
200+
ExcludeAttributes = Array.Empty<string>(),
201+
IncludeTestAssembly = false,
202+
SingleHit = false,
203+
MergeWith = string.Empty,
204+
UseSourceLink = false
205+
};
206+
207+
var coverage = new Coverage(Path.Combine(directory.FullName, Path.GetFileName(module)), parameters, _mockLogger.Object, mockInstrumentationHelper.Object, new FileSystem(), new SourceRootTranslator(_mockLogger.Object, new FileSystem()), new CecilSymbolHelper());
208+
coverage.PrepareModules();
209+
coverage.UnloadModule(Path.Combine(directory.FullName, Path.GetFileName(module)));
210+
211+
mockInstrumentationHelper.Verify(i => i.RestoreOriginalModule(It.Is<string>(v => v.Equals(Path.Combine(directory.FullName, Path.GetFileName(module)))), It.IsAny<string>()), Times.Once);
212+
_mockLogger.Verify(l => l.LogVerbose(It.Is<string>(v => v.Equals($"Module at {Path.Combine(directory.FullName, Path.GetFileName(module))} is unloaded."))), Times.Once);
213+
}
214+
215+
[Fact]
216+
public void TestCoverageUnloadWithNoParameters()
217+
{
218+
string module = GetType().Assembly.Location;
219+
string pdb = Path.Combine(Path.GetDirectoryName(module), Path.GetFileNameWithoutExtension(module) + ".pdb");
220+
221+
DirectoryInfo directory = Directory.CreateDirectory(Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()));
222+
223+
File.Copy(module, Path.Combine(directory.FullName, Path.GetFileName(module)), true);
224+
File.Copy(pdb, Path.Combine(directory.FullName, Path.GetFileName(pdb)), true);
225+
226+
var mockInstrumentationHelper = new Mock<IInstrumentationHelper>();
227+
mockInstrumentationHelper
228+
.Setup(x => x.SelectModules(It.IsAny<IEnumerable<string>>(), It.IsAny<string[]>(), It.IsAny<string[]>()))
229+
.Returns(new List<string>(){"ModuleX"});
230+
231+
var parameters = new CoverageParameters
232+
{
233+
IncludeFilters = new string[] { "[coverlet.tests.projectsample.excludedbyattribute*]*" },
234+
IncludeDirectories = Array.Empty<string>(),
235+
ExcludeFilters = Array.Empty<string>(),
236+
ExcludedSourceFiles = Array.Empty<string>(),
237+
ExcludeAttributes = Array.Empty<string>(),
238+
IncludeTestAssembly = false,
239+
SingleHit = false,
240+
MergeWith = string.Empty,
241+
UseSourceLink = false
242+
};
243+
244+
var coverage = new Coverage(Path.Combine(directory.FullName, Path.GetFileName(module)), parameters, _mockLogger.Object, mockInstrumentationHelper.Object, new FileSystem(), new SourceRootTranslator(_mockLogger.Object, new FileSystem()), new CecilSymbolHelper());
245+
coverage.PrepareModules();
246+
coverage.UnloadModules();
247+
248+
mockInstrumentationHelper.Verify(i => i.RestoreOriginalModule(It.Is<string>(v => v.Equals("ModuleX")), It.IsAny<string>()), Times.Once);
249+
_mockLogger.Verify(l => l.LogVerbose(It.Is<string>(v => v.Equals("All Modules unloaded."))), Times.Once);
250+
}
180251
}
181252
}
182253

0 commit comments

Comments
 (0)