/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/EditorFeatures/CSharpTest/Completion/ArgumentProviders/ContextVariableArgumentProviderTests.cs
219 строк
6 KB
Cyrus Najmabadi
Use raw strings in tests
09 июл 2025, 08:52
09 июл 2025, 08:52
f265dce
Код
Авторство
О чём код?
// 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 System; using System.Threading.Tasks; using Microsoft.CodeAnalysis.CSharp.Completion.Providers; using Microsoft.CodeAnalysis.Test.Utilities; using Xunit; namespace Microsoft.CodeAnalysis.Editor.CSharp.UnitTests.Completion.ArgumentProviders; [Trait(Traits.Feature, Traits.Features.Completion)] public sealed class ContextVariableArgumentProviderTests : AbstractCSharpArgumentProviderTests { internal override Type GetArgumentProviderType() => typeof(ContextVariableArgumentProvider); [Theory] [InlineData("string")] [InlineData("bool")] [InlineData("int?")] public async Task TestLocalVariable(string type) { var markup = $$""" class C { void Method() { {{type}} arg = default; this.Target($$); } void Target({{type}} arg) { } } """; await VerifyDefaultValueAsync(markup, "arg"); await VerifyDefaultValueAsync(markup, expectedDefaultValue: null, previousDefaultValue: "prior"); } [Theory, CombinatorialData] public async Task TestOutVariable( [CombinatorialValues("string", "bool", "int?")] string type, [CombinatorialValues("out", "ref", "in")] string modifier) { var markup = $$""" class C { void Method() { {{type}} arg; this.Target($$); } void Target({{modifier}} {{type}} arg) { } } """; var generatedModifier = modifier switch { "in" => "", _ => $"{modifier} ", }; await VerifyDefaultValueAsync(markup, $"{generatedModifier}arg"); await VerifyDefaultValueAsync(markup, expectedDefaultValue: null, previousDefaultValue: "prior"); } [Theory] [InlineData("string")] [InlineData("bool")] [InlineData("int?")] public async Task TestParameter(string type) { var markup = $$""" class C { void Method({{type}} arg) { this.Target($$); } void Target({{type}} arg) { } } """; await VerifyDefaultValueAsync(markup, "arg"); await VerifyDefaultValueAsync(markup, expectedDefaultValue: null, previousDefaultValue: "prior"); } [Theory] [InlineData("string", "string")] [InlineData("string", "IEnumerable<char>")] [InlineData("bool", "bool")] [InlineData("int?", "int?")] [InlineData("int", "int?")] public async Task TestInstanceVariable(string fieldType, string parameterType) { var markup = $$""" using System.Collections.Generic; class C { {{fieldType}} arg; void Method() { this.Target($$); } void Target({{parameterType}} arg) { } } """; await VerifyDefaultValueAsync(markup, "arg"); await VerifyDefaultValueAsync(markup, expectedDefaultValue: null, previousDefaultValue: "prior"); } [Theory] [InlineData("C")] [InlineData("B")] [InlineData("I")] public async Task TestThisInstance(string parameterType) { var markup = $$""" using System.Collections.Generic; interface I { } class B { } class C : B, I { void Method() { this.Target($$); } void Target({{parameterType}} arg) { } } """; await VerifyDefaultValueAsync(markup, "this"); await VerifyDefaultValueAsync(markup, expectedDefaultValue: null, previousDefaultValue: "prior"); } [Theory] [InlineData("object")] [InlineData("string")] public Task TestThisInstanceNotProvided1(string parameterType) => VerifyDefaultValueAsync($$""" using System.Collections.Generic; interface I { } class B { } class C : B, I { void Method() { this.Target($$); } void Target({{parameterType}} arg) { } } """, null); [Fact] public Task TestThisInstanceNotProvided2() => VerifyDefaultValueAsync($$""" using System.Collections.Generic; class C { static void Method() { Target($$); } static void Target(C arg) { } } """, null); // Note: The current implementation checks for exact type match for primitive types. If this changes, some of // these tests may need to be updated to account for the new behavior. [Theory] [InlineData("object", "string")] [InlineData("string", "object")] [InlineData("bool", "bool?")] [InlineData("bool", "int")] [InlineData("int", "object")] public Task TestMismatchType(string parameterType, string valueType) => VerifyDefaultValueAsync($$""" class C { void Method({{valueType}} arg) { this.Target($$); } void Target({{parameterType}} arg) { } } """, null); }