Skip to content

Commit ce15659

Browse files
authored
Merge pull request #1002 from manfred-brands/Issue1001_AsyncDisposable
Also recognized DisposeAsync for rule NUnit1028
2 parents 6293336 + 83d0001 commit ce15659

4 files changed

Lines changed: 63 additions & 4 deletions

File tree

src/nunit.analyzers.tests/NonTestMethodAccessibilityLevel/NonTestMethodAccessibilityLevelAnalyzerTests.cs

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,59 @@ public override void Dispose() { }
173173
RoslynAssert.Valid(analyzer, testCode);
174174
}
175175

176+
[Test]
177+
public void AnalyzeWhenMethodIsExplicitDisposeAsync()
178+
{
179+
var testCode = TestUtility.WrapClassInNamespaceAndAddUsing(@"
180+
public sealed class TestClass : IAsyncDisposable
181+
{
182+
[Test]
183+
public void TestMethod() { }
184+
185+
ValueTask IAsyncDisposable.DisposeAsync() => default(ValueTask);
186+
}
187+
");
188+
189+
RoslynAssert.Valid(analyzer, testCode);
190+
}
191+
192+
[Test]
193+
public void AnalyzeWhenMethodIsDisposeAsync()
194+
{
195+
var testCode = TestUtility.WrapClassInNamespaceAndAddUsing(@"
196+
public sealed class TestClass : IAsyncDisposable
197+
{
198+
[Test]
199+
public void TestMethod() { }
200+
201+
public ValueTask DisposeAsync() => default(ValueTask);
202+
}
203+
");
204+
205+
RoslynAssert.Valid(analyzer, testCode);
206+
}
207+
208+
[Test]
209+
public void AnalyzeWhenMethodIsDisposeAsyncOverride()
210+
{
211+
var testCode = TestUtility.WrapClassInNamespaceAndAddUsing(@"
212+
public class BaseClass : IAsyncDisposable
213+
{
214+
public virtual ValueTask DisposeAsync() => default(ValueTask);
215+
}
216+
217+
public sealed class DerivedClass : BaseClass
218+
{
219+
[Test]
220+
public void TestMethod() { }
221+
222+
public override ValueTask DisposeAsync() => default(ValueTask);
223+
}
224+
");
225+
226+
RoslynAssert.Valid(analyzer, testCode);
227+
}
228+
176229
[Test]
177230
public void AnalyzeWhenMethodIsBaseClassOverride()
178231
{

src/nunit.analyzers.tests/SetUpFixture.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System;
12
using Gu.Roslyn.Asserts;
23
using Microsoft.CodeAnalysis.CSharp;
34
using NUnit.Framework;
@@ -16,10 +17,10 @@ public void SetDefaults()
1617
{
1718
Settings.Default = Settings.Default
1819
#if NUNIT4
19-
.WithMetadataReferences(MetadataReferences.Transitive(typeof(Assert), typeof(ClassicAssert)))
20+
.WithMetadataReferences(MetadataReferences.Transitive(typeof(Assert), typeof(ClassicAssert), typeof(IAsyncDisposable)))
2021
.WithParseOption(new CSharpParseOptions(LanguageVersion.Preview).WithPreprocessorSymbols("NUNIT4"));
2122
#else
22-
.WithMetadataReferences(MetadataReferences.Transitive(typeof(Assert)))
23+
.WithMetadataReferences(MetadataReferences.Transitive(typeof(Assert), typeof(IAsyncDisposable)))
2324
.WithParseOption(new CSharpParseOptions(LanguageVersion.Preview).WithPreprocessorSymbols("NUNIT3"));
2425
#endif
2526
}

src/nunit.analyzers.tests/nunit.analyzers.tests.csproj

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,16 @@
3232

3333
<ItemGroup>
3434
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.6.0" />
35-
<PackageReference Include="NUnit3TestAdapter" Version="5.2.0" />
35+
<PackageReference Include="NUnit3TestAdapter" Version="6.2.0" />
3636
<PackageReference Include="Gu.Roslyn.Asserts" Version="4.3.0" />
3737
<PackageReference Include="Gu.Roslyn.Asserts.Analyzers" Version="4.0.0" />
3838
<PackageReference Include="System.Collections.Immutable" Version="8.0.0" />
3939
</ItemGroup>
4040

41+
<ItemGroup Condition="'$(TargetFramework)' == 'net462'">
42+
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="8.0.0" />
43+
</ItemGroup>
44+
4145
<ItemGroup>
4246
<ProjectReference Include="..\nunit.analyzers\nunit.analyzers.csproj" OutputItemType="Analyzer" />
4347
<ProjectReference Include="..\nunit.analyzers.codefixes\nunit.analyzers.codefixes.csproj" OutputItemType="Analyzer" />

src/nunit.analyzers/NonTestMethodAccessibilityLevel/NonTestMethodAccessibilityLevelAnalyzer.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,8 @@ private static bool IsOverride(IMethodSymbol method)
8181

8282
private static bool IsDisposeMethod(IMethodSymbol method)
8383
{
84-
return method.IsInterfaceImplementation("System.IDisposable");
84+
return method.IsInterfaceImplementation("System.IDisposable") ||
85+
method.IsInterfaceImplementation("System.IAsyncDisposable");
8586
}
8687
}
8788
}

0 commit comments

Comments
 (0)