File: Microsoft.CodeQuality.Analyzers\ApiDesignGuidelines\ImplementStandardExceptionConstructorsTests.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.CSharp.Analyzers.ApiDesignGuidelines.CSharpImplementStandardExceptionConstructorsAnalyzer,
    Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines.ImplementStandardExceptionConstructorsFixer>;
using VerifyVB = Test.Utilities.VisualBasicCodeFixVerifier<
    Microsoft.CodeQuality.VisualBasic.Analyzers.ApiDesignGuidelines.BasicImplementStandardExceptionConstructorsAnalyzer,
    Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines.ImplementStandardExceptionConstructorsFixer>;
 
namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines.UnitTests
{
    public class ImplementStandardExceptionConstructorsFixerTests
    {
        #region CSharpUnitTests
        //Note: In the test cases you won't see a missing all 3 constructors scenario, because that will never occur since default constructor is always generated by system in that case
 
        [Fact]
        public async Task TestCSFixMissingTwoCtors_Case1Async()
        {
            var code = @"
using System;
public class [|[|SomeException|]|] : Exception
{
    public SomeException()
    {
    }
}
";
            var fix = @"
using System;
public class SomeException : Exception
{
    public SomeException()
    {
    }
 
    public SomeException(string message) : base(message)
    {
    }
 
    public SomeException(string message, Exception innerException) : base(message, innerException)
    {
    }
}
";
            await new VerifyCS.Test
            {
                TestState = { Sources = { code } },
                FixedState = { Sources = { fix } },
                NumberOfFixAllIterations = 2,
            }.RunAsync();
        }
 
        [Fact]
        public async Task TestCSFixMissingTwoCtors_Case2Async()
        {
            var code = @"
using System;
public class [|[|SomeException|]|] : Exception
{
    public SomeException(string message)
    {
    }
}
";
            var fix = @"
using System;
public class SomeException : Exception
{
    public SomeException(string message)
    {
    }
 
    public SomeException()
    {
    }
 
    public SomeException(string message, Exception innerException) : base(message, innerException)
    {
    }
}
";
            await new VerifyCS.Test
            {
                TestState = { Sources = { code } },
                FixedState = { Sources = { fix } },
                NumberOfFixAllIterations = 2,
            }.RunAsync();
        }
 
        [Fact]
        public async Task TestCSFixMissingTwoCtors_Case3Async()
        {
            var code = @"
using System;
public class [|[|SomeException|]|] : Exception
{
    public SomeException(string message, Exception innerException)
    {
    }
}
";
            var fix = @"
using System;
public class SomeException : Exception
{
    public SomeException(string message, Exception innerException)
    {
    }
 
    public SomeException()
    {
    }
 
    public SomeException(string message) : base(message)
    {
    }
}
";
            await new VerifyCS.Test
            {
                TestState = { Sources = { code } },
                FixedState = { Sources = { fix } },
                NumberOfFixAllIterations = 2,
            }.RunAsync();
        }
 
        [Fact]
        public async Task TestCSFixMissingOneCtor_Case1Async()
        {
            var code = @"
using System;
public class [|SomeException|] : Exception
{
    public SomeException(string message): base(message)
    {
    }
 
    public SomeException(string message, Exception innerException) : base(message, innerException)
    {
    }
 
}
";
            var fix = @"
using System;
public class SomeException : Exception
{
    public SomeException(string message): base(message)
    {
    }
 
    public SomeException(string message, Exception innerException) : base(message, innerException)
    {
    }
 
    public SomeException()
    {
    }
}
";
            await VerifyCS.VerifyCodeFixAsync(code, fix);
        }
 
        [Fact]
        public async Task TestCSFixMissingOneCtor_Case2Async()
        {
            var code = @"
using System;
public class [|SomeException|] : Exception
{
    public SomeException()
    {
    }
 
    public SomeException(string message)
    {
    }
 
}
";
            var fix = @"
using System;
public class SomeException : Exception
{
    public SomeException()
    {
    }
 
    public SomeException(string message)
    {
    }
 
    public SomeException(string message, Exception innerException) : base(message, innerException)
    {
    }
}
";
            await VerifyCS.VerifyCodeFixAsync(code, fix);
        }
 
        [Fact]
        public async Task TestCSFixMissingOneCtor_Case3Async()
        {
            var code = @"
using System;
public class [|SomeException|] : Exception
{
    public SomeException()
    {
    }
 
    public SomeException(string message, Exception innerException)
    {
    }
 
}
";
            var fix = @"
using System;
public class SomeException : Exception
{
    public SomeException()
    {
    }
 
    public SomeException(string message, Exception innerException)
    {
    }
 
    public SomeException(string message) : base(message)
    {
    }
}
";
            await VerifyCS.VerifyCodeFixAsync(code, fix);
        }
 
        #endregion
 
        #region BasicUnitTests
        //Note: In the test cases you won't see a missing all 3 constructors scenario, because that will never occur since default constructor is always generated by system in that case
 
        [Fact]
        public async Task TestVBFixMissingTwoCtors_Case1Async()
        {
            var code = @"
Imports System
Public Class [|[|SomeException|]|] : Inherits Exception
    Public Sub New()
    End Sub
End Class
";
            var fix = @"
Imports System
Public Class SomeException : Inherits Exception
    Public Sub New()
    End Sub
 
    Public Sub New(message As String)
        MyBase.New(message)
    End Sub
 
    Public Sub New(message As String, innerException As Exception)
        MyBase.New(message, innerException)
    End Sub
End Class
";
            await new VerifyVB.Test
            {
                TestState = { Sources = { code } },
                FixedState = { Sources = { fix } },
                NumberOfFixAllIterations = 2,
            }.RunAsync();
        }
 
        [Fact]
        public async Task TestVBFixMissingTwoCtors_Case2Async()
        {
            var code = @"
Imports System
Public Class [|[|SomeException|]|] : Inherits Exception
    Public Sub New(message As String)
    End Sub
End Class
";
            var fix = @"
Imports System
Public Class SomeException : Inherits Exception
    Public Sub New(message As String)
    End Sub
 
    Public Sub New()
    End Sub
 
    Public Sub New(message As String, innerException As Exception)
        MyBase.New(message, innerException)
    End Sub
End Class
";
            await new VerifyVB.Test
            {
                TestState = { Sources = { code } },
                FixedState = { Sources = { fix } },
                NumberOfFixAllIterations = 2,
            }.RunAsync();
        }
 
        [Fact]
        public async Task TestVBFixMissingTwoCtors_Case3Async()
        {
            var code = @"
Imports System
Public Class [|[|SomeException|]|] : Inherits Exception
    Public Sub New(message As String, innerException As Exception)
    End Sub
End Class
";
            var fix = @"
Imports System
Public Class SomeException : Inherits Exception
    Public Sub New(message As String, innerException As Exception)
    End Sub
 
    Public Sub New()
    End Sub
 
    Public Sub New(message As String)
        MyBase.New(message)
    End Sub
End Class
";
            await new VerifyVB.Test
            {
                TestState = { Sources = { code } },
                FixedState = { Sources = { fix } },
                NumberOfFixAllIterations = 2,
            }.RunAsync();
        }
 
        [Fact]
        public async Task TestVBFixMissingOneCtor_Case1Async()
        {
            var code = @"
Imports System
Public Class [|SomeException|] : Inherits Exception
    Public Sub New()
    End Sub
 
    Public Sub New(message As String)
    End Sub
End Class
";
            var fix = @"
Imports System
Public Class SomeException : Inherits Exception
    Public Sub New()
    End Sub
 
    Public Sub New(message As String)
    End Sub
 
    Public Sub New(message As String, innerException As Exception)
        MyBase.New(message, innerException)
    End Sub
End Class
";
            await VerifyVB.VerifyCodeFixAsync(code, fix);
        }
 
        [Fact]
        public async Task TestVBFixMissingOneCtor_Case2Async()
        {
            var code = @"
Imports System
Public Class [|SomeException|] : Inherits Exception
    Public Sub New()
    End Sub
 
    Public Sub New(message As String, innerException As Exception)
    End Sub
End Class
";
            var fix = @"
Imports System
Public Class SomeException : Inherits Exception
    Public Sub New()
    End Sub
 
    Public Sub New(message As String, innerException As Exception)
    End Sub
 
    Public Sub New(message As String)
        MyBase.New(message)
    End Sub
End Class
";
            await VerifyVB.VerifyCodeFixAsync(code, fix);
        }
 
        [Fact]
        public async Task TestVBFixMissingOneCtor_Case3Async()
        {
            var code = @"
Imports System
Public Class [|SomeException|] : Inherits Exception
    Public Sub New(message As String)
    End Sub
 
    Public Sub New(message As String, innerException As Exception)
    End Sub
End Class
";
            var fix = @"
Imports System
Public Class SomeException : Inherits Exception
    Public Sub New(message As String)
    End Sub
 
    Public Sub New(message As String, innerException As Exception)
    End Sub
 
    Public Sub New()
    End Sub
End Class
";
            await VerifyVB.VerifyCodeFixAsync(code, fix);
        }
        #endregion
    }
}