Skip to content

Commit 3edadcb

Browse files
authored
Merge pull request #203 from nsubstitute/GH-202-received-event-subscription
GH-202 - do not report NS500 for event subscriptions
2 parents abe5b9f + 60d6225 commit 3edadcb

8 files changed

Lines changed: 105 additions & 1 deletion

File tree

src/NSubstitute.Analyzers.Shared/DiagnosticAnalyzers/AbstractUnusedReceivedAnalyzer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ protected AbstractUnusedReceivedAnalyzer(IDiagnosticDescriptorsProvider diagnost
2121
public sealed override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics { get; }
2222

2323
private static readonly ImmutableHashSet<OperationKind> PossibleParents =
24-
ImmutableHashSet.Create(OperationKind.PropertyReference, OperationKind.Invocation);
24+
ImmutableHashSet.Create(OperationKind.PropertyReference, OperationKind.Invocation, OperationKind.EventReference);
2525

2626
protected sealed override void InitializeAnalyzer(AnalysisContext context)
2727
{

tests/NSubstitute.Analyzers.Tests.CSharp/DiagnosticAnalyzerTests/UnusedReceivedAnalyzerTests/ReceivedAsExtensionMethodTests.cs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,30 @@ public void Test()
239239
substitute.{method};
240240
}}
241241
}}
242+
}}";
243+
await VerifyNoDiagnostic(source);
244+
}
245+
246+
public override async Task ReportsNoDiagnostics_WhenSubscribingToEvent(string method)
247+
{
248+
var source = $@"using NSubstitute;
249+
using NSubstitute.ReceivedExtensions;
250+
using System;
251+
namespace MyNamespace
252+
{{
253+
public class Foo
254+
{{
255+
public event Action SomeEvent;
256+
}}
257+
258+
public class FooTests
259+
{{
260+
public void Test()
261+
{{
262+
var substitute = NSubstitute.Substitute.For<Foo>();
263+
substitute.{method}.SomeEvent += Arg.Any<Action>();
264+
}}
265+
}}
242266
}}";
243267
await VerifyNoDiagnostic(source);
244268
}

tests/NSubstitute.Analyzers.Tests.CSharp/DiagnosticAnalyzerTests/UnusedReceivedAnalyzerTests/ReceivedAsOrdinaryMethodTests.cs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,30 @@ public void Test()
300300
{method};
301301
}}
302302
}}
303+
}}";
304+
await VerifyNoDiagnostic(source);
305+
}
306+
307+
public override async Task ReportsNoDiagnostics_WhenSubscribingToEvent(string method)
308+
{
309+
var source = $@"using NSubstitute;
310+
using NSubstitute.ReceivedExtensions;
311+
using System;
312+
namespace MyNamespace
313+
{{
314+
public class Foo
315+
{{
316+
public event Action SomeEvent;
317+
}}
318+
319+
public class FooTests
320+
{{
321+
public void Test()
322+
{{
323+
var substitute = NSubstitute.Substitute.For<Foo>();
324+
{method}.SomeEvent += Arg.Any<Action>();
325+
}}
326+
}}
303327
}}";
304328
await VerifyNoDiagnostic(source);
305329
}

tests/NSubstitute.Analyzers.Tests.CSharp/DiagnosticAnalyzerTests/UnusedReceivedAnalyzerTests/UnusedReceivedDiagnosticVerifier.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,8 @@ public abstract class UnusedReceivedDiagnosticVerifier : CSharpDiagnosticVerifie
3939
[CombinatoryTheory]
4040
[InlineData]
4141
public abstract Task ReportsNoDiagnostics_WhenUsedWithUnfortunatelyNamedMethod(string method);
42+
43+
[CombinatoryTheory]
44+
[InlineData]
45+
public abstract Task ReportsNoDiagnostics_WhenSubscribingToEvent(string method);
4246
}

tests/NSubstitute.Analyzers.Tests.Shared/DiagnosticAnalyzers/IUnusedReceivedDiagnosticVerifier.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,6 @@ public interface IUnusedReceivedDiagnosticVerifier
1515
Task ReportNoDiagnostics_WhenUsedWithInvokingDelegate(string method);
1616

1717
Task ReportsNoDiagnostics_WhenUsedWithUnfortunatelyNamedMethod(string method);
18+
19+
Task ReportsNoDiagnostics_WhenSubscribingToEvent(string method);
1820
}

tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/UnusedReceivedAnalyzerTests/ReceivedAsExtensionMethodTests.cs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,4 +208,27 @@ End Namespace
208208
";
209209
await VerifyNoDiagnostic(source);
210210
}
211+
212+
public override async Task ReportsNoDiagnostics_WhenSubscribingToEvent(string method)
213+
{
214+
var source = @$"Imports NSubstitute
215+
Imports System
216+
Imports NSubstitute.ReceivedExtensions
217+
Imports NUnit.Framework
218+
219+
Namespace MyNamespace
220+
Public Class Foo
221+
Public Event SomeEvent As Action
222+
End Class
223+
224+
Public Class FooTests
225+
Public Sub Test()
226+
Dim substitute = NSubstitute.Substitute.[For] (Of Foo)()
227+
AddHandler substitute.{method}.SomeEvent, Arg.Any (Of Action)()
228+
End Sub
229+
End Class
230+
End Namespace";
231+
232+
await VerifyNoDiagnostic(source);
233+
}
211234
}

tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/UnusedReceivedAnalyzerTests/ReceivedAsOrdinaryMethodTests.cs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -288,4 +288,27 @@ End Namespace
288288
";
289289
await VerifyNoDiagnostic(source);
290290
}
291+
292+
public override async Task ReportsNoDiagnostics_WhenSubscribingToEvent(string method)
293+
{
294+
var source = @$"Imports NSubstitute
295+
Imports System
296+
Imports NSubstitute.ReceivedExtensions
297+
Imports NUnit.Framework
298+
299+
Namespace MyNamespace
300+
Public Class Foo
301+
Public Event SomeEvent As Action
302+
End Class
303+
304+
Public Class FooTests
305+
Public Sub Test()
306+
Dim substitute = NSubstitute.Substitute.[For] (Of Foo)()
307+
AddHandler {method}.SomeEvent, Arg.Any (Of Action)()
308+
End Sub
309+
End Class
310+
End Namespace";
311+
312+
await VerifyNoDiagnostic(source);
313+
}
291314
}

tests/NSubstitute.Analyzers.Tests.VisualBasic/DiagnosticAnalyzersTests/UnusedReceivedAnalyzerTests/UnusedReceivedDiagnosticVerifier.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,8 @@ public abstract class UnusedReceivedDiagnosticVerifier : VisualBasicDiagnosticVe
3939
[CombinatoryTheory]
4040
[InlineData]
4141
public abstract Task ReportsNoDiagnostics_WhenUsedWithUnfortunatelyNamedMethod(string method);
42+
43+
[CombinatoryTheory]
44+
[InlineData]
45+
public abstract Task ReportsNoDiagnostics_WhenSubscribingToEvent(string method);
4246
}

0 commit comments

Comments
 (0)