File: ConvertBetweenRegularAndVerbatimString\ConvertBetweenRegularAndVerbatimStringTests.cs
Web Access
Project: src\src\Features\CSharpTest\Microsoft.CodeAnalysis.CSharp.Features.UnitTests.csproj (Microsoft.CodeAnalysis.CSharp.Features.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.CodeRefactorings;
using Microsoft.CodeAnalysis.CSharp.ConvertBetweenRegularAndVerbatimString;
using Microsoft.CodeAnalysis.Editor.CSharp.UnitTests.CodeRefactorings;
using Microsoft.CodeAnalysis.Test.Utilities;
using Xunit;
 
namespace Microsoft.CodeAnalysis.Editor.CSharp.UnitTests.ConvertBetweenRegularAndVerbatimString;
 
[Trait(Traits.Feature, Traits.Features.CodeActionsConvertBetweenRegularAndVerbatimString)]
public class ConvertBetweenRegularAndVerbatimStringTests : AbstractCSharpCodeActionTest_NoEditor
{
    protected override CodeRefactoringProvider CreateCodeRefactoringProvider(TestWorkspace workspace, TestParameters parameters)
        => new ConvertBetweenRegularAndVerbatimStringCodeRefactoringProvider();
 
    [Fact]
    public async Task EmptyRegularString()
    {
        await TestMissingAsync("""
            class Test
            {
                void Method()
                {
                    var v = "[||]";
                }
            }
            """);
    }
 
    [Fact]
    public async Task RegularStringWithMissingCloseQuote()
    {
        await TestMissingAsync("""
            class Test
            {
                void Method()
                {
                    var v = "[||];
                }
            }
            """);
    }
 
    [Fact]
    public async Task VerbatimStringWithMissingCloseQuote()
    {
        await TestMissingAsync("""
            class Test
            {
                void Method()
                {
                    var v = @"[||];
                }
            }
            """);
    }
 
    [Fact]
    public async Task EmptyVerbatimString()
    {
        await TestInRegularAndScript1Async("""
            class Test
            {
                void Method()
                {
                    var v = @"[||]";
                }
            }
            """,
            """
            class Test
            {
                void Method()
                {
                    var v = "";
                }
            }
            """);
    }
 
    [Fact]
    public async Task TestLeadingAndTrailingTrivia()
    {
        await TestInRegularAndScript1Async("""
            class Test
            {
                void Method()
                {
                    var v =
                        // leading
                        @"[||]" /* trailing */;
                }
            }
            """,
            """
            class Test
            {
                void Method()
                {
                    var v =
                        // leading
                        "" /* trailing */;
                }
            }
            """);
    }
 
    [Fact]
    public async Task RegularStringWithBasicText()
    {
        await TestMissingAsync("""
            class Test
            {
                void Method()
                {
                    var v = "[||]a";
                }
            }
            """);
    }
 
    [Fact]
    public async Task VerbatimStringWithBasicText()
    {
        await TestInRegularAndScript1Async("""
            class Test
            {
                void Method()
                {
                    var v = @"[||]a";
                }
            }
            """,
            """
            class Test
            {
                void Method()
                {
                    var v = "a";
                }
            }
            """);
    }
 
    [Fact]
    public async Task RegularStringWithUnicodeEscape()
    {
        await TestMissingAsync("""
            class Test
            {
                void Method()
                {
                    var v = "[||]\u0001";
                }
            }
            """);
    }
 
    [Fact]
    public async Task RegularStringWithEscapedNewLine()
    {
        await TestInRegularAndScript1Async("""
            class Test
            {
                void Method()
                {
                    var v = "[||]a\r\nb";
                }
            }
            """,
            """
            class Test
            {
                void Method()
                {
                    var v = @"a
            b";
                }
            }
            """);
    }
 
    [Fact]
    public async Task VerbatimStringWithNewLine()
    {
        await TestInRegularAndScript1Async("""
            class Test
            {
                void Method()
                {
                    var v = @"[||]a
            b";
                }
            }
            """,
            """
            class Test
            {
                void Method()
                {
                    var v = "a\r\nb";
                }
            }
            """);
    }
 
    [Fact]
    public async Task RegularStringWithEscapedNull()
    {
        await TestMissingAsync("""
            class Test
            {
                void Method()
                {
                    var v = "[||]a\0b";
                }
            }
            """);
    }
 
    [Fact]
    public async Task RegularStringWithEscapedQuote()
    {
        await TestInRegularAndScript1Async("""
            class Test
            {
                void Method()
                {
                    var v = "[||]a\"b";
                }
            }
            """,
            """
            class Test
            {
                void Method()
                {
                    var v = @"a""b";
                }
            }
            """);
    }
 
    [Fact]
    public async Task VerbatimStringWithEscapedQuote()
    {
        await TestInRegularAndScript1Async("""
            class Test
            {
                void Method()
                {
                    var v = @"[||]a""b";
                }
            }
            """,
            """
            class Test
            {
                void Method()
                {
                    var v = "a\"b";
                }
            }
            """);
    }
 
    [Fact]
    public async Task DoNotEscapeCurlyBracesInRegularString()
    {
        await TestInRegularAndScript1Async("""
            class Test
            {
                void Method()
                {
                    var v = "[||]a\r\n{1}";
                }
            }
            """,
            """
            class Test
            {
                void Method()
                {
                    var v = @"a
            {1}";
                }
            }
            """);
    }
 
    [Fact]
    public async Task DoNotEscapeCurlyBracesInVerbatimString()
    {
        await TestInRegularAndScript1Async("""
            class Test
            {
                void Method()
                {
                    var v = @"[||]a
            {1}";
                }
            }
            """,
            """
            class Test
            {
                void Method()
                {
                    var v = "a\r\n{1}";
                }
            }
            """);
    }
}