From f24edcb6ddd81bd68f5095b01b86089d3a9bbbd6 Mon Sep 17 00:00:00 2001 From: tpodolak Date: Sun, 16 Jan 2022 19:31:03 +0100 Subject: [PATCH] GH-181 - code fix provider for NS5001 --- ...eceivedInReceivedInOrderCodeFixProvider.cs | 10 ++ ...eceivedInReceivedInOrderCodeFixProvider.cs | 53 ++++++++ ...eceivedInReceivedInOrderCodeFixProvider.cs | 10 ++ .../ReceivedAsExtensionMethodTests.cs | 119 ++++++++++++++++++ .../ReceivedAsOrdinaryMethodTests.cs | 119 ++++++++++++++++++ ...eceivedInReceivedInOrderCodeFixVerifier.cs | 20 +++ ...eceivedInReceivedInOrderCodeFixVerifier.cs | 10 ++ .../ReceivedAsExtensionMethodTests.cs | 101 +++++++++++++++ .../ReceivedAsOrdinaryMethodTests.cs | 101 +++++++++++++++ ...eceivedInReceivedInOrderCodeFixVerifier.cs | 20 +++ 10 files changed, 563 insertions(+) create mode 100644 src/NSubstitute.Analyzers.CSharp/CodeFixProviders/ReceivedInReceivedInOrderCodeFixProvider.cs create mode 100644 src/NSubstitute.Analyzers.Shared/CodeFixProviders/AbstractReceivedInReceivedInOrderCodeFixProvider.cs create mode 100644 src/NSubstitute.Analyzers.VisualBasic/CodeFixProviders/ReceivedInReceivedInOrderCodeFixProvider.cs create mode 100644 tests/NSubstitute.Analyzers.Tests.CSharp/CodeFixProviderTests/ReceivedInReceivedInOrderCodeFixProviderTests/ReceivedAsExtensionMethodTests.cs create mode 100644 tests/NSubstitute.Analyzers.Tests.CSharp/CodeFixProviderTests/ReceivedInReceivedInOrderCodeFixProviderTests/ReceivedAsOrdinaryMethodTests.cs create mode 100644 tests/NSubstitute.Analyzers.Tests.CSharp/CodeFixProviderTests/ReceivedInReceivedInOrderCodeFixProviderTests/ReceivedInReceivedInOrderCodeFixVerifier.cs create mode 100644 tests/NSubstitute.Analyzers.Tests.Shared/CodeFixProviders/IReceivedInReceivedInOrderCodeFixVerifier.cs create mode 100644 tests/NSubstitute.Analyzers.Tests.VisualBasic/CodeFixProvidersTests/ReceivedInReceivedInOrderCodeFixProviderTests/ReceivedAsExtensionMethodTests.cs create mode 100644 tests/NSubstitute.Analyzers.Tests.VisualBasic/CodeFixProvidersTests/ReceivedInReceivedInOrderCodeFixProviderTests/ReceivedAsOrdinaryMethodTests.cs create mode 100644 tests/NSubstitute.Analyzers.Tests.VisualBasic/CodeFixProvidersTests/ReceivedInReceivedInOrderCodeFixProviderTests/ReceivedInReceivedInOrderCodeFixVerifier.cs diff --git a/src/NSubstitute.Analyzers.CSharp/CodeFixProviders/ReceivedInReceivedInOrderCodeFixProvider.cs b/src/NSubstitute.Analyzers.CSharp/CodeFixProviders/ReceivedInReceivedInOrderCodeFixProvider.cs new file mode 100644 index 00000000..bf0ea01e --- /dev/null +++ b/src/NSubstitute.Analyzers.CSharp/CodeFixProviders/ReceivedInReceivedInOrderCodeFixProvider.cs @@ -0,0 +1,10 @@ +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CodeFixes; +using NSubstitute.Analyzers.Shared.CodeFixProviders; + +namespace NSubstitute.Analyzers.CSharp.CodeFixProviders; + +[ExportCodeFixProvider(LanguageNames.CSharp)] +internal sealed class ReceivedInReceivedInOrderCodeFixProvider : AbstractReceivedInReceivedInOrderCodeFixProvider +{ +} \ No newline at end of file diff --git a/src/NSubstitute.Analyzers.Shared/CodeFixProviders/AbstractReceivedInReceivedInOrderCodeFixProvider.cs b/src/NSubstitute.Analyzers.Shared/CodeFixProviders/AbstractReceivedInReceivedInOrderCodeFixProvider.cs new file mode 100644 index 00000000..ece0079f --- /dev/null +++ b/src/NSubstitute.Analyzers.Shared/CodeFixProviders/AbstractReceivedInReceivedInOrderCodeFixProvider.cs @@ -0,0 +1,53 @@ +using System.Collections.Immutable; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CodeActions; +using Microsoft.CodeAnalysis.CodeFixes; +using Microsoft.CodeAnalysis.Operations; +using Document = Microsoft.CodeAnalysis.Document; + +namespace NSubstitute.Analyzers.Shared.CodeFixProviders; + +internal abstract class AbstractReceivedInReceivedInOrderCodeFixProvider : CodeFixProvider +{ + public override FixAllProvider GetFixAllProvider() => WellKnownFixAllProviders.BatchFixer; + + public override ImmutableArray FixableDiagnosticIds { get; } = ImmutableArray.Create(DiagnosticIdentifiers.ReceivedUsedInReceivedInOrder); + + public override Task RegisterCodeFixesAsync(CodeFixContext context) + { + var diagnostic = context.Diagnostics.FirstOrDefault(diag => diag.Descriptor.Id == DiagnosticIdentifiers.ReceivedUsedInReceivedInOrder); + if (diagnostic != null) + { + var codeAction = CodeAction.Create("Remove redundant Received checks", ct => CreateChangedDocument(ct, context, diagnostic), nameof(AbstractReceivedInReceivedInOrderCodeFixProvider)); + context.RegisterCodeFix(codeAction, diagnostic); + } + + return Task.CompletedTask; + } + + private async Task CreateChangedDocument(CancellationToken cancellationToken, CodeFixContext context, Diagnostic diagnostic) + { + var root = await context.Document.GetSyntaxRootAsync(cancellationToken).ConfigureAwait(false); + + var invocation = root.FindNode(diagnostic.Location.SourceSpan, getInnermostNodeForTie: true); + + var semanticModel = await context.Document.GetSemanticModelAsync(cancellationToken); + if (semanticModel.GetOperation(invocation) is not IInvocationOperation invocationOperation) + { + return context.Document; + } + + var syntax = invocationOperation.Instance != null + ? invocationOperation.Instance.Syntax + : invocationOperation.Arguments.Single(arg => arg.Parameter.Ordinal == 0).Value.Syntax; + + var updatedRoot = root.ReplaceNode( + invocation, + syntax.WithTriviaFrom(invocation)); + + return context.Document.WithSyntaxRoot(updatedRoot); + } +} \ No newline at end of file diff --git a/src/NSubstitute.Analyzers.VisualBasic/CodeFixProviders/ReceivedInReceivedInOrderCodeFixProvider.cs b/src/NSubstitute.Analyzers.VisualBasic/CodeFixProviders/ReceivedInReceivedInOrderCodeFixProvider.cs new file mode 100644 index 00000000..b0897a91 --- /dev/null +++ b/src/NSubstitute.Analyzers.VisualBasic/CodeFixProviders/ReceivedInReceivedInOrderCodeFixProvider.cs @@ -0,0 +1,10 @@ +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CodeFixes; +using NSubstitute.Analyzers.Shared.CodeFixProviders; + +namespace NSubstitute.Analyzers.VisualBasic.CodeFixProviders; + +[ExportCodeFixProvider(LanguageNames.VisualBasic)] +internal sealed class ReceivedInReceivedInOrderCodeFixProvider : AbstractReceivedInReceivedInOrderCodeFixProvider +{ +} \ No newline at end of file diff --git a/tests/NSubstitute.Analyzers.Tests.CSharp/CodeFixProviderTests/ReceivedInReceivedInOrderCodeFixProviderTests/ReceivedAsExtensionMethodTests.cs b/tests/NSubstitute.Analyzers.Tests.CSharp/CodeFixProviderTests/ReceivedInReceivedInOrderCodeFixProviderTests/ReceivedAsExtensionMethodTests.cs new file mode 100644 index 00000000..dfda8dc3 --- /dev/null +++ b/tests/NSubstitute.Analyzers.Tests.CSharp/CodeFixProviderTests/ReceivedInReceivedInOrderCodeFixProviderTests/ReceivedAsExtensionMethodTests.cs @@ -0,0 +1,119 @@ +using System.Threading.Tasks; +using Xunit; + +namespace NSubstitute.Analyzers.Tests.CSharp.CodeFixProviderTests.ReceivedInReceivedInOrderCodeFixProviderTests; + +public class ReceivedAsExtensionMethodTests : ReceivedInReceivedInOrderCodeFixVerifier +{ + [Fact] + public override async Task RemovesReceivedChecks_WhenReceivedChecksHasNoArguments() + { + var oldSource = @"using NSubstitute; +using NSubstitute.ReceivedExtensions; + +namespace MyNamespace +{ + public interface IFoo + { + int Bar(); + int Bar(int x); + } + + public class FooTests + { + public void Test() + { + var substitute = NSubstitute.Substitute.For(); + Received.InOrder(() => + { + substitute.Received().Bar(); + substitute.Received().Bar(Arg.Any()); + substitute.ReceivedWithAnyArgs().Bar(Arg.Any()); + }); + } + } +}"; + + var newSource = @"using NSubstitute; +using NSubstitute.ReceivedExtensions; + +namespace MyNamespace +{ + public interface IFoo + { + int Bar(); + int Bar(int x); + } + + public class FooTests + { + public void Test() + { + var substitute = NSubstitute.Substitute.For(); + Received.InOrder(() => + { + substitute.Bar(); + substitute.Bar(Arg.Any()); + substitute.Bar(Arg.Any()); + }); + } + } +}"; + await VerifyFix(oldSource, newSource); + } + + [Fact] + public override async Task RemovesReceivedChecks_WhenReceivedChecksHasArguments() + { + var oldSource = @"using NSubstitute; +using NSubstitute.ReceivedExtensions; + +namespace MyNamespace +{ + public interface IFoo + { + int Bar(); + int Bar(int x); + } + + public class FooTests + { + public void Test() + { + var substitute = NSubstitute.Substitute.For(); + Received.InOrder(() => + { + substitute.Received(1).Bar(); + substitute.Received(1).Bar(Arg.Any()); + }); + } + } +}"; + + var newSource = @"using NSubstitute; +using NSubstitute.ReceivedExtensions; + +namespace MyNamespace +{ + public interface IFoo + { + int Bar(); + int Bar(int x); + } + + public class FooTests + { + public void Test() + { + var substitute = NSubstitute.Substitute.For(); + Received.InOrder(() => + { + substitute.Bar(); + substitute.Bar(Arg.Any()); + }); + } + } +}"; + await VerifyFix(oldSource, newSource); + } +} \ No newline at end of file diff --git a/tests/NSubstitute.Analyzers.Tests.CSharp/CodeFixProviderTests/ReceivedInReceivedInOrderCodeFixProviderTests/ReceivedAsOrdinaryMethodTests.cs b/tests/NSubstitute.Analyzers.Tests.CSharp/CodeFixProviderTests/ReceivedInReceivedInOrderCodeFixProviderTests/ReceivedAsOrdinaryMethodTests.cs new file mode 100644 index 00000000..1010e560 --- /dev/null +++ b/tests/NSubstitute.Analyzers.Tests.CSharp/CodeFixProviderTests/ReceivedInReceivedInOrderCodeFixProviderTests/ReceivedAsOrdinaryMethodTests.cs @@ -0,0 +1,119 @@ +using System.Threading.Tasks; +using Xunit; + +namespace NSubstitute.Analyzers.Tests.CSharp.CodeFixProviderTests.ReceivedInReceivedInOrderCodeFixProviderTests; + +public class ReceivedAsOrdinaryMethodTests : ReceivedInReceivedInOrderCodeFixVerifier +{ + [Fact] + public override async Task RemovesReceivedChecks_WhenReceivedChecksHasNoArguments() + { + var oldSource = @"using NSubstitute; +using NSubstitute.ReceivedExtensions; + +namespace MyNamespace +{ + public interface IFoo + { + int Bar(); + int Bar(int x); + } + + public class FooTests + { + public void Test() + { + var substitute = NSubstitute.Substitute.For(); + Received.InOrder(() => + { + SubstituteExtensions.Received(substitute).Bar(); + SubstituteExtensions.Received(substitute).Bar(Arg.Any()); + SubstituteExtensions.ReceivedWithAnyArgs(substitute).Bar(Arg.Any()); + }); + } + } +}"; + + var newSource = @"using NSubstitute; +using NSubstitute.ReceivedExtensions; + +namespace MyNamespace +{ + public interface IFoo + { + int Bar(); + int Bar(int x); + } + + public class FooTests + { + public void Test() + { + var substitute = NSubstitute.Substitute.For(); + Received.InOrder(() => + { + substitute.Bar(); + substitute.Bar(Arg.Any()); + substitute.Bar(Arg.Any()); + }); + } + } +}"; + await VerifyFix(oldSource, newSource); + } + + [Fact] + public override async Task RemovesReceivedChecks_WhenReceivedChecksHasArguments() + { + var oldSource = @"using NSubstitute; +using NSubstitute.ReceivedExtensions; + +namespace MyNamespace +{ + public interface IFoo + { + int Bar(); + int Bar(int x); + } + + public class FooTests + { + public void Test() + { + var substitute = NSubstitute.Substitute.For(); + Received.InOrder(() => + { + SubstituteExtensions.Received(substitute, 1).Bar(); + SubstituteExtensions.Received(substitute, 1).Bar(Arg.Any()); + }); + } + } +}"; + + var newSource = @"using NSubstitute; +using NSubstitute.ReceivedExtensions; + +namespace MyNamespace +{ + public interface IFoo + { + int Bar(); + int Bar(int x); + } + + public class FooTests + { + public void Test() + { + var substitute = NSubstitute.Substitute.For(); + Received.InOrder(() => + { + substitute.Bar(); + substitute.Bar(Arg.Any()); + }); + } + } +}"; + await VerifyFix(oldSource, newSource); + } +} \ No newline at end of file diff --git a/tests/NSubstitute.Analyzers.Tests.CSharp/CodeFixProviderTests/ReceivedInReceivedInOrderCodeFixProviderTests/ReceivedInReceivedInOrderCodeFixVerifier.cs b/tests/NSubstitute.Analyzers.Tests.CSharp/CodeFixProviderTests/ReceivedInReceivedInOrderCodeFixProviderTests/ReceivedInReceivedInOrderCodeFixVerifier.cs new file mode 100644 index 00000000..04ed86fe --- /dev/null +++ b/tests/NSubstitute.Analyzers.Tests.CSharp/CodeFixProviderTests/ReceivedInReceivedInOrderCodeFixProviderTests/ReceivedInReceivedInOrderCodeFixVerifier.cs @@ -0,0 +1,20 @@ +using System.Threading.Tasks; +using Microsoft.CodeAnalysis.CodeFixes; +using Microsoft.CodeAnalysis.Diagnostics; +using NSubstitute.Analyzers.CSharp.CodeFixProviders; +using NSubstitute.Analyzers.CSharp.DiagnosticAnalyzers; +using NSubstitute.Analyzers.Shared.CodeFixProviders; +using NSubstitute.Analyzers.Tests.Shared.CodeFixProviders; + +namespace NSubstitute.Analyzers.Tests.CSharp.CodeFixProviderTests.ReceivedInReceivedInOrderCodeFixProviderTests; + +public abstract class ReceivedInReceivedInOrderCodeFixVerifier : CSharpCodeFixVerifier, IReceivedInReceivedInOrderCodeFixVerifier +{ + protected override DiagnosticAnalyzer DiagnosticAnalyzer { get; } = new ReceivedInReceivedInOrderAnalyzer(); + + protected override CodeFixProvider CodeFixProvider { get; } = new ReceivedInReceivedInOrderCodeFixProvider(); + + public abstract Task RemovesReceivedChecks_WhenReceivedChecksHasNoArguments(); + + public abstract Task RemovesReceivedChecks_WhenReceivedChecksHasArguments(); +} \ No newline at end of file diff --git a/tests/NSubstitute.Analyzers.Tests.Shared/CodeFixProviders/IReceivedInReceivedInOrderCodeFixVerifier.cs b/tests/NSubstitute.Analyzers.Tests.Shared/CodeFixProviders/IReceivedInReceivedInOrderCodeFixVerifier.cs new file mode 100644 index 00000000..39b5cede --- /dev/null +++ b/tests/NSubstitute.Analyzers.Tests.Shared/CodeFixProviders/IReceivedInReceivedInOrderCodeFixVerifier.cs @@ -0,0 +1,10 @@ +using System.Threading.Tasks; + +namespace NSubstitute.Analyzers.Tests.Shared.CodeFixProviders; + +public interface IReceivedInReceivedInOrderCodeFixVerifier +{ + Task RemovesReceivedChecks_WhenReceivedChecksHasNoArguments(); + + Task RemovesReceivedChecks_WhenReceivedChecksHasArguments(); +} \ No newline at end of file diff --git a/tests/NSubstitute.Analyzers.Tests.VisualBasic/CodeFixProvidersTests/ReceivedInReceivedInOrderCodeFixProviderTests/ReceivedAsExtensionMethodTests.cs b/tests/NSubstitute.Analyzers.Tests.VisualBasic/CodeFixProvidersTests/ReceivedInReceivedInOrderCodeFixProviderTests/ReceivedAsExtensionMethodTests.cs new file mode 100644 index 00000000..6949d287 --- /dev/null +++ b/tests/NSubstitute.Analyzers.Tests.VisualBasic/CodeFixProvidersTests/ReceivedInReceivedInOrderCodeFixProviderTests/ReceivedAsExtensionMethodTests.cs @@ -0,0 +1,101 @@ +using System.Threading.Tasks; +using Xunit; + +namespace NSubstitute.Analyzers.Tests.VisualBasic.CodeFixProvidersTests.ReceivedInReceivedInOrderCodeFixProviderTests; + +public class ReceivedAsExtensionMethodTests : ReceivedInReceivedInOrderCodeFixVerifier +{ + [Fact] + public override async Task RemovesReceivedChecks_WhenReceivedChecksHasNoArguments() + { + var oldSource = @"Imports NSubstitute +Imports NSubstitute.ReceivedExtensions + +Namespace MyNamespace + Interface IFoo + Function Bar() As Integer + Function Bar(ByVal x As Integer) As Integer + End Interface + + Public Class FooTests + Public Sub Test() + Dim substitute = NSubstitute.Substitute.[For](Of IFoo)() + NSubstitute.Received.InOrder(Function() + substitute.Received().Bar() + substitute.Received().Bar(Arg.Any(Of Integer)()) + substitute.ReceivedWithAnyArgs().Bar(Arg.Any(Of Integer)()) + End Function) + End Sub + End Class +End Namespace"; + + var newSource = @"Imports NSubstitute +Imports NSubstitute.ReceivedExtensions + +Namespace MyNamespace + Interface IFoo + Function Bar() As Integer + Function Bar(ByVal x As Integer) As Integer + End Interface + + Public Class FooTests + Public Sub Test() + Dim substitute = NSubstitute.Substitute.[For](Of IFoo)() + NSubstitute.Received.InOrder(Function() + substitute.Bar() + substitute.Bar(Arg.Any(Of Integer)()) + substitute.Bar(Arg.Any(Of Integer)()) + End Function) + End Sub + End Class +End Namespace"; + + await VerifyFix(oldSource, newSource); + } + + [Fact] + public override async Task RemovesReceivedChecks_WhenReceivedChecksHasArguments() + { + var oldSource = @"Imports NSubstitute +Imports NSubstitute.ReceivedExtensions + +Namespace MyNamespace + Interface IFoo + Function Bar() As Integer + Function Bar(ByVal x As Integer) As Integer + End Interface + + Public Class FooTests + Public Sub Test() + Dim substitute = NSubstitute.Substitute.[For](Of IFoo)() + NSubstitute.Received.InOrder(Function() + substitute.Received(Quantity.Exactly(1)).Bar() + substitute.Received(Quantity.Exactly(1)).Bar(Arg.Any(Of Integer)()) + End Function) + End Sub + End Class +End Namespace"; + + var newSource = @"Imports NSubstitute +Imports NSubstitute.ReceivedExtensions + +Namespace MyNamespace + Interface IFoo + Function Bar() As Integer + Function Bar(ByVal x As Integer) As Integer + End Interface + + Public Class FooTests + Public Sub Test() + Dim substitute = NSubstitute.Substitute.[For](Of IFoo)() + NSubstitute.Received.InOrder(Function() + substitute.Bar() + substitute.Bar(Arg.Any(Of Integer)()) + End Function) + End Sub + End Class +End Namespace"; + + await VerifyFix(oldSource, newSource); + } +} \ No newline at end of file diff --git a/tests/NSubstitute.Analyzers.Tests.VisualBasic/CodeFixProvidersTests/ReceivedInReceivedInOrderCodeFixProviderTests/ReceivedAsOrdinaryMethodTests.cs b/tests/NSubstitute.Analyzers.Tests.VisualBasic/CodeFixProvidersTests/ReceivedInReceivedInOrderCodeFixProviderTests/ReceivedAsOrdinaryMethodTests.cs new file mode 100644 index 00000000..ba14420f --- /dev/null +++ b/tests/NSubstitute.Analyzers.Tests.VisualBasic/CodeFixProvidersTests/ReceivedInReceivedInOrderCodeFixProviderTests/ReceivedAsOrdinaryMethodTests.cs @@ -0,0 +1,101 @@ +using System.Threading.Tasks; +using Xunit; + +namespace NSubstitute.Analyzers.Tests.VisualBasic.CodeFixProvidersTests.ReceivedInReceivedInOrderCodeFixProviderTests; + +public class ReceivedAsOrdinaryMethodTests : ReceivedInReceivedInOrderCodeFixVerifier +{ + [Fact] + public override async Task RemovesReceivedChecks_WhenReceivedChecksHasNoArguments() + { + var oldSource = @"Imports NSubstitute +Imports NSubstitute.ReceivedExtensions + +Namespace MyNamespace + Interface IFoo + Function Bar() As Integer + Function Bar(ByVal x As Integer) As Integer + End Interface + + Public Class FooTests + Public Sub Test() + Dim substitute = NSubstitute.Substitute.[For](Of IFoo)() + NSubstitute.Received.InOrder(Function() + SubstituteExtensions.Received(substitute).Bar() + SubstituteExtensions.Received(substitute).Bar(Arg.Any(Of Integer)()) + SubstituteExtensions.ReceivedWithAnyArgs(substitute).Bar(Arg.Any(Of Integer)()) + End Function) + End Sub + End Class +End Namespace"; + + var newSource = @"Imports NSubstitute +Imports NSubstitute.ReceivedExtensions + +Namespace MyNamespace + Interface IFoo + Function Bar() As Integer + Function Bar(ByVal x As Integer) As Integer + End Interface + + Public Class FooTests + Public Sub Test() + Dim substitute = NSubstitute.Substitute.[For](Of IFoo)() + NSubstitute.Received.InOrder(Function() + substitute.Bar() + substitute.Bar(Arg.Any(Of Integer)()) + substitute.Bar(Arg.Any(Of Integer)()) + End Function) + End Sub + End Class +End Namespace"; + + await VerifyFix(oldSource, newSource); + } + + [Fact] + public override async Task RemovesReceivedChecks_WhenReceivedChecksHasArguments() + { + var oldSource = @"Imports NSubstitute +Imports NSubstitute.ReceivedExtensions + +Namespace MyNamespace + Interface IFoo + Function Bar() As Integer + Function Bar(ByVal x As Integer) As Integer + End Interface + + Public Class FooTests + Public Sub Test() + Dim substitute = NSubstitute.Substitute.[For](Of IFoo)() + NSubstitute.Received.InOrder(Function() + SubstituteExtensions.Received(substitute, 1).Bar() + SubstituteExtensions.Received(substitute, 1).Bar(Arg.Any(Of Integer)()) + End Function) + End Sub + End Class +End Namespace"; + + var newSource = @"Imports NSubstitute +Imports NSubstitute.ReceivedExtensions + +Namespace MyNamespace + Interface IFoo + Function Bar() As Integer + Function Bar(ByVal x As Integer) As Integer + End Interface + + Public Class FooTests + Public Sub Test() + Dim substitute = NSubstitute.Substitute.[For](Of IFoo)() + NSubstitute.Received.InOrder(Function() + substitute.Bar() + substitute.Bar(Arg.Any(Of Integer)()) + End Function) + End Sub + End Class +End Namespace"; + + await VerifyFix(oldSource, newSource); + } +} \ No newline at end of file diff --git a/tests/NSubstitute.Analyzers.Tests.VisualBasic/CodeFixProvidersTests/ReceivedInReceivedInOrderCodeFixProviderTests/ReceivedInReceivedInOrderCodeFixVerifier.cs b/tests/NSubstitute.Analyzers.Tests.VisualBasic/CodeFixProvidersTests/ReceivedInReceivedInOrderCodeFixProviderTests/ReceivedInReceivedInOrderCodeFixVerifier.cs new file mode 100644 index 00000000..aa9a0baa --- /dev/null +++ b/tests/NSubstitute.Analyzers.Tests.VisualBasic/CodeFixProvidersTests/ReceivedInReceivedInOrderCodeFixProviderTests/ReceivedInReceivedInOrderCodeFixVerifier.cs @@ -0,0 +1,20 @@ +using System.Threading.Tasks; +using Microsoft.CodeAnalysis.CodeFixes; +using Microsoft.CodeAnalysis.Diagnostics; +using NSubstitute.Analyzers.Shared.CodeFixProviders; +using NSubstitute.Analyzers.Tests.Shared.CodeFixProviders; +using NSubstitute.Analyzers.VisualBasic.CodeFixProviders; +using NSubstitute.Analyzers.VisualBasic.DiagnosticAnalyzers; + +namespace NSubstitute.Analyzers.Tests.VisualBasic.CodeFixProvidersTests.ReceivedInReceivedInOrderCodeFixProviderTests; + +public abstract class ReceivedInReceivedInOrderCodeFixVerifier : VisualBasicCodeFixVerifier, IReceivedInReceivedInOrderCodeFixVerifier +{ + protected override DiagnosticAnalyzer DiagnosticAnalyzer { get; } = new ReceivedInReceivedInOrderAnalyzer(); + + protected override CodeFixProvider CodeFixProvider { get; } = new ReceivedInReceivedInOrderCodeFixProvider(); + + public abstract Task RemovesReceivedChecks_WhenReceivedChecksHasNoArguments(); + + public abstract Task RemovesReceivedChecks_WhenReceivedChecksHasArguments(); +} \ No newline at end of file