File: Intents\DeleteParameterIntentTests.cs
Web Access
Project: ..\..\..\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.
 
using System.Linq;
using System.Threading.Tasks;
using Microsoft.CodeAnalysis.Features.Intents;
using Microsoft.CodeAnalysis.Test.Utilities;
using Microsoft.CodeAnalysis.Text;
using Xunit;
 
namespace Microsoft.CodeAnalysis.Editor.CSharp.UnitTests.Intents;
 
[UseExportProvider]
public class DeleteParameterIntentTests : IntentTestsBase
{
    [Fact]
    public async Task TestDeleteParameterIntentAsync()
    {
        var initialText =
@"class C
{
    void M()
    {
        Method({|priorSelection:1|});
    }
 
    void Method(int value)
    {
    }
}";
        var currentText =
@"class C
{
    void M()
    {
        Method();
    }
 
    void Method(int value)
    {
    }
}";
        var expectedText =
@"class C
{
    void M()
    {
        Method();
    }
 
    void Method()
    {
    }
}";
 
        await VerifyExpectedTextAsync(WellKnownIntents.DeleteParameter, initialText, currentText, expectedText).ConfigureAwait(false);
    }
 
    [Fact]
    public async Task TestDeleteParameterOnDefinitionIntentAsync()
    {
        var initialText =
@"class C
{
    void M()
    {
        Method(1);
    }
 
    void Method(int {|priorSelection:value|})
    {
    }
}";
        var currentText =
@"class C
{
    void M()
    {
        Method();
    }
 
    void Method(int value)
    {
    }
}";
        var expectedText =
@"class C
{
    void M()
    {
        Method();
    }
 
    void Method()
    {
    }
}";
 
        await VerifyExpectedTextAsync(WellKnownIntents.DeleteParameter, initialText, currentText, expectedText).ConfigureAwait(false);
    }
 
    [Fact]
    public async Task TestDeleteSecondParameterIntentAsync()
    {
        var initialText = @"class C
{
    void M()
    {
        Method(1, {|priorSelection:2|}, 3);
    }
 
    void Method(int value1, int value2, int value3)
    {
    }
}";
        var currentText =
@"class C
{
    void M()
    {
        Method(1, 3);
    }
 
    void Method(int value1, int value2, int value3)
    {
    }
}";
        var expectedText =
@"class C
{
    void M()
    {
        Method(1, 3);
    }
 
    void Method(int value1, int value3)
    {
    }
}";
 
        await VerifyExpectedTextAsync(WellKnownIntents.DeleteParameter, initialText, currentText, expectedText).ConfigureAwait(false);
    }
 
    [Fact]
    public async Task TestDeleteLastParameterAsync()
    {
        var initialText = @"class C
{
    void M()
    {
        Method(1, 2, {|priorSelection:3|});
    }
 
    void Method(int value1, int value2, int value3)
    {
    }
}";
        var currentText =
@"class C
{
    void M()
    {
        Method(1, 2);
    }
 
    void Method(int value1, int value2, int value3)
    {
    }
}";
        var expectedText =
@"class C
{
    void M()
    {
        Method(1, 2);
    }
 
    void Method(int value1, int value2)
    {
    }
}";
 
        await VerifyExpectedTextAsync(WellKnownIntents.DeleteParameter, initialText, currentText, expectedText).ConfigureAwait(false);
    }
 
    [Fact]
    public async Task TestDeleteThisParameterAsync()
    {
        var initialText = @"public class Foo
{
    static void Bar()
    {
        var f = new Foo();
        f.DoFoo();
    }
}
 
public static class FooExtensions
{
    public static void DoFoo(this {|priorSelection:Foo|} foo)
    {
 
    }
}";
        var currentText =
@"public class Foo
{
    static void Bar()
    {
        var f = new Foo();
        f.DoFoo();
    }
}
 
public static class FooExtensions
{
    public static void DoFoo()
    {
 
    }
}";
 
        await VerifyIntentMissingAsync(WellKnownIntents.DeleteParameter, initialText, currentText).ConfigureAwait(false);
    }
 
    [Fact]
    public async Task TestDeleteParameterInExtensionMethodAsync()
    {
        var initialText = @"public class Foo
{
    static void Bar()
    {
        var f = new Foo();
        f.DoFoo({|priorSelection:1|}, 2);
    }
}
 
public static class FooExtensions
{
    public static void DoFoo(this Foo foo, int value1, int value2)
    {
 
    }
}";
        var currentText =
@"public class Foo
{
    static void Bar()
    {
        var f = new Foo();
        f.DoFoo(2);
    }
}
 
public static class FooExtensions
{
    public static void DoFoo(this Foo foo, int value1, int value2)
    {
 
    }
}";
        var expectedText =
@"public class Foo
{
    static void Bar()
    {
        var f = new Foo();
        f.DoFoo(2);
    }
}
 
public static class FooExtensions
{
    public static void DoFoo(this Foo foo, int value2)
    {
 
    }
}";
 
        await VerifyExpectedTextAsync(WellKnownIntents.DeleteParameter, initialText, currentText, expectedText).ConfigureAwait(false);
    }
 
    [Fact]
    public async Task TestDeleteParameterOnDefinitionAsync()
    {
        var initialText = @"public class Foo
{
    static void Bar()
    {
        var f = new Foo();
        f.DoFoo(1, 2);
    }
}
 
public static class FooExtensions
{
    public static void DoFoo(this Foo foo, int {|priorSelection:value1|}, int value2)
    {
 
    }
}";
        var currentText =
@"public class Foo
{
    static void Bar()
    {
        var f = new Foo();
        f.DoFoo(2);
    }
}
 
public static class FooExtensions
{
    public static void DoFoo(this Foo foo, int value1, int value2)
    {
 
    }
}";
        var expectedText =
@"public class Foo
{
    static void Bar()
    {
        var f = new Foo();
        f.DoFoo(2);
    }
}
 
public static class FooExtensions
{
    public static void DoFoo(this Foo foo, int value2)
    {
 
    }
}";
 
        await VerifyExpectedTextAsync(WellKnownIntents.DeleteParameter, initialText, currentText, expectedText).ConfigureAwait(false);
    }
 
    [Fact]
    public async Task TestDeleteParamsParameterAsync()
    {
        var initialText =
@"class C
{
    void M()
    {
        Method(new C(), {|priorSelection:1|}, 2, 3);
    }
 
    void Method(C c, params int[] values)
    {
    }
}";
        var currentText =
@"class C
{
    void M()
    {
        Method(new C(), 2, 3);
    }
 
    void Method(C c, params int[] values)
    {
    }
}";
        var expectedText =
@"class C
{
    void M()
    {
        Method(new C());
    }
 
    void Method(C c)
    {
    }
}";
 
        await VerifyExpectedTextAsync(WellKnownIntents.DeleteParameter, initialText, currentText, expectedText).ConfigureAwait(false);
    }
 
    [Fact]
    public async Task TestDeleteParameterBeforeParamsAsync()
    {
        var initialText =
@"class C
{
    void M()
    {
        Method(1.0f, 1, 2, 3);
    }
 
    void Method(float {|priorSelection:f|}, params int[] values)
    {
    }
}";
        var currentText =
@"class C
{
    void M()
    {
        Method(1, 2, 3);
    }
 
    void Method(float f, params int[] values)
    {
    }
}";
        var expectedText =
@"class C
{
    void M()
    {
        Method(1, 2, 3);
    }
 
    void Method(params int[] values)
    {
    }
}";
 
        await VerifyExpectedTextAsync(WellKnownIntents.DeleteParameter, initialText, currentText, expectedText).ConfigureAwait(false);
    }
 
    [Fact]
    public async Task TestDeleteParameterOnStaticExtensionInvocationAsync()
    {
        var initialText =
@"public static class AExtension
{
    public static void Method(this A c, int i)
    {
 
    }
}
 
public class A
{
    void M()
    {
        AExtension.Method(new A(), {|priorSelection:1|});
    }
}";
        var currentText =
@"public static class AExtension
{
    public static void Method(this A c, int i)
    {
 
    }
}
 
public class A
{
    void M()
    {
        AExtension.Method(new A());
    }
}";
        var expectedText =
@"public static class AExtension
{
    public static void Method(this A c)
    {
 
    }
}
 
public class A
{
    void M()
    {
        AExtension.Method(new A());
    }
}";
 
        await VerifyExpectedTextAsync(WellKnownIntents.DeleteParameter, initialText, currentText, expectedText).ConfigureAwait(false);
    }
 
    [Fact]
    public async Task TestDeleteParameterOnConstructorInvocationAsync()
    {
        var initialText =
@"public class A
{
    public A(int i, string s)
    {
 
    }
 
    static A M()
    {
        return new A(1, {|priorSelection:""hello""|});
    }
}";
        var currentText =
@"public class A
{
    public A(int i, string s)
    {
 
    }
 
    static A M()
    {
        return new A(1);
    }
}";
        var expectedText =
@"public class A
{
    public A(int i)
    {
 
    }
 
    static A M()
    {
        return new A(1);
    }
}";
 
        await VerifyExpectedTextAsync(WellKnownIntents.DeleteParameter, initialText, currentText, expectedText).ConfigureAwait(false);
    }
}