From 6b6c67a77c5bd8947ae619349f007d5556e3f3d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20M=C3=BCller?= <muellerdavid4@gmail.com> Date: Fri, 28 May 2021 10:36:14 +0200 Subject: [PATCH 1/3] fix + new sampleproject for tests with targetframework net472 --- coverlet.sln | 7 ++++ .../Symbols/CecilSymbolHelper.cs | 1 + .../Symbols/CecilSymbolHelperTests.cs | 33 ++++++++++++++++--- .../coverlet.core.tests.csproj | 2 ++ .../AsyncAwaitStateMachineNetFramework.cs | 12 +++++++ ...et.tests.projectsample.netframework.csproj | 12 +++++++ 6 files changed, 62 insertions(+), 5 deletions(-) create mode 100644 test/coverlet.tests.projectsample.netframework/AsyncAwaitStateMachineNetFramework.cs create mode 100644 test/coverlet.tests.projectsample.netframework/coverlet.tests.projectsample.netframework.csproj diff --git a/coverlet.sln b/coverlet.sln index 17d712674..025de5cd1 100644 --- a/coverlet.sln +++ b/coverlet.sln @@ -53,6 +53,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build", "Build", "{9A8B19D4 test\Directory.Build.targets = test\Directory.Build.targets EndProjectSection 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 @@ -115,6 +117,10 @@ Global {F8199E19-FA9A-4559-9101-CAD7028121B4}.Debug|Any CPU.Build.0 = Debug|Any CPU {F8199E19-FA9A-4559-9101-CAD7028121B4}.Release|Any CPU.ActiveCfg = Release|Any CPU {F8199E19-FA9A-4559-9101-CAD7028121B4}.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 @@ -135,6 +141,7 @@ Global {5FF404AD-7C0B-465A-A1E9-558CDC642B0C} = {2FEBDE1B-83E3-445B-B9F8-5644B0E0E134} {F8199E19-FA9A-4559-9101-CAD7028121B4} = {2FEBDE1B-83E3-445B-B9F8-5644B0E0E134} {9A8B19D4-4A24-4217-AEFE-159B68F029A1} = {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 2a7adf9aa..2185564da 100644 --- a/test/coverlet.core.tests/coverlet.core.tests.csproj +++ b/test/coverlet.core.tests/coverlet.core.tests.csproj @@ -5,6 +5,7 @@ <TargetFramework>net5.0</TargetFramework> <IsPackable>false</IsPackable> <NoWarn>$(NoWarn);CS8002</NoWarn> + <MSBuildWarningsAsMessages>NU1702</MSBuildWarningsAsMessages> <!--For test TestInstrument_NetstandardAwareAssemblyResolver_PreserveCompilationContext--> <PreserveCompilationContext>true</PreserveCompilationContext> </PropertyGroup> @@ -26,6 +27,7 @@ <ProjectReference Include="$(RepoRoot)test\coverlet.tests.projectsample.excludedbyattribute\coverlet.tests.projectsample.excludedbyattribute.csproj" /> <ProjectReference Include="$(RepoRoot)test\coverlet.core.tests.samples.netstandard\coverlet.core.tests.samples.netstandard.csproj" /> <ProjectReference Include="$(RepoRoot)test\coverlet.tests.xunit.extensions\coverlet.tests.xunit.extensions.csproj" /> + <ProjectReference Include="$(RepoRoot)test\coverlet.tests.projectsample.netframework\coverlet.tests.projectsample.netframework.csproj" /> </ItemGroup> <ItemGroup> 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..4077b4e94 --- /dev/null +++ b/test/coverlet.tests.projectsample.netframework/coverlet.tests.projectsample.netframework.csproj @@ -0,0 +1,12 @@ +<Project Sdk="Microsoft.NET.Sdk"> + + <PropertyGroup> + <TargetFramework>net472</TargetFramework> + </PropertyGroup> + + <ItemGroup> + <PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.2"> + <PrivateAssets>all</PrivateAssets> + </PackageReference> + </ItemGroup> +</Project> \ No newline at end of file From 4e9e2c4e692dc3ceba7b03e934b6a701f046b541 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20M=C3=BCller?= <muellerdavid4@gmail.com> Date: Fri, 28 May 2021 10:55:37 +0200 Subject: [PATCH 2/3] update changelog --- Documentation/Changelog.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/Changelog.md b/Documentation/Changelog.md index 490162318..1abb237a1 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 partially covered throw statement [#1144](https://github.com/coverlet-coverage/coverlet/pull/1144) -Fix coverage threshold not failing when no coverage [#1115](https://github.com/coverlet-coverage/coverlet/pull/1115) -Fix partially covered `await foreach` statement [#1107](https://github.com/coverlet-coverage/coverlet/pull/1107) by https://github.com/alexthornton1 From 77dd042a9db69355eeb08e828f148536f91b9a37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20M=C3=BCller?= <muellerdavid4@gmail.com> Date: Sat, 29 May 2021 01:06:50 +0200 Subject: [PATCH 3/3] nit --- .../coverlet.tests.projectsample.netframework.csproj | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/coverlet.tests.projectsample.netframework/coverlet.tests.projectsample.netframework.csproj b/test/coverlet.tests.projectsample.netframework/coverlet.tests.projectsample.netframework.csproj index 4077b4e94..822b965de 100644 --- a/test/coverlet.tests.projectsample.netframework/coverlet.tests.projectsample.netframework.csproj +++ b/test/coverlet.tests.projectsample.netframework/coverlet.tests.projectsample.netframework.csproj @@ -2,6 +2,8 @@ <PropertyGroup> <TargetFramework>net472</TargetFramework> + <IsPackable>false</IsPackable> + <IsTestProject>false</IsTestProject> </PropertyGroup> <ItemGroup>