File: CommentSelection\CSharpToggleBlockCommentCommandHandlerTests.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;
using System.Linq;
using Microsoft.CodeAnalysis.CommentSelection;
using Microsoft.CodeAnalysis.Editor.CSharp.CommentSelection;
using Microsoft.CodeAnalysis.Test.Utilities;
using Microsoft.CodeAnalysis.Test.Utilities.CommentSelection;
using Microsoft.VisualStudio.Commanding;
using Roslyn.Test.Utilities;
using Xunit;
 
namespace Microsoft.CodeAnalysis.Editor.CSharp.UnitTests.CommentSelection;
 
[UseExportProvider]
[Trait(Traits.Feature, Traits.Features.ToggleBlockComment)]
public class CSharpToggleBlockCommentCommandHandlerTests : AbstractToggleCommentTestBase
{
    [WpfFact]
    public void AddComment_CommentMarkerStringBeforeSelection()
    {
        var markup =
            """
            class C
            {
                void M()
                {
                    string s = '/*';
                    [|var j = 2;
                    var k = 3;|]
                }
            }
            """;
        var expected =
            """
            class C
            {
                void M()
                {
                    string s = '/*';
                    [|/*var j = 2;
                    var k = 3;*/|]
                }
            }
            """;
 
        ToggleComment(markup, expected);
    }
 
    [WpfFact]
    public void AddComment_DirectiveWithCommentInsideSelection()
    {
        var markup =
            """
            class C
            {
                void M()
                {
                    [|var i = 1;
            #if false
                    /*var j = 2;*/
            #endif
                    var k = 3;|]
                }
            }
            """;
        var expected =
            """
            class C
            {
                void M()
                {
                    [|/*var i = 1;
            #if false
                    /*var j = 2;*/
            #endif
                    var k = 3;*/|]
                }
            }
            """;
 
        ToggleComment(markup, expected);
    }
 
    [WpfFact]
    public void AddComment_MarkerInsideSelection()
    {
        var markup =
            """
            class C
            {
                void M()
                {
                    [|var i = 1;
                    string s = '/*';
                    var k = 3;|]
                }
            }
            """;
        var expected =
            """
            class C
            {
                void M()
                {
                    [|/*var i = 1;
                    string s = '/*';
                    var k = 3;*/|]
                }
            }
            """;
 
        ToggleComment(markup, expected);
    }
 
    [WpfFact]
    public void AddComment_CloseCommentMarkerStringInSelection()
    {
        var markup =
            """
            class C
            {
                void M()
                {
                    [|var i = 1;
                    string s = '*/';
                    var k = 3;|]
                }
            }
            """;
        var expected =
            """
            class C
            {
                void M()
                {
                    [|/*var i = 1;
                    string s = '*/';
                    var k = 3;*/|]
                }
            }
            """;
 
        ToggleComment(markup, expected);
    }
 
    [WpfFact]
    public void AddComment_CommentMarkerStringAfterSelection()
    {
        var markup =
            """
            class C
            {
                void M()
                {
                    [|var i = 1;
                    var j = 2;|]
                    string s = '*/';
                }
            }
            """;
        var expected =
            """
            class C
            {
                void M()
                {
                    [|/*var i = 1;
                    var j = 2;*/|]
                    string s = '*/';
                }
            }
            """;
 
        ToggleComment(markup, expected);
    }
 
    [WpfFact]
    public void RemoveComment_CommentMarkerStringNearSelection()
    {
        var markup =
            """
            class C
            {
                void M()
                {
                    string s = '/*';
                    [|/*var i = 1;
                    var j = 2;
                    var k = 3;*/|]
                }
            }
            """;
        var expected =
            """
            class C
            {
                void M()
                {
                    string s = '/*';
                    [|var i = 1;
                    var j = 2;
                    var k = 3;|]
                }
            }
            """;
 
        ToggleComment(markup, expected);
    }
 
    [WpfFact]
    public void RemoveComment_CommentMarkerStringInSelection()
    {
        var markup =
            """
            class C
            {
                void M()
                {
                    [|/*string s = '/*';*/|]
                }
            }
            """;
        var expected =
            """
            class C
            {
                void M()
                {
                    [|string s = '/*';|]
                }
            }
            """;
 
        ToggleComment(markup, expected);
    }
 
    internal override AbstractCommentSelectionBase<ValueTuple> GetToggleCommentCommandHandler(EditorTestWorkspace workspace)
    {
        return (AbstractCommentSelectionBase<ValueTuple>)workspace.ExportProvider.GetExportedValues<ICommandHandler>()
            .First(export => typeof(CSharpToggleBlockCommentCommandHandler).Equals(export.GetType()));
    }
 
    internal override EditorTestWorkspace GetWorkspace(string markup, TestComposition composition)
        => EditorTestWorkspace.CreateCSharp(markup, composition: composition);
}