File: ChangeSignature\ChangeSignatureTests.cs
Web Access
Project: src\src\EditorFeatures\CSharpTest\Microsoft.CodeAnalysis.CSharp.EditorFeatures.UnitTests.csproj (Microsoft.CodeAnalysis.CSharp.EditorFeatures.UnitTests)
// 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.
 
#nullable disable
 
using System.Threading.Tasks;
using Microsoft.CodeAnalysis.Editor.UnitTests.ChangeSignature;
using Microsoft.CodeAnalysis.Test.Utilities;
using Roslyn.Test.Utilities;
using Xunit;
 
namespace Microsoft.CodeAnalysis.Editor.CSharp.UnitTests.ChangeSignature;
 
[Trait(Traits.Feature, Traits.Features.ChangeSignature)]
public partial class ChangeSignatureTests : AbstractChangeSignatureTests
{
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/8333")]
    public async Task TestNotInExpressionBody()
    {
        var markup = """
            class Ext
            {
                void Goo(int a, int b) => [||]0;
            }
            """;
 
        await TestChangeSignatureViaCodeActionAsync(markup, expectedCodeAction: false);
    }
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/1905")]
    public async Task TestAfterSemicolonForInvocationInExpressionStatement_ViaCommand()
    {
        var markup = """
            class Program
            {
                static void Main(string[] args)
                {
                    M1(1, 2);$$
                    M2(1, 2, 3);
                }
 
                static void M1(int x, int y) { }
 
                static void M2(int x, int y, int z) { }
            }
            """;
        var expectedCode = """
            class Program
            {
                static void Main(string[] args)
                {
                    M1(2, 1);
                    M2(1, 2, 3);
                }
 
                static void M1(int y, int x) { }
 
                static void M2(int x, int y, int z) { }
            }
            """;
 
        await TestChangeSignatureViaCommandAsync(
            LanguageNames.CSharp,
            markup: markup,
            updatedSignature: [1, 0],
            expectedUpdatedInvocationDocumentCode: expectedCode);
    }
 
    [Fact]
    public async Task TestOnLambdaWithTwoDiscardParameters_ViaCommand()
    {
        var markup = """
            class Program
            {
                static void M()
                {
                    System.Func<int, string, int> f = $$(int _, string _) => 1;
                }
            }
            """;
        var expectedCode = """
            class Program
            {
                static void M()
                {
                    System.Func<int, string, int> f = (string _, int _) => 1;
                }
            }
            """;
 
        await TestChangeSignatureViaCommandAsync(
            LanguageNames.CSharp,
            markup: markup,
            updatedSignature: [1, 0],
            expectedUpdatedInvocationDocumentCode: expectedCode);
    }
 
    [Fact]
    public async Task TestOnAnonymousMethodWithTwoParameters_ViaCommand()
    {
        var markup = """
            class Program
            {
                static void M()
                {
                    System.Func<int, string, int> f = [||]delegate(int x, string y) { return 1; };
                }
            }
            """;
        await TestMissingAsync(markup);
    }
 
    [Fact]
    public async Task TestOnAnonymousMethodWithTwoDiscardParameters_ViaCommand()
    {
        var markup = """
            class Program
            {
                static void M()
                {
                    System.Func<int, string, int> f = [||]delegate(int _, string _) { return 1; };
                }
            }
            """;
        await TestMissingAsync(markup);
    }
 
    [Fact]
    public async Task TestAfterSemicolonForInvocationInExpressionStatement_ViaCodeAction()
    {
        var markup = """
            class Program
            {
                static void Main(string[] args)
                {
                    M1(1, 2);[||]
                    M2(1, 2, 3);
                }
 
                static void M1(int x, int y) { }
 
                static void M2(int x, int y, int z) { }
            }
            """;
 
        await TestMissingAsync(markup);
    }
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/17309")]
    public async Task TestNotInLeadingWhitespace()
    {
        var markup = """
            class Ext
            {
                [||]
                void Goo(int a, int b)
                {
                };
            }
            """;
 
        await TestChangeSignatureViaCodeActionAsync(markup, expectedCodeAction: false);
    }
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/17309")]
    public async Task TestNotInLeadingTrivia()
    {
        var markup = """
            class Ext
            {
                // [||]
                void Goo(int a, int b)
                {
                };
            }
            """;
 
        await TestChangeSignatureViaCodeActionAsync(markup, expectedCodeAction: false);
    }
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/17309")]
    public async Task TestNotInLeadingTrivia2()
    {
        var markup = """
            class Ext
            {
                [||]//
                void Goo(int a, int b)
                {
                };
            }
            """;
 
        await TestChangeSignatureViaCodeActionAsync(markup, expectedCodeAction: false);
    }
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/17309")]
    public async Task TestNotInLeadingDocComment()
    {
        var markup = """
            class Ext
            {
                /// [||]
                void Goo(int a, int b)
                {
                };
            }
            """;
 
        await TestChangeSignatureViaCodeActionAsync(markup, expectedCodeAction: false);
    }
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/17309")]
    public async Task TestNotInLeadingDocComment2()
    {
        var markup = """
            class Ext
            {
                [||]///
                void Goo(int a, int b)
                {
                };
            }
            """;
 
        await TestChangeSignatureViaCodeActionAsync(markup, expectedCodeAction: false);
    }
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/17309")]
    public async Task TestNotInLeadingAttributes1()
    {
        var markup = """
            class Ext
            {
                [||][X]
                void Goo(int a, int b)
                {
                };
            }
            """;
 
        await TestChangeSignatureViaCodeActionAsync(markup, expectedCodeAction: false);
    }
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/17309")]
    public async Task TestNotInLeadingAttributes2()
    {
        var markup = """
            class Ext
            {
                [[||]X]
                void Goo(int a, int b)
                {
                };
            }
            """;
 
        await TestChangeSignatureViaCodeActionAsync(markup, expectedCodeAction: false);
    }
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/17309")]
    public async Task TestNotInLeadingAttributes3()
    {
        var markup = """
            class Ext
            {
                [X][||]
                void Goo(int a, int b)
                {
                };
            }
            """;
 
        await TestChangeSignatureViaCodeActionAsync(markup, expectedCodeAction: false);
    }
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/17309")]
    public async Task TestNotInConstraints()
    {
        var markup = """
            class Ext
            {
                void Goo<T>(int a, int b) where [||]T : class
                {
                };
            }
            """;
 
        await TestChangeSignatureViaCodeActionAsync(markup, expectedCodeAction: false);
    }
}