diff --git a/Documentation/Changelog.md b/Documentation/Changelog.md
index 787b935f5..16945f29d 100644
--- a/Documentation/Changelog.md
+++ b/Documentation/Changelog.md
@@ -7,7 +7,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## Unreleased
### Fixed
-
+-Fix branch coverage for targetframework net472 [#1167](https://github.com/coverlet-coverage/coverlet/issues/1167)
-Fix F# projects with `unkown` source [#1145](https://github.com/coverlet-coverage/coverlet/issues/1145)
-Fix SkipAutoProps for inline assigned properties [#1139](https://github.com/coverlet-coverage/coverlet/issues/1139)
-Fix partially covered throw statement [#1144](https://github.com/coverlet-coverage/coverlet/pull/1144)
diff --git a/coverlet.sln b/coverlet.sln
index 40dfd8966..34e7257db 100644
--- a/coverlet.sln
+++ b/coverlet.sln
@@ -55,6 +55,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build", "Build", "{9A8B19D4
EndProject
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}"
EndProject
+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}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -121,6 +123,10 @@ Global
{1CBF6966-2A67-4D2C-8598-D174B83072F4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1CBF6966-2A67-4D2C-8598-D174B83072F4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1CBF6966-2A67-4D2C-8598-D174B83072F4}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E69D68C9-78ED-4076-A14B-D07295A4B2A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E69D68C9-78ED-4076-A14B-D07295A4B2A5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E69D68C9-78ED-4076-A14B-D07295A4B2A5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E69D68C9-78ED-4076-A14B-D07295A4B2A5}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -142,6 +148,7 @@ Global
{F8199E19-FA9A-4559-9101-CAD7028121B4} = {2FEBDE1B-83E3-445B-B9F8-5644B0E0E134}
{9A8B19D4-4A24-4217-AEFE-159B68F029A1} = {2FEBDE1B-83E3-445B-B9F8-5644B0E0E134}
{1CBF6966-2A67-4D2C-8598-D174B83072F4} = {2FEBDE1B-83E3-445B-B9F8-5644B0E0E134}
+ {E69D68C9-78ED-4076-A14B-D07295A4B2A5} = {2FEBDE1B-83E3-445B-B9F8-5644B0E0E134}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {9CA57C02-97B0-4C38-A027-EA61E8741F10}
diff --git a/src/coverlet.core/Symbols/CecilSymbolHelper.cs b/src/coverlet.core/Symbols/CecilSymbolHelper.cs
index 44942fab1..25909720c 100644
--- a/src/coverlet.core/Symbols/CecilSymbolHelper.cs
+++ b/src/coverlet.core/Symbols/CecilSymbolHelper.cs
@@ -197,6 +197,7 @@ instruction.Previous.Operand is MethodReference operand &&
(
operand.DeclaringType.Scope.Name == "System.Runtime" ||
operand.DeclaringType.Scope.Name == "netstandard" ||
+ operand.DeclaringType.Scope.Name == "mscorlib" ||
operand.DeclaringType.Scope.Name == "System.Threading.Tasks.Extensions"
)
)
diff --git a/test/coverlet.core.tests/Symbols/CecilSymbolHelperTests.cs b/test/coverlet.core.tests/Symbols/CecilSymbolHelperTests.cs
index 3107db0a3..bfd659a61 100644
--- a/test/coverlet.core.tests/Symbols/CecilSymbolHelperTests.cs
+++ b/test/coverlet.core.tests/Symbols/CecilSymbolHelperTests.cs
@@ -4,6 +4,7 @@
using Xunit;
using Coverlet.Core.Samples.Tests;
+using coverlet.tests.projectsample.netframework;
using Mono.Cecil;
using Mono.Cecil.Cil;
@@ -11,16 +12,18 @@ namespace Coverlet.Core.Symbols.Tests
{
public class CecilSymbolHelperTests
{
- private readonly ModuleDefinition _module;
+ private ModuleDefinition _module;
private readonly CecilSymbolHelper _cecilSymbolHelper;
+ private readonly DefaultAssemblyResolver _resolver;
+ private readonly ReaderParameters _parameters;
public CecilSymbolHelperTests()
{
var location = GetType().Assembly.Location;
- var resolver = new DefaultAssemblyResolver();
- resolver.AddSearchDirectory(Path.GetDirectoryName(location));
- var parameters = new ReaderParameters { ReadSymbols = true, AssemblyResolver = resolver };
- _module = ModuleDefinition.ReadModule(location, parameters);
+ _resolver = new DefaultAssemblyResolver();
+ _resolver.AddSearchDirectory(Path.GetDirectoryName(location));
+ _parameters = new ReaderParameters { ReadSymbols = true, AssemblyResolver = _resolver };
+ _module = ModuleDefinition.ReadModule(location, _parameters);
_cecilSymbolHelper = new CecilSymbolHelper();
}
@@ -294,6 +297,26 @@ public void GetBranchPoints_IgnoresBranchesIn_AsyncAwaitStateMachine()
Assert.Empty(points);
}
+ [Fact]
+ public void GetBranchPoints_IgnoresBranchesIn_AsyncAwaitStateMachineNetFramework()
+ {
+ // arrange
+ string location = Directory.GetFiles(Directory.GetCurrentDirectory(), "coverlet.tests.projectsample.netframework.dll").First();
+ _resolver.AddSearchDirectory(Path.GetDirectoryName(location));
+ _module = ModuleDefinition.ReadModule(location, _parameters);
+
+ var nestedName = typeof(AsyncAwaitStateMachineNetFramework).GetNestedTypes(BindingFlags.NonPublic).First().Name;
+ var type = _module.Types.FirstOrDefault(x => x.FullName == typeof(AsyncAwaitStateMachineNetFramework).FullName);
+ var nestedType = type.NestedTypes.FirstOrDefault(x => x.FullName.EndsWith(nestedName));
+ var method = nestedType.Methods.First(x => x.FullName.EndsWith("::MoveNext()"));
+
+ // act
+ var points = _cecilSymbolHelper.GetBranchPoints(method);
+
+ // assert
+ Assert.Empty(points);
+ }
+
[Fact]
public void GetBranchPoints_IgnoresBranchesIn_AsyncAwaitValueTaskStateMachine()
{
diff --git a/test/coverlet.core.tests/coverlet.core.tests.csproj b/test/coverlet.core.tests/coverlet.core.tests.csproj
index b7cd119b3..d5fdc3257 100644
--- a/test/coverlet.core.tests/coverlet.core.tests.csproj
+++ b/test/coverlet.core.tests/coverlet.core.tests.csproj
@@ -5,6 +5,7 @@
net5.0
false
$(NoWarn);CS8002
+ NU1702
true
@@ -27,6 +28,7 @@
+
diff --git a/test/coverlet.tests.projectsample.netframework/AsyncAwaitStateMachineNetFramework.cs b/test/coverlet.tests.projectsample.netframework/AsyncAwaitStateMachineNetFramework.cs
new file mode 100644
index 000000000..ac07e5a7f
--- /dev/null
+++ b/test/coverlet.tests.projectsample.netframework/AsyncAwaitStateMachineNetFramework.cs
@@ -0,0 +1,12 @@
+using System.Threading.Tasks;
+
+namespace coverlet.tests.projectsample.netframework
+{
+ public class AsyncAwaitStateMachineNetFramework
+ {
+ public async Task AsyncAwait()
+ {
+ await Task.CompletedTask;
+ }
+ }
+}
diff --git a/test/coverlet.tests.projectsample.netframework/coverlet.tests.projectsample.netframework.csproj b/test/coverlet.tests.projectsample.netframework/coverlet.tests.projectsample.netframework.csproj
new file mode 100644
index 000000000..822b965de
--- /dev/null
+++ b/test/coverlet.tests.projectsample.netframework/coverlet.tests.projectsample.netframework.csproj
@@ -0,0 +1,14 @@
+
+
+
+ net472
+ false
+ false
+
+
+
+
+ all
+
+
+
\ No newline at end of file