File: StringCopyPaste\PasteKnownSourceIntoMultiLineRawStringTests.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.
 
using Roslyn.Test.Utilities;
 
namespace Microsoft.CodeAnalysis.Editor.CSharp.UnitTests.StringCopyPaste;
 
public sealed class PasteKnownSourceIntoMultiLineRawStringTests : StringCopyPasteCommandHandlerKnownSourceTests
{
    #region Normal Copy/Paste tests
 
    // Tests where we actually set up a document to copy code from.
 
    [WpfFact]
    public void TestPasteSimpleNormalLiteralContent()
        => TestCopyPaste(
"""var v = "{|Copy:goo|}";""",
""""
var dest =
    """
    [||]
    """;
"""",
""""
var dest =
    """
    goo[||]
    """;
"""",
""""
var dest =
    """
    [||]
    """;
"""");
 
    [WpfFact]
    public void TestPasteSimpleSubstringNormalLiteralContent()
        => TestCopyPaste(
"""var v = "g{|Copy:o|}o";""",
""""
var dest =
    """
    [||]
    """;
"""",
""""
var dest =
    """
    o[||]
    """;
"""",
""""
var dest =
    """
    [||]
    """;
"""");
 
    [WpfFact]
    public void TestPastePartiallySelectedEscapeNormalLiteralContent()
        => TestCopyPaste(
"""var v = "\{|Copy:n|}";""",
""""
var dest =
    """
    [||]
    """;
"""",
""""
var dest =
    """
    n[||]
    """;
"""",
""""
var dest =
    """
    [||]
    """;
"""");
 
    [WpfFact]
    public void TestPasteFullySelectedEscapeNormalLiteralContent()
        => TestCopyPaste(
"""var v = "{|Copy:\n|}";""",
""""
var dest =
    """
    [||]
    """;
"""",
"var dest =\r\n    \"\"\"\r\n    \n    [||]\r\n    \"\"\";",
""""
var dest =
    """
    \n[||]
    """;
"""");
 
    [WpfFact]
    public void TestPastePartiallySelectedQuoteNormalLiteralContent()
        => TestCopyPaste(
"""var v = "\{|Copy:"|}";""",
""""
var dest =
    """
    [||]
    """;
"""",
""""
var dest =
    """
    "[||]
    """;
"""",
""""
var dest =
    """
    [||]
    """;
"""");
 
    [WpfFact]
    public void TestPasteFullySelectedQuoteNormalLiteralContent()
        => TestCopyPaste(
"""var v = "{|Copy:\"|}";""",
""""
var dest =
    """
    [||]
    """;
"""",
""""
var dest =
    """
    "[||]
    """;
"""",
""""
var dest =
    """
    \"[||]
    """;
"""");
 
    [WpfFact]
    public void TestPasteSimpleVerbatimLiteralContent()
        => TestCopyPaste(
"""var v = @"{|Copy:goo|}";""",
""""
var dest =
    """
    [||]
    """;
"""",
""""
var dest =
    """
    goo[||]
    """;
"""",
""""
var dest =
    """
    [||]
    """;
"""");
 
    [WpfFact]
    public void TestPasteSimpleSubstringVerbatimLiteralContent()
        => TestCopyPaste(
"""var v = @"g{|Copy:o|}o";""",
""""
var dest =
    """
    [||]
    """;
"""",
""""
var dest =
    """
    o[||]
    """;
"""",
""""
var dest =
    """
    [||]
    """;
"""");
 
    [WpfFact]
    public void TestPasteSelectedVerbatimNewLineLiteralContent()
        => TestCopyPaste(
"""
var v = @"{|Copy:
|}";
""",
""""
var dest =
    """
    [||]
    """;
"""",
""""
var dest =
    """
    
    [||]
    """;
"""",
""""
var dest =
    """
    
[||]
    """;
"""");
 
    [WpfFact]
    public void TestPasteFullySelectedEscapeVerbatimLiteralContent()
        => TestCopyPaste(
"""var v = @"{|Copy:""|}";""",
""""
var dest =
    """
    [||]
    """;
"""",
""""
var dest =
    """
    "[||]
    """;
"""",
""""
var dest =
    """
    ""[||]
    """;
"""");
 
    [WpfFact]
    public void TestPasteSimpleRawSingleLineLiteralContent()
        => TestCopyPaste(
""""var v = """{|Copy:goo|}""";"""",
""""
var dest =
    """
    [||]
    """;
"""",
""""
var dest =
    """
    goo[||]
    """;
"""",
""""
var dest =
    """
    [||]
    """;
"""");
 
    [WpfFact]
    public void TestPasteQuotesRawSingleLineLiteralContent()
        => TestCopyPaste(
""""var v = """{|Copy: "" |}""";"""",
""""
var dest =
    """
    [||]
    """;
"""",
""""
var dest =
    """
     "" [||]
    """;
"""",
""""
var dest =
    """
    [||]
    """;
"""");
 
    [WpfFact]
    public void TestPasteSimpleRawMultiLineLiteralContent1()
        => TestCopyPaste(
""""
var v = """
    {|Copy:goo|}
    """;
"""",
""""
var dest =
    """
    [||]
    """;
"""",
""""
var dest =
    """
    goo[||]
    """;
"""",
""""
var dest =
    """
    [||]
    """;
"""");
 
    [WpfFact]
    public void TestPasteSimpleRawMultiLineLiteralContent2()
        => TestCopyPaste(
""""
var v = """
    {|Copy:goo
    bar|}
    """;
"""",
""""
var dest =
    """
    [||]
    """;
"""",
""""
var dest =
    """
    goo
    bar[||]
    """;
"""",
""""
var dest =
    """
    [||]
    """;
"""");
 
    [WpfFact]
    public void TestPasteSimpleRawMultiLineLiteralContent3()
        => TestCopyPaste(
""""
var v = """
{|Copy:    goo
    bar|}
    """;
"""",
""""
var dest =
    """
    [||]
    """;
"""",
""""
var dest =
    """
    goo
    bar[||]
    """;
"""",
""""
var dest =
    """
        goo
    bar[||]
    """;
"""");
 
    [WpfFact]
    public void TestPasteInterpolationFromInterpolatedStringLiteralContent()
        => TestCopyPaste(
"""var v = $"{|Copy:{0}|}";""",
""""
var dest =
    """
    [||]
    """;
"""",
""""
var dest =
    """
    {0}[||]
    """;
"""",
""""
var dest =
    """
    [||]
    """;
"""");
 
    [WpfFact]
    public void TestPasteInterpolationWithFormatClauseFromInterpolatedStringLiteralContent1()
        => TestCopyPaste(
"""var v = $"{|Copy:{0:X}|}";""",
""""
var dest =
    """
    [||]
    """;
"""",
""""
var dest =
    """
    {0:X}[||]
    """;
"""",
""""
var dest =
    """
    [||]
    """;
"""");
 
    [WpfFact]
    public void TestPasteInterpolationWithFormatClauseFromInterpolatedStringLiteralContent2()
        => TestCopyPaste(
"""var v = $"{|Copy:{0:\"X\"}|}";""",
""""
var dest =
    """
    [||]
    """;
"""",
""""
var dest =
    """
    {0:"X"}[||]
    """;
"""",
""""
var dest =
    """
    {0:\"X\"}[||]
    """;
"""");
 
    [WpfFact]
    public void TestPasteInterpolationWithStringFromInterpolatedStringLiteralContent1()
        => TestCopyPaste(
"""var v = $"{|Copy:{"goo"}|}";""",
""""
var dest =
    """
    [||]
    """;
"""",
""""
var dest =
    """
    {"goo"}[||]
    """;
"""",
""""
var dest =
    """
    [||]
    """;
"""");
 
    [WpfFact]
    public void TestPasteInterpolationWithStringFromInterpolatedStringLiteralContent2()
        => TestCopyPaste(
"""var v = $"{|Copy:X{"goo"}Y|}";""",
""""
var dest =
    """
    [||]
    """;
"""",
""""
var dest =
    """
    X{"goo"}Y[||]
    """;
"""",
""""
var dest =
    """
    [||]
    """;
"""");
 
    [WpfFact]
    public void TestPasteInterpolationWithStringFromInterpolatedStringLiteralContent3()
        => TestCopyPaste(
"""var v = $"{|Copy:\"X{"goo"}Y\"|}";""",
""""
var dest =
    """
    [||]
    """;
"""",
""""
var dest =
    """
    "X{"goo"}Y"[||]
    """;
"""",
""""
var dest =
    """
    \"X{"goo"}Y\"[||]
    """;
"""");
 
    [WpfFact]
    public void TestPasteInterpolationWithStringFromInterpolatedStringLiteralContent4()
        => TestCopyPaste(
"""var v = $"{|Copy:\"X{@"goo"}Y\"|}";""",
""""
var dest =
    """
    [||]
    """;
"""",
""""
var dest =
    """
    "X{@"goo"}Y"[||]
    """;
"""",
""""
var dest =
    """
    \"X{@"goo"}Y\"[||]
    """;
"""");
 
    [WpfFact]
    public void TestPasteInterpolationFromVerbatimInterpolatedStringLiteralContent()
        => TestCopyPaste(
"""var v = $@"{|Copy:{0}|}";""",
""""
var dest =
    """
    [||]
    """;
"""",
""""
var dest =
    """
    {0}[||]
    """;
"""",
""""
var dest =
    """
    [||]
    """;
"""");
 
    [WpfFact]
    public void TestPasteInterpolationWithFormatClauseFromVerbatimInterpolatedStringLiteralContent1()
        => TestCopyPaste(
"""var v = $@"{|Copy:{0:X}|}";""",
""""
var dest =
    """
    [||]
    """;
"""",
""""
var dest =
    """
    {0:X}[||]
    """;
"""",
""""
var dest =
    """
    [||]
    """;
"""");
 
    [WpfFact]
    public void TestPasteInterpolationWithFormatClauseFromVerbatimInterpolatedStringLiteralContent2()
        => TestCopyPaste(
"""var v = $@"{|Copy:{0:""X""}|}";""",
""""
var dest =
    """
    [||]
    """;
"""",
""""
var dest =
    """
    {0:"X"}[||]
    """;
"""",
""""
var dest =
    """
    {0:""X""}[||]
    """;
"""");
 
    [WpfFact]
    public void TestPasteInterpolationWithStringFromVerbatimInterpolatedStringLiteralContent1()
        => TestCopyPaste(
"""var v = $@"{|Copy:{"goo"}|}";""",
""""
var dest =
    """
    [||]
    """;
"""",
""""
var dest =
    """
    {"goo"}[||]
    """;
"""",
""""
var dest =
    """
    [||]
    """;
"""");
 
    [WpfFact]
    public void TestPasteInterpolationWithStringFromVerbatimInterpolatedStringLiteralContent2()
        => TestCopyPaste(
"""var v = $@"{|Copy:X{"goo"}Y|}";""",
""""
var dest =
    """
    [||]
    """;
"""",
""""
var dest =
    """
    X{"goo"}Y[||]
    """;
"""",
""""
var dest =
    """
    [||]
    """;
"""");
 
    [WpfFact]
    public void TestPasteInterpolationWithStringFromVerbatimInterpolatedStringLiteralContent3()
        => TestCopyPaste(
"""var v = $@"{|Copy:""X{"goo"}Y""|}";""",
""""
var dest =
    """
    [||]
    """;
"""",
""""
var dest =
    """
    "X{"goo"}Y"[||]
    """;
"""",
""""
var dest =
    """
    ""X{"goo"}Y""[||]
    """;
"""");
 
    [WpfFact]
    public void TestPasteInterpolationWithStringFromVerbatimInterpolatedStringLiteralContent4()
        => TestCopyPaste(
"""var v = $@"{|Copy:""X{@"goo"}Y""|}";""",
""""
var dest =
    """
    [||]
    """;
"""",
""""
var dest =
    """
    "X{@"goo"}Y"[||]
    """;
"""",
""""
var dest =
    """
    ""X{@"goo"}Y""[||]
    """;
"""");
 
    #endregion
 
    #region Known Source tests
 
    // Tests where we place things directly on the clipboard (avoiding the need to do the actual copy).
    // This allows a port of the tests in PasteUnknownSourceIntoSingleLineRawStringTests.cs
 
    [WpfFact]
    public void TestNewLineIntoSingleLineRawString1_A()
        => TestPasteKnownSource(
            pasteText: "\n",
            """"
            var x = """
                [||]
                """
            """",
            "var x = \"\"\"\r\n    \n    [||]\r\n    \"\"\"",
            afterUndo:
            "var x = \"\"\"\r\n    \n[||]\r\n    \"\"\"");
 
    [WpfFact]
    public void TestNewLineIntoSingleLineRawString2_A()
        => TestPasteKnownSource(
            pasteText: """
 
 
            """,
            """"
            var x = """
                [||]
                """
            """",
            """"
            var x = """
                
                [||]
                """
            """",
            afterUndo:
            """"
            var x = """
                
            [||]
                """
            """");
 
    [WpfFact]
    public void TestSpacesIntoSingleLineRawString1_A()
        => TestPasteKnownSource(
            pasteText: """    """,
            """"
            var x = """
                [||]
                """
            """",
            """"
            var x = """
                    [||]
                """
            """",
            afterUndo:
            """"
            var x = """
                [||]
                """
            """");
 
    [WpfFact]
    public void TestSpacesIntoSingleLineRawString2()
        => TestPasteKnownSource(
            pasteText: """
                
 
            """,
            """"
            var x = """
                [||]
                """
            """",
            """"
            var x = """
                    
                [||]
                """
            """",
            afterUndo:
            """"
            var x = """
                    
            [||]
                """
            """");
 
    [WpfFact]
    public void TestSingleQuoteIntoSingleLineRawString_A()
        => TestPasteKnownSource(
            pasteText: """'""",
            """"
            var x = """
                [||]
                """
            """",
            """"
            var x = """
                '[||]
                """
            """",
            afterUndo:
            """"
            var x = """
                [||]
                """
            """");
 
    [WpfFact]
    public void TestDoubleQuoteIntoSingleLineRawString_A()
        => TestPasteKnownSource(
            pasteText: """
            "
            """,
            """"
            var x = """
                [||]
                """
            """",
            """"
            var x = """
                "[||]
                """
            """",
            afterUndo:
            """"
            var x = """
                [||]
                """
            """");
 
    [WpfFact]
    public void TestTripleQuoteIntoSingleLineRawString1_A()
        => TestPasteKnownSource(
            pasteText: """"
            """
            """",
            """"
            var x = """
                [||]
                """
            """",
            """""
            var x = """"
                """[||]
                """"
            """"",
            afterUndo:
            """"
            var x = """
                """[||]
                """
            """");
 
    [WpfFact]
    public void TestTwoQuotesIntoSingleLineRawString3()
        => TestPasteKnownSource(
            pasteText: """
            ""
            """,
            """"
            var x = """
                "[||]
                """
            """",
            """""
            var x = """"
                """[||]
                """"
            """"",
            afterUndo:
            """"
            var x = """
                """[||]
                """
            """");
 
    [WpfFact]
    public void TestTripleQuoteIntoSingleLineRawString3()
        => TestPasteKnownSource(
            pasteText: """"
            """
            """",
            """"
            var x = """
                "[||]
                """
            """",
            """"""
            var x = """""
                """"[||]
                """""
            """""",
            afterUndo:
            """""
            var x = """
                """"[||]
                """
            """"");
 
    [WpfFact]
    public void TestTripleQuoteIntoSingleLineRawString4()
        => TestPasteKnownSource(
            pasteText: """"
            """
            """",
            """"
            var x = """
                "[||]"
                """
            """",
            """""""
            var x = """"""
                """"[||]"
                """"""
            """"""",
            afterUndo:
            """""
            var x = """
                """"[||]"
                """
            """"");
 
    [WpfFact]
    public void TestTripleQuoteIntoSingleLineRawString5()
        => TestPasteKnownSource(
            pasteText: """"
            """
            """",
            """"
            var x = """
                [||]"
                """
            """",
            """"""
            var x = """""
                """[||]"
                """""
            """""",
            afterUndo:
            """"
            var x = """
                """[||]"
                """
            """");
 
    [WpfFact]
    public void TestQuadrupleQuoteIntoSingleLineRawString()
        => TestPasteKnownSource(
            pasteText: """""
            """"
            """"",
            """"
            var x = """
                [||]
                """
            """",
            """"""
            var x = """""
                """"[||]
                """""
            """""",
            afterUndo:
            """""
            var x = """
                """"[||]
                """
            """"");
 
    [WpfFact]
    public void TestComplexStringIntoSingleLineRawString()
        => TestPasteKnownSource(
            pasteText: """  ""  """,
            """"
            var x = """
                [||]
                """
            """",
            """"
            var x = """
                  ""  [||]
                """
            """",
            afterUndo:
            """"
            var x = """
                [||]
                """
            """");
 
    [WpfFact]
    public void TestNormalTextIntoSingleLineRawString_A()
        => TestPasteKnownSource(
            pasteText: """abc""",
            """"
            var x = """
                [||]
                """
            """",
            """"
            var x = """
                abc[||]
                """
            """",
            afterUndo:
            """"
            var x = """
                [||]
                """
            """");
 
    [WpfFact]
    public void TestNormalTextIntoSingleLineRawStringSingleLine1_A()
        => TestPasteKnownSource(
            pasteText: """
            abc
            def
            """,
            """"
            var x = """
                [||]
                """
            """",
            """"
            var x = """
                abc
                def[||]
                """
            """",
            afterUndo:
            """"
            var x = """
                abc
            def[||]
                """
            """");
 
    [WpfFact]
    public void TestNormalTextIntoSingleLineRawStringSingleLine4()
        => TestPasteKnownSource(
            pasteText: """
            abc
            def
            """,
            """"
            var x = """
                goo[||]
                """
            """",
            """"
            var x = """
                gooabc
                def[||]
                """
            """",
            afterUndo:
            """"
            var x = """
                gooabc
            def[||]
                """
            """");
 
    [WpfFact]
    public void TestNormalTextIntoSingleLineRawStringSingleLine5()
        => TestPasteKnownSource(
            pasteText: """
            abc
            def
            """,
            """"
            var x = """
                goo[||]bar
                """
            """",
            """"
            var x = """
                gooabc
                def[||]bar
                """
            """",
            afterUndo:
            """"
            var x = """
                gooabc
            def[||]bar
                """
            """");
 
    [WpfFact]
    public void TestNormalTextIntoSingleLineRawStringSingleLine6()
        => TestPasteKnownSource(
            pasteText: """
            abc
            def
 
            """,
            """"
            var x = """
                goo[||]bar
                """
            """",
            """"
            var x = """
                gooabc
                def
                [||]bar
                """
            """",
            afterUndo:
            """"
            var x = """
                gooabc
            def
            [||]bar
                """
            """");
 
    [WpfFact]
    public void TestNormalTextIntoSingleLineRawStringSingleLine7_A()
        => TestPasteKnownSource(
            pasteText: """
            abc
                def
            ghi
            """,
            """"
            var x = """
                [||]
                """
            """",
            """"
            var x = """
                abc
                    def
                ghi[||]
                """
            """",
            afterUndo:
            """"
            var x = """
                abc
                def
            ghi[||]
                """
            """");
 
    [WpfFact]
    public void TestNormalTextIntoSingleLineRawStringSingleLine7_B()
        => TestPasteKnownSource(
            pasteText: """
            abc
                def
            ghi
            """,
            """"
            var x = """
                      [||]
                      """
            """",
            """"
            var x = """
                      abc
                          def
                      ghi[||]
                      """
            """",
            afterUndo:
            """"
            var x = """
                      abc
                def
            ghi[||]
                      """
            """");
 
    [WpfFact]
    public void TestNormalTextIntoSingleLineRawStringSingleLine8_A()
        => TestPasteKnownSource(
            pasteText: """
            abc
                def
                ghi
            """,
            """"
            var x = """
                [||]
                """
            """",
            """"
            var x = """
                abc
                    def
                    ghi[||]
                """
            """",
            afterUndo:
            """"
            var x = """
                abc
                def
                ghi[||]
                """
            """");
 
    [WpfFact]
    public void TestNormalTextIntoSingleLineRawStringSingleLine9_A()
        => TestPasteKnownSource(
            pasteText: """
                abc
                def
                ghi
            """,
            """"
            var x = """
                [||]
                """
            """",
            """"
            var x = """
                    abc
                    def
                    ghi[||]
                """
            """",
            afterUndo:
            """"
            var x = """
                    abc
                def
                ghi[||]
                """
            """");
 
    [WpfFact]
    public void TestNormalTextIntoSingleLineRawStringSingleLine10_A()
        => TestPasteKnownSource(
            pasteText: """
                    abc
                def
                ghi
            """,
            """"
            var x = """
                [||]
                """
            """",
            """"
            var x = """
                        abc
                    def
                    ghi[||]
                """
            """",
            afterUndo:
            """"
            var x = """
                        abc
                def
                ghi[||]
                """
            """");
 
    [WpfFact]
    public void TestNormalTextIntoSingleLineRawStringSingleLine11_A()
        => TestPasteKnownSource(
            pasteText: """
            abc
            def
            """,
            """"
            var x = """
                [||]{|Selection:    |}
                """
            """",
            """"
            var x = """
                abc
                def[||]
                """
            """",
            afterUndo:
            """"
            var x = """
                abc
            def[||]
                """
            """");
 
    [WpfFact]
    public void TestNormalTextIntoSingleLineRawStringSingleLine12_A()
        => TestPasteKnownSource(
            pasteText: """
            abc
            def
 
            """,
            """"
            var x = """
                [||]{|Selection:    |}
                """
            """",
            """"
            var x = """
                abc
                def
                [||]
                """
            """",
            afterUndo:
            """"
            var x = """
                abc
            def
            [||]
                """
            """");
 
    [WpfFact]
    public void TestNormalTextIntoSingleLineRawStringSingleLine13_A()
        => TestPasteKnownSource(
            pasteText: """
            abc
            def
            """,
            """"
            var x = """
                [||]{|Selection:    |}  
                """
            """",
            """"
            var x = """
                abc
                def[||]  
                """
            """",
            afterUndo:
            """"
            var x = """
                abc
            def[||]  
                """
            """");
 
    [WpfFact]
    public void TestNormalTextIntoSingleLineRawStringHeader1_A()
        => TestPasteKnownSource(
            pasteText: """
            "bar
            """,
            """"
            var x = """
                [||]goo
                """
            """",
            """"
            var x = """
                "bar[||]goo
                """
            """",
            afterUndo:
            """"
            var x = """
                [||]goo
                """
            """");
 
    [WpfFact]
    public void TestQuotesIntoHeader1()
        => TestPasteKnownSource(
            pasteText: """
            ""
            """,
            """"
            var x = """
                [||]{|Selection:    |}
                """
            """",
            """"
            var x = """
                ""[||]
                """
            """",
            afterUndo:
            """"
            var x = """
                    [||]
                """
            """");
 
    [WpfFact]
    public void TestQuotesIntoHeader2()
        => TestPasteKnownSource(
            pasteText: """"
            """
            """",
            """"
            var x = """
                [||]{|Selection:    |}
                """
            """",
            """""
            var x = """"
                """[||]
                """"
            """"",
            afterUndo:
            """"
            var x = """
                """[||]
                """
            """");
 
    #endregion
}