Skip to content

Commit 4902c24

Browse files
authored
Incorrect branch coverage async pattern for targetframework net472 (#1169)
Incorrect branch coverage async pattern for targetframework
1 parent db09e8b commit 4902c24

File tree

7 files changed

+65
-6
lines changed

7 files changed

+65
-6
lines changed

Documentation/Changelog.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77
## Unreleased
88

99
### Fixed
10-
10+
-Fix branch coverage for targetframework net472 [#1167](https://github.com/coverlet-coverage/coverlet/issues/1167)
1111
-Fix F# projects with `unkown` source [#1145](https://github.com/coverlet-coverage/coverlet/issues/1145)
1212
-Fix SkipAutoProps for inline assigned properties [#1139](https://github.com/coverlet-coverage/coverlet/issues/1139)
1313
-Fix partially covered throw statement [#1144](https://github.com/coverlet-coverage/coverlet/pull/1144)

coverlet.sln

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build", "Build", "{9A8B19D4
5555
EndProject
5656
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "coverlet.tests.projectsample.fsharp", "test\coverlet.tests.projectsample.fsharp\coverlet.tests.projectsample.fsharp.fsproj", "{1CBF6966-2A67-4D2C-8598-D174B83072F4}"
5757
EndProject
58+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "coverlet.tests.projectsample.netframework", "test\coverlet.tests.projectsample.netframework\coverlet.tests.projectsample.netframework.csproj", "{E69D68C9-78ED-4076-A14B-D07295A4B2A5}"
59+
EndProject
5860
Global
5961
GlobalSection(SolutionConfigurationPlatforms) = preSolution
6062
Debug|Any CPU = Debug|Any CPU
@@ -121,6 +123,10 @@ Global
121123
{1CBF6966-2A67-4D2C-8598-D174B83072F4}.Debug|Any CPU.Build.0 = Debug|Any CPU
122124
{1CBF6966-2A67-4D2C-8598-D174B83072F4}.Release|Any CPU.ActiveCfg = Release|Any CPU
123125
{1CBF6966-2A67-4D2C-8598-D174B83072F4}.Release|Any CPU.Build.0 = Release|Any CPU
126+
{E69D68C9-78ED-4076-A14B-D07295A4B2A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
127+
{E69D68C9-78ED-4076-A14B-D07295A4B2A5}.Debug|Any CPU.Build.0 = Debug|Any CPU
128+
{E69D68C9-78ED-4076-A14B-D07295A4B2A5}.Release|Any CPU.ActiveCfg = Release|Any CPU
129+
{E69D68C9-78ED-4076-A14B-D07295A4B2A5}.Release|Any CPU.Build.0 = Release|Any CPU
124130
EndGlobalSection
125131
GlobalSection(SolutionProperties) = preSolution
126132
HideSolutionNode = FALSE
@@ -142,6 +148,7 @@ Global
142148
{F8199E19-FA9A-4559-9101-CAD7028121B4} = {2FEBDE1B-83E3-445B-B9F8-5644B0E0E134}
143149
{9A8B19D4-4A24-4217-AEFE-159B68F029A1} = {2FEBDE1B-83E3-445B-B9F8-5644B0E0E134}
144150
{1CBF6966-2A67-4D2C-8598-D174B83072F4} = {2FEBDE1B-83E3-445B-B9F8-5644B0E0E134}
151+
{E69D68C9-78ED-4076-A14B-D07295A4B2A5} = {2FEBDE1B-83E3-445B-B9F8-5644B0E0E134}
145152
EndGlobalSection
146153
GlobalSection(ExtensibilityGlobals) = postSolution
147154
SolutionGuid = {9CA57C02-97B0-4C38-A027-EA61E8741F10}

src/coverlet.core/Symbols/CecilSymbolHelper.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@ instruction.Previous.Operand is MethodReference operand &&
197197
(
198198
operand.DeclaringType.Scope.Name == "System.Runtime" ||
199199
operand.DeclaringType.Scope.Name == "netstandard" ||
200+
operand.DeclaringType.Scope.Name == "mscorlib" ||
200201
operand.DeclaringType.Scope.Name == "System.Threading.Tasks.Extensions"
201202
)
202203
)

test/coverlet.core.tests/Symbols/CecilSymbolHelperTests.cs

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,26 @@
44

55
using Xunit;
66
using Coverlet.Core.Samples.Tests;
7+
using coverlet.tests.projectsample.netframework;
78
using Mono.Cecil;
89
using Mono.Cecil.Cil;
910

1011
namespace Coverlet.Core.Symbols.Tests
1112
{
1213
public class CecilSymbolHelperTests
1314
{
14-
private readonly ModuleDefinition _module;
15+
private ModuleDefinition _module;
1516
private readonly CecilSymbolHelper _cecilSymbolHelper;
17+
private readonly DefaultAssemblyResolver _resolver;
18+
private readonly ReaderParameters _parameters;
1619

1720
public CecilSymbolHelperTests()
1821
{
1922
var location = GetType().Assembly.Location;
20-
var resolver = new DefaultAssemblyResolver();
21-
resolver.AddSearchDirectory(Path.GetDirectoryName(location));
22-
var parameters = new ReaderParameters { ReadSymbols = true, AssemblyResolver = resolver };
23-
_module = ModuleDefinition.ReadModule(location, parameters);
23+
_resolver = new DefaultAssemblyResolver();
24+
_resolver.AddSearchDirectory(Path.GetDirectoryName(location));
25+
_parameters = new ReaderParameters { ReadSymbols = true, AssemblyResolver = _resolver };
26+
_module = ModuleDefinition.ReadModule(location, _parameters);
2427
_cecilSymbolHelper = new CecilSymbolHelper();
2528
}
2629

@@ -294,6 +297,26 @@ public void GetBranchPoints_IgnoresBranchesIn_AsyncAwaitStateMachine()
294297
Assert.Empty(points);
295298
}
296299

300+
[Fact]
301+
public void GetBranchPoints_IgnoresBranchesIn_AsyncAwaitStateMachineNetFramework()
302+
{
303+
// arrange
304+
string location = Directory.GetFiles(Directory.GetCurrentDirectory(), "coverlet.tests.projectsample.netframework.dll").First();
305+
_resolver.AddSearchDirectory(Path.GetDirectoryName(location));
306+
_module = ModuleDefinition.ReadModule(location, _parameters);
307+
308+
var nestedName = typeof(AsyncAwaitStateMachineNetFramework).GetNestedTypes(BindingFlags.NonPublic).First().Name;
309+
var type = _module.Types.FirstOrDefault(x => x.FullName == typeof(AsyncAwaitStateMachineNetFramework).FullName);
310+
var nestedType = type.NestedTypes.FirstOrDefault(x => x.FullName.EndsWith(nestedName));
311+
var method = nestedType.Methods.First(x => x.FullName.EndsWith("::MoveNext()"));
312+
313+
// act
314+
var points = _cecilSymbolHelper.GetBranchPoints(method);
315+
316+
// assert
317+
Assert.Empty(points);
318+
}
319+
297320
[Fact]
298321
public void GetBranchPoints_IgnoresBranchesIn_AsyncAwaitValueTaskStateMachine()
299322
{

test/coverlet.core.tests/coverlet.core.tests.csproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
<TargetFramework>net5.0</TargetFramework>
66
<IsPackable>false</IsPackable>
77
<NoWarn>$(NoWarn);CS8002</NoWarn>
8+
<MSBuildWarningsAsMessages>NU1702</MSBuildWarningsAsMessages>
89
<!--For test TestInstrument_NetstandardAwareAssemblyResolver_PreserveCompilationContext-->
910
<PreserveCompilationContext>true</PreserveCompilationContext>
1011
</PropertyGroup>
@@ -27,6 +28,7 @@
2728
<ProjectReference Include="$(RepoRoot)test\coverlet.tests.projectsample.fsharp\coverlet.tests.projectsample.fsharp.fsproj" />
2829
<ProjectReference Include="$(RepoRoot)test\coverlet.core.tests.samples.netstandard\coverlet.core.tests.samples.netstandard.csproj" />
2930
<ProjectReference Include="$(RepoRoot)test\coverlet.tests.xunit.extensions\coverlet.tests.xunit.extensions.csproj" />
31+
<ProjectReference Include="$(RepoRoot)test\coverlet.tests.projectsample.netframework\coverlet.tests.projectsample.netframework.csproj" />
3032
</ItemGroup>
3133

3234
<ItemGroup>
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
using System.Threading.Tasks;
2+
3+
namespace coverlet.tests.projectsample.netframework
4+
{
5+
public class AsyncAwaitStateMachineNetFramework
6+
{
7+
public async Task AsyncAwait()
8+
{
9+
await Task.CompletedTask;
10+
}
11+
}
12+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFramework>net472</TargetFramework>
5+
<IsPackable>false</IsPackable>
6+
<IsTestProject>false</IsTestProject>
7+
</PropertyGroup>
8+
9+
<ItemGroup>
10+
<PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.2">
11+
<PrivateAssets>all</PrivateAssets>
12+
</PackageReference>
13+
</ItemGroup>
14+
</Project>

0 commit comments

Comments
 (0)