File: Microsoft.CodeQuality.Analyzers\ApiDesignGuidelines\EnumWithFlagsAttributeTests.Fixer.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 Xunit;
using VerifyCS = Test.Utilities.CSharpCodeFixVerifier<
    Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines.EnumWithFlagsAttributeAnalyzer,
    Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines.EnumWithFlagsAttributeFixer>;
using VerifyVB = Test.Utilities.VisualBasicCodeFixVerifier<
    Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines.EnumWithFlagsAttributeAnalyzer,
    Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines.EnumWithFlagsAttributeFixer>;
 
namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines.UnitTests
{
    public class EnumWithFlagsAttributeFixerTests
    {
        [Fact]
        public async Task CSharp_EnumWithFlagsAttributes_SimpleCaseAsync()
        {
            var code = @"
public enum {|CA1027:SimpleFlagsEnumClass|}
{
    Zero = 0,
    One = 1,
    Two = 2,
    Four = 4
}
 
public enum {|CA1027:HexFlagsEnumClass|}
{
    One = 0x1,
    Two = 0x2,
    Four = 0x4,
    All = 0x7
}";
 
            var expected = @"
[System.Flags]
public enum SimpleFlagsEnumClass
{
    Zero = 0,
    One = 1,
    Two = 2,
    Four = 4
}
 
[System.Flags]
public enum HexFlagsEnumClass
{
    One = 0x1,
    Two = 0x2,
    Four = 0x4,
    All = 0x7
}";
 
            // Verify fixes for CA1027
            await VerifyCS.VerifyCodeFixAsync(code, expected);
        }
 
        [Fact]
        public async Task VisualBasic_EnumWithFlagsAttributes_SimpleCaseAsync()
        {
            var code = @"
Public Enum {|CA1027:SimpleFlagsEnumClass|}
    Zero = 0
    One = 1
    Two = 2
    Four = 4
End Enum
 
Public Enum {|CA1027:HexFlagsEnumClass|}
    One = &H1
    Two = &H2
    Four = &H4
    All = &H7
End Enum";
 
            var expected = @"
<System.Flags>
Public Enum SimpleFlagsEnumClass
    Zero = 0
    One = 1
    Two = 2
    Four = 4
End Enum
 
<System.Flags>
Public Enum HexFlagsEnumClass
    One = &H1
    Two = &H2
    Four = &H4
    All = &H7
End Enum";
 
            // Verify fixes for CA1027
            await VerifyVB.VerifyCodeFixAsync(code, expected);
        }
 
        [Fact]
        public async Task CSharp_EnumWithFlagsAttributes_DuplicateValuesAsync()
        {
            string code = @"
public enum {|CA1027:DuplicateValuesEnumClass|}
{
    Zero = 0,
    One = 1,
    Two = 2,
    Four = 4,
    AnotherFour = 4,
    ThreePlusOne = Two + One + One
}
";
 
            string expected = @"
[System.Flags]
public enum DuplicateValuesEnumClass
{
    Zero = 0,
    One = 1,
    Two = 2,
    Four = 4,
    AnotherFour = 4,
    ThreePlusOne = Two + One + One
}
";
 
            // Verify fixes for CA1027
            await VerifyCS.VerifyCodeFixAsync(code, expected);
        }
 
        [Fact]
        public async Task VisualBasic_EnumWithFlagsAttributes_DuplicateValuesAsync()
        {
            string code = @"
Public Enum {|CA1027:DuplicateValuesEnumClass|}
    Zero = 0
    One = 1
    Two = 2
    Four = 4
    AnotherFour = 4
    ThreePlusOne = Two + One + One
End Enum
";
 
            string expected = @"
<System.Flags>
Public Enum DuplicateValuesEnumClass
    Zero = 0
    One = 1
    Two = 2
    Four = 4
    AnotherFour = 4
    ThreePlusOne = Two + One + One
End Enum
";
 
            // Verify fixes for CA1027
            await VerifyVB.VerifyCodeFixAsync(code, expected);
        }
 
        [Fact]
        public async Task CSharp_EnumWithFlagsAttributes_MissingPowerOfTwoAsync()
        {
            string code = @"
public enum {|CA1027:MissingPowerOfTwoEnumClass|}
{
    Zero = 0,
    One = 1,
    Two = 2,
    Four = 4,
    Sixteen = 16
}
 
public enum {|CA1027:MultipleMissingPowerOfTwoEnumClass|}
{
    Zero = 0,
    One = 1,
    Two = 2,
    Four = 4,
    ThirtyTwo = 32
}";
 
            var expected = @"
[System.Flags]
public enum MissingPowerOfTwoEnumClass
{
    Zero = 0,
    One = 1,
    Two = 2,
    Four = 4,
    Sixteen = 16
}
 
[System.Flags]
public enum MultipleMissingPowerOfTwoEnumClass
{
    Zero = 0,
    One = 1,
    Two = 2,
    Four = 4,
    ThirtyTwo = 32
}";
 
            // Verify fixes for CA1027
            await VerifyCS.VerifyCodeFixAsync(code, expected);
        }
 
        [Fact]
        public async Task CSharp_EnumWithFlagsAttributes_IncorrectNumbersAsync()
        {
            string code = @"
[System.Flags]
public enum {|CA2217:AnotherTestValue|}
{
    Value1 = 0,
    Value2 = 1,
    Value3 = 1,
    Value4 = 3
}";
 
            var expected = @"
public enum AnotherTestValue
{
    Value1 = 0,
    Value2 = 1,
    Value3 = 1,
    Value4 = 3
}";
 
            // Verify fixes for CA2217
            await VerifyCS.VerifyCodeFixAsync(code, expected);
        }
 
        [Fact]
        public async Task VisualBasic_EnumWithFlagsAttributes_MissingPowerOfTwoAsync()
        {
            string code = @"
Public Enum {|CA1027:MissingPowerOfTwoEnumClass|}
	Zero = 0
	One = 1
	Two = 2
	Four = 4
	Sixteen = 16
End Enum
 
Public Enum {|CA1027:MultipleMissingPowerOfTwoEnumClass|}
	Zero = 0
	One = 1
	Two = 2
	Four = 4
	ThirtyTwo = 32
End Enum
";
 
            string expected = @"
<System.Flags>
Public Enum MissingPowerOfTwoEnumClass
	Zero = 0
	One = 1
	Two = 2
	Four = 4
	Sixteen = 16
End Enum
 
<System.Flags>
Public Enum MultipleMissingPowerOfTwoEnumClass
	Zero = 0
	One = 1
	Two = 2
	Four = 4
	ThirtyTwo = 32
End Enum
";
 
            // Verify fixes for CA1027
            await VerifyVB.VerifyCodeFixAsync(code, expected);
        }
 
        [Fact]
        public async Task VisualBasic_EnumWithFlagsAttributes_IncorrectNumberAsync()
        {
            string code = @"
<System.Flags>
Public Enum {|CA2217:AnotherTestValue|}
	Value1 = 0
	Value2 = 1
	Value3 = 1
	Value4 = 3
End Enum
";
 
            string expected = @"
Public Enum AnotherTestValue
	Value1 = 0
	Value2 = 1
	Value3 = 1
	Value4 = 3
End Enum
";
 
            // Verify fixes for CA2217
            await VerifyVB.VerifyCodeFixAsync(code, expected);
        }
    }
}