File: Cohost\CohostDataTipRangeEndpointTest.cs
Web Access
Project: src\src\Razor\src\Razor\test\Microsoft.VisualStudio.LanguageServices.Razor.UnitTests\Microsoft.VisualStudio.LanguageServices.Razor.UnitTests.csproj (Microsoft.VisualStudio.LanguageServices.Razor.UnitTests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System.Threading.Tasks;
using Microsoft.AspNetCore.Razor.Test.Common;
using Xunit;
using Xunit.Abstractions;
 
namespace Microsoft.VisualStudio.Razor.LanguageClient.Cohost;
 
public sealed class CohostDataTipRangeEndpointTest(ITestOutputHelper testOutputHelper) : CohostEndpointTestBase(testOutputHelper)
{
    [Fact]
    public async Task Handle_CSharpInHtml_DataTipRange_FirstExpression()
    {
        var input = """
            @{
                {|expression:{|hover:a$$aa|}|}.bbb.ccc;
            }
            """;
 
        await VerifyDataTipRangeAsync(input);
    }
 
    [Fact]
    public async Task Handle_CSharpInHtml_DataTipRange_SecondExpression()
    {
        var input = """
            @{
                {|expression:{|hover:aaa.b$$bb|}|}.ccc;
            }
            """;
 
        await VerifyDataTipRangeAsync(input);
    }
 
    [Fact]
    public async Task Handle_CSharpInHtml_DataTipRange_LastExpression()
    {
        var input = """
            @{
                {|expression:{|hover:aaa.bbb.c$$cc|}|};
            }
            """;
 
        await VerifyDataTipRangeAsync(input);
    }
 
    [Fact]
    public async Task Handle_CSharpInHtml_DataTipRange_LinqExpression()
    {
        var input = """
            @using System.Linq;
 
            @{
                int[] args;
                var v = {|expression:{|hover:args.Se$$lect|}(a => a.ToString())|}.Where(a => a.Length >= 0);
            }
            """;
 
        await VerifyDataTipRangeAsync(input, VSInternalDataTipTags.LinqExpression);
    }
 
    private async Task VerifyDataTipRangeAsync(TestCode input, VSInternalDataTipTags dataTipTags = 0)
    {
        var document = CreateProjectAndRazorDocument(input.Text);
        var inputText = await document.GetTextAsync(DisposalToken);
        var position = inputText.GetPosition(input.Position);
 
        var endpoint = new CohostDataTipRangeEndpoint(IncompatibleProjectService, RemoteServiceInvoker);
 
        var result = await endpoint.GetTestAccessor().HandleRequestAsync(document, position, DisposalToken);
 
        Assumes.NotNull(result);
 
        var expectedExpressionSpan = input.GetNamedSpans("expression")[0];
        var expectedExpressionRange = inputText.GetRange(expectedExpressionSpan);
        Assert.Equal(expectedExpressionRange, result.ExpressionRange);
 
        var expectedHoverSpan = input.GetNamedSpans("hover")[0];
        var expectedHoverRange = inputText.GetRange(expectedHoverSpan);
        Assert.Equal(expectedHoverRange, result.HoverRange);
 
        Assert.Equal(dataTipTags, result.DataTipTags);
    }
}