File: Microsoft.CodeQuality.Analyzers\ApiDesignGuidelines\DoNotNameEnumValuesReservedTests.cs
Web Access
Project: ..\..\..\src\Microsoft.CodeAnalysis.NetAnalyzers\tests\Microsoft.CodeAnalysis.NetAnalyzers.UnitTests\Microsoft.CodeAnalysis.NetAnalyzers.UnitTests.csproj (Microsoft.CodeAnalysis.NetAnalyzers.UnitTests)
// Copyright (c) Microsoft.  All Rights Reserved.  Licensed under the MIT license.  See License.txt in the project root for license information.
 
using System.Threading.Tasks;
using Microsoft.CodeAnalysis.Testing;
using Xunit;
using VerifyCS = Test.Utilities.CSharpCodeFixVerifier<
    Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines.DoNotNameEnumValuesReserved,
    Microsoft.CodeAnalysis.Testing.EmptyCodeFixProvider>;
using VerifyVB = Test.Utilities.VisualBasicCodeFixVerifier<
    Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines.DoNotNameEnumValuesReserved,
    Microsoft.CodeAnalysis.Testing.EmptyCodeFixProvider>;
 
namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines.UnitTests
{
    public class DoNotNameEnumValuesReservedTests
    {
        [Fact]
        public async Task CA1700_NameContainsReserved_DiagnosticAsync()
        {
            await VerifyCS.VerifyAnalyzerAsync(@"
public enum Enum1
{
    Reserved,
    SomethingReserved,
    ReservedSuffix,
}",
                GetCSharpResultAt(4, 5, "Enum1", "Reserved"),
                GetCSharpResultAt(5, 5, "Enum1", "SomethingReserved"),
                GetCSharpResultAt(6, 5, "Enum1", "ReservedSuffix"));
 
            await VerifyVB.VerifyAnalyzerAsync(@"
Public Enum Enum1
    Reserved
    SomethingReserved
    ReservedSuffix
End Enum",
                GetBasicResultAt(3, 5, "Enum1", "Reserved"),
                GetBasicResultAt(4, 5, "Enum1", "SomethingReserved"),
                GetBasicResultAt(5, 5, "Enum1", "ReservedSuffix"));
        }
 
        [Fact]
        public async Task CA1700_NameContainsReservedWithoutCorrectCase_DiagnosticAsync()
        {
            await VerifyCS.VerifyAnalyzerAsync(@"
public enum Enum1
{
    [|reserved|],
    [|RESERVED|],
}");
 
            await VerifyVB.VerifyAnalyzerAsync(@"
Public Enum Enum1
    [|reserved|]
End Enum
 
Public Enum Enum2
    [|RESERVED|]
End Enum");
        }
 
        [Fact]
        public async Task CA1700_NameContainsReservedWithoutCorrectCase_NoDiagnosticAsync()
        {
            await VerifyCS.VerifyAnalyzerAsync(@"
public enum Enum1
{
    Somethingreserved,
    ReserveDSuffix,
    ReSeRvEd,
}");
 
            await VerifyVB.VerifyAnalyzerAsync(@"
Public Enum Enum1
    Somethingreserved
    ReserveDSuffix
    ReSeRvEd
End Enum");
        }
 
        [Fact]
        public async Task CA1700_EnumIsNotPublicAndNameContainsReserved_NoDiagnosticAsync()
        {
            await VerifyCS.VerifyAnalyzerAsync(@"
internal enum Enum1
{
    Reserved,
    SomethingReserved,
    ReservedSuffix,
}");
 
            await VerifyVB.VerifyAnalyzerAsync(@"
Friend Enum Enum1
    Reserved
    SomethingReserved
    ReservedSuffix
End Enum");
        }
 
        [Fact]
        public async Task CA1700_NameContainsPreserved_NoDiagnosticAsync()
        {
            await VerifyCS.VerifyAnalyzerAsync(@"
public enum Enum1
{
    Preserved,
}");
 
            await VerifyVB.VerifyAnalyzerAsync(@"
Public Enum Enum1
    Preserved
End Enum");
        }
 
        private static DiagnosticResult GetCSharpResultAt(int line, int column, string className, string memberName)
#pragma warning disable RS0030 // Do not use banned APIs
            => VerifyCS.Diagnostic()
                .WithLocation(line, column)
#pragma warning restore RS0030 // Do not use banned APIs
                .WithArguments(className, memberName);
 
        private static DiagnosticResult GetBasicResultAt(int line, int column, string className, string memberName)
#pragma warning disable RS0030 // Do not use banned APIs
            => VerifyVB.Diagnostic()
                .WithLocation(line, column)
#pragma warning restore RS0030 // Do not use banned APIs
                .WithArguments(className, memberName);
    }
}