From 4dd7121970a6b916245059d74b862f2102d990cd Mon Sep 17 00:00:00 2001 From: Meir Blachman Date: Fri, 31 May 2024 18:57:00 +0300 Subject: [PATCH] feat: add nunit Assert.That Is.AtMot & Is.AtLeast --- docs/Nunit3Analyzer.md | 8 +++++++ docs/Nunit4Analyzer.md | 10 +++++++++ .../Nunit3AnalyzerTests.cs | 22 +++++++++++++++++++ .../Nunit4AnalyzerTests.cs | 22 +++++++++++++++++++ .../Tips/NunitTests.cs | 16 ++++++++++++++ .../Tips/NunitCodeFixProvider.cs | 6 +++-- 6 files changed, 82 insertions(+), 2 deletions(-) diff --git a/docs/Nunit3Analyzer.md b/docs/Nunit3Analyzer.md index 10a7f93..40c94cb 100644 --- a/docs/Nunit3Analyzer.md +++ b/docs/Nunit3Analyzer.md @@ -430,6 +430,7 @@ var number = 2; // old assertion: Assert.GreaterOrEqual(number, 1); Assert.That(number, Is.GreaterThanOrEqualTo(1)); +Assert.That(number, Is.AtLeast(1)); // new assertion: number.Should().BeGreaterOrEqualTo(1); @@ -447,6 +448,9 @@ Assert.GreaterOrEqual(number, 2); /* fail message: Expected: greater than or e Assert.That(number, Is.GreaterThanOrEqualTo(2)); /* fail message: Expected: greater than or equal to 2 But was: 1 */ +Assert.That(number, Is.AtLeast(2)); /* fail message: Expected: greater than or equal to 2 + But was: 1 + */ // new assertion: number.Should().BeGreaterOrEqualTo(2); /* fail message: Expected number to be greater than or equal to 2, but found 1. */ @@ -492,6 +496,7 @@ var number = 1; // old assertion: Assert.LessOrEqual(number, 2); Assert.That(number, Is.LessThanOrEqualTo(2)); +Assert.That(number, Is.AtMost(2)); // new assertion: number.Should().BeLessOrEqualTo(2); @@ -509,6 +514,9 @@ Assert.LessOrEqual(number, 1); /* fail message: Expected: less than or equal t Assert.That(number, Is.LessThanOrEqualTo(1)); /* fail message: Expected: less than or equal to 1 But was: 2 */ +Assert.That(number, Is.AtMost(1)); /* fail message: Expected: less than or equal to 1 + But was: 2 + */ // new assertion: number.Should().BeLessOrEqualTo(1); /* fail message: Expected number to be less than or equal to 1, but found 2. */ diff --git a/docs/Nunit4Analyzer.md b/docs/Nunit4Analyzer.md index 1d5c04e..101f196 100644 --- a/docs/Nunit4Analyzer.md +++ b/docs/Nunit4Analyzer.md @@ -463,6 +463,7 @@ var number = 2; // old assertion: ClassicAssert.GreaterOrEqual(number, 1); Assert.That(number, Is.GreaterThanOrEqualTo(1)); +Assert.That(number, Is.AtLeast(1)); // new assertion: number.Should().BeGreaterOrEqualTo(1); @@ -482,6 +483,10 @@ Assert.That(number, Is.GreaterThanOrEqualTo(2)); /* fail message: Assert.That( Expected: greater than or equal to 2 But was: 1 */ +Assert.That(number, Is.AtLeast(2)); /* fail message: Assert.That(number, Is.AtLeast(2)) + Expected: greater than or equal to 2 + But was: 1 + */ // new assertion: number.Should().BeGreaterOrEqualTo(2); /* fail message: Expected number to be greater than or equal to 2, but found 1. */ @@ -529,6 +534,7 @@ var number = 1; // old assertion: ClassicAssert.LessOrEqual(number, 2); Assert.That(number, Is.LessThanOrEqualTo(2)); +Assert.That(number, Is.AtMost(2)); // new assertion: number.Should().BeLessOrEqualTo(2); @@ -548,6 +554,10 @@ Assert.That(number, Is.LessThanOrEqualTo(1)); /* fail message: Assert.That(num Expected: less than or equal to 1 But was: 2 */ +Assert.That(number, Is.AtMost(1)); /* fail message: Assert.That(number, Is.AtMost(1)) + Expected: less than or equal to 1 + But was: 2 + */ // new assertion: number.Should().BeLessOrEqualTo(1); /* fail message: Expected number to be less than or equal to 1, but found 2. */ diff --git a/src/FluentAssertions.Analyzers.FluentAssertionAnalyzerDocs.Nunit3/Nunit3AnalyzerTests.cs b/src/FluentAssertions.Analyzers.FluentAssertionAnalyzerDocs.Nunit3/Nunit3AnalyzerTests.cs index c04a5d1..78b17b7 100644 --- a/src/FluentAssertions.Analyzers.FluentAssertionAnalyzerDocs.Nunit3/Nunit3AnalyzerTests.cs +++ b/src/FluentAssertions.Analyzers.FluentAssertionAnalyzerDocs.Nunit3/Nunit3AnalyzerTests.cs @@ -627,6 +627,7 @@ public void AssertGreaterOrEqual() // old assertion: Assert.GreaterOrEqual(number, 1); Assert.That(number, Is.GreaterThanOrEqualTo(1)); + Assert.That(number, Is.AtLeast(1)); // new assertion: number.Should().BeGreaterOrEqualTo(1); @@ -651,6 +652,16 @@ public void AssertGreaterOrEqual_Failure_OldAssertion_1() // old assertion: Assert.That(number, Is.GreaterThanOrEqualTo(2)); } + + [Test, ExpectedAssertionException] + public void AssertGreaterOrEqual_Failure_OldAssertion_2() + { + // arrange + var number = 1; + + // old assertion: + Assert.That(number, Is.AtLeast(2)); + } [Test, ExpectedAssertionException] public void AssertGreaterOrEqual_Failure_NewAssertion() @@ -715,6 +726,7 @@ public void AssertLessOrEqual() // old assertion: Assert.LessOrEqual(number, 2); Assert.That(number, Is.LessThanOrEqualTo(2)); + Assert.That(number, Is.AtMost(2)); // new assertion: number.Should().BeLessOrEqualTo(2); @@ -740,6 +752,16 @@ public void AssertLessOrEqual_Failure_OldAssertion_1() Assert.That(number, Is.LessThanOrEqualTo(1)); } + [Test, ExpectedAssertionException] + public void AssertLessOrEqual_Failure_OldAssertion_2() + { + // arrange + var number = 2; + + // old assertion: + Assert.That(number, Is.AtMost(1)); + } + [Test, ExpectedAssertionException] public void AssertLessOrEqual_Failure_NewAssertion() { diff --git a/src/FluentAssertions.Analyzers.FluentAssertionAnalyzerDocs.Nunit4/Nunit4AnalyzerTests.cs b/src/FluentAssertions.Analyzers.FluentAssertionAnalyzerDocs.Nunit4/Nunit4AnalyzerTests.cs index 5d02dae..b68af0e 100644 --- a/src/FluentAssertions.Analyzers.FluentAssertionAnalyzerDocs.Nunit4/Nunit4AnalyzerTests.cs +++ b/src/FluentAssertions.Analyzers.FluentAssertionAnalyzerDocs.Nunit4/Nunit4AnalyzerTests.cs @@ -638,6 +638,7 @@ public void AssertGreaterOrEqual() // old assertion: ClassicAssert.GreaterOrEqual(number, 1); Assert.That(number, Is.GreaterThanOrEqualTo(1)); + Assert.That(number, Is.AtLeast(1)); // new assertion: number.Should().BeGreaterOrEqualTo(1); @@ -662,6 +663,16 @@ public void AssertGreaterOrEqual_Failure_OldAssertion_1() // old assertion: Assert.That(number, Is.GreaterThanOrEqualTo(2)); } + + [Test, ExpectedAssertionException] + public void AssertGreaterOrEqual_Failure_OldAssertion_2() + { + // arrange + var number = 1; + + // old assertion: + Assert.That(number, Is.AtLeast(2)); + } [Test, ExpectedAssertionException] public void AssertGreaterOrEqual_Failure_NewAssertion() @@ -726,6 +737,7 @@ public void AssertLessOrEqual() // old assertion: ClassicAssert.LessOrEqual(number, 2); Assert.That(number, Is.LessThanOrEqualTo(2)); + Assert.That(number, Is.AtMost(2)); // new assertion: number.Should().BeLessOrEqualTo(2); @@ -751,6 +763,16 @@ public void AssertLessOrEqual_Failure_OldAssertion_1() Assert.That(number, Is.LessThanOrEqualTo(1)); } + [Test, ExpectedAssertionException] + public void AssertLessOrEqual_Failure_OldAssertion_2() + { + // arrange + var number = 2; + + // old assertion: + Assert.That(number, Is.AtMost(1)); + } + [Test, ExpectedAssertionException] public void AssertLessOrEqual_Failure_NewAssertion() { diff --git a/src/FluentAssertions.Analyzers.Tests/Tips/NunitTests.cs b/src/FluentAssertions.Analyzers.Tests/Tips/NunitTests.cs index 4e4588d..54431d1 100644 --- a/src/FluentAssertions.Analyzers.Tests/Tips/NunitTests.cs +++ b/src/FluentAssertions.Analyzers.Tests/Tips/NunitTests.cs @@ -730,6 +730,7 @@ public void Nunit4_AssertGreater_TestCodeFix(string oldAssertion, string newAsse [DataTestMethod] [AssertionDiagnostic("Assert.GreaterOrEqual(arg1, arg2{0});")] [AssertionDiagnostic("Assert.That(arg1, Is.GreaterThanOrEqualTo(arg2){0});")] + [AssertionDiagnostic("Assert.That(arg1, Is.AtLeast(arg2){0});")] [Implemented] public void Nunit3_AssertGreaterOrEqual_TestAnalyzer(string assertion) { @@ -742,6 +743,7 @@ public void Nunit3_AssertGreaterOrEqual_TestAnalyzer(string assertion) [DataTestMethod] [AssertionDiagnostic("ClassicAssert.GreaterOrEqual(arg1, arg2{0});")] [AssertionDiagnostic("Assert.That(arg1, Is.GreaterThanOrEqualTo(arg2));")] + [AssertionDiagnostic("Assert.That(arg1, Is.AtLeast(arg2));")] [Implemented] public void Nunit4_AssertGreaterOrEqual_TestAnalyzer(string assertion) { @@ -758,6 +760,9 @@ public void Nunit4_AssertGreaterOrEqual_TestAnalyzer(string assertion) [AssertionCodeFix( oldAssertion: "Assert.That(arg1, Is.GreaterThanOrEqualTo(arg2){0});", newAssertion: "arg1.Should().BeGreaterOrEqualTo(arg2{0});")] + [AssertionCodeFix( + oldAssertion: "Assert.That(arg1, Is.AtLeast(arg2){0});", + newAssertion: "arg1.Should().BeGreaterOrEqualTo(arg2{0});")] [Implemented] public void Nunit3_AssertGreaterOrEqual_TestCodeFix(string oldAssertion, string newAssertion) { @@ -774,6 +779,9 @@ public void Nunit3_AssertGreaterOrEqual_TestCodeFix(string oldAssertion, string [AssertionCodeFix( oldAssertion: "Assert.That(arg1, Is.GreaterThanOrEqualTo(arg2));", newAssertion: "arg1.Should().BeGreaterOrEqualTo(arg2);")] + [AssertionCodeFix( + oldAssertion: "Assert.That(arg1, Is.AtLeast(arg2));", + newAssertion: "arg1.Should().BeGreaterOrEqualTo(arg2);")] [Implemented] public void Nunit4_AssertGreaterOrEqual_TestCodeFix(string oldAssertion, string newAssertion) { @@ -842,6 +850,7 @@ public void Nunit4_AssertLess_TestCodeFix(string oldAssertion, string newAsserti [DataTestMethod] [AssertionDiagnostic("Assert.LessOrEqual(arg1, arg2{0});")] [AssertionDiagnostic("Assert.That(arg1, Is.LessThanOrEqualTo(arg2){0});")] + [AssertionDiagnostic("Assert.That(arg1, Is.AtMost(arg2){0});")] [Implemented] public void Nunit3_AssertLessOrEqual_TestAnalyzer(string assertion) { @@ -854,6 +863,7 @@ public void Nunit3_AssertLessOrEqual_TestAnalyzer(string assertion) [DataTestMethod] [AssertionDiagnostic("ClassicAssert.LessOrEqual(arg1, arg2{0});")] [AssertionDiagnostic("Assert.That(arg1, Is.LessThanOrEqualTo(arg2));")] + [AssertionDiagnostic("Assert.That(arg1, Is.AtMost(arg2));")] [Implemented] public void Nunit4_AssertLessOrEqual_TestAnalyzer(string assertion) { @@ -870,6 +880,9 @@ public void Nunit4_AssertLessOrEqual_TestAnalyzer(string assertion) [AssertionCodeFix( oldAssertion: "Assert.That(arg1, Is.LessThanOrEqualTo(arg2){0});", newAssertion: "arg1.Should().BeLessOrEqualTo(arg2{0});")] + [AssertionCodeFix( + oldAssertion: "Assert.That(arg1, Is.AtMost(arg2){0});", + newAssertion: "arg1.Should().BeLessOrEqualTo(arg2{0});")] [Implemented] public void Nunit3_AssertLessOrEqual_TestCodeFix(string oldAssertion, string newAssertion) { @@ -886,6 +899,9 @@ public void Nunit3_AssertLessOrEqual_TestCodeFix(string oldAssertion, string new [AssertionCodeFix( oldAssertion: "Assert.That(arg1, Is.LessThanOrEqualTo(arg2));", newAssertion: "arg1.Should().BeLessOrEqualTo(arg2);")] + [AssertionCodeFix( + oldAssertion: "Assert.That(arg1, Is.AtMost(arg2));", + newAssertion: "arg1.Should().BeLessOrEqualTo(arg2);")] [Implemented] public void Nunit4_AssertLessOrEqual_TestCodeFix(string oldAssertion, string newAssertion) { diff --git a/src/FluentAssertions.Analyzers/Tips/NunitCodeFixProvider.cs b/src/FluentAssertions.Analyzers/Tips/NunitCodeFixProvider.cs index 3545dae..34040c6 100644 --- a/src/FluentAssertions.Analyzers/Tips/NunitCodeFixProvider.cs +++ b/src/FluentAssertions.Analyzers/Tips/NunitCodeFixProvider.cs @@ -497,11 +497,13 @@ private CreateChangedDocument TryComputeFixForNunitThat(IInvocationOperation inv return rewriter.Should("NotBe", g => g.LiteralExpression(0)); else if (matcher.Is(Method("GreaterThan"), out var argument)) return rewriter.Should("BeGreaterThan", argument); - else if (matcher.Is(Method("GreaterThanOrEqualTo"), out argument)) + else if (matcher.Is(Method("GreaterThanOrEqualTo"), out argument) + || matcher.Is(Method("AtLeast"), out argument)) return rewriter.Should("BeGreaterOrEqualTo", argument); else if (matcher.Is(Method("LessThan"), out argument)) return rewriter.Should("BeLessThan", argument); - else if (matcher.Is(Method("LessThanOrEqualTo"), out argument)) + else if (matcher.Is(Method("LessThanOrEqualTo"), out argument) + || matcher.Is(Method("AtMost"), out argument)) return rewriter.Should("BeLessOrEqualTo", argument); else if (matcher.Has(Method("Member"), out argument) || matcher.Does(Method("Contain"), out argument)