File: Microsoft.CodeQuality.Analyzers\ApiDesignGuidelines\OverloadOperatorEqualsOnOverridingValueTypeEqualsTests.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.OverloadOperatorEqualsOnOverridingValueTypeEqualsAnalyzer,
    Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines.OverloadOperatorEqualsOnOverridingValueTypeEqualsFixer>;
using VerifyVB = Test.Utilities.VisualBasicCodeFixVerifier<
    Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines.OverloadOperatorEqualsOnOverridingValueTypeEqualsAnalyzer,
    Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines.OverloadOperatorEqualsOnOverridingValueTypeEqualsFixer>;
 
namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines.UnitTests
{
    public partial class OverloadOperatorEqualsOnOverridingValueTypeEqualsTests
    {
        [Fact]
        public async Task CA2231CSharpCodeFixNoEqualsOperatorAsync()
        {
            await VerifyCS.VerifyCodeFixAsync(@"
using System;
 
// value type without overriding Equals
public struct [|A|]
{    
    public override bool Equals(Object obj)
    {
        return true;
    }
}
",
@"
using System;
 
// value type without overriding Equals
public struct A
{    
    public override bool Equals(Object obj)
    {
        return true;
    }
 
    public static bool operator ==(A left, A right)
    {
        return left.Equals(right);
    }
 
    public static bool operator !=(A left, A right)
    {
        return !(left == right);
    }
}
");
        }
 
        [Fact]
        public async Task CA2231BasicCodeFixNoEqualsOperatorAsync()
        {
            await VerifyVB.VerifyCodeFixAsync(@"
Imports System
 
Public Structure [|A|]
    Public Overloads Overrides Function Equals(obj As Object) As Boolean
        Return True
    End Function
End Structure
",
@"
Imports System
 
Public Structure A
    Public Overloads Overrides Function Equals(obj As Object) As Boolean
        Return True
    End Function
 
    Public Shared Operator =(left As A, right As A) As Boolean
        Return left.Equals(right)
    End Operator
 
    Public Shared Operator <>(left As A, right As A) As Boolean
        Return Not left = right
    End Operator
End Structure
");
        }
 
        [Fact]
        public async Task CA2231_CSharp_MultipleViolationsAsync()
        {
            await VerifyCS.VerifyCodeFixAsync(@"
using System;
 
public struct [|A|]
{
    public override bool Equals(object obj)
    {
        return true;
    }
}
 
public struct [|B|]
{
    public override bool Equals(object obj)
    {
        return true;
    }
}",
@"
using System;
 
public struct A
{
    public override bool Equals(object obj)
    {
        return true;
    }
 
    public static bool operator ==(A left, A right)
    {
        return left.Equals(right);
    }
 
    public static bool operator !=(A left, A right)
    {
        return !(left == right);
    }
}
 
public struct B
{
    public override bool Equals(object obj)
    {
        return true;
    }
 
    public static bool operator ==(B left, B right)
    {
        return left.Equals(right);
    }
 
    public static bool operator !=(B left, B right)
    {
        return !(left == right);
    }
}");
        }
 
        [Fact]
        public async Task CA2231_Basic_MultipleViolationsAsync()
        {
            await VerifyVB.VerifyCodeFixAsync(@"
Imports System
 
Public Structure [|A|]
    Public Overloads Overrides Function Equals(obj As Object) As Boolean
        Return True
    End Function
End Structure
 
Public Structure [|B|]
    Public Overloads Overrides Function Equals(obj As Object) As Boolean
        Return True
    End Function
End Structure",
@"
Imports System
 
Public Structure A
    Public Overloads Overrides Function Equals(obj As Object) As Boolean
        Return True
    End Function
 
    Public Shared Operator =(left As A, right As A) As Boolean
        Return left.Equals(right)
    End Operator
 
    Public Shared Operator <>(left As A, right As A) As Boolean
        Return Not left = right
    End Operator
End Structure
 
Public Structure B
    Public Overloads Overrides Function Equals(obj As Object) As Boolean
        Return True
    End Function
 
    Public Shared Operator =(left As B, right As B) As Boolean
        Return left.Equals(right)
    End Operator
 
    Public Shared Operator <>(left As B, right As B) As Boolean
        Return Not left = right
    End Operator
End Structure");
        }
    }
}