From c3fd6917e6b7763b0be5c6b8e8ed80e02fa3b496 Mon Sep 17 00:00:00 2001 From: tpodolak Date: Mon, 11 Feb 2019 00:39:10 +0100 Subject: [PATCH] [GH-66] - detecting substituting for internal members for Returns like calls - vb --- .../NonVirtualSetupDiagnosticVerifier.cs | 24 ++- .../ReturnsAsExtensionMethodTests.cs | 158 +++++++++++++++-- .../ReturnsAsOrdinaryMethodTests.cs | 158 +++++++++++++++-- .../ReturnsNullAsExtensionMethodTests.cs | 160 +++++++++++++++-- .../ReturnsNullAsOrdinaryMethodTests.cs | 160 +++++++++++++++-- .../ThrowsAsExtensionMethodTests.cs | 166 ++++++++++++++++-- .../ThrowsAsOrdinaryMethodTests.cs | 166 ++++++++++++++++-- ...naryMethodWithGenericTypeSpecifiedTests.cs | 166 ++++++++++++++++-- ...nVirtualSetupReceivedDiagnosticVerifier.cs | 14 ++ .../ReceivedAsExtensionMethodTests.cs | 20 +++ .../ReceivedAsOrdinaryMethodTests.cs | 20 +++ .../NonVirtualSetupWhenDiagnosticVerifier.cs | 16 ++ .../WhenAsExtensionMethodTests.cs | 20 +++ .../WhenAsOrdinaryMethodTests.cs | 20 +++ 14 files changed, 1156 insertions(+), 112 deletions(-) diff --git a/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupAnalyzerTests/NonVirtualSetupDiagnosticVerifier.cs b/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupAnalyzerTests/NonVirtualSetupDiagnosticVerifier.cs index 76c1c60b..f7886cca 100644 --- a/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupAnalyzerTests/NonVirtualSetupDiagnosticVerifier.cs +++ b/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupAnalyzerTests/NonVirtualSetupDiagnosticVerifier.cs @@ -16,7 +16,9 @@ public abstract class NonVirtualSetupDiagnosticVerifier : VisualBasicDiagnosticV { internal AnalyzersSettings Settings { get; set; } - protected DiagnosticDescriptor Descriptor { get; } = DiagnosticDescriptors.NonVirtualSetupSpecification; + protected DiagnosticDescriptor NonVirtualSetupSpecificationDescriptor { get; } = DiagnosticDescriptors.NonVirtualSetupSpecification; + + protected DiagnosticDescriptor InternalSetupSpecificationDescriptor { get; } = DiagnosticDescriptors.InternalSetupSpecification; [CombinatoryTheory] [InlineData] @@ -139,11 +141,29 @@ public abstract class NonVirtualSetupDiagnosticVerifier : VisualBasicDiagnosticV public abstract Task ReportsNoDiagnosticsForSuppressedMember_WhenSuppressingExtensionMethod(string method); [CombinatoryTheory] - [InlineData] + [InlineData(".Bar", "Internal member Bar can not be intercepted.")] + [InlineData(".FooBar()", "Internal member FooBar can not be intercepted.")] + [InlineData("(0)", "Internal member Item can not be intercepted.")] public abstract Task ReportsDiagnostics_WhenSettingValueForInternalVirtualMember_AndInternalsVisibleToNotApplied(string method, string call, string message); + [CombinatoryTheory] + [InlineData(".Bar")] + [InlineData(".FooBar()")] + [InlineData("(0)")] + public abstract Task ReportsNoDiagnostics_WhenSettingValueForInternalVirtualMember_AndInternalsVisibleToApplied(string method, string call); + + [CombinatoryTheory] + [InlineData(".Bar", "Internal member Bar can not be intercepted.")] + [InlineData(".FooBar()", "Internal member FooBar can not be intercepted.")] + [InlineData("(0)", "Internal member Item can not be intercepted.")] public abstract Task ReportsDiagnostics_WhenSettingValueForInternalVirtualMember_AndInternalsVisibleToAppliedToWrongAssembly(string method, string call, string message); + [CombinatoryTheory] + [InlineData(".Bar")] + [InlineData(".FooBar()")] + [InlineData("(0)")] + public abstract Task ReportsNoDiagnostics_WhenSettingValueForProtectedInternalVirtualMember(string method, string call); + protected override DiagnosticAnalyzer GetDiagnosticAnalyzer() { return new NonVirtualSetupAnalyzer(); diff --git a/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupAnalyzerTests/ReturnsAsExtensionMethodTests.cs b/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupAnalyzerTests/ReturnsAsExtensionMethodTests.cs index 9409c2c1..bdd3c5b4 100644 --- a/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupAnalyzerTests/ReturnsAsExtensionMethodTests.cs +++ b/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupAnalyzerTests/ReturnsAsExtensionMethodTests.cs @@ -32,7 +32,7 @@ End Sub End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } [CombinatoryData("Returns", "ReturnsForAnyArgs")] @@ -50,7 +50,7 @@ End Sub End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, $"Member {literal} can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, $"Member {literal} can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsDiagnostics_WhenSettingValueForStaticMethod(string method) @@ -74,7 +74,7 @@ End Sub End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnostics_WhenSettingValueForVirtualMethod(string method) @@ -210,7 +210,7 @@ End Sub End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnostics_WhenSettingValueForAbstractMethod(string method) @@ -402,7 +402,7 @@ End Sub End Class End Namespace"; - await VerifyDiagnostic(source, Descriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnostics_WhenSettingValueForVirtualIndexer(string method) @@ -462,7 +462,7 @@ End Sub End Class End Namespace"; - await VerifyDiagnostic(source, Descriptor, "Member Item can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Item can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnostics_WhenUsingUnfortunatelyNamedMethod(string method) @@ -521,7 +521,7 @@ End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member FooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member FooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnosticsForSuppressedMember_WhenSuppressingNonVirtualGenericProperty(string method) @@ -546,7 +546,7 @@ End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member FooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member FooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnosticsForSuppressedMember_WhenSuppressingNonVirtualMethod(string method) @@ -576,7 +576,7 @@ End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnosticsForSuppressedMember_WhenSuppressingNonVirtualGenericMethod(string method) @@ -606,7 +606,7 @@ End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnosticsForSuppressedMember_WhenSuppressingNonVirtualIndexer(string method) @@ -640,7 +640,7 @@ End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Item can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Item can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnosticsForSuppressedMember_WhenSuppressingNonVirtualGenericIndexer(string method) @@ -674,7 +674,7 @@ End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Item can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Item can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnosticsForSuppressedMember_WhenSuppressingMembersFromEntireType(string method) @@ -736,7 +736,7 @@ End Namespace "Member FooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted." }; - var diagnostics = textParserResult.Spans.Select((span, idx) => CreateDiagnostic(Descriptor.OverrideMessage(diagnosticMessages[idx]), span.Span, span.LineSpan)).ToArray(); + var diagnostics = textParserResult.Spans.Select((span, idx) => CreateDiagnostic(NonVirtualSetupSpecificationDescriptor.OverrideMessage(diagnosticMessages[idx]), span.Span, span.LineSpan)).ToArray(); await VerifyDiagnostic(textParserResult.Text, diagnostics); } @@ -800,7 +800,7 @@ End Namespace "Member FooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted." }; - var diagnostics = textParserResult.Spans.Select((span, idx) => CreateDiagnostic(Descriptor.OverrideMessage(diagnosticMessages[idx]), span.Span, span.LineSpan)).ToArray(); + var diagnostics = textParserResult.Spans.Select((span, idx) => CreateDiagnostic(NonVirtualSetupSpecificationDescriptor.OverrideMessage(diagnosticMessages[idx]), span.Span, span.LineSpan)).ToArray(); await VerifyDiagnostic(textParserResult.Text, diagnostics); } @@ -867,7 +867,7 @@ End Namespace "Member FooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted." }; - var diagnostics = textParserResult.Spans.Select((span, idx) => CreateDiagnostic(Descriptor.OverrideMessage(diagnosticMessages[idx]), span.Span, span.LineSpan)).ToArray(); + var diagnostics = textParserResult.Spans.Select((span, idx) => CreateDiagnostic(NonVirtualSetupSpecificationDescriptor.OverrideMessage(diagnosticMessages[idx]), span.Span, span.LineSpan)).ToArray(); await VerifyDiagnostic(textParserResult.Text, diagnostics); } @@ -913,7 +913,133 @@ Function Bar() As Integer End Interface End Namespace"; - await VerifyDiagnostic(source, Descriptor, "Member GetFooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member GetFooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + } + + public override async Task ReportsDiagnostics_WhenSettingValueForInternalVirtualMember_AndInternalsVisibleToNotApplied(string method, string call, string message) + { + var source = $@"Imports NSubstitute + +Namespace MyNamespace + Public Class Foo + Friend Overridable ReadOnly Property Bar As Integer + + Friend Overridable Function FooBar() As Integer + Return 1 + End Function + + Default Friend Overridable ReadOnly Property Item(ByVal x As Integer) As Integer + Get + Return 1 + End Get + End Property + End Class + + Public Class FooTests + Public Sub Test() + Dim substitute = NSubstitute.Substitute.[For](Of Foo)() + Dim x = [|substitute{call}|].{method}(1) + End Sub + End Class +End Namespace"; + + await VerifyDiagnostic(source, InternalSetupSpecificationDescriptor, message); + } + + public override async Task ReportsNoDiagnostics_WhenSettingValueForInternalVirtualMember_AndInternalsVisibleToApplied(string method, string call) + { + var source = $@"Imports NSubstitute + + + + + +Namespace MyNamespace + Public Class Foo + Friend Overridable ReadOnly Property Bar As Integer + + Friend Overridable Function FooBar() As Integer + Return 1 + End Function + + Default Friend Overridable ReadOnly Property Item(ByVal x As Integer) As Integer + Get + Return 1 + End Get + End Property + End Class + + Public Class FooTests + Public Sub Test() + Dim substitute = NSubstitute.Substitute.[For](Of Foo)() + Dim x = substitute{call}.{method}(1) + End Sub + End Class +End Namespace"; + + await VerifyNoDiagnostic(source); + } + + public override async Task ReportsDiagnostics_WhenSettingValueForInternalVirtualMember_AndInternalsVisibleToAppliedToWrongAssembly(string method, string call, string message) + { + var source = $@"Imports NSubstitute + + + +Namespace MyNamespace + Public Class Foo + Friend Overridable ReadOnly Property Bar As Integer + + Friend Overridable Function FooBar() As Integer + Return 1 + End Function + + Default Friend Overridable ReadOnly Property Item(ByVal x As Integer) As Integer + Get + Return 1 + End Get + End Property + End Class + + Public Class FooTests + Public Sub Test() + Dim substitute = NSubstitute.Substitute.[For](Of Foo)() + Dim x = [|substitute{call}|].{method}(1) + End Sub + End Class +End Namespace"; + + await VerifyDiagnostic(source, InternalSetupSpecificationDescriptor, message); + } + + public override async Task ReportsNoDiagnostics_WhenSettingValueForProtectedInternalVirtualMember(string method, string call) + { + var source = $@"Imports NSubstitute + +Namespace MyNamespace + Public Class Foo + Protected Friend Overridable ReadOnly Property Bar As Integer + + Protected Friend Overridable Function FooBar() As Integer + Return 1 + End Function + + Default Protected Friend Overridable ReadOnly Property Item(ByVal x As Integer) As Integer + Get + Return 1 + End Get + End Property + End Class + + Public Class FooTests + Public Sub Test() + Dim substitute = NSubstitute.Substitute.[For](Of Foo)() + Dim x = substitute{call}.{method}(1) + End Sub + End Class +End Namespace"; + + await VerifyNoDiagnostic(source); } } } \ No newline at end of file diff --git a/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupAnalyzerTests/ReturnsAsOrdinaryMethodTests.cs b/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupAnalyzerTests/ReturnsAsOrdinaryMethodTests.cs index 7aa6a5e3..f9f7c432 100644 --- a/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupAnalyzerTests/ReturnsAsOrdinaryMethodTests.cs +++ b/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupAnalyzerTests/ReturnsAsOrdinaryMethodTests.cs @@ -32,7 +32,7 @@ End Sub End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } [CombinatoryData("SubstituteExtensions.Returns", "SubstituteExtensions.Returns(Of)", "SubstituteExtensions.ReturnsForAnyArgs", "SubstituteExtensions.ReturnsForAnyArgs(Of)")] @@ -51,7 +51,7 @@ End Sub End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, $"Member {literal} can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, $"Member {literal} can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsDiagnostics_WhenSettingValueForStaticMethod(string method) @@ -75,7 +75,7 @@ End Sub End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnostics_WhenSettingValueForVirtualMethod(string method) @@ -211,7 +211,7 @@ End Sub End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnostics_WhenSettingValueForAbstractMethod(string method) @@ -403,7 +403,7 @@ End Sub End Class End Namespace"; - await VerifyDiagnostic(source, Descriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnostics_WhenSettingValueForVirtualIndexer(string method) @@ -463,7 +463,7 @@ End Sub End Class End Namespace"; - await VerifyDiagnostic(source, Descriptor, "Member Item can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Item can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnostics_WhenUsingUnfortunatelyNamedMethod(string method) @@ -522,7 +522,7 @@ End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member FooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member FooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnosticsForSuppressedMember_WhenSuppressingNonVirtualGenericProperty(string method) @@ -547,7 +547,7 @@ End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member FooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member FooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnosticsForSuppressedMember_WhenSuppressingNonVirtualMethod(string method) @@ -577,7 +577,7 @@ End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnosticsForSuppressedMember_WhenSuppressingNonVirtualGenericMethod(string method) @@ -607,7 +607,7 @@ End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnosticsForSuppressedMember_WhenSuppressingNonVirtualIndexer(string method) @@ -641,7 +641,7 @@ End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Item can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Item can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnosticsForSuppressedMember_WhenSuppressingNonVirtualGenericIndexer(string method) @@ -675,7 +675,7 @@ End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Item can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Item can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnosticsForSuppressedMember_WhenSuppressingMembersFromEntireType(string method) @@ -737,7 +737,7 @@ End Namespace "Member FooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted." }; - var diagnostics = textParserResult.Spans.Select((span, idx) => CreateDiagnostic(Descriptor.OverrideMessage(diagnosticMessages[idx]), span.Span, span.LineSpan)).ToArray(); + var diagnostics = textParserResult.Spans.Select((span, idx) => CreateDiagnostic(NonVirtualSetupSpecificationDescriptor.OverrideMessage(diagnosticMessages[idx]), span.Span, span.LineSpan)).ToArray(); await VerifyDiagnostic(textParserResult.Text, diagnostics); } @@ -801,7 +801,7 @@ End Namespace "Member FooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted." }; - var diagnostics = textParserResult.Spans.Select((span, idx) => CreateDiagnostic(Descriptor.OverrideMessage(diagnosticMessages[idx]), span.Span, span.LineSpan)).ToArray(); + var diagnostics = textParserResult.Spans.Select((span, idx) => CreateDiagnostic(NonVirtualSetupSpecificationDescriptor.OverrideMessage(diagnosticMessages[idx]), span.Span, span.LineSpan)).ToArray(); await VerifyDiagnostic(textParserResult.Text, diagnostics); } @@ -868,7 +868,7 @@ End Namespace "Member FooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted." }; - var diagnostics = textParserResult.Spans.Select((span, idx) => CreateDiagnostic(Descriptor.OverrideMessage(diagnosticMessages[idx]), span.Span, span.LineSpan)).ToArray(); + var diagnostics = textParserResult.Spans.Select((span, idx) => CreateDiagnostic(NonVirtualSetupSpecificationDescriptor.OverrideMessage(diagnosticMessages[idx]), span.Span, span.LineSpan)).ToArray(); await VerifyDiagnostic(textParserResult.Text, diagnostics); } @@ -914,7 +914,133 @@ Function Bar() As Integer End Interface End Namespace"; - await VerifyDiagnostic(source, Descriptor, "Member GetFooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member GetFooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + } + + public override async Task ReportsDiagnostics_WhenSettingValueForInternalVirtualMember_AndInternalsVisibleToNotApplied(string method, string call, string message) + { + var source = $@"Imports NSubstitute + +Namespace MyNamespace + Public Class Foo + Friend Overridable ReadOnly Property Bar As Integer + + Friend Overridable Function FooBar() As Integer + Return 1 + End Function + + Default Friend Overridable ReadOnly Property Item(ByVal x As Integer) As Integer + Get + Return 1 + End Get + End Property + End Class + + Public Class FooTests + Public Sub Test() + Dim substitute = NSubstitute.Substitute.[For](Of Foo)() + Dim x = {method}([|substitute{call}|], 1) + End Sub + End Class +End Namespace"; + + await VerifyDiagnostic(source, InternalSetupSpecificationDescriptor, message); + } + + public override async Task ReportsNoDiagnostics_WhenSettingValueForInternalVirtualMember_AndInternalsVisibleToApplied(string method, string call) + { + var source = $@"Imports NSubstitute + + + + + +Namespace MyNamespace + Public Class Foo + Friend Overridable ReadOnly Property Bar As Integer + + Friend Overridable Function FooBar() As Integer + Return 1 + End Function + + Default Friend Overridable ReadOnly Property Item(ByVal x As Integer) As Integer + Get + Return 1 + End Get + End Property + End Class + + Public Class FooTests + Public Sub Test() + Dim substitute = NSubstitute.Substitute.[For](Of Foo)() + Dim x = {method}(substitute{call}, 1) + End Sub + End Class +End Namespace"; + + await VerifyNoDiagnostic(source); + } + + public override async Task ReportsDiagnostics_WhenSettingValueForInternalVirtualMember_AndInternalsVisibleToAppliedToWrongAssembly(string method, string call, string message) + { + var source = $@"Imports NSubstitute + + + +Namespace MyNamespace + Public Class Foo + Friend Overridable ReadOnly Property Bar As Integer + + Friend Overridable Function FooBar() As Integer + Return 1 + End Function + + Default Friend Overridable ReadOnly Property Item(ByVal x As Integer) As Integer + Get + Return 1 + End Get + End Property + End Class + + Public Class FooTests + Public Sub Test() + Dim substitute = NSubstitute.Substitute.[For](Of Foo)() + Dim x = {method}([|substitute{call}|], 1) + End Sub + End Class +End Namespace"; + + await VerifyDiagnostic(source, InternalSetupSpecificationDescriptor, message); + } + + public override async Task ReportsNoDiagnostics_WhenSettingValueForProtectedInternalVirtualMember(string method, string call) + { + var source = $@"Imports NSubstitute + +Namespace MyNamespace + Public Class Foo + Protected Friend Overridable ReadOnly Property Bar As Integer + + Protected Friend Overridable Function FooBar() As Integer + Return 1 + End Function + + Default Protected Friend Overridable ReadOnly Property Item(ByVal x As Integer) As Integer + Get + Return 1 + End Get + End Property + End Class + + Public Class FooTests + Public Sub Test() + Dim substitute = NSubstitute.Substitute.[For](Of Foo)() + Dim x = {method}(substitute{call}, 1) + End Sub + End Class +End Namespace"; + + await VerifyNoDiagnostic(source); } } } \ No newline at end of file diff --git a/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupAnalyzerTests/ReturnsNullAsExtensionMethodTests.cs b/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupAnalyzerTests/ReturnsNullAsExtensionMethodTests.cs index 8010f824..54d8a41f 100644 --- a/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupAnalyzerTests/ReturnsNullAsExtensionMethodTests.cs +++ b/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupAnalyzerTests/ReturnsNullAsExtensionMethodTests.cs @@ -32,7 +32,7 @@ End Sub End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override Task ReportsDiagnostics_WhenSettingValueForLiteral(string method, string literal, string type) @@ -62,7 +62,7 @@ End Sub End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnostics_WhenSettingValueForVirtualMethod(string method) @@ -203,7 +203,7 @@ End Sub End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnostics_WhenSettingValueForAbstractMethod(string method) @@ -403,7 +403,7 @@ End Sub End Class End Namespace"; - await VerifyDiagnostic(source, Descriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnostics_WhenSettingValueForVirtualIndexer(string method) @@ -465,7 +465,7 @@ End Sub End Class End Namespace"; - await VerifyDiagnostic(source, Descriptor, "Member Item can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Item can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnostics_WhenUsingUnfortunatelyNamedMethod(string method) @@ -525,7 +525,7 @@ End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member FooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member FooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnosticsForSuppressedMember_WhenSuppressingNonVirtualGenericProperty(string method) @@ -551,7 +551,7 @@ End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member FooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member FooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnosticsForSuppressedMember_WhenSuppressingNonVirtualMethod(string method) @@ -582,7 +582,7 @@ End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnosticsForSuppressedMember_WhenSuppressingNonVirtualGenericMethod(string method) @@ -613,7 +613,7 @@ End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnosticsForSuppressedMember_WhenSuppressingNonVirtualIndexer(string method) @@ -648,7 +648,7 @@ End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Item can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Item can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnosticsForSuppressedMember_WhenSuppressingNonVirtualGenericIndexer(string method) @@ -683,7 +683,7 @@ End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Item can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Item can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnosticsForSuppressedMember_WhenSuppressingMembersFromEntireType(string method) @@ -746,7 +746,7 @@ End Namespace "Member FooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted." }; - var diagnostics = textParserResult.Spans.Select((span, idx) => CreateDiagnostic(Descriptor.OverrideMessage(diagnosticMessages[idx]), span.Span, span.LineSpan)).ToArray(); + var diagnostics = textParserResult.Spans.Select((span, idx) => CreateDiagnostic(NonVirtualSetupSpecificationDescriptor.OverrideMessage(diagnosticMessages[idx]), span.Span, span.LineSpan)).ToArray(); await VerifyDiagnostic(textParserResult.Text, diagnostics); } @@ -811,7 +811,7 @@ End Namespace "Member FooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted." }; - var diagnostics = textParserResult.Spans.Select((span, idx) => CreateDiagnostic(Descriptor.OverrideMessage(diagnosticMessages[idx]), span.Span, span.LineSpan)).ToArray(); + var diagnostics = textParserResult.Spans.Select((span, idx) => CreateDiagnostic(NonVirtualSetupSpecificationDescriptor.OverrideMessage(diagnosticMessages[idx]), span.Span, span.LineSpan)).ToArray(); await VerifyDiagnostic(textParserResult.Text, diagnostics); } @@ -879,7 +879,7 @@ End Namespace "Member FooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted." }; - var diagnostics = textParserResult.Spans.Select((span, idx) => CreateDiagnostic(Descriptor.OverrideMessage(diagnosticMessages[idx]), span.Span, span.LineSpan)).ToArray(); + var diagnostics = textParserResult.Spans.Select((span, idx) => CreateDiagnostic(NonVirtualSetupSpecificationDescriptor.OverrideMessage(diagnosticMessages[idx]), span.Span, span.LineSpan)).ToArray(); await VerifyDiagnostic(textParserResult.Text, diagnostics); } @@ -924,7 +924,137 @@ Function Bar() As FooTests End Interface End Namespace"; - await VerifyDiagnostic(source, Descriptor, "Member GetFooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member GetFooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + } + + public override async Task ReportsDiagnostics_WhenSettingValueForInternalVirtualMember_AndInternalsVisibleToNotApplied(string method, string call, string message) + { + var source = $@"Imports NSubstitute +Imports NSubstitute.ReturnsExtensions + +Namespace MyNamespace + Public Class Foo + Friend Overridable ReadOnly Property Bar As Foo + + Friend Overridable Function FooBar() As Foo + Return Nothing + End Function + + Default Friend Overridable ReadOnly Property Item(ByVal x As Integer) As Foo + Get + Return Nothing + End Get + End Property + End Class + + Public Class FooTests + Public Sub Test() + Dim substitute = NSubstitute.Substitute.[For](Of Foo)() + Dim x = [|substitute{call}|].{method}() + End Sub + End Class +End Namespace"; + + await VerifyDiagnostic(source, InternalSetupSpecificationDescriptor, message); + } + + public override async Task ReportsNoDiagnostics_WhenSettingValueForInternalVirtualMember_AndInternalsVisibleToApplied(string method, string call) + { + var source = $@"Imports NSubstitute +Imports NSubstitute.ReturnsExtensions + + + + + +Namespace MyNamespace + Public Class Foo + Friend Overridable ReadOnly Property Bar As Foo + + Friend Overridable Function FooBar() As Foo + Return Nothing + End Function + + Default Friend Overridable ReadOnly Property Item(ByVal x As Integer) As Foo + Get + Return Nothing + End Get + End Property + End Class + + Public Class FooTests + Public Sub Test() + Dim substitute = NSubstitute.Substitute.[For](Of Foo)() + Dim x = substitute{call}.{method}() + End Sub + End Class +End Namespace"; + + await VerifyNoDiagnostic(source); + } + + public override async Task ReportsDiagnostics_WhenSettingValueForInternalVirtualMember_AndInternalsVisibleToAppliedToWrongAssembly(string method, string call, string message) + { + var source = $@"Imports NSubstitute +Imports NSubstitute.ReturnsExtensions + + + +Namespace MyNamespace + Public Class Foo + Friend Overridable ReadOnly Property Bar As Foo + + Friend Overridable Function FooBar() As Foo + Return Nothing + End Function + + Default Friend Overridable ReadOnly Property Item(ByVal x As Integer) As Foo + Get + Return Nothing + End Get + End Property + End Class + + Public Class FooTests + Public Sub Test() + Dim substitute = NSubstitute.Substitute.[For](Of Foo)() + Dim x = [|substitute{call}|].{method}() + End Sub + End Class +End Namespace"; + + await VerifyDiagnostic(source, InternalSetupSpecificationDescriptor, message); + } + + public override async Task ReportsNoDiagnostics_WhenSettingValueForProtectedInternalVirtualMember(string method, string call) + { + var source = $@"Imports NSubstitute +Imports NSubstitute.ReturnsExtensions + +Namespace MyNamespace + Public Class Foo + Protected Friend Overridable ReadOnly Property Bar As Foo + + Protected Friend Overridable Function FooBar() As Foo + Return Nothing + End Function + + Default Protected Friend Overridable ReadOnly Property Item(ByVal x As Integer) As Foo + Get + Return Nothing + End Get + End Property + End Class + + Public Class FooTests + Public Sub Test() + Dim substitute = NSubstitute.Substitute.[For](Of Foo)() + Dim x = substitute{call}.{method}() + End Sub + End Class +End Namespace"; + + await VerifyNoDiagnostic(source); } } } \ No newline at end of file diff --git a/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupAnalyzerTests/ReturnsNullAsOrdinaryMethodTests.cs b/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupAnalyzerTests/ReturnsNullAsOrdinaryMethodTests.cs index 91258305..65391a06 100644 --- a/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupAnalyzerTests/ReturnsNullAsOrdinaryMethodTests.cs +++ b/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupAnalyzerTests/ReturnsNullAsOrdinaryMethodTests.cs @@ -32,7 +32,7 @@ End Sub End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override Task ReportsDiagnostics_WhenSettingValueForLiteral(string method, string literal, string type) @@ -62,7 +62,7 @@ End Sub End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnostics_WhenSettingValueForVirtualMethod(string method) @@ -203,7 +203,7 @@ End Sub End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnostics_WhenSettingValueForAbstractMethod(string method) @@ -403,7 +403,7 @@ End Sub End Class End Namespace"; - await VerifyDiagnostic(source, Descriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnostics_WhenSettingValueForVirtualIndexer(string method) @@ -465,7 +465,7 @@ End Sub End Class End Namespace"; - await VerifyDiagnostic(source, Descriptor, "Member Item can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Item can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnostics_WhenUsingUnfortunatelyNamedMethod(string method) @@ -525,7 +525,7 @@ End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member FooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member FooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnosticsForSuppressedMember_WhenSuppressingNonVirtualGenericProperty(string method) @@ -551,7 +551,7 @@ End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member FooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member FooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnosticsForSuppressedMember_WhenSuppressingNonVirtualMethod(string method) @@ -582,7 +582,7 @@ End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnosticsForSuppressedMember_WhenSuppressingNonVirtualGenericMethod(string method) @@ -613,7 +613,7 @@ End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnosticsForSuppressedMember_WhenSuppressingNonVirtualIndexer(string method) @@ -648,7 +648,7 @@ End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Item can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Item can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnosticsForSuppressedMember_WhenSuppressingNonVirtualGenericIndexer(string method) @@ -683,7 +683,7 @@ End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Item can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Item can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnosticsForSuppressedMember_WhenSuppressingMembersFromEntireType(string method) @@ -746,7 +746,7 @@ End Namespace "Member FooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted." }; - var diagnostics = textParserResult.Spans.Select((span, idx) => CreateDiagnostic(Descriptor.OverrideMessage(diagnosticMessages[idx]), span.Span, span.LineSpan)).ToArray(); + var diagnostics = textParserResult.Spans.Select((span, idx) => CreateDiagnostic(NonVirtualSetupSpecificationDescriptor.OverrideMessage(diagnosticMessages[idx]), span.Span, span.LineSpan)).ToArray(); await VerifyDiagnostic(textParserResult.Text, diagnostics); } @@ -811,7 +811,7 @@ End Namespace "Member FooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted." }; - var diagnostics = textParserResult.Spans.Select((span, idx) => CreateDiagnostic(Descriptor.OverrideMessage(diagnosticMessages[idx]), span.Span, span.LineSpan)).ToArray(); + var diagnostics = textParserResult.Spans.Select((span, idx) => CreateDiagnostic(NonVirtualSetupSpecificationDescriptor.OverrideMessage(diagnosticMessages[idx]), span.Span, span.LineSpan)).ToArray(); await VerifyDiagnostic(textParserResult.Text, diagnostics); } @@ -879,7 +879,7 @@ End Namespace "Member FooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted." }; - var diagnostics = textParserResult.Spans.Select((span, idx) => CreateDiagnostic(Descriptor.OverrideMessage(diagnosticMessages[idx]), span.Span, span.LineSpan)).ToArray(); + var diagnostics = textParserResult.Spans.Select((span, idx) => CreateDiagnostic(NonVirtualSetupSpecificationDescriptor.OverrideMessage(diagnosticMessages[idx]), span.Span, span.LineSpan)).ToArray(); await VerifyDiagnostic(textParserResult.Text, diagnostics); } @@ -924,7 +924,137 @@ Function Bar() As FooTests End Interface End Namespace"; - await VerifyDiagnostic(source, Descriptor, "Member GetFooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member GetFooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + } + + public override async Task ReportsDiagnostics_WhenSettingValueForInternalVirtualMember_AndInternalsVisibleToNotApplied(string method, string call, string message) + { + var source = $@"Imports NSubstitute +Imports NSubstitute.ReturnsExtensions + +Namespace MyNamespace + Public Class Foo + Friend Overridable ReadOnly Property Bar As Foo + + Friend Overridable Function FooBar() As Foo + Return Nothing + End Function + + Default Friend Overridable ReadOnly Property Item(ByVal x As Integer) As Foo + Get + Return Nothing + End Get + End Property + End Class + + Public Class FooTests + Public Sub Test() + Dim substitute = NSubstitute.Substitute.[For](Of Foo)() + Dim x = {method}([|substitute{call}|]) + End Sub + End Class +End Namespace"; + + await VerifyDiagnostic(source, InternalSetupSpecificationDescriptor, message); + } + + public override async Task ReportsNoDiagnostics_WhenSettingValueForInternalVirtualMember_AndInternalsVisibleToApplied(string method, string call) + { + var source = $@"Imports NSubstitute +Imports NSubstitute.ReturnsExtensions + + + + + +Namespace MyNamespace + Public Class Foo + Friend Overridable ReadOnly Property Bar As Foo + + Friend Overridable Function FooBar() As Foo + Return Nothing + End Function + + Default Friend Overridable ReadOnly Property Item(ByVal x As Integer) As Foo + Get + Return Nothing + End Get + End Property + End Class + + Public Class FooTests + Public Sub Test() + Dim substitute = NSubstitute.Substitute.[For](Of Foo)() + Dim x = {method}(substitute{call}) + End Sub + End Class +End Namespace"; + + await VerifyNoDiagnostic(source); + } + + public override async Task ReportsDiagnostics_WhenSettingValueForInternalVirtualMember_AndInternalsVisibleToAppliedToWrongAssembly(string method, string call, string message) + { + var source = $@"Imports NSubstitute +Imports NSubstitute.ReturnsExtensions + + + +Namespace MyNamespace + Public Class Foo + Friend Overridable ReadOnly Property Bar As Foo + + Friend Overridable Function FooBar() As Foo + Return Nothing + End Function + + Default Friend Overridable ReadOnly Property Item(ByVal x As Integer) As Foo + Get + Return Nothing + End Get + End Property + End Class + + Public Class FooTests + Public Sub Test() + Dim substitute = NSubstitute.Substitute.[For](Of Foo)() + Dim x = {method}([|substitute{call}|]) + End Sub + End Class +End Namespace"; + + await VerifyDiagnostic(source, InternalSetupSpecificationDescriptor, message); + } + + public override async Task ReportsNoDiagnostics_WhenSettingValueForProtectedInternalVirtualMember(string method, string call) + { + var source = $@"Imports NSubstitute +Imports NSubstitute.ReturnsExtensions + +Namespace MyNamespace + Public Class Foo + Protected Friend Overridable ReadOnly Property Bar As Foo + + Protected Friend Overridable Function FooBar() As Foo + Return Nothing + End Function + + Default Protected Friend Overridable ReadOnly Property Item(ByVal x As Integer) As Foo + Get + Return Nothing + End Get + End Property + End Class + + Public Class FooTests + Public Sub Test() + Dim substitute = NSubstitute.Substitute.[For](Of Foo)() + Dim x = {method}(substitute{call}) + End Sub + End Class +End Namespace"; + + await VerifyNoDiagnostic(source); } } } \ No newline at end of file diff --git a/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupAnalyzerTests/ThrowsAsExtensionMethodTests.cs b/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupAnalyzerTests/ThrowsAsExtensionMethodTests.cs index 6fa34588..9f5da12a 100644 --- a/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupAnalyzerTests/ThrowsAsExtensionMethodTests.cs +++ b/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupAnalyzerTests/ThrowsAsExtensionMethodTests.cs @@ -34,7 +34,7 @@ End Sub End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsDiagnostics_WhenSettingValueForLiteral(string method, string literal, string type) @@ -53,7 +53,7 @@ End Sub End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, $"Member {literal} can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, $"Member {literal} can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsDiagnostics_WhenSettingValueForStaticMethod(string method) @@ -79,7 +79,7 @@ End Sub End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnostics_WhenSettingValueForVirtualMethod(string method) @@ -224,7 +224,7 @@ End Sub End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnostics_WhenSettingValueForAbstractMethod(string method) @@ -432,7 +432,7 @@ End Sub End Class End Namespace"; - await VerifyDiagnostic(source, Descriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnostics_WhenSettingValueForVirtualIndexer(string method) @@ -494,7 +494,7 @@ End Sub End Class End Namespace"; - await VerifyDiagnostic(source, Descriptor, "Member Item can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Item can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnostics_WhenUsingUnfortunatelyNamedMethod(string method) @@ -555,7 +555,7 @@ End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member FooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member FooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnosticsForSuppressedMember_WhenSuppressingNonVirtualGenericProperty(string method) @@ -582,7 +582,7 @@ End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member FooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member FooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnosticsForSuppressedMember_WhenSuppressingNonVirtualMethod(string method) @@ -614,7 +614,7 @@ End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnosticsForSuppressedMember_WhenSuppressingNonVirtualGenericMethod(string method) @@ -646,7 +646,7 @@ End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnosticsForSuppressedMember_WhenSuppressingNonVirtualIndexer(string method) @@ -682,7 +682,7 @@ End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Item can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Item can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnosticsForSuppressedMember_WhenSuppressingNonVirtualGenericIndexer(string method) @@ -718,7 +718,7 @@ End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Item can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Item can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnosticsForSuppressedMember_WhenSuppressingMembersFromEntireType(string method) @@ -782,7 +782,7 @@ End Namespace "Member FooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted." }; - var diagnostics = textParserResult.Spans.Select((span, idx) => CreateDiagnostic(Descriptor.OverrideMessage(diagnosticMessages[idx]), span.Span, span.LineSpan)).ToArray(); + var diagnostics = textParserResult.Spans.Select((span, idx) => CreateDiagnostic(NonVirtualSetupSpecificationDescriptor.OverrideMessage(diagnosticMessages[idx]), span.Span, span.LineSpan)).ToArray(); await VerifyDiagnostic(textParserResult.Text, diagnostics); } @@ -848,7 +848,7 @@ End Namespace "Member FooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted." }; - var diagnostics = textParserResult.Spans.Select((span, idx) => CreateDiagnostic(Descriptor.OverrideMessage(diagnosticMessages[idx]), span.Span, span.LineSpan)).ToArray(); + var diagnostics = textParserResult.Spans.Select((span, idx) => CreateDiagnostic(NonVirtualSetupSpecificationDescriptor.OverrideMessage(diagnosticMessages[idx]), span.Span, span.LineSpan)).ToArray(); await VerifyDiagnostic(textParserResult.Text, diagnostics); } @@ -917,7 +917,7 @@ End Namespace "Member FooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted." }; - var diagnostics = textParserResult.Spans.Select((span, idx) => CreateDiagnostic(Descriptor.OverrideMessage(diagnosticMessages[idx]), span.Span, span.LineSpan)).ToArray(); + var diagnostics = textParserResult.Spans.Select((span, idx) => CreateDiagnostic(NonVirtualSetupSpecificationDescriptor.OverrideMessage(diagnosticMessages[idx]), span.Span, span.LineSpan)).ToArray(); await VerifyDiagnostic(textParserResult.Text, diagnostics); } @@ -965,7 +965,141 @@ Function Bar() As Integer End Interface End Namespace"; - await VerifyDiagnostic(source, Descriptor, "Member GetFooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member GetFooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + } + + public override async Task ReportsDiagnostics_WhenSettingValueForInternalVirtualMember_AndInternalsVisibleToNotApplied(string method, string call, string message) + { + var source = $@"Imports System +Imports NSubstitute +Imports NSubstitute.ExceptionExtensions + +Namespace MyNamespace + Public Class Foo + Friend Overridable ReadOnly Property Bar As Foo + + Friend Overridable Function FooBar() As Foo + Return Nothing + End Function + + Default Friend Overridable ReadOnly Property Item(ByVal x As Integer) As Foo + Get + Return Nothing + End Get + End Property + End Class + + Public Class FooTests + Public Sub Test() + Dim substitute = NSubstitute.Substitute.[For](Of Foo)() + Dim x = [|substitute{call}|].{method}(New Exception()) + End Sub + End Class +End Namespace"; + + await VerifyDiagnostic(source, InternalSetupSpecificationDescriptor, message); + } + + public override async Task ReportsNoDiagnostics_WhenSettingValueForInternalVirtualMember_AndInternalsVisibleToApplied(string method, string call) + { + var source = $@"Imports System +Imports NSubstitute +Imports NSubstitute.ExceptionExtensions + + + + + +Namespace MyNamespace + Public Class Foo + Friend Overridable ReadOnly Property Bar As Foo + + Friend Overridable Function FooBar() As Foo + Return Nothing + End Function + + Default Friend Overridable ReadOnly Property Item(ByVal x As Integer) As Foo + Get + Return Nothing + End Get + End Property + End Class + + Public Class FooTests + Public Sub Test() + Dim substitute = NSubstitute.Substitute.[For](Of Foo)() + Dim x = substitute{call}.{method}(New Exception()) + End Sub + End Class +End Namespace"; + + await VerifyNoDiagnostic(source); + } + + public override async Task ReportsDiagnostics_WhenSettingValueForInternalVirtualMember_AndInternalsVisibleToAppliedToWrongAssembly(string method, string call, string message) + { + var source = $@"Imports System +Imports NSubstitute +Imports NSubstitute.ExceptionExtensions + + + +Namespace MyNamespace + Public Class Foo + Friend Overridable ReadOnly Property Bar As Foo + + Friend Overridable Function FooBar() As Foo + Return Nothing + End Function + + Default Friend Overridable ReadOnly Property Item(ByVal x As Integer) As Foo + Get + Return Nothing + End Get + End Property + End Class + + Public Class FooTests + Public Sub Test() + Dim substitute = NSubstitute.Substitute.[For](Of Foo)() + Dim x = [|substitute{call}|].{method}(New Exception()) + End Sub + End Class +End Namespace"; + + await VerifyDiagnostic(source, InternalSetupSpecificationDescriptor, message); + } + + public override async Task ReportsNoDiagnostics_WhenSettingValueForProtectedInternalVirtualMember(string method, string call) + { + var source = $@"Imports System +Imports NSubstitute +Imports NSubstitute.ExceptionExtensions + +Namespace MyNamespace + Public Class Foo + Protected Friend Overridable ReadOnly Property Bar As Foo + + Protected Friend Overridable Function FooBar() As Foo + Return Nothing + End Function + + Default Protected Friend Overridable ReadOnly Property Item(ByVal x As Integer) As Foo + Get + Return Nothing + End Get + End Property + End Class + + Public Class FooTests + Public Sub Test() + Dim substitute = NSubstitute.Substitute.[For](Of Foo)() + Dim x = substitute{call}.{method}(New Exception()) + End Sub + End Class +End Namespace"; + + await VerifyNoDiagnostic(source); } } } \ No newline at end of file diff --git a/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupAnalyzerTests/ThrowsAsOrdinaryMethodTests.cs b/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupAnalyzerTests/ThrowsAsOrdinaryMethodTests.cs index 1156c2c1..78804592 100644 --- a/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupAnalyzerTests/ThrowsAsOrdinaryMethodTests.cs +++ b/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupAnalyzerTests/ThrowsAsOrdinaryMethodTests.cs @@ -34,7 +34,7 @@ End Sub End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsDiagnostics_WhenSettingValueForLiteral(string method, string literal, string type) @@ -52,7 +52,7 @@ End Sub End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, $"Member {literal} can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, $"Member {literal} can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsDiagnostics_WhenSettingValueForStaticMethod(string method) @@ -78,7 +78,7 @@ End Sub End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnostics_WhenSettingValueForVirtualMethod(string method) @@ -223,7 +223,7 @@ End Sub End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnostics_WhenSettingValueForAbstractMethod(string method) @@ -431,7 +431,7 @@ End Sub End Class End Namespace"; - await VerifyDiagnostic(source, Descriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnostics_WhenSettingValueForVirtualIndexer(string method) @@ -493,7 +493,7 @@ End Sub End Class End Namespace"; - await VerifyDiagnostic(source, Descriptor, "Member Item can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Item can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnostics_WhenUsingUnfortunatelyNamedMethod(string method) @@ -554,7 +554,7 @@ End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member FooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member FooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnosticsForSuppressedMember_WhenSuppressingNonVirtualGenericProperty(string method) @@ -581,7 +581,7 @@ End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member FooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member FooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnosticsForSuppressedMember_WhenSuppressingNonVirtualMethod(string method) @@ -613,7 +613,7 @@ End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnosticsForSuppressedMember_WhenSuppressingNonVirtualGenericMethod(string method) @@ -645,7 +645,7 @@ End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnosticsForSuppressedMember_WhenSuppressingNonVirtualIndexer(string method) @@ -681,7 +681,7 @@ End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Item can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Item can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnosticsForSuppressedMember_WhenSuppressingNonVirtualGenericIndexer(string method) @@ -717,7 +717,7 @@ End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Item can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Item can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnosticsForSuppressedMember_WhenSuppressingMembersFromEntireType(string method) @@ -781,7 +781,7 @@ End Namespace "Member FooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted." }; - var diagnostics = textParserResult.Spans.Select((span, idx) => CreateDiagnostic(Descriptor.OverrideMessage(diagnosticMessages[idx]), span.Span, span.LineSpan)).ToArray(); + var diagnostics = textParserResult.Spans.Select((span, idx) => CreateDiagnostic(NonVirtualSetupSpecificationDescriptor.OverrideMessage(diagnosticMessages[idx]), span.Span, span.LineSpan)).ToArray(); await VerifyDiagnostic(textParserResult.Text, diagnostics); } @@ -847,7 +847,7 @@ End Namespace "Member FooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted." }; - var diagnostics = textParserResult.Spans.Select((span, idx) => CreateDiagnostic(Descriptor.OverrideMessage(diagnosticMessages[idx]), span.Span, span.LineSpan)).ToArray(); + var diagnostics = textParserResult.Spans.Select((span, idx) => CreateDiagnostic(NonVirtualSetupSpecificationDescriptor.OverrideMessage(diagnosticMessages[idx]), span.Span, span.LineSpan)).ToArray(); await VerifyDiagnostic(textParserResult.Text, diagnostics); } @@ -916,7 +916,7 @@ End Namespace "Member FooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted." }; - var diagnostics = textParserResult.Spans.Select((span, idx) => CreateDiagnostic(Descriptor.OverrideMessage(diagnosticMessages[idx]), span.Span, span.LineSpan)).ToArray(); + var diagnostics = textParserResult.Spans.Select((span, idx) => CreateDiagnostic(NonVirtualSetupSpecificationDescriptor.OverrideMessage(diagnosticMessages[idx]), span.Span, span.LineSpan)).ToArray(); await VerifyDiagnostic(textParserResult.Text, diagnostics); } @@ -964,7 +964,141 @@ Function Bar() As Integer End Interface End Namespace"; - await VerifyDiagnostic(source, Descriptor, "Member GetFooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member GetFooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + } + + public override async Task ReportsDiagnostics_WhenSettingValueForInternalVirtualMember_AndInternalsVisibleToNotApplied(string method, string call, string message) + { + var source = $@"Imports System +Imports NSubstitute +Imports NSubstitute.ExceptionExtensions + +Namespace MyNamespace + Public Class Foo + Friend Overridable ReadOnly Property Bar As Foo + + Friend Overridable Function FooBar() As Foo + Return Nothing + End Function + + Default Friend Overridable ReadOnly Property Item(ByVal x As Integer) As Foo + Get + Return Nothing + End Get + End Property + End Class + + Public Class FooTests + Public Sub Test() + Dim substitute = NSubstitute.Substitute.[For](Of Foo)() + Dim x = {method}([|substitute{call}|], New Exception()) + End Sub + End Class +End Namespace"; + + await VerifyDiagnostic(source, InternalSetupSpecificationDescriptor, message); + } + + public override async Task ReportsNoDiagnostics_WhenSettingValueForInternalVirtualMember_AndInternalsVisibleToApplied(string method, string call) + { + var source = $@"Imports System +Imports NSubstitute +Imports NSubstitute.ExceptionExtensions + + + + + +Namespace MyNamespace + Public Class Foo + Friend Overridable ReadOnly Property Bar As Foo + + Friend Overridable Function FooBar() As Foo + Return Nothing + End Function + + Default Friend Overridable ReadOnly Property Item(ByVal x As Integer) As Foo + Get + Return Nothing + End Get + End Property + End Class + + Public Class FooTests + Public Sub Test() + Dim substitute = NSubstitute.Substitute.[For](Of Foo)() + Dim x = {method}(substitute{call}, New Exception()) + End Sub + End Class +End Namespace"; + + await VerifyNoDiagnostic(source); + } + + public override async Task ReportsDiagnostics_WhenSettingValueForInternalVirtualMember_AndInternalsVisibleToAppliedToWrongAssembly(string method, string call, string message) + { + var source = $@"Imports System +Imports NSubstitute +Imports NSubstitute.ExceptionExtensions + + + +Namespace MyNamespace + Public Class Foo + Friend Overridable ReadOnly Property Bar As Foo + + Friend Overridable Function FooBar() As Foo + Return Nothing + End Function + + Default Friend Overridable ReadOnly Property Item(ByVal x As Integer) As Foo + Get + Return Nothing + End Get + End Property + End Class + + Public Class FooTests + Public Sub Test() + Dim substitute = NSubstitute.Substitute.[For](Of Foo)() + Dim x = {method}([|substitute{call}|], New Exception()) + End Sub + End Class +End Namespace"; + + await VerifyDiagnostic(source, InternalSetupSpecificationDescriptor, message); + } + + public override async Task ReportsNoDiagnostics_WhenSettingValueForProtectedInternalVirtualMember(string method, string call) + { + var source = $@"Imports System +Imports NSubstitute +Imports NSubstitute.ExceptionExtensions + +Namespace MyNamespace + Public Class Foo + Protected Friend Overridable ReadOnly Property Bar As Foo + + Protected Friend Overridable Function FooBar() As Foo + Return Nothing + End Function + + Default Protected Friend Overridable ReadOnly Property Item(ByVal x As Integer) As Foo + Get + Return Nothing + End Get + End Property + End Class + + Public Class FooTests + Public Sub Test() + Dim substitute = NSubstitute.Substitute.[For](Of Foo)() + Dim x = {method}(substitute{call}, New Exception()) + End Sub + End Class +End Namespace"; + + await VerifyNoDiagnostic(source); } } } \ No newline at end of file diff --git a/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupAnalyzerTests/ThrowsAsOrdinaryMethodWithGenericTypeSpecifiedTests.cs b/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupAnalyzerTests/ThrowsAsOrdinaryMethodWithGenericTypeSpecifiedTests.cs index a6d35b98..f48fcbda 100644 --- a/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupAnalyzerTests/ThrowsAsOrdinaryMethodWithGenericTypeSpecifiedTests.cs +++ b/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupAnalyzerTests/ThrowsAsOrdinaryMethodWithGenericTypeSpecifiedTests.cs @@ -34,7 +34,7 @@ End Sub End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsDiagnostics_WhenSettingValueForLiteral(string method, string literal, string type) @@ -52,7 +52,7 @@ End Sub End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, $"Member {literal} can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, $"Member {literal} can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsDiagnostics_WhenSettingValueForStaticMethod(string method) @@ -78,7 +78,7 @@ End Sub End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnostics_WhenSettingValueForVirtualMethod(string method) @@ -223,7 +223,7 @@ End Sub End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnostics_WhenSettingValueForAbstractMethod(string method) @@ -431,7 +431,7 @@ End Sub End Class End Namespace"; - await VerifyDiagnostic(source, Descriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnostics_WhenSettingValueForVirtualIndexer(string method) @@ -493,7 +493,7 @@ End Sub End Class End Namespace"; - await VerifyDiagnostic(source, Descriptor, "Member Item can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Item can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnostics_WhenUsingUnfortunatelyNamedMethod(string method) @@ -554,7 +554,7 @@ End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member FooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member FooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnosticsForSuppressedMember_WhenSuppressingNonVirtualGenericProperty(string method) @@ -581,7 +581,7 @@ End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member FooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member FooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnosticsForSuppressedMember_WhenSuppressingNonVirtualMethod(string method) @@ -613,7 +613,7 @@ End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnosticsForSuppressedMember_WhenSuppressingNonVirtualGenericMethod(string method) @@ -645,7 +645,7 @@ End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Bar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnosticsForSuppressedMember_WhenSuppressingNonVirtualIndexer(string method) @@ -681,7 +681,7 @@ End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Item can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Item can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnosticsForSuppressedMember_WhenSuppressingNonVirtualGenericIndexer(string method) @@ -717,7 +717,7 @@ End Class End Namespace "; - await VerifyDiagnostic(source, Descriptor, "Member Item can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member Item can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } public override async Task ReportsNoDiagnosticsForSuppressedMember_WhenSuppressingMembersFromEntireType(string method) @@ -781,7 +781,7 @@ End Namespace "Member FooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted." }; - var diagnostics = textParserResult.Spans.Select((span, idx) => CreateDiagnostic(Descriptor.OverrideMessage(diagnosticMessages[idx]), span.Span, span.LineSpan)).ToArray(); + var diagnostics = textParserResult.Spans.Select((span, idx) => CreateDiagnostic(NonVirtualSetupSpecificationDescriptor.OverrideMessage(diagnosticMessages[idx]), span.Span, span.LineSpan)).ToArray(); await VerifyDiagnostic(textParserResult.Text, diagnostics); } @@ -847,7 +847,7 @@ End Namespace "Member FooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted." }; - var diagnostics = textParserResult.Spans.Select((span, idx) => CreateDiagnostic(Descriptor.OverrideMessage(diagnosticMessages[idx]), span.Span, span.LineSpan)).ToArray(); + var diagnostics = textParserResult.Spans.Select((span, idx) => CreateDiagnostic(NonVirtualSetupSpecificationDescriptor.OverrideMessage(diagnosticMessages[idx]), span.Span, span.LineSpan)).ToArray(); await VerifyDiagnostic(textParserResult.Text, diagnostics); } @@ -917,7 +917,7 @@ End Namespace }; var diagnostics = textParserResult.Spans.Select((span, idx) => - CreateDiagnostic(Descriptor.OverrideMessage(diagnosticMessages[idx]), span.Span, span.LineSpan)).ToArray(); + CreateDiagnostic(NonVirtualSetupSpecificationDescriptor.OverrideMessage(diagnosticMessages[idx]), span.Span, span.LineSpan)).ToArray(); await VerifyDiagnostic(textParserResult.Text, diagnostics); } @@ -965,7 +965,141 @@ Function Bar() As Integer End Interface End Namespace"; - await VerifyDiagnostic(source, Descriptor, "Member GetFooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + await VerifyDiagnostic(source, NonVirtualSetupSpecificationDescriptor, "Member GetFooBar can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); + } + + public override async Task ReportsDiagnostics_WhenSettingValueForInternalVirtualMember_AndInternalsVisibleToNotApplied(string method, string call, string message) + { + var source = $@"Imports System +Imports NSubstitute +Imports NSubstitute.ExceptionExtensions + +Namespace MyNamespace + Public Class Foo + Friend Overridable ReadOnly Property Bar As Foo + + Friend Overridable Function FooBar() As Foo + Return Nothing + End Function + + Default Friend Overridable ReadOnly Property Item(ByVal x As Integer) As Foo + Get + Return Nothing + End Get + End Property + End Class + + Public Class FooTests + Public Sub Test() + Dim substitute = NSubstitute.Substitute.[For](Of Foo)() + Dim x = {method}([|substitute{call}|]) + End Sub + End Class +End Namespace"; + + await VerifyDiagnostic(source, InternalSetupSpecificationDescriptor, message); + } + + public override async Task ReportsNoDiagnostics_WhenSettingValueForInternalVirtualMember_AndInternalsVisibleToApplied(string method, string call) + { + var source = $@"Imports System +Imports NSubstitute +Imports NSubstitute.ExceptionExtensions + + + + + +Namespace MyNamespace + Public Class Foo + Friend Overridable ReadOnly Property Bar As Foo + + Friend Overridable Function FooBar() As Foo + Return Nothing + End Function + + Default Friend Overridable ReadOnly Property Item(ByVal x As Integer) As Foo + Get + Return Nothing + End Get + End Property + End Class + + Public Class FooTests + Public Sub Test() + Dim substitute = NSubstitute.Substitute.[For](Of Foo)() + Dim x = {method}(substitute{call}) + End Sub + End Class +End Namespace"; + + await VerifyNoDiagnostic(source); + } + + public override async Task ReportsDiagnostics_WhenSettingValueForInternalVirtualMember_AndInternalsVisibleToAppliedToWrongAssembly(string method, string call, string message) + { + var source = $@"Imports System +Imports NSubstitute +Imports NSubstitute.ExceptionExtensions + + + +Namespace MyNamespace + Public Class Foo + Friend Overridable ReadOnly Property Bar As Foo + + Friend Overridable Function FooBar() As Foo + Return Nothing + End Function + + Default Friend Overridable ReadOnly Property Item(ByVal x As Integer) As Foo + Get + Return Nothing + End Get + End Property + End Class + + Public Class FooTests + Public Sub Test() + Dim substitute = NSubstitute.Substitute.[For](Of Foo)() + Dim x = {method}([|substitute{call}|]) + End Sub + End Class +End Namespace"; + + await VerifyDiagnostic(source, InternalSetupSpecificationDescriptor, message); + } + + public override async Task ReportsNoDiagnostics_WhenSettingValueForProtectedInternalVirtualMember(string method, string call) + { + var source = $@"Imports System +Imports NSubstitute +Imports NSubstitute.ExceptionExtensions + +Namespace MyNamespace + Public Class Foo + Protected Friend Overridable ReadOnly Property Bar As Foo + + Protected Friend Overridable Function FooBar() As Foo + Return Nothing + End Function + + Default Protected Friend Overridable ReadOnly Property Item(ByVal x As Integer) As Foo + Get + Return Nothing + End Get + End Property + End Class + + Public Class FooTests + Public Sub Test() + Dim substitute = NSubstitute.Substitute.[For](Of Foo)() + Dim x = {method}(substitute{call}) + End Sub + End Class +End Namespace"; + + await VerifyNoDiagnostic(source); } } } \ No newline at end of file diff --git a/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupReceivedAnalyzerTests/NonVirtualSetupReceivedDiagnosticVerifier.cs b/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupReceivedAnalyzerTests/NonVirtualSetupReceivedDiagnosticVerifier.cs index 3513d106..c8b59f10 100644 --- a/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupReceivedAnalyzerTests/NonVirtualSetupReceivedDiagnosticVerifier.cs +++ b/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupReceivedAnalyzerTests/NonVirtualSetupReceivedDiagnosticVerifier.cs @@ -74,8 +74,22 @@ public abstract class NonVirtualSetupReceivedDiagnosticVerifier : VisualBasicDia [InlineData] public abstract Task ReportsDiagnostics_WhenCheckingReceivedCallsForNonVirtualIndexer(string method); + [CombinatoryTheory] + [InlineData] public abstract Task ReportsDiagnostics_WhenSettingValueForInternalVirtualMember_AndInternalsVisibleToNotApplied(string method, string call, string message); + [CombinatoryTheory] + [InlineData] + public abstract Task ReportsNoDiagnostics_WhenSettingValueForInternalVirtualMember_AndInternalsVisibleToApplied(string method, string call); + + [CombinatoryTheory] + [InlineData] + public abstract Task ReportsDiagnostics_WhenSettingValueForInternalVirtualMember_AndInternalsVisibleToAppliedToWrongAssembly(string method, string call, string message); + + [CombinatoryTheory] + [InlineData] + public abstract Task ReportsNoDiagnostics_WhenSettingValueForProtectedInternalVirtualMember(string method, string call); + [CombinatoryTheory] [InlineData] public abstract Task ReportsNoDiagnostics_WhenUsingUnfortunatelyNamedMethod(string method); diff --git a/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupReceivedAnalyzerTests/ReceivedAsExtensionMethodTests.cs b/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupReceivedAnalyzerTests/ReceivedAsExtensionMethodTests.cs index 95ad0fe2..4fc039cc 100644 --- a/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupReceivedAnalyzerTests/ReceivedAsExtensionMethodTests.cs +++ b/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupReceivedAnalyzerTests/ReceivedAsExtensionMethodTests.cs @@ -394,6 +394,26 @@ End Class await VerifyDiagnostic(source, Descriptor, "Member Item can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } + public override Task ReportsDiagnostics_WhenSettingValueForInternalVirtualMember_AndInternalsVisibleToNotApplied(string method, string call, string message) + { + throw new System.NotImplementedException(); + } + + public override Task ReportsNoDiagnostics_WhenSettingValueForInternalVirtualMember_AndInternalsVisibleToApplied(string method, string call) + { + throw new System.NotImplementedException(); + } + + public override Task ReportsDiagnostics_WhenSettingValueForInternalVirtualMember_AndInternalsVisibleToAppliedToWrongAssembly(string method, string call, string message) + { + throw new System.NotImplementedException(); + } + + public override Task ReportsNoDiagnostics_WhenSettingValueForProtectedInternalVirtualMember(string method, string call) + { + throw new System.NotImplementedException(); + } + public override async Task ReportsNoDiagnostics_WhenUsingUnfortunatelyNamedMethod(string method) { var source = $@"Imports System.Runtime.CompilerServices diff --git a/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupReceivedAnalyzerTests/ReceivedAsOrdinaryMethodTests.cs b/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupReceivedAnalyzerTests/ReceivedAsOrdinaryMethodTests.cs index 1389700b..506bc1cc 100644 --- a/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupReceivedAnalyzerTests/ReceivedAsOrdinaryMethodTests.cs +++ b/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupReceivedAnalyzerTests/ReceivedAsOrdinaryMethodTests.cs @@ -423,6 +423,26 @@ End Class await VerifyDiagnostic(source, Descriptor, "Member Item can not be intercepted. Only interface members and overrideable, overriding, and must override members can be intercepted."); } + public override Task ReportsDiagnostics_WhenSettingValueForInternalVirtualMember_AndInternalsVisibleToNotApplied(string method, string call, string message) + { + throw new System.NotImplementedException(); + } + + public override Task ReportsNoDiagnostics_WhenSettingValueForInternalVirtualMember_AndInternalsVisibleToApplied(string method, string call) + { + throw new System.NotImplementedException(); + } + + public override Task ReportsDiagnostics_WhenSettingValueForInternalVirtualMember_AndInternalsVisibleToAppliedToWrongAssembly(string method, string call, string message) + { + throw new System.NotImplementedException(); + } + + public override Task ReportsNoDiagnostics_WhenSettingValueForProtectedInternalVirtualMember(string method, string call) + { + throw new System.NotImplementedException(); + } + public override async Task ReportsNoDiagnostics_WhenUsingUnfortunatelyNamedMethod(string method) { var source = $@"Imports System.Runtime.CompilerServices diff --git a/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupWhenAnalyzerTests/NonVirtualSetupWhenDiagnosticVerifier.cs b/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupWhenAnalyzerTests/NonVirtualSetupWhenDiagnosticVerifier.cs index 2dc25a7e..2872e94c 100644 --- a/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupWhenAnalyzerTests/NonVirtualSetupWhenDiagnosticVerifier.cs +++ b/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupWhenAnalyzerTests/NonVirtualSetupWhenDiagnosticVerifier.cs @@ -170,6 +170,22 @@ Dim x as Integer [InlineData] public abstract Task ReportsNoDiagnostics_WhenSettingValueForVirtualMember_InRegularFunction(string method); + [CombinatoryTheory] + [InlineData] + public abstract Task ReportsDiagnostics_WhenSettingValueForInternalVirtualMember_AndInternalsVisibleToNotApplied(string method, string call, string message); + + [CombinatoryTheory] + [InlineData] + public abstract Task ReportsNoDiagnostics_WhenSettingValueForInternalVirtualMember_AndInternalsVisibleToApplied(string method, string call); + + [CombinatoryTheory] + [InlineData] + public abstract Task ReportsDiagnostics_WhenSettingValueForInternalVirtualMember_AndInternalsVisibleToAppliedToWrongAssembly(string method, string call, string message); + + [CombinatoryTheory] + [InlineData] + public abstract Task ReportsNoDiagnostics_WhenSettingValueForProtectedInternalVirtualMember(string method, string call); + protected override DiagnosticAnalyzer GetDiagnosticAnalyzer() { return new NonVirtualSetupWhenAnalyzer(); diff --git a/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupWhenAnalyzerTests/WhenAsExtensionMethodTests.cs b/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupWhenAnalyzerTests/WhenAsExtensionMethodTests.cs index 7d19c115..d0df29f8 100644 --- a/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupWhenAnalyzerTests/WhenAsExtensionMethodTests.cs +++ b/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupWhenAnalyzerTests/WhenAsExtensionMethodTests.cs @@ -427,5 +427,25 @@ End Namespace await VerifyNoDiagnostic(source); } + + public override Task ReportsDiagnostics_WhenSettingValueForInternalVirtualMember_AndInternalsVisibleToNotApplied(string method, string call, string message) + { + throw new System.NotImplementedException(); + } + + public override Task ReportsNoDiagnostics_WhenSettingValueForInternalVirtualMember_AndInternalsVisibleToApplied(string method, string call) + { + throw new System.NotImplementedException(); + } + + public override Task ReportsDiagnostics_WhenSettingValueForInternalVirtualMember_AndInternalsVisibleToAppliedToWrongAssembly(string method, string call, string message) + { + throw new System.NotImplementedException(); + } + + public override Task ReportsNoDiagnostics_WhenSettingValueForProtectedInternalVirtualMember(string method, string call) + { + throw new System.NotImplementedException(); + } } } \ No newline at end of file diff --git a/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupWhenAnalyzerTests/WhenAsOrdinaryMethodTests.cs b/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupWhenAnalyzerTests/WhenAsOrdinaryMethodTests.cs index a2f8f16f..3ad6569e 100644 --- a/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupWhenAnalyzerTests/WhenAsOrdinaryMethodTests.cs +++ b/tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/NonVirtualSetupWhenAnalyzerTests/WhenAsOrdinaryMethodTests.cs @@ -424,5 +424,25 @@ End Namespace await VerifyNoDiagnostic(source); } + + public override Task ReportsDiagnostics_WhenSettingValueForInternalVirtualMember_AndInternalsVisibleToNotApplied(string method, string call, string message) + { + throw new System.NotImplementedException(); + } + + public override Task ReportsNoDiagnostics_WhenSettingValueForInternalVirtualMember_AndInternalsVisibleToApplied(string method, string call) + { + throw new System.NotImplementedException(); + } + + public override Task ReportsDiagnostics_WhenSettingValueForInternalVirtualMember_AndInternalsVisibleToAppliedToWrongAssembly(string method, string call, string message) + { + throw new System.NotImplementedException(); + } + + public override Task ReportsNoDiagnostics_WhenSettingValueForProtectedInternalVirtualMember(string method, string call) + { + throw new System.NotImplementedException(); + } } } \ No newline at end of file