From b095754faf4c4721b911025decbaf603163cccd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Amaury=20Lev=C3=A9?= Date: Thu, 18 Jul 2024 11:11:26 +0200 Subject: [PATCH] Fix TestInitialize and TestCleanup analyzers to allow generic class (#3280) --- .../TestCleanupShouldBeValidAnalyzer.cs | 2 +- .../TestInitializeShouldBeValidAnalyzer.cs | 2 +- .../TestCleanupShouldBeValidAnalyzerTests.cs | 18 ++++++++++++++++++ ...TestInitializeShouldBeValidAnalyzerTests.cs | 18 ++++++++++++++++++ 4 files changed, 38 insertions(+), 2 deletions(-) diff --git a/src/Analyzers/MSTest.Analyzers/TestCleanupShouldBeValidAnalyzer.cs b/src/Analyzers/MSTest.Analyzers/TestCleanupShouldBeValidAnalyzer.cs index 8c3c74b4e9..14fa48d1b5 100644 --- a/src/Analyzers/MSTest.Analyzers/TestCleanupShouldBeValidAnalyzer.cs +++ b/src/Analyzers/MSTest.Analyzers/TestCleanupShouldBeValidAnalyzer.cs @@ -55,7 +55,7 @@ private static void AnalyzeSymbol(SymbolAnalysisContext context, INamedTypeSymbo var methodSymbol = (IMethodSymbol)context.Symbol; if (methodSymbol.IsTestCleanupMethod(testCleanupAttributeSymbol) && !methodSymbol.HasValidFixtureMethodSignature(taskSymbol, valueTaskSymbol, canDiscoverInternals, shouldBeStatic: false, - allowGenericType: false, testContextSymbol: null, testClassAttributeSymbol, fixtureAllowInheritedTestClass: true, out bool isFixable)) + allowGenericType: true, testContextSymbol: null, testClassAttributeSymbol, fixtureAllowInheritedTestClass: true, out bool isFixable)) { context.ReportDiagnostic(isFixable ? methodSymbol.CreateDiagnostic(Rule, methodSymbol.Name) diff --git a/src/Analyzers/MSTest.Analyzers/TestInitializeShouldBeValidAnalyzer.cs b/src/Analyzers/MSTest.Analyzers/TestInitializeShouldBeValidAnalyzer.cs index ccecb936af..8a48f29d91 100644 --- a/src/Analyzers/MSTest.Analyzers/TestInitializeShouldBeValidAnalyzer.cs +++ b/src/Analyzers/MSTest.Analyzers/TestInitializeShouldBeValidAnalyzer.cs @@ -55,7 +55,7 @@ private static void AnalyzeSymbol(SymbolAnalysisContext context, INamedTypeSymbo var methodSymbol = (IMethodSymbol)context.Symbol; if (methodSymbol.IsTestInitializeMethod(testInitializeAttributeSymbol) && !methodSymbol.HasValidFixtureMethodSignature(taskSymbol, valueTaskSymbol, canDiscoverInternals, shouldBeStatic: false, - allowGenericType: false, testContextSymbol: null, testClassAttributeSymbol, fixtureAllowInheritedTestClass: true, out bool isFixable)) + allowGenericType: true, testContextSymbol: null, testClassAttributeSymbol, fixtureAllowInheritedTestClass: true, out bool isFixable)) { context.ReportDiagnostic(isFixable ? methodSymbol.CreateDiagnostic(Rule, methodSymbol.Name) diff --git a/test/UnitTests/MSTest.Analyzers.UnitTests/TestCleanupShouldBeValidAnalyzerTests.cs b/test/UnitTests/MSTest.Analyzers.UnitTests/TestCleanupShouldBeValidAnalyzerTests.cs index 099c19cf2f..b30e073f5a 100644 --- a/test/UnitTests/MSTest.Analyzers.UnitTests/TestCleanupShouldBeValidAnalyzerTests.cs +++ b/test/UnitTests/MSTest.Analyzers.UnitTests/TestCleanupShouldBeValidAnalyzerTests.cs @@ -515,4 +515,22 @@ public void TestCleanup() await VerifyCS.VerifyAnalyzerAsync(code); } + + public async Task WhenTestCleanupIsOnGenericClass_NoDiagnostic() + { + string code = """ + using Microsoft.VisualStudio.TestTools.UnitTesting; + + [TestClass] + public class MyTestClass + { + [TestCleanup] + public void TestCleanup() + { + } + } + """; + + await VerifyCS.VerifyAnalyzerAsync(code); + } } diff --git a/test/UnitTests/MSTest.Analyzers.UnitTests/TestInitializeShouldBeValidAnalyzerTests.cs b/test/UnitTests/MSTest.Analyzers.UnitTests/TestInitializeShouldBeValidAnalyzerTests.cs index a4c7a358f8..e46e21c15e 100644 --- a/test/UnitTests/MSTest.Analyzers.UnitTests/TestInitializeShouldBeValidAnalyzerTests.cs +++ b/test/UnitTests/MSTest.Analyzers.UnitTests/TestInitializeShouldBeValidAnalyzerTests.cs @@ -513,4 +513,22 @@ public void TestInitialize() await VerifyCS.VerifyAnalyzerAsync(code); } + + public async Task WhenTestInitializeIsOnGenericClass_NoDiagnostic() + { + string code = """ + using Microsoft.VisualStudio.TestTools.UnitTesting; + + [TestClass] + public class MyTestClass + { + [TestInitialize] + public void TestInitialize() + { + } + } + """; + + await VerifyCS.VerifyAnalyzerAsync(code); + } }