File: Extensions\ContextQuery\IsPossibleDeconstructionDesignationTests.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.Threading;
using Microsoft.CodeAnalysis.CSharp.Extensions.ContextQuery;
using Microsoft.CodeAnalysis.Test.Utilities;
using Roslyn.Test.Utilities;
using Xunit;
 
namespace Microsoft.CodeAnalysis.Editor.CSharp.UnitTests.IntelliSense.CompletionSetSources;
 
[Trait(Traits.Feature, Traits.Features.Completion)]
public class IsPossibleDeconstructionDesignationTests : AbstractContextTests
{
    protected override void CheckResult(bool expected, int position, SyntaxTree syntaxTree)
    {
        var actual = syntaxTree.IsPossibleDeconstructionDesignation(position, CancellationToken.None);
        Assert.Equal(expected, actual);
    }
 
    [Fact]
    public void Test1()
        => VerifyTrue(AddInsideMethod(@"(var $$, var y)"));
 
    [Fact]
    public void WellFormed1()
        => VerifyTrue(AddInsideMethod(@"(var $$, var y) = e;"));
 
    [Fact]
    public void Test2()
        => VerifyTrue(AddInsideMethod(@"(var x, var $$)"));
 
    [Fact]
    public void Test3()
        => VerifyTrue(AddInsideMethod(@"var ($$, y)"));
 
    [Fact]
    public void Test4()
        => VerifyTrue(AddInsideMethod(@"var ($$, y)"));
 
    [Fact]
    public void Test5()
        => VerifyTrue(AddInsideMethod(@"var ($$)"));
 
    [Fact]
    public void Test6()
        => VerifyTrue(AddInsideMethod(@"(var $$)"));
 
    [Fact]
    public void Test7()
        => VerifyTrue(AddInsideMethod(@"(var a, var $$)"));
 
    [Fact]
    public void Test8()
        => VerifyFalse(AddInsideMethod(@"var str = (($$)items) as string;"));
 
    [Fact]
    public void Test9()
        => VerifyTrue(AddInsideMethod(@"Func<int, int, int> f = (x, i $$"));
 
    [Fact]
    public void TestNestedVar()
        => VerifyTrue(AddInsideMethod(@"var (($$), y)"));
 
    [Fact]
    public void TestNestedVar2()
        => VerifyTrue(AddInsideMethod(@"var ((x, $$), y)"));
 
    [Fact]
    public void TestNestedVar3()
        => VerifyTrue(AddInsideMethod(@"var ((x, $$), y) = e;"));
 
    [Fact]
    public void TestForeachVar1()
        => VerifyTrue(AddInsideMethod(@"foreach(var ($$"));
 
    [Fact]
    public void TestForeachVar2()
        => VerifyTrue(AddInsideMethod(@"foreach(var ($$)"));
 
    [Fact]
    public void TestForeachVar3()
        => VerifyTrue(AddInsideMethod(@"foreach(var ($$))"));
 
    [Fact]
    public void TestForeachVar4()
        => VerifyTrue(AddInsideMethod(@"foreach(var (x, $$"));
 
    [Fact]
    public void TestForeachVar5()
        => VerifyTrue(AddInsideMethod(@"foreach(var ($$) in "));
 
    [Fact]
    public void TestForeachVar6()
        => VerifyTrue(AddInsideMethod(@"foreach(var (($$), y)"));
 
    [Fact]
    public void TestForeachVar7()
        => VerifyTrue(AddInsideMethod(@"foreach(var (($$), y) in "));
 
    [Fact]
    public void TestForeachVar8()
        => VerifyTrue(AddInsideMethod(@"foreach(var ((x, $$), y)"));
 
    [Fact]
    public void TestForeachVar9()
        => VerifyTrue(AddInsideMethod(@"foreach(var ((x, $$), y) in "));
 
    [Fact]
    public void False1()
        => VerifyFalse(AddInsideMethod(@"var $$"));
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/25084#issuecomment-369075537")]
    public void FalseAfterPattern1()
        => VerifyFalse(AddInsideMethod(@"if (1 is int i $$"));
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/25084#issuecomment-369075537")]
    public void FalseAfterPattern2()
        => VerifyFalse(AddInsideMethod(@"if (1 is int i $$);"));
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/25084#issuecomment-369075537")]
    public void FalseAfterPattern3()
        => VerifyFalse(AddInsideMethod(@"switch (1) { case int i $$ }"));
}