Skip to content

Commit a79f104

Browse files
authored
feat(tests): fix code fixer for xUnit migration code fixer .All().Satisfy() (#3786)
* feat(tests): fix code fixer for xUnit migration code fixer .All().Satisfy() * feat(tests): update xUnit assertion conversion for All() and improve lambda handling * Add test output for TUnit.Assertions.Analyzers.CodeFixers.Tests with multiple failures
1 parent 60e22b4 commit a79f104

File tree

3 files changed

+347
-10
lines changed

3 files changed

+347
-10
lines changed

TUnit.Assertions.Analyzers.CodeFixers.Tests/Verifiers/CSharpCodeFixVerifier`2.cs

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
using Microsoft.CodeAnalysis.CSharp.Testing;
55
using Microsoft.CodeAnalysis.Diagnostics;
66
using Microsoft.CodeAnalysis.Testing;
7+
using TUnit.Assertions;
78
using TUnit.Assertions.Analyzers.CodeFixers.Tests.Extensions;
9+
using TUnit.Core;
810

911
namespace TUnit.Assertions.Analyzers.CodeFixers.Tests.Verifiers;
1012

@@ -41,12 +43,19 @@ public static async Task VerifyAnalyzerAsync(
4143
params DiagnosticResult[] expected
4244
)
4345
{
46+
var referenceAssemblies = GetReferenceAssemblies();
47+
48+
// Only add xunit package for XUnitAssertionAnalyzer
49+
if (typeof(TAnalyzer).Name == "XUnitAssertionAnalyzer")
50+
{
51+
referenceAssemblies = referenceAssemblies.AddPackages([new PackageIdentity("xunit.v3.assert", "3.2.0")]);
52+
}
53+
4454
var test = new Test
4555
{
4656
TestCode = source.NormalizeLineEndings(),
4757
CodeActionValidationMode = CodeActionValidationMode.SemanticStructure,
48-
ReferenceAssemblies = GetReferenceAssemblies()
49-
.AddPackages([new PackageIdentity("xunit.v3.assert", "2.0.0")]),
58+
ReferenceAssemblies = referenceAssemblies,
5059
TestState =
5160
{
5261
AdditionalReferences =
@@ -76,12 +85,19 @@ public static async Task VerifyCodeFixAsync(
7685
[StringSyntax("c#-test")] string fixedSource
7786
)
7887
{
88+
var referenceAssemblies = GetReferenceAssemblies();
89+
90+
// Only add xunit package for XUnitAssertionAnalyzer
91+
if (typeof(TAnalyzer).Name == "XUnitAssertionAnalyzer")
92+
{
93+
referenceAssemblies = referenceAssemblies.AddPackages([new PackageIdentity("xunit.v3.assert", "3.2.0")]);
94+
}
95+
7996
var test = new Test
8097
{
8198
TestCode = source.NormalizeLineEndings(),
8299
FixedCode = fixedSource.NormalizeLineEndings(),
83-
ReferenceAssemblies = GetReferenceAssemblies()
84-
.AddPackages([new PackageIdentity("xunit.v3.assert", "2.0.0")]),
100+
ReferenceAssemblies = referenceAssemblies,
85101
TestState =
86102
{
87103
AdditionalReferences =

TUnit.Assertions.Analyzers.CodeFixers.Tests/XUnitAssertionCodeFixProviderTests.cs

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,4 +150,73 @@ public void MyTest()
150150
"""
151151
);
152152
}
153+
154+
[Test]
155+
public async Task Xunit_All_Converts_To_AssertMultiple_WithForeach()
156+
{
157+
await Verifier
158+
.VerifyCodeFixAsync(
159+
"""
160+
using System.Threading.Tasks;
161+
162+
public class MyClass
163+
{
164+
public void MyTest()
165+
{
166+
var users = new[]
167+
{
168+
new User { Name = "Alice", Age = 25 },
169+
new User { Name = "Bob", Age = 30 }
170+
};
171+
172+
{|#0:Xunit.Assert.All(users, user =>
173+
{
174+
{|#1:Xunit.Assert.NotNull(user.Name)|};
175+
{|#2:Xunit.Assert.True(user.Age > 18)|};
176+
})|};
177+
}
178+
}
179+
180+
public class User
181+
{
182+
public string Name { get; init; }
183+
public int Age { get; init; }
184+
}
185+
""",
186+
[
187+
Verifier.Diagnostic(Rules.XUnitAssertion).WithLocation(0),
188+
Verifier.Diagnostic(Rules.XUnitAssertion).WithLocation(1),
189+
Verifier.Diagnostic(Rules.XUnitAssertion).WithLocation(2)
190+
],
191+
"""
192+
using System.Threading.Tasks;
193+
194+
public class MyClass
195+
{
196+
public async Task MyTest()
197+
{
198+
var users = new[]
199+
{
200+
new User { Name = "Alice", Age = 25 },
201+
new User { Name = "Bob", Age = 30 }
202+
};
203+
using (Assert.Multiple())
204+
{
205+
foreach (var user in users)
206+
{
207+
await Assert.That(user.Name).IsNotNull();
208+
await Assert.That(user.Age > 18).IsTrue();
209+
}
210+
}
211+
}
212+
}
213+
214+
public class User
215+
{
216+
public string Name { get; init; }
217+
public int Age { get; init; }
218+
}
219+
"""
220+
);
221+
}
153222
}

0 commit comments

Comments
 (0)