Skip to content

Commit 104442f

Browse files
authored
Fix missing parenthesis after applying XUnit code fixes (#248)
* Fix missing parenthesis after applying XUnit code fixes * Update Expressions.cs * Fix generic tests
1 parent 1608c95 commit 104442f

File tree

8 files changed

+16
-17
lines changed

8 files changed

+16
-17
lines changed

src/FluentAssertions.Analyzers.Tests/DiagnosticVerifier.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ private static void VerifyFix(string language, DiagnosticAnalyzer analyzer, Code
111111

112112
//after applying all of the code fixes, compare the resulting string to the inputted one
113113
var actual = GetStringFromDocument(document);
114-
;
114+
actual.Should().Be(newSource);
115115
}
116116

117117
/// <summary>

src/FluentAssertions.Analyzers.Tests/Tips/XunitTests.cs

+6
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,12 @@ public class XunitTests
2929
[DataRow(
3030
/* oldAssertion: */ "Assert.True(bool.Parse(\"true\"), \"because it's possible\");",
3131
/* newAssertion: */ "bool.Parse(\"true\").Should().BeTrue(\"because it's possible\");")]
32+
[DataRow(
33+
/* oldAssertion: */ "Assert.True(!actual);",
34+
/* newAssertion: */ "(!actual).Should().BeTrue();")]
35+
[DataRow(
36+
/* oldAssertion: */ "Assert.True(actual == false);",
37+
/* newAssertion: */ "(actual == false).Should().BeTrue();")]
3238
[Implemented]
3339
public void AssertTrue_TestCodeFix(string oldAssertion, string newAssertion)
3440
=> VerifyCSharpFix<AssertTrueCodeFix, AssertTrueAnalyzer>("bool actual", oldAssertion, newAssertion);

src/FluentAssertions.Analyzers/Tips/Xunit/AssertIsAssignableFrom.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ protected override ExpressionSyntax GetNewExpression(
6060
switch (properties.VisitorName)
6161
{
6262
case nameof(AssertIsAssignableFromAnalyzer.AssertIsAssignableFromGenericTypeSyntaxVisitor):
63-
return RenameMethodAndReorderActualExpectedAndReplaceWithSubjectShould(expression, "IsAssignableFrom", "BeAssignableTo");
63+
return RenameMethodAndReorderActualExpectedAndReplaceWithSubjectShould(expression, "IsAssignableFrom", "BeAssignableTo", argumentIndex: 0);
6464
case nameof(AssertIsAssignableFromAnalyzer.AssertIsAssignableFromTypeSyntaxVisitor):
6565
var newExpression = RenameMethodAndReorderActualExpectedAndReplaceWithSubjectShould(expression, "IsAssignableFrom", "BeAssignableTo");
6666
return ReplaceTypeOfArgumentWithGenericTypeIfExists(newExpression, "BeAssignableTo");

src/FluentAssertions.Analyzers/Tips/Xunit/AssertIsNotAssignableFrom.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ protected override ExpressionSyntax GetNewExpression(
6060
switch (properties.VisitorName)
6161
{
6262
case nameof(AssertIsNotAssignableFromAnalyzer.AssertIsNotAssignableFromGenericTypeSyntaxVisitor):
63-
return RenameMethodAndReorderActualExpectedAndReplaceWithSubjectShould(expression, "IsNotAssignableFrom", "NotBeAssignableTo");
63+
return RenameMethodAndReorderActualExpectedAndReplaceWithSubjectShould(expression, "IsNotAssignableFrom", "NotBeAssignableTo", argumentIndex: 0);
6464
case nameof(AssertIsNotAssignableFromAnalyzer.AssertIsNotAssignableFromTypeSyntaxVisitor):
6565
var newExpression = RenameMethodAndReorderActualExpectedAndReplaceWithSubjectShould(expression, "IsNotAssignableFrom", "NotBeAssignableTo");
6666
return ReplaceTypeOfArgumentWithGenericTypeIfExists(newExpression, "NotBeAssignableTo");

src/FluentAssertions.Analyzers/Tips/Xunit/AssertIsNotType.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ protected override ExpressionSyntax GetNewExpression(
6060
switch (properties.VisitorName)
6161
{
6262
case nameof(AssertIsNotTypeAnalyzer.AssertIsNotTypeGenericTypeSyntaxVisitor):
63-
return RenameMethodAndReorderActualExpectedAndReplaceWithSubjectShould(expression, "IsNotType", "NotBeOfType");
63+
return RenameMethodAndReorderActualExpectedAndReplaceWithSubjectShould(expression, "IsNotType", "NotBeOfType", argumentIndex: 0);
6464
case nameof(AssertIsNotTypeAnalyzer.AssertIsNotTypeTypeSyntaxVisitor):
6565
var newExpression = RenameMethodAndReorderActualExpectedAndReplaceWithSubjectShould(expression, "IsNotType", "NotBeOfType");
6666
return ReplaceTypeOfArgumentWithGenericTypeIfExists(newExpression, "NotBeOfType");

src/FluentAssertions.Analyzers/Tips/Xunit/AssertIsType.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ protected override ExpressionSyntax GetNewExpression(
6060
switch (properties.VisitorName)
6161
{
6262
case nameof(AssertIsTypeAnalyzer.AssertIsTypeGenericTypeSyntaxVisitor):
63-
return RenameMethodAndReorderActualExpectedAndReplaceWithSubjectShould(expression, "IsType", "BeOfType");
63+
return RenameMethodAndReorderActualExpectedAndReplaceWithSubjectShould(expression, "IsType", "BeOfType", argumentIndex: 0);
6464
case nameof(AssertIsTypeAnalyzer.AssertIsTypeTypeSyntaxVisitor):
6565
var newExpression = RenameMethodAndReorderActualExpectedAndReplaceWithSubjectShould(expression, "IsType", "BeOfType");
6666
return ReplaceTypeOfArgumentWithGenericTypeIfExists(newExpression, "BeOfType");

src/FluentAssertions.Analyzers/Utilities/Expressions.cs

+2-9
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using Microsoft.CodeAnalysis;
22
using Microsoft.CodeAnalysis.CSharp;
33
using Microsoft.CodeAnalysis.CSharp.Syntax;
4+
using Microsoft.CodeAnalysis.Simplification;
45
using SF = Microsoft.CodeAnalysis.CSharp.SyntaxFactory;
56

67
namespace FluentAssertions.Analyzers;
@@ -26,16 +27,8 @@ public static ArgumentSyntax OptionsUsing(ArgumentSyntax comparer)
2627

2728
public static InvocationExpressionSyntax SubjectShould(ExpressionSyntax subject)
2829
{
29-
if (subject.IsKind(SyntaxKind.CastExpression))
30-
{
31-
return SF.InvocationExpression(
32-
SF.MemberAccessExpression(SyntaxKind.SimpleMemberAccessExpression, SF.ParenthesizedExpression(subject), SF.IdentifierName("Should")),
33-
SF.ArgumentList()
34-
);
35-
}
36-
3730
return SF.InvocationExpression(
38-
SF.MemberAccessExpression(SyntaxKind.SimpleMemberAccessExpression, subject, SF.IdentifierName("Should")),
31+
SF.MemberAccessExpression(SyntaxKind.SimpleMemberAccessExpression, SF.ParenthesizedExpression(subject).WithAdditionalAnnotations(Simplifier.Annotation), SF.IdentifierName("Should")),
3932
SF.ArgumentList()
4033
);
4134
}

src/FluentAssertions.Analyzers/Utilities/TestingLibraryCodeFixBase.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,16 @@ protected ExpressionSyntax RenameMethodAndReplaceWithSubjectShould(ExpressionSyn
1717
return ReplaceIdentifier(newExpression, AssertClassName, Expressions.SubjectShould(rename.Argument.Expression));
1818
}
1919

20-
protected ExpressionSyntax RenameMethodAndReorderActualExpectedAndReplaceWithSubjectShould(ExpressionSyntax expression, string oldName, string newName)
20+
protected ExpressionSyntax RenameMethodAndReorderActualExpectedAndReplaceWithSubjectShould(ExpressionSyntax expression, string oldName, string newName, int argumentIndex = 1)
2121
{
2222
var rename = NodeReplacement.RenameAndExtractArguments(oldName, newName);
2323
var newExpression = GetNewExpression(expression, rename);
2424

25-
var actual = rename.Arguments[1];
25+
var actual = rename.Arguments[argumentIndex];
2626

2727
newExpression = ReplaceIdentifier(newExpression, AssertClassName, Expressions.SubjectShould(actual.Expression));
2828

29-
return GetNewExpression(newExpression, NodeReplacement.WithArguments(newName, rename.Arguments.RemoveAt(1)));
29+
return GetNewExpression(newExpression, NodeReplacement.WithArguments(newName, rename.Arguments.RemoveAt(argumentIndex)));
3030
}
3131

3232
protected ExpressionSyntax ReplaceTypeOfArgumentWithGenericTypeIfExists(ExpressionSyntax expression, string method)

0 commit comments

Comments
 (0)