| File: Code\RelaxTestNamingTest.cs | Web Access |
| Project: src\test\Microsoft.ML.CodeAnalyzer.Tests\Microsoft.ML.CodeAnalyzer.Tests.csproj (Microsoft.ML.CodeAnalyzer.Tests) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System.Collections.Generic; using System.Collections.Immutable; using System.Diagnostics.CodeAnalysis; using System.Threading.Tasks; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.Diagnostics; using Microsoft.CodeAnalysis.Testing; using Microsoft.ML.InternalCodeAnalyzer; using Xunit; using VerifyCS = Microsoft.ML.CodeAnalyzer.Tests.Helpers.CSharpCodeFixVerifier< Microsoft.ML.CodeAnalyzer.Tests.Code.RelaxTestNamingTest.WarnForMissingAsyncSuffix, Microsoft.CodeAnalysis.Testing.EmptyCodeFixProvider>; namespace Microsoft.ML.CodeAnalyzer.Tests.Code { public class RelaxTestNamingTest { private static Solution WithoutSuppressedDiagnosticsTransform(Solution solution, ProjectId projectId) { var compilationOptions = solution.GetProject(projectId).CompilationOptions; return solution.WithProjectCompilationOptions(projectId, compilationOptions.WithReportSuppressedDiagnostics(false)); } [Fact(Skip = "https://github.com/dotnet/roslyn/issues/41584")] public async Task TestClassWithFact() { var code = @" using System.Threading.Tasks; using Xunit; public class SomeClass { [Fact] public async Task [|TestMethod|]() { } } "; await new VerifyCS.Test { ReferenceAssemblies = BaseTestClassTest.ReferenceAssemblies, TestState = { Sources = { code } }, SolutionTransforms = { WithoutSuppressedDiagnosticsTransform }, }.RunAsync(); await new TestWithSuppressor { ReferenceAssemblies = BaseTestClassTest.ReferenceAssemblies, TestState = { Sources = { code }, MarkupHandling = MarkupMode.Ignore, }, SolutionTransforms = { WithoutSuppressedDiagnosticsTransform }, }.RunAsync(); } [Fact(Skip = "https://github.com/dotnet/roslyn/issues/41584")] public async Task TestClassWithTheory() { var code = @" using Xunit; public class [|SomeClass|] { [Theory, InlineData(0)] public void TestMethod(int arg) { } } "; await new VerifyCS.Test { ReferenceAssemblies = BaseTestClassTest.ReferenceAssemblies, TestState = { Sources = { code } }, SolutionTransforms = { WithoutSuppressedDiagnosticsTransform }, }.RunAsync(); await new TestWithSuppressor { ReferenceAssemblies = BaseTestClassTest.ReferenceAssemblies, TestState = { Sources = { code }, MarkupHandling = MarkupMode.Ignore, }, SolutionTransforms = { WithoutSuppressedDiagnosticsTransform }, }.RunAsync(); } [Fact] public async Task TestAlreadyHasAsyncSuffix() { var code = @" using System.Threading.Tasks; using Xunit; public class SomeClass { [Fact] public async Task TestMethodAsync() { } } "; await new VerifyCS.Test { ReferenceAssemblies = BaseTestClassTest.ReferenceAssemblies, TestState = { Sources = { code } }, }.RunAsync(); } [DiagnosticAnalyzer(LanguageNames.CSharp)] public class WarnForMissingAsyncSuffix : DiagnosticAnalyzer { [SuppressMessage("MicrosoftCodeAnalysisDesign", "RS1017:DiagnosticId for analyzers must be a non-null constant.", Justification = "For suppression test only.")] public static readonly DiagnosticDescriptor Rule = new DiagnosticDescriptor(RelaxTestNamingSuppressor.Rule.SuppressedDiagnosticId, "Title", "Message", "Category", DiagnosticSeverity.Warning, isEnabledByDefault: true); public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics => ImmutableArray.Create(Rule); public override void Initialize(AnalysisContext context) { context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None); context.EnableConcurrentExecution(); context.RegisterSymbolAction(AnalyzeSymbol, SymbolKind.Method); } private void AnalyzeSymbol(SymbolAnalysisContext context) { var method = (IMethodSymbol)context.Symbol; if (method.Name.EndsWith("Async")) { return; } if (method.ReturnType.MetadataName != "Task") { // Not asynchronous (incomplete checking is sufficient for this test) return; } context.ReportDiagnostic(Diagnostic.Create(Rule, method.Locations[0])); } } internal class TestWithSuppressor : VerifyCS.Test { protected override IEnumerable<DiagnosticAnalyzer> GetDiagnosticAnalyzers() { foreach (var analyzer in base.GetDiagnosticAnalyzers()) yield return analyzer; yield return new RelaxTestNamingSuppressor(); } } } }