/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Compilers/VisualBasic/Test/Semantic/Binding/GenericsTests.vb
404 строки
12 KB
Jonathon Marolf
update headers
23 янв 2020, 04:01
Не верифицирован
23 янв 2020, 04:01
91571a3
Код
Авторство
О чём код?
' 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 Imports Microsoft.CodeAnalysis.VisualBasic Imports Roslyn.Test.Utilities Namespace Microsoft.CodeAnalysis.VisualBasic.UnitTests Public Class GenericsTests Inherits BasicTestBase <WorkItem(543690, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543690")> <WorkItem(543690, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543690")> <Fact()> Public Sub WrongNumberOfGenericArgumentsTest() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime( <compilation name="WrongNumberOfGenericArguments"> <file name="a.vb"> Namespace GenArity200 Public Class vbCls5 (Of T) Structure vbStrA (Of X, Y) Dim i As Integer Public Readonly Property rp () As String Get Return "vbCls5 (Of T) vbStrA (Of X, Y)" End Get End Property End Structure End Class Class Problem Sub GenArity200() Dim Str14 As New vbCls5 (Of UInteger ()()).vbStrA (Of Integer) End Sub End Class End Namespace </file> </compilation>) AssertTheseDiagnostics(compilation, <expected> BC32042: Too few type arguments to 'vbCls5(Of UInteger()()).vbStrA(Of X, Y)'. Dim Str14 As New vbCls5 (Of UInteger ()()).vbStrA (Of Integer) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ </expected>) End Sub <WorkItem(543706, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543706")> <Fact()> Public Sub TestNestedGenericTypeInference() Dim vbCompilation = CreateVisualBasicCompilation("TestNestedGenericTypeInference", <![CDATA[Imports System Public Module Program Sub goo(Of U, T)(ByVal x As cls1(Of U).cls2(Of T)) Console.WriteLine(GetType(U).ToString()) Console.WriteLine(GetType(T).ToString()) End Sub Class cls1(Of X) Class cls2(Of Y) End Class End Class Sub Main() Dim x = New cls1(Of Integer).cls2(Of Long) goo(x) End Sub End Module]]>, compilationOptions:=New VisualBasicCompilationOptions(OutputKind.ConsoleApplication)) CompileAndVerify(vbCompilation, expectedOutput:=<![CDATA[System.Int32 System.Int64]]>).VerifyDiagnostics() End Sub <WorkItem(543783, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543783")> <Fact()> Public Sub ImportNestedGenericTypeWithErrors() Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime( <compilation> <file name="a.vb"><![CDATA[ Imports GenImpClassOpenErrors.GenClassA(Of String).GenClassB.GenClassC(Of String) Namespace GenImpClassOpenErrors Module Module1 Public Class GenClassA(Of T) Public Class GenClassB(Of U) Public Class GenClassC(Of V) End Class End Class End Class End Module End Namespace ]]></file> </compilation>) CompilationUtils.AssertTheseDiagnostics(compilation, <expected> BC32042: Too few type arguments to 'Module1.GenClassA(Of String).GenClassB(Of U)'. Imports GenImpClassOpenErrors.GenClassA(Of String).GenClassB.GenClassC(Of String) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ </expected>) End Sub <WorkItem(543850, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543850")> <Fact()> Public Sub ConflictingNakedConstraint() Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime( <compilation> <file name="a.vb"> Module Program Class c2 End Class Class c3 End Class Class C6(Of T As {c2, c3}) 'COMPILEERROR: BC32110, "c3", BC32110, "c3" Interface I1(Of S As {U, c3}, U As {c3, T}) End Interface End Class End Module </file> </compilation>) compilation.AssertTheseDiagnostics( <expected> BC32047: Type parameter 'T' can only have one constraint that is a class. Class C6(Of T As {c2, c3}) ~~ BC32111: Indirect constraint 'Class c2' obtained from the type parameter constraint 'U' conflicts with the constraint 'Class c3'. Interface I1(Of S As {U, c3}, U As {c3, T}) ~ BC32110: Constraint 'Class c3' conflicts with the indirect constraint 'Class c2' obtained from the type parameter constraint 'T'. Interface I1(Of S As {U, c3}, U As {c3, T}) ~~ </expected>) End Sub <WorkItem(11887, "DevDiv_Projects/Roslyn")> <Fact()> Public Sub WideningNullableConversion() Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime( <compilation> <file name="a.vb"> Imports System Module Program Sub Gen1E(Of T, V As Structure)(ByVal c As Func(Of V?, T)) Dim k = New V c(k) End Sub End Module </file> </compilation> ) compilation.VerifyDiagnostics() End Sub <WorkItem(543900, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543900")> <Fact()> Public Sub NarrowingConversionNoReturn() Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime( <compilation> <file name="a.vb"> Imports System Namespace Program Class C6 Public Shared Narrowing Operator CType(ByVal arg As C6) As Exception Return Nothing End Operator End Class End Namespace </file> </compilation> ) compilation.VerifyDiagnostics() End Sub <WorkItem(543900, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543900")> <Fact()> Public Sub NarrowingConversionNoReturn2() Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime( <compilation> <file name="a.vb"> Imports System Namespace Program Class c2 Public Shared Narrowing Operator CType(ByVal arg As c2) As Integer Return Nothing End Operator End Class End Namespace </file> </compilation> ) compilation.AssertNoDiagnostics() End Sub <WorkItem(543902, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543902")> <Fact()> Public Sub ConversionOperatorShouldBePublic() Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime( <compilation> <file name="a.vb"> Namespace Program Class CScen5 Shared Narrowing Operator CType(ByVal src As CScen5b) As CScen5 str = "scen5" Return New CScen5 End Operator Public Shared str = "" End Class End Namespace </file> </compilation> ) compilation.VerifyDiagnostics(Diagnostic(ERRID.ERR_UndefinedType1, "CScen5b").WithArguments("CScen5b")) End Sub <Fact(), WorkItem(529249, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/529249")> Public Sub ArrayOfRuntimeArgumentHandle() Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime( <compilation> <file name="a.vb"> Imports System Module Program Sub goo(ByRef x As RuntimeArgumentHandle()) ReDim x(100) End Sub End Module </file> </compilation> ) compilation.VerifyDiagnostics(Diagnostic(ERRID.ERR_RestrictedType1, "RuntimeArgumentHandle()").WithArguments("System.RuntimeArgumentHandle")) End Sub <WorkItem(543909, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543909")> <Fact()> Public Sub StructureContainsItself() Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime( <compilation> <file name="a.vb"> Imports System Namespace Program Structure s2 Dim list As Collections.Generic.List(Of s2) 'COMPILEERROR: BC30294, "Collections.Generic.List(Of s2).Enumerator" Dim enumerator As Collections.Generic.List(Of s2).Enumerator End Structure End Namespace </file> </compilation> ) compilation.VerifyDiagnostics(Diagnostic(ERRID.ERR_RecordCycle2, "enumerator").WithArguments("s2", Environment.NewLine & " 's2' contains 'List(Of s2).Enumerator' (variable 'enumerator')." & Environment.NewLine & " 'List(Of s2).Enumerator' contains 's2' (variable 'current').")) End Sub <WorkItem(543921, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543921")> <Fact()> Public Sub GenericConstraintInheritanceWithEvent() Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime( <compilation> <file name="a.vb"> Namespace GenClass7105 Interface I1 Event e() Property p1() As String Sub rEvent() End Interface Class CI1 Implements I1 Private s1 As String Public Event e() Implements I1.e Public Sub rEvent() Implements I1.rEvent RaiseEvent e() End Sub Public Property p1() As String Implements I1.p1 Get Return s1 End Get Set(ByVal value As String) s1 = value End Set End Property Sub eHandler() Handles Me.e Me.s1 = Me.s1 & "eHandler" End Sub End Class Class CI2 Inherits CI1 End Class Class Cls1a(Of T1 As {I1, Class}, T2 As T1) Public WithEvents x1 As T1 'This error is actually correct now as the Class Constraint Change which was made. Class can be a Class (OR INTERFACE) on a structure. 'This testcase has changed to reflect the new behavior and this constraint change will also be caught. 'COMPILEERROR: BC30413, "T2" Public WithEvents x2 As T2 Public Function Test(ByVal i As Integer) As String x2.p1 = "x2_" Call x2.rEvent() Return x2.p1 End Function End Class End Namespace </file> </compilation> ) compilation.VerifyDiagnostics(Diagnostic(ERRID.ERR_WithEventsAsStruct, "x2")) End Sub <WorkItem(529287, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/529287")> <Fact()> Public Sub ProtectedMemberGenericClass() Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime( <compilation> <file name="a.vb"> Public Class c1(Of T) 'COMPILEERROR: BC30508, "c1(Of Integer).c2" Protected x As c1(Of Integer).c2 Protected Class c2 End Class End Class </file> </compilation> ) compilation.VerifyDiagnostics() End Sub <WorkItem(544122, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/544122")> <Fact()> Public Sub BoxAlreadyBoxed() Dim compilation = CompileAndVerify( <compilation> <file name="a.vb"> Imports System Imports System.Collections.Generic Imports System.Linq Module Program Sub Scen4(Of T As U, U As Class)(ByVal p As T) Dim x As T x = TryCast(p, U) If x Is Nothing Then Console.WriteLine("fail") End If End Sub Sub Main(args As String()) End Sub End Module </file> </compilation> ) End Sub <WorkItem(531075, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/531075")> <Fact()> Public Sub Bug17530() Dim vbCompilation = CreateVisualBasicCompilation("Bug17530", <![CDATA[ Imports Tuple = System.Tuple Public Module Program Sub Main() Dim x As Object = Nothing Dim y = TryCast(x, Tuple(Of Integer, Integer, String)) End Sub End Module ]]>, compilationOptions:=New VisualBasicCompilationOptions(OutputKind.ConsoleApplication, globalImports:=GlobalImport.Parse({"System"}))) CompileAndVerify(vbCompilation).VerifyDiagnostics( Diagnostic(ERRID.HDN_UnusedImportStatement, "Imports Tuple = System.Tuple")) End Sub End Class End Namespace