/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Compilers/VisualBasic/Test/Symbol/SymbolsTests/ParamsCollectionTests.vb
147 строк
6 KB
AlekseyTs
Adjust public API based on API review feedback (#71940)
05 фев 2024, 20:30
Не верифицирован
05 фев 2024, 20:30
1c5c7e2
Код
Авторство
О чём код?
' 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. Imports Microsoft.CodeAnalysis.Test.Utilities Imports Microsoft.CodeAnalysis.VisualBasic.Symbols Imports Roslyn.Test.Utilities Namespace Microsoft.CodeAnalysis.VisualBasic.UnitTests Public Class ParamsCollectionTests Inherits BasicTestBase <Fact> Public Sub Consume_01() Dim csSource = " public class C1 { public static void M1(params System.Collections.Generic.IEnumerable<int> a) {} public static void M2(System.Collections.Generic.IEnumerable<int> a) {} public static void M3(params int[] a) {} } " Dim csCompilation = CreateCSharpCompilation(csSource, parseOptions:=CSharp.CSharpParseOptions.Default.WithLanguageVersion(CSharp.LanguageVersion.Preview), referencedAssemblies:=TargetFrameworkUtil.GetReferences(TargetFramework.Standard)).EmitToImageReference() Dim source1 = <compilation> <file name="c.vb"><![CDATA[ Public Class C Shared Sub Main() C1.M1(1, 2, 3) C1.M1({1, 2, 3}) C1.M2({1, 2, 3}) C1.M3(1, 2, 3) C1.M3({1, 2, 3}) End Sub End Class ]]></file> </compilation> Dim comp1 = CreateCompilation(source1, targetFramework:=TargetFramework.Standard, references:={csCompilation}, options:=TestOptions.DebugExe) comp1.AssertTheseDiagnostics( <expected> BC30311: Value of type 'Integer' cannot be converted to 'IEnumerable(Of Integer)'. C1.M1(1, 2, 3) ~ BC30057: Too many arguments to 'Public Shared Overloads Sub M1(a As IEnumerable(Of Integer))'. C1.M1(1, 2, 3) ~ </expected> ) End Sub <Fact> Public Sub SymbolDisplay_01() Dim csSource = " public class C1 { public static void M1(params System.Collections.Generic.IEnumerable<int> a) {} public static void M2(params int[] a) {} } " Dim csCompilation = CreateCSharpCompilation(csSource, parseOptions:=CSharp.CSharpParseOptions.Default.WithLanguageVersion(CSharp.LanguageVersion.Preview), referencedAssemblies:=TargetFrameworkUtil.GetReferences(TargetFramework.Standard)) Dim m1 = DirectCast(csCompilation, Compilation).GetTypeByMetadataName("C1").GetMembers().Where(Function(s) s.Name = "M1").Single() Dim m2 = DirectCast(csCompilation, Compilation).GetTypeByMetadataName("C1").GetMembers().Where(Function(s) s.Name = "M2").Single() AssertEx.Equal("Public Shared Sub M1(a As System.Collections.Generic.IEnumerable(Of Integer))", SymbolDisplay.ToDisplayString(m1)) AssertEx.Equal("Public Shared Sub M2(ParamArray a As Integer())", SymbolDisplay.ToDisplayString(m2)) Dim source1 = <compilation> <file name="c.vb"><![CDATA[ Public Class C Shared Sub Main() End Sub End Class ]]></file> </compilation> Dim comp1 = CreateCompilation(source1, targetFramework:=TargetFramework.Standard, references:={csCompilation.EmitToImageReference()}, options:=TestOptions.DebugExe) AssertEx.Equal("Sub C1.M1(a As System.Collections.Generic.IEnumerable(Of System.Int32))", comp1.GetMember("C1.M1").ToTestDisplayString()) AssertEx.Equal("Sub C1.M2(ParamArray a As System.Int32())", comp1.GetMember("C1.M2").ToTestDisplayString()) End Sub <Fact> Public Sub PublicApi_01() Dim csSource = " public class C1 { public static void M1(params System.Collections.Generic.IEnumerable<int> a) {} public static void M2(System.Collections.Generic.IEnumerable<int> a) {} public static void M3(params int[] a) {} } " Dim csCompilation = CreateCSharpCompilation(csSource, parseOptions:=CSharp.CSharpParseOptions.Default.WithLanguageVersion(CSharp.LanguageVersion.Preview), referencedAssemblies:=TargetFrameworkUtil.GetReferences(TargetFramework.Standard)).EmitToImageReference() Dim source1 = <compilation> <file name="c.vb"><![CDATA[ Public Class C2 Shared Sub M4(ParamArray b as Integer()) End Sub Shared Sub M5(b as Integer()) End Sub End Class ]]></file> </compilation> Dim comp1 = CreateCompilation(source1, targetFramework:=TargetFramework.Standard, references:={csCompilation}, options:=TestOptions.DebugDll) VerifyParams(comp1.GetMember("C1.M1").GetParameters().Last(), isParamArray:=False) VerifyParams(comp1.GetMember("C1.M2").GetParameters().Last(), isParamArray:=False) VerifyParams(comp1.GetMember("C1.M3").GetParameters().Last(), isParamArray:=True) VerifyParams(comp1.GetMember("C2.M4").GetParameters().Last(), isParamArray:=True) VerifyParams(comp1.GetMember("C2.M5").GetParameters().Last(), isParamArray:=False) End Sub Private Shared Sub VerifyParams(parameter As ParameterSymbol, isParamArray As Boolean) Assert.Equal(isParamArray, parameter.IsParamArray) Dim iParameter = DirectCast(parameter, IParameterSymbol) Assert.Equal(isParamArray, iParameter.IsParamsArray) Assert.False(iParameter.IsParamsCollection) Assert.Equal(isParamArray, iParameter.IsParams) End Sub End Class End Namespace