Skip to content

Commit 92eedfb

Browse files
authored
Merge pull request #977 from nunit/fix/correct-trailing-trivia-on-multi-line
fix: Remove trailing trivia to support multi-line actual parameter
2 parents ad5521b + afd4fd0 commit 92eedfb

File tree

4 files changed

+50
-1
lines changed

4 files changed

+50
-1
lines changed

src/nunit.analyzers.codefixes/ConstraintUsage/BaseConditionConstraintCodeFix.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ protected virtual (ExpressionSyntax? actual, ExpressionSyntax? constraintExpress
128128

129129
var actualArgument = SyntaxFactory.Argument(actual);
130130
var actualArgumentWithCorrectTrivia = conditionNode is not null
131-
? actualArgument.WithLeadingTrivia(conditionNode.GetLeadingTrivia()) // ignore the trailing trivia, as there is a following argument
131+
? actualArgument.WithLeadingTrivia(conditionNode.GetLeadingTrivia()).WithoutTrailingTrivia() // remove the trailing trivia, as there is a following argument
132132
: actualArgument;
133133

134134
var lastOriginalArgument = assertNode.ArgumentList.Arguments.Last();

src/nunit.analyzers.tests/ConstraintsUsage/EqualConstraintUsageCodeFixTests.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -366,5 +366,20 @@ public void CodeFixMaintainsReasonableTriviaWithAllArgumentsOnSameLine([Values]
366366

367367
RoslynAssert.CodeFix(analyzer, fix, equalConstraintDiagnostic, code, fixedCode);
368368
}
369+
370+
[Test]
371+
public void CodeFixMaintainsReasonableTriviaWhenActualArgumentIsMultipleLines()
372+
{
373+
var code = TestUtility.WrapInTestMethod($@"
374+
var someVeryLongActualVariableName = ""abc"";
375+
Assert.That(↓someVeryLongActualVariableName
376+
.Equals(""abc""), Is.True);");
377+
378+
var fixedCode = TestUtility.WrapInTestMethod($@"
379+
var someVeryLongActualVariableName = ""abc"";
380+
Assert.That(someVeryLongActualVariableName, Is.EqualTo(""abc""));");
381+
382+
RoslynAssert.CodeFix(analyzer, fix, equalConstraintDiagnostic, code, fixedCode);
383+
}
369384
}
370385
}

src/nunit.analyzers.tests/ConstraintsUsage/SomeItemsConstraintUsageCodeFixTests.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,5 +156,20 @@ public void CodeFixMaintainsReasonableTriviaWithAllArgumentsOnSameLine([Values]
156156

157157
RoslynAssert.CodeFix(analyzer, fix, doesNotContainDiagnostic, testCode, fixedCode);
158158
}
159+
160+
[Test]
161+
public void CodeFixMaintainsReasonableTriviaWhenActualArgumentIsMultipleLines()
162+
{
163+
var testCode = TestUtility.WrapInTestMethod($@"
164+
ClassicAssert.IsFalse(↓new[] {{ 1, 2, 3 }}
165+
.Contains(1), ""message"");",
166+
additionalUsings: "using System.Linq;");
167+
168+
var fixedCode = TestUtility.WrapInTestMethod($@"
169+
Assert.That(new[] {{ 1, 2, 3 }}, Does.Not.Contain(1), ""message"");",
170+
additionalUsings: "using System.Linq;");
171+
172+
RoslynAssert.CodeFix(analyzer, fix, doesNotContainDiagnostic, testCode, fixedCode);
173+
}
159174
}
160175
}

src/nunit.analyzers.tests/ConstraintsUsage/StringConstraintUsageCodeFixTests.cs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,5 +178,24 @@ public void CodeFixMaintainsReasonableTriviaWithAllArgumentsOnSameLine(
178178

179179
RoslynAssert.CodeFix(analyzer, fix, ExpectedDiagnostic.Create(analyzerId), code, fixedCode);
180180
}
181+
182+
[Test]
183+
public void CodeFixMaintainsReasonableTriviaWhenActualArgumentIsMultipleLines()
184+
{
185+
var code = TestUtility.WrapInTestMethod($@"
186+
Assert.That(↓SomeReallyLongMethodName()
187+
.Contains(""Lorem ipsum dolor sit amet, consectetur adipiscing elit,""),
188+
Is.True);
189+
190+
string SomeReallyLongMethodName() => ""Long string"";");
191+
192+
var fixedCode = TestUtility.WrapInTestMethod($@"
193+
Assert.That(SomeReallyLongMethodName(),
194+
Does.Contain(""Lorem ipsum dolor sit amet, consectetur adipiscing elit,""));
195+
196+
string SomeReallyLongMethodName() => ""Long string"";");
197+
198+
RoslynAssert.CodeFix(analyzer, fix, ExpectedDiagnostic.Create(AnalyzerIdentifiers.StringContainsConstraintUsage), code, fixedCode);
199+
}
181200
}
182201
}

0 commit comments

Comments
 (0)