Skip to content

Commit 50ac349

Browse files
NachoEchevarriaandrewlock
authored andcommitted
Restore previous Verify.Xunit version
1 parent 1654e97 commit 50ac349

File tree

2 files changed

+202
-1
lines changed

2 files changed

+202
-1
lines changed

tracer/test/Datadog.Trace.Tools.Runner.Tests/CoverageRewriteTests.cs

Lines changed: 200 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,203 @@
22
// Unless explicitly stated otherwise all files in this repository are licensed under the Apache 2 License.
33
// This product includes software developed at Datadog (https://www.datadoghq.com/). Copyright 2017 Datadog, Inc.
44
// </copyright>
5+
6+
using System;
7+
using System.Collections.Generic;
8+
using System.IO;
9+
using System.Linq;
10+
using System.Threading.Tasks;
11+
using System.Xml;
12+
using Datadog.Trace.Coverage.Collector;
13+
using ICSharpCode.Decompiler;
14+
using ICSharpCode.Decompiler.CSharp;
15+
using VerifyTests;
16+
using VerifyXunit;
17+
using Xunit;
18+
19+
namespace Datadog.Trace.Tools.Runner.Tests;
20+
21+
[UsesVerify]
22+
public class CoverageRewriteTests
23+
{
24+
public CoverageRewriteTests()
25+
{
26+
VerifierSettings.DerivePathInfo(
27+
(sourceFile, projectDirectory, type, method) =>
28+
{
29+
return new(directory: Path.Combine(projectDirectory, "..", "snapshots"));
30+
});
31+
}
32+
33+
public static IEnumerable<object[]> FiltersData()
34+
{
35+
yield return
36+
[
37+
"CoverageRewriteTests.Rewritten.CoverletFilterByAttribute",
38+
@"<?xml version=""1.0"" encoding=""utf-8""?>
39+
<Configuration>
40+
<!-- Coverlet configuration -->
41+
<ExcludeByAttribute>CompilerGeneratedAttribute</ExcludeByAttribute>
42+
</Configuration>"
43+
];
44+
45+
yield return
46+
[
47+
"CoverageRewriteTests.Rewritten.NetFrameworkSettingsFilterByAttribute",
48+
@"<?xml version=""1.0"" encoding=""utf-8""?>
49+
<Configuration>
50+
<!-- Old .NET Framework configuration -->
51+
<CodeCoverage>
52+
<Attributes>
53+
<Exclude>
54+
<Attribute>^System\.Runtime\.CompilerServices\.CompilerGeneratedAttribute$</Attribute>
55+
</Exclude>
56+
</Attributes>
57+
</CodeCoverage>
58+
</Configuration>"
59+
];
60+
61+
yield return
62+
[
63+
"CoverageRewriteTests.Rewritten.CoverletFilterBySourceFile",
64+
@"<?xml version=""1.0"" encoding=""utf-8""?>
65+
<Configuration>
66+
<!-- Coverlet configuration -->
67+
<ExcludeByFile>**/CoverageRewriterAssembly/Class1.cs</ExcludeByFile>
68+
</Configuration>"
69+
];
70+
71+
yield return
72+
[
73+
"CoverageRewriteTests.Rewritten.NetFrameworkSettingsFilterBySourceFile",
74+
@"<?xml version=""1.0"" encoding=""utf-8""?>
75+
<Configuration>
76+
<!-- Old .NET Framework configuration -->
77+
<CodeCoverage>
78+
<Sources>
79+
<Exclude>
80+
<Source>.*/CoverageRewriterAssembly/Class1.cs$</Source>
81+
</Exclude>
82+
</Sources>
83+
</CodeCoverage>
84+
</Configuration>"
85+
];
86+
87+
yield return
88+
[
89+
"CoverageRewriteTests.Rewritten.CoverletFilterByAssemblyType",
90+
@"<?xml version=""1.0"" encoding=""utf-8""?>
91+
<Configuration>
92+
<!-- Coverlet configuration -->
93+
<Exclude>[*]CoverageRewriterAssembly.Class1</Exclude>
94+
</Configuration>"
95+
];
96+
97+
yield return
98+
[
99+
"CoverageRewriteTests.Rewritten.CoverletFilterByAssemblyAttribute",
100+
@"<?xml version=""1.0"" encoding=""utf-8""?>
101+
<Configuration>
102+
<!-- Coverlet configuration -->
103+
<ExcludeByAttribute>AssemblyFileVersionAttribute</ExcludeByAttribute>
104+
</Configuration>"
105+
];
106+
}
107+
108+
public static IEnumerable<object[]> CoverageModeData()
109+
{
110+
yield return ["LineExecution"];
111+
yield return ["LineCallCount"];
112+
}
113+
114+
public static IEnumerable<object[]> FiltersByCoverageModeData()
115+
{
116+
foreach (var filter in FiltersData())
117+
{
118+
foreach (var coverageMode in CoverageModeData())
119+
{
120+
yield return filter.Concat(coverageMode).ToArray();
121+
}
122+
}
123+
}
124+
125+
#if NETCOREAPP2_1
126+
// Due to a BCL Bug in .NET Core 2.1 [DirectoryInfo.GetDirectories()] triggered by this test, we need to skip the test in some cases
127+
[SkippableTheory(typeof(NullReferenceException), typeof(IndexOutOfRangeException))]
128+
#else
129+
[SkippableTheory]
130+
#endif
131+
[MemberData(nameof(CoverageModeData))]
132+
public async Task NoFilter(string coverageMode)
133+
{
134+
var tempFileName = GetTempFile();
135+
136+
// Verify settings
137+
var settings = new DecompilerSettings();
138+
139+
// Decompile original code
140+
var decompilerOriginalCode = new CSharpDecompiler(tempFileName, settings);
141+
var originalCode = decompilerOriginalCode.DecompileWholeModuleAsString();
142+
143+
var originalVerifySettings = new VerifySettings();
144+
originalVerifySettings.DisableRequireUniquePrefix();
145+
originalVerifySettings.UseFileName("CoverageRewriteTests.Original");
146+
await Verifier.Verify(originalCode, originalVerifySettings);
147+
148+
// Apply rewriter process
149+
var covSettings = new CoverageSettings(null, string.Empty);
150+
covSettings.TestOptimization.SetCodeCoverageMode(coverageMode);
151+
var asmProcessor = new AssemblyProcessor(tempFileName, covSettings);
152+
asmProcessor.Process();
153+
154+
// Decompile rewritten code
155+
var decompilerTransCode = new CSharpDecompiler(tempFileName, settings);
156+
var transCode = decompilerTransCode.DecompileWholeModuleAsString();
157+
158+
var transVerifySettings = new VerifySettings();
159+
transVerifySettings.UseFileName($"CoverageRewriteTests.Rewritten.{coverageMode}");
160+
await Verifier.Verify(transCode, transVerifySettings);
161+
}
162+
163+
#if NETCOREAPP2_1
164+
// Due to a BCL Bug in .NET Core 2.1 [DirectoryInfo.GetDirectories()] triggered by this test, we need to skip the test in some cases
165+
[SkippableTheory(typeof(NullReferenceException), typeof(IndexOutOfRangeException))]
166+
#else
167+
[SkippableTheory]
168+
#endif
169+
[MemberData(nameof(FiltersByCoverageModeData))]
170+
public async Task WithFilters(string targetSnapshot, string configurationSettingsXml, string coverageMode)
171+
{
172+
var tempFileName = GetTempFile();
173+
174+
// Verify settings
175+
var settings = new DecompilerSettings();
176+
177+
var configurationElement = new XmlDocument();
178+
configurationElement.LoadXml(configurationSettingsXml);
179+
180+
var covSettings = new CoverageSettings(configurationElement.DocumentElement, string.Empty);
181+
covSettings.TestOptimization.SetCodeCoverageMode(coverageMode);
182+
var asmProcessor = new AssemblyProcessor(tempFileName, covSettings);
183+
asmProcessor.Process();
184+
185+
// Decompile rewritten code
186+
var decompilerTransCode = new CSharpDecompiler(tempFileName, settings);
187+
var transCode = decompilerTransCode.DecompileWholeModuleAsString();
188+
189+
var transVerifySettings = new VerifySettings();
190+
transVerifySettings.UseFileName($"{targetSnapshot}.{coverageMode}");
191+
await Verifier.Verify(transCode, transVerifySettings);
192+
}
193+
194+
private string GetTempFile()
195+
{
196+
const string assemblyFileName = "CoverageRewriterAssembly.dll";
197+
198+
// Copy assembly and symbols to a temp folder (we need to rewrite it)
199+
var tempFileName = Path.GetFileNameWithoutExtension(Path.GetTempFileName()) + ".dll";
200+
File.Copy(assemblyFileName, tempFileName, true);
201+
File.Copy(Path.GetFileNameWithoutExtension(assemblyFileName) + ".pdb", Path.GetFileNameWithoutExtension(tempFileName) + ".pdb", true);
202+
return tempFileName;
203+
}
204+
}

tracer/test/Datadog.Trace.Tools.Runner.Tests/Datadog.Trace.Tools.Runner.Tests.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,10 @@
3131
</ItemGroup>
3232

3333
<ItemGroup>
34+
<PackageReference Include="Verify.Xunit" Version="14.13.1" />
3435
<PackageReference Include="DiffPlex" Version="1.7.2" />
3536
</ItemGroup>
36-
37+
3738
<ItemGroup>
3839
<None Update="datadogConfig.json">
3940
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>

0 commit comments

Comments
 (0)