Skip to content

Commit ad7f4c0

Browse files
committed
fix + test adaptions
1 parent 3bbe502 commit ad7f4c0

File tree

14 files changed

+79
-35
lines changed

14 files changed

+79
-35
lines changed

src/coverlet.collector/DataCollection/CoverletCoverageCollector.cs

+5-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@
88
using System.Xml;
99
using Coverlet.Collector.Utilities;
1010
using Coverlet.Collector.Utilities.Interfaces;
11+
using coverlet.core.Abstractions;
1112
using Coverlet.Core.Abstractions;
13+
using coverlet.core.Helpers;
1214
using Coverlet.Core.Helpers;
1315
using Coverlet.Core.Symbols;
1416
using Microsoft.Extensions.DependencyInjection;
@@ -224,11 +226,13 @@ private static IServiceCollection GetDefaultServiceCollection(TestPlatformEqtTra
224226
serviceCollection.AddTransient<IRetryHelper, RetryHelper>();
225227
serviceCollection.AddTransient<IProcessExitHandler, ProcessExitHandler>();
226228
serviceCollection.AddTransient<IFileSystem, FileSystem>();
229+
serviceCollection.AddTransient<IAssemblyAdapter, AssemblyAdapter>();
227230
serviceCollection.AddTransient<ILogger, CoverletLogger>(_ => new CoverletLogger(eqtTrace, logger));
228231
// We need to keep singleton/static semantics
229232
serviceCollection.AddSingleton<IInstrumentationHelper, InstrumentationHelper>();
230233
// We cache resolutions
231-
serviceCollection.AddSingleton<ISourceRootTranslator, SourceRootTranslator>(serviceProvider => new SourceRootTranslator(testModule, serviceProvider.GetRequiredService<ILogger>(), serviceProvider.GetRequiredService<IFileSystem>()));
234+
serviceCollection.AddSingleton<ISourceRootTranslator, SourceRootTranslator>(serviceProvider =>
235+
new SourceRootTranslator(testModule, serviceProvider.GetRequiredService<ILogger>(), serviceProvider.GetRequiredService<IFileSystem>(), serviceProvider.GetRequiredService<IAssemblyAdapter>()));
232236
serviceCollection.AddSingleton<ICecilSymbolHelper, CecilSymbolHelper>();
233237
return serviceCollection;
234238
}

src/coverlet.collector/build/netstandard1.0/coverlet.collector.targets

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ WARNING: DO NOT MODIFY this file unless you are knowledgeable about MSBuild and
4444
<_mapping Include="@(_byProject->'%(Identity)|%(OriginalPath)=%(MappedPath)')" />
4545
</ItemGroup>
4646
<PropertyGroup>
47-
<_sourceRootMappingFilePath>$([MSBuild]::EnsureTrailingSlash('$(OutputPath)'))CoverletSourceRootsMapping</_sourceRootMappingFilePath>
47+
<_sourceRootMappingFilePath>$([MSBuild]::EnsureTrailingSlash('$(OutputPath)'))CoverletSourceRootsMapping_$(AssemblyName)</_sourceRootMappingFilePath>
4848
</PropertyGroup>
4949
<WriteLinesToFile File="$(_sourceRootMappingFilePath)" Lines="@(_mapping)"
5050
Overwrite="true" Encoding="Unicode"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// Copyright (c) Toni Solarin-Sodara
2+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
3+
4+
namespace Coverlet.Core.Abstractions
5+
{
6+
internal interface IAssemblyAdapter
7+
{
8+
string GetAssemblyName(string assemblyPath);
9+
}
10+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// Copyright (c) Toni Solarin-Sodara
2+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
3+
4+
using System.Reflection;
5+
using Coverlet.Core.Abstractions;
6+
7+
namespace Coverlet.Core.Helpers
8+
{
9+
internal class AssemblyAdapter : IAssemblyAdapter
10+
{
11+
public string GetAssemblyName(string assemblyPath)
12+
{
13+
return AssemblyName.GetAssemblyName(assemblyPath).Name;
14+
}
15+
}
16+
}

src/coverlet.core/Helpers/SourceRootTranslator.cs

+7-3
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ internal class SourceRootTranslator : ISourceRootTranslator
2222
private readonly IFileSystem _fileSystem;
2323
private readonly Dictionary<string, List<SourceRootMapping>> _sourceRootMapping;
2424
private readonly Dictionary<string, List<string>> _sourceToDeterministicPathMapping;
25-
private const string MappingFileName = "CoverletSourceRootsMapping";
25+
private readonly string _mappingFileName;
2626
private Dictionary<string, string> _resolutionCacheFiles;
2727

2828
public SourceRootTranslator(ILogger logger, IFileSystem fileSystem)
@@ -32,7 +32,7 @@ public SourceRootTranslator(ILogger logger, IFileSystem fileSystem)
3232
_sourceRootMapping = new Dictionary<string, List<SourceRootMapping>>();
3333
}
3434

35-
public SourceRootTranslator(string moduleTestPath, ILogger logger, IFileSystem fileSystem)
35+
public SourceRootTranslator(string moduleTestPath, ILogger logger, IFileSystem fileSystem, IAssemblyAdapter assemblyAdapter)
3636
{
3737
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
3838
_fileSystem = fileSystem ?? throw new ArgumentNullException(nameof(fileSystem));
@@ -44,6 +44,10 @@ public SourceRootTranslator(string moduleTestPath, ILogger logger, IFileSystem f
4444
{
4545
throw new FileNotFoundException($"Module test path '{moduleTestPath}' not found", moduleTestPath);
4646
}
47+
48+
string assemblyName = assemblyAdapter.GetAssemblyName(moduleTestPath);
49+
_mappingFileName = $"CoverletSourceRootsMapping_{assemblyName}";
50+
4751
_sourceRootMapping = LoadSourceRootMapping(Path.GetDirectoryName(moduleTestPath));
4852
_sourceToDeterministicPathMapping = LoadSourceToDeterministicPathMapping(_sourceRootMapping);
4953
}
@@ -75,7 +79,7 @@ private Dictionary<string, List<SourceRootMapping>> LoadSourceRootMapping(string
7579
{
7680
var mapping = new Dictionary<string, List<SourceRootMapping>>();
7781

78-
string mappingFilePath = Path.Combine(directory, MappingFileName);
82+
string mappingFilePath = Path.Combine(directory, _mappingFileName);
7983
if (!_fileSystem.Exists(mappingFilePath))
8084
{
8185
return mapping;

src/coverlet.msbuild.tasks/InstrumentationTask.cs

+3-1
Original file line numberDiff line numberDiff line change
@@ -73,11 +73,13 @@ public override bool Execute()
7373
IServiceCollection serviceCollection = new ServiceCollection();
7474
serviceCollection.AddTransient<IProcessExitHandler, ProcessExitHandler>();
7575
serviceCollection.AddTransient<IFileSystem, FileSystem>();
76+
serviceCollection.AddTransient<IAssemblyAdapter, AssemblyAdapter>();
7677
serviceCollection.AddTransient<IConsole, SystemConsole>();
7778
serviceCollection.AddTransient<ILogger, MSBuildLogger>(_ => _logger);
7879
serviceCollection.AddTransient<IRetryHelper, RetryHelper>();
7980
// We cache resolutions
80-
serviceCollection.AddSingleton<ISourceRootTranslator, SourceRootTranslator>(serviceProvider => new SourceRootTranslator(Path, serviceProvider.GetRequiredService<ILogger>(), serviceProvider.GetRequiredService<IFileSystem>()));
81+
serviceCollection.AddSingleton<ISourceRootTranslator, SourceRootTranslator>(serviceProvider =>
82+
new SourceRootTranslator(Path, serviceProvider.GetRequiredService<ILogger>(), serviceProvider.GetRequiredService<IFileSystem>(), serviceProvider.GetRequiredService<IAssemblyAdapter>()));
8183
// We need to keep singleton/static semantics
8284
serviceCollection.AddSingleton<IInstrumentationHelper, InstrumentationHelper>();
8385
serviceCollection.AddSingleton<ICecilSymbolHelper, CecilSymbolHelper>();

src/coverlet.msbuild.tasks/coverlet.msbuild.targets

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
<_mapping Include="@(_byProject->'%(Identity)|%(OriginalPath)=%(MappedPath)')" />
2525
</ItemGroup>
2626
<PropertyGroup>
27-
<_sourceRootMappingFilePath>$([MSBuild]::EnsureTrailingSlash('$(OutputPath)'))CoverletSourceRootsMapping</_sourceRootMappingFilePath>
27+
<_sourceRootMappingFilePath>$([MSBuild]::EnsureTrailingSlash('$(OutputPath)'))CoverletSourceRootsMapping_$(AssemblyName)</_sourceRootMappingFilePath>
2828
</PropertyGroup>
2929
<WriteLinesToFile File="$(_sourceRootMappingFilePath)" Lines="@(_mapping)"
3030
Overwrite="true" Encoding="Unicode"

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public void TestCoverageSkipModule__AssemblyMarkedAsExcludeFromCodeCoverage()
3131

3232
var instrumentationHelper =
3333
new InstrumentationHelper(new ProcessExitHandler(), new RetryHelper(), new FileSystem(), new Mock<ILogger>().Object,
34-
new SourceRootTranslator(excludedbyattributeDll, new Mock<ILogger>().Object, new FileSystem()));
34+
new SourceRootTranslator(excludedbyattributeDll, new Mock<ILogger>().Object, new FileSystem(), new AssemblyAdapter()));
3535

3636
var parameters = new CoverageParameters
3737
{

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

+3-3
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public void TestCoverage()
2929
// TODO: Find a way to mimick hits
3030
var instrumentationHelper =
3131
new InstrumentationHelper(new ProcessExitHandler(), new RetryHelper(), new FileSystem(), new Mock<ILogger>().Object,
32-
new SourceRootTranslator(module, new Mock<ILogger>().Object, new FileSystem()));
32+
new SourceRootTranslator(module, new Mock<ILogger>().Object, new FileSystem(), new AssemblyAdapter()));
3333

3434
var parameters = new CoverageParameters
3535
{
@@ -67,7 +67,7 @@ public void TestCoverageWithTestAssembly()
6767

6868
var instrumentationHelper =
6969
new InstrumentationHelper(new ProcessExitHandler(), new RetryHelper(), new FileSystem(), new Mock<ILogger>().Object,
70-
new SourceRootTranslator(module, new Mock<ILogger>().Object, new FileSystem()));
70+
new SourceRootTranslator(module, new Mock<ILogger>().Object, new FileSystem(), new AssemblyAdapter()));
7171

7272
var parameters = new CoverageParameters
7373
{
@@ -83,7 +83,7 @@ public void TestCoverageWithTestAssembly()
8383
};
8484

8585
var coverage = new Coverage(Path.Combine(directory.FullName, Path.GetFileName(module)), parameters, _mockLogger.Object, instrumentationHelper, new FileSystem(),
86-
new SourceRootTranslator(module, _mockLogger.Object, new FileSystem()), new CecilSymbolHelper());
86+
new SourceRootTranslator(module, _mockLogger.Object, new FileSystem(), new AssemblyAdapter()), new CecilSymbolHelper());
8787
coverage.PrepareModules();
8888

8989
CoverageResult result = coverage.GetCoverageResult();

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ private static void SetTestContainer(string testModule = null, bool disableResto
173173
serviceCollection.AddSingleton<ISourceRootTranslator, SourceRootTranslator>(serviceProvider =>
174174
string.IsNullOrEmpty(testModule) ?
175175
new SourceRootTranslator(serviceProvider.GetRequiredService<ILogger>(), serviceProvider.GetRequiredService<IFileSystem>()) :
176-
new SourceRootTranslator(testModule, serviceProvider.GetRequiredService<ILogger>(), serviceProvider.GetRequiredService<IFileSystem>()));
176+
new SourceRootTranslator(testModule, serviceProvider.GetRequiredService<ILogger>(), serviceProvider.GetRequiredService<IFileSystem>(), serviceProvider.GetRequiredService<IAssemblyAdapter>()));
177177

178178
serviceCollection.AddSingleton<ICecilSymbolHelper, CecilSymbolHelper>();
179179

test/coverlet.core.tests/Helpers/InstrumentationHelperTests.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ namespace Coverlet.Core.Helpers.Tests
1616
public class InstrumentationHelperTests
1717
{
1818
private readonly InstrumentationHelper _instrumentationHelper =
19-
new(new ProcessExitHandler(), new RetryHelper(), new FileSystem(), new Mock<ILogger>().Object, new SourceRootTranslator(typeof(InstrumentationHelperTests).Assembly.Location, new Mock<ILogger>().Object, new FileSystem()));
19+
new(new ProcessExitHandler(), new RetryHelper(), new FileSystem(), new Mock<ILogger>().Object, new SourceRootTranslator(typeof(InstrumentationHelperTests).Assembly.Location, new Mock<ILogger>().Object, new FileSystem(), new AssemblyAdapter()));
2020

2121
[Fact]
2222
public void TestGetDependencies()
@@ -41,7 +41,7 @@ public void EmbeddedPortablePDPHasLocalSource_NoDocumentsExist_ReturnsFalse()
4141
fileSystem.Setup(x => x.Exists(It.IsAny<string>())).Returns(false);
4242

4343
var instrumentationHelper =
44-
new InstrumentationHelper(new ProcessExitHandler(), new RetryHelper(), fileSystem.Object, new Mock<ILogger>().Object, new SourceRootTranslator(typeof(InstrumentationHelperTests).Assembly.Location, new Mock<ILogger>().Object, new FileSystem()));
44+
new InstrumentationHelper(new ProcessExitHandler(), new RetryHelper(), fileSystem.Object, new Mock<ILogger>().Object, new SourceRootTranslator(typeof(InstrumentationHelperTests).Assembly.Location, new Mock<ILogger>().Object, new FileSystem(), new AssemblyAdapter()));
4545

4646
Assert.False(instrumentationHelper.PortablePdbHasLocalSource(typeof(InstrumentationHelperTests).Assembly.Location, AssemblySearchType.MissingAny));
4747
Assert.False(instrumentationHelper.PortablePdbHasLocalSource(typeof(InstrumentationHelperTests).Assembly.Location, AssemblySearchType.MissingAll));
@@ -69,7 +69,7 @@ public void EmbeddedPortablePDPHasLocalSource_FirstDocumentDoesNotExist_ReturnsE
6969
});
7070

7171
var instrumentationHelper =
72-
new InstrumentationHelper(new ProcessExitHandler(), new RetryHelper(), fileSystem.Object, new Mock<ILogger>().Object, new SourceRootTranslator(typeof(InstrumentationHelperTests).Assembly.Location, new Mock<ILogger>().Object, new FileSystem()));
72+
new InstrumentationHelper(new ProcessExitHandler(), new RetryHelper(), fileSystem.Object, new Mock<ILogger>().Object, new SourceRootTranslator(typeof(InstrumentationHelperTests).Assembly.Location, new Mock<ILogger>().Object, new FileSystem(), new AssemblyAdapter()));
7373

7474
Assert.Equal(result, instrumentationHelper.PortablePdbHasLocalSource(typeof(InstrumentationHelperTests).Assembly.Location, (AssemblySearchType) assemblySearchType));
7575
}

test/coverlet.core.tests/Helpers/SourceRootTranslatorTests.cs

+16-8
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,16 @@ public void Translate_Success()
1818
{
1919
string fileToTranslate = "/_/src/coverlet.core/obj/Debug/netstandard2.0/coverlet.core.pdb";
2020
var logger = new Mock<ILogger>();
21+
var assemblyAdapter = new Mock<IAssemblyAdapter>();
22+
assemblyAdapter.Setup(x => x.GetAssemblyName(It.IsAny<string>())).Returns("testLib");
2123
var fileSystem = new Mock<IFileSystem>();
2224
fileSystem.Setup(f => f.Exists(It.IsAny<string>())).Returns((string p) =>
2325
{
24-
if (p == "testLib.dll" || p == @"C:\git\coverlet\src\coverlet.core\obj\Debug\netstandard2.0\coverlet.core.pdb" || p == "CoverletSourceRootsMapping") return true;
26+
if (p == "testLib.dll" || p == @"C:\git\coverlet\src\coverlet.core\obj\Debug\netstandard2.0\coverlet.core.pdb" || p == "CoverletSourceRootsMapping_testLib") return true;
2527
return false;
2628
});
2729
fileSystem.Setup(f => f.ReadAllLines(It.IsAny<string>())).Returns(File.ReadAllLines(@"TestAssets/CoverletSourceRootsMappingTest"));
28-
var translator = new SourceRootTranslator("testLib.dll", logger.Object, fileSystem.Object);
30+
var translator = new SourceRootTranslator("testLib.dll", logger.Object, fileSystem.Object, assemblyAdapter.Object);
2931
Assert.Equal(@"C:\git\coverlet\src\coverlet.core\obj\Debug\netstandard2.0\coverlet.core.pdb", translator.ResolveFilePath(fileToTranslate));
3032
Assert.Equal(@"C:\git\coverlet\src\coverlet.core\obj\Debug\netstandard2.0\coverlet.core.pdb", translator.ResolveFilePath(fileToTranslate));
3133
}
@@ -36,14 +38,16 @@ public void Translate_Success()
3638
public void TranslatePathRoot_Success()
3739
{
3840
var logger = new Mock<ILogger>();
41+
var assemblyAdapter = new Mock<IAssemblyAdapter>();
42+
assemblyAdapter.Setup(x => x.GetAssemblyName(It.IsAny<string>())).Returns("testLib");
3943
var fileSystem = new Mock<IFileSystem>();
4044
fileSystem.Setup(f => f.Exists(It.IsAny<string>())).Returns((string p) =>
4145
{
42-
if (p == "testLib.dll" || p == @"C:\git\coverlet\src\coverlet.core\obj\Debug\netstandard2.0\coverlet.core.pdb" || p == "CoverletSourceRootsMapping") return true;
46+
if (p == "testLib.dll" || p == @"C:\git\coverlet\src\coverlet.core\obj\Debug\netstandard2.0\coverlet.core.pdb" || p == "CoverletSourceRootsMapping_testLib") return true;
4347
return false;
4448
});
4549
fileSystem.Setup(f => f.ReadAllLines(It.IsAny<string>())).Returns(File.ReadAllLines(@"TestAssets/CoverletSourceRootsMappingTest"));
46-
var translator = new SourceRootTranslator("testLib.dll", logger.Object, fileSystem.Object);
50+
var translator = new SourceRootTranslator("testLib.dll", logger.Object, fileSystem.Object, assemblyAdapter.Object);
4751
Assert.Equal(@"C:\git\coverlet\", translator.ResolvePathRoot("/_/")[0].OriginalPath);
4852
}
4953

@@ -52,14 +56,16 @@ public void Translate_EmptyFile()
5256
{
5357
string fileToTranslate = "/_/src/coverlet.core/obj/Debug/netstandard2.0/coverlet.core.pdb";
5458
var logger = new Mock<ILogger>();
59+
var assemblyAdapter = new Mock<IAssemblyAdapter>();
60+
assemblyAdapter.Setup(x => x.GetAssemblyName(It.IsAny<string>())).Returns("testLib");
5561
var fileSystem = new Mock<IFileSystem>();
5662
fileSystem.Setup(f => f.Exists(It.IsAny<string>())).Returns((string p) =>
5763
{
58-
if (p == "testLib.dll" || p == "CoverletSourceRootsMapping") return true;
64+
if (p == "testLib.dll" || p == "CoverletSourceRootsMapping_testLib") return true;
5965
return false;
6066
});
6167
fileSystem.Setup(f => f.ReadAllLines(It.IsAny<string>())).Returns(new string[0]);
62-
var translator = new SourceRootTranslator("testLib.dll", logger.Object, fileSystem.Object);
68+
var translator = new SourceRootTranslator("testLib.dll", logger.Object, fileSystem.Object, assemblyAdapter.Object);
6369
Assert.Equal(fileToTranslate, translator.ResolveFilePath(fileToTranslate));
6470
}
6571

@@ -68,14 +74,16 @@ public void Translate_MalformedFile()
6874
{
6975
string fileToTranslate = "/_/src/coverlet.core/obj/Debug/netstandard2.0/coverlet.core.pdb";
7076
var logger = new Mock<ILogger>();
77+
var assemblyAdapter = new Mock<IAssemblyAdapter>();
78+
assemblyAdapter.Setup(x => x.GetAssemblyName(It.IsAny<string>())).Returns("testLib");
7179
var fileSystem = new Mock<IFileSystem>();
7280
fileSystem.Setup(f => f.Exists(It.IsAny<string>())).Returns((string p) =>
7381
{
74-
if (p == "testLib.dll" || p == "CoverletSourceRootsMapping") return true;
82+
if (p == "testLib.dll" || p == "CoverletSourceRootsMapping_testLib") return true;
7583
return false;
7684
});
7785
fileSystem.Setup(f => f.ReadAllLines(It.IsAny<string>())).Returns(new string[1] { "malformedRow" });
78-
var translator = new SourceRootTranslator("testLib.dll", logger.Object, fileSystem.Object);
86+
var translator = new SourceRootTranslator("testLib.dll", logger.Object, fileSystem.Object, assemblyAdapter.Object);
7987
Assert.Equal(fileToTranslate, translator.ResolveFilePath(fileToTranslate));
8088
logger.Verify(l => l.LogWarning(It.IsAny<string>()), Times.Once);
8189
}

0 commit comments

Comments
 (0)