/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/ExpressionEvaluator/VisualBasic/Test/ResultProvider/TupleTests.vb
342 строки
17 KB
Cyrus Najmabadi
Organize VB imports
27 июн 2025, 21:53
27 июн 2025, 21:53
e9c47fd
Код
Авторство
О чём код?
' 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 System.Collections.Immutable Imports Microsoft.CodeAnalysis.CSharp Imports Microsoft.CodeAnalysis.ExpressionEvaluator Imports Microsoft.CodeAnalysis.Test.Utilities Imports Microsoft.CodeAnalysis.VisualBasic.UnitTests Imports Microsoft.VisualStudio.Debugger.Clr Imports Microsoft.VisualStudio.Debugger.Evaluation Imports Roslyn.Test.Utilities Imports Xunit Namespace Microsoft.CodeAnalysis.VisualBasic.ExpressionEvaluator.UnitTests Public Class TupleTests Inherits VisualBasicResultProviderTestBase <Fact> Public Sub LongTuple_NoNames() Const source = "Class C Private _17 As (Short, Short, Short, Short, Short, Short, Short, Short, Short, Short, Short, Short, Short, Short, Short, Short, Short) = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17) End Class" Dim assembly0 = GenerateTupleAssembly() Dim reference0 = AssemblyMetadata.CreateFromImage(assembly0).GetReference() Dim compilation1 = CreateCompilationWithMscorlib40({source}, options:=TestOptions.ReleaseDll, references:={reference0}, assemblyName:=GetUniqueName()) Dim assembly1 = compilation1.EmitToArray() Dim runtime = New DkmClrRuntimeInstance(ReflectionUtilities.GetMscorlib(ReflectionUtilities.Load(assembly0), ReflectionUtilities.Load(assembly1))) Using runtime.Load() Dim type = runtime.GetType("C") Dim value = type.Instantiate() Dim result = FormatResult("o", value) Verify(result, EvalResult("o", "{C}", "C", "o", DkmEvaluationResultFlags.Expandable)) Dim children = GetChildren(result) Verify(children, EvalResult( "_17", "(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17)", "(Short, Short, Short, Short, Short, Short, Short, Short, Short, Short, Short, Short, Short, Short, Short, Short, Short)", "o._17", DkmEvaluationResultFlags.Expandable Or DkmEvaluationResultFlags.CanFavorite)) children = GetChildren(children(0)) Verify(children, EvalResult("Item1", "1", "Short", "o._17.Item1"), EvalResult("Item2", "2", "Short", "o._17.Item2"), EvalResult("Item3", "3", "Short", "o._17.Item3"), EvalResult("Item4", "4", "Short", "o._17.Item4"), EvalResult("Item5", "5", "Short", "o._17.Item5"), EvalResult("Item6", "6", "Short", "o._17.Item6"), EvalResult("Item7", "7", "Short", "o._17.Item7"), EvalResult("Item8", "8", "Short", "o._17.Rest.Item1"), EvalResult("Item9", "9", "Short", "o._17.Rest.Item2"), EvalResult("Item10", "10", "Short", "o._17.Rest.Item3"), EvalResult("Item11", "11", "Short", "o._17.Rest.Item4"), EvalResult("Item12", "12", "Short", "o._17.Rest.Item5"), EvalResult("Item13", "13", "Short", "o._17.Rest.Item6"), EvalResult("Item14", "14", "Short", "o._17.Rest.Item7"), EvalResult("Item15", "15", "Short", "o._17.Rest.Rest.Item1"), EvalResult("Item16", "16", "Short", "o._17.Rest.Rest.Item2"), EvalResult("Item17", "17", "Short", "o._17.Rest.Rest.Item3"), EvalResult( "Raw View", "(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17)", "(Short, Short, Short, Short, Short, Short, Short, Short, Short, Short, Short, Short, Short, Short, Short, Short, Short)", "o._17, raw", DkmEvaluationResultFlags.Expandable Or DkmEvaluationResultFlags.ReadOnly)) children = GetChildren(children(children.Length - 1)) Verify(children, EvalResult("Item1", "1", "Short", "o._17.Item1"), EvalResult("Item2", "2", "Short", "o._17.Item2"), EvalResult("Item3", "3", "Short", "o._17.Item3"), EvalResult("Item4", "4", "Short", "o._17.Item4"), EvalResult("Item5", "5", "Short", "o._17.Item5"), EvalResult("Item6", "6", "Short", "o._17.Item6"), EvalResult("Item7", "7", "Short", "o._17.Item7"), EvalResult("Rest", "(8, 9, 10, 11, 12, 13, 14, 15, 16, 17)", "(Short, Short, Short, Short, Short, Short, Short, Short, Short, Short)", "o._17.Rest, raw", DkmEvaluationResultFlags.Expandable)) children = GetChildren(children(children.Length - 1)) Verify(children, EvalResult("Item1", "8", "Short", "o._17.Rest.Item1"), EvalResult("Item2", "9", "Short", "o._17.Rest.Item2"), EvalResult("Item3", "10", "Short", "o._17.Rest.Item3"), EvalResult("Item4", "11", "Short", "o._17.Rest.Item4"), EvalResult("Item5", "12", "Short", "o._17.Rest.Item5"), EvalResult("Item6", "13", "Short", "o._17.Rest.Item6"), EvalResult("Item7", "14", "Short", "o._17.Rest.Item7"), EvalResult("Rest", "(15, 16, 17)", "(Short, Short, Short)", "o._17.Rest.Rest, raw", DkmEvaluationResultFlags.Expandable)) children = GetChildren(children(children.Length - 1)) Verify(children, EvalResult("Item1", "15", "Short", "o._17.Rest.Rest.Item1"), EvalResult("Item2", "16", "Short", "o._17.Rest.Rest.Item2"), EvalResult("Item3", "17", "Short", "o._17.Rest.Rest.Item3")) End Using End Sub <Fact, WorkItem("https://github.com/dotnet/roslyn/issues/13625")> Public Sub Names_LongTuple() Const source = "class C { ((int A, (int B, int C) D, int E, int F, int G, int H, int I, int J) K, (int L, int M, int N) O) F = ((1, (2, 3), 4, 5, 6, 7, 8, 9), (10, 11, 12)); }" Dim assembly0 = GenerateTupleAssembly() Dim reference0 = AssemblyMetadata.CreateFromImage(assembly0).GetReference() Dim compilation1 = CreateCSharpCompilation(source, references:={TestBase.MscorlibRef, TestBase.SystemCoreRef, reference0}) Dim assembly1 = compilation1.EmitToArray() Dim runtime = New DkmClrRuntimeInstance(ReflectionUtilities.GetMscorlib(ReflectionUtilities.Load(assembly0), ReflectionUtilities.Load(assembly1))) Using runtime.Load() Dim type = runtime.GetType("C") Dim value = type.Instantiate() Dim result = FormatResult("o", value) Verify(result, EvalResult("o", "{C}", "C", "o", DkmEvaluationResultFlags.Expandable)) Dim children = GetChildren(result) Verify(children, EvalResult( "F", "((1, (2, 3), 4, 5, 6, 7, 8, 9), (10, 11, 12))", "(K As (A As Integer, D As (B As Integer, C As Integer), E As Integer, F As Integer, G As Integer, H As Integer, I As Integer, J As Integer), O As (L As Integer, M As Integer, N As Integer))", "o.F", DkmEvaluationResultFlags.Expandable Or DkmEvaluationResultFlags.CanFavorite)) End Using End Sub <Fact> Public Sub NamesFromTypeArguments() Const source = "class A<T, U> { T F; U[] G = new U[0]; } class B<T> { internal struct S { } (dynamic X, T Y) F = (null, default(T)); } class C { A<(dynamic A, object B)[], (object C, dynamic[] D)> F = new A<(dynamic A, object B)[], (object, dynamic[])>(); B<(object E, B<(object F, dynamic G)>.S H)> G = new B<(object E, B<(object F, dynamic G)>.S H)>(); }" Dim assembly0 = GenerateTupleAssembly() Dim reference0 = AssemblyMetadata.CreateFromImage(assembly0).GetReference() Dim compilation1 = CreateCSharpCompilation(source, references:={TestBase.MscorlibRef, TestBase.SystemCoreRef, reference0}) Dim assembly1 = compilation1.EmitToArray() Dim runtime = New DkmClrRuntimeInstance(ReflectionUtilities.GetMscorlib(ReflectionUtilities.Load(assembly0), ReflectionUtilities.Load(assembly1))) Using runtime.Load() Dim type = runtime.GetType("C") Dim value = type.Instantiate() Dim result = FormatResult("o", value) Dim children = GetChildren(result) Verify(children, EvalResult("F", "{A(Of (Object, Object)(), (Object, Object()))}", "A(Of (A As Object, B As Object)(), (C As Object, D As Object()))", "o.F", DkmEvaluationResultFlags.Expandable Or DkmEvaluationResultFlags.CanFavorite), EvalResult("G", "{B(Of (Object, B(Of (Object, Object)).S))}", "B(Of (E As Object, H As B(Of (F As Object, G As Object)).S))", "o.G", DkmEvaluationResultFlags.Expandable Or DkmEvaluationResultFlags.CanFavorite)) Dim moreChildren = GetChildren(children(0)) Verify(moreChildren, EvalResult("F", "Nothing", "(A As Object, B As Object)()", "o.F.F", DkmEvaluationResultFlags.CanFavorite), EvalResult("G", "{Length=0}", "(C As Object, D As Object())()", "o.F.G", DkmEvaluationResultFlags.CanFavorite)) moreChildren = GetChildren(children(1)) Verify(moreChildren, EvalResult("F", "(Nothing, (Nothing, {B(Of (Object, Object)).S}))", "(X As Object, Y As (E As Object, H As B(Of (F As Object, G As Object)).S))", "o.G.F", DkmEvaluationResultFlags.Expandable Or DkmEvaluationResultFlags.CanFavorite)) moreChildren = GetChildren(moreChildren(0)) Verify(moreChildren, EvalResult("X", "Nothing", "Object", "o.G.F.Item1"), EvalResult("Y", "(Nothing, {B(Of (Object, Object)).S})", "(E As Object, H As B(Of (F As Object, G As Object)).S)", "o.G.F.Item2", DkmEvaluationResultFlags.Expandable), EvalResult("Raw View", "(Nothing, (Nothing, {B(Of (Object, Object)).S}))", "(X As Object, Y As (E As Object, H As B(Of (F As Object, G As Object)).S))", "o.G.F, raw", DkmEvaluationResultFlags.Expandable Or DkmEvaluationResultFlags.ReadOnly)) moreChildren = GetChildren(moreChildren(1)) Verify(moreChildren, EvalResult("E", "Nothing", "Object", "o.G.F.Item2.Item1"), EvalResult("H", "{B(Of (Object, Object)).S}", "B(Of (F As Object, G As Object)).S", "o.G.F.Item2.Item2"), EvalResult("Raw View", "(Nothing, {B(Of (Object, Object)).S})", "(E As Object, H As B(Of (F As Object, G As Object)).S)", "o.G.F.Item2, raw", DkmEvaluationResultFlags.Expandable Or DkmEvaluationResultFlags.ReadOnly)) End Using End Sub <Fact> Public Sub Keywords() Const source = "Namespace [Namespace] Structure [Structure] End Structure End Namespace Class [As] Shared Function F() As ([As] As [As], [Class] As [Namespace].[Structure]) Return (Nothing, Nothing) End Function Private _f As Object = F() End Class" Dim assembly0 = GenerateTupleAssembly() Dim reference0 = AssemblyMetadata.CreateFromImage(assembly0).GetReference() Dim compilation1 = CreateCompilationWithMscorlib40({source}, options:=TestOptions.ReleaseDll, references:={reference0}, assemblyName:=GetUniqueName()) Dim assembly1 = compilation1.EmitToArray() Dim runtime = New DkmClrRuntimeInstance(ReflectionUtilities.GetMscorlib(ReflectionUtilities.Load(assembly0), ReflectionUtilities.Load(assembly1))) Using runtime.Load() Dim type = runtime.GetType("As") Dim value = type.Instantiate() Dim result = FormatResult("o", value) Verify(result, EvalResult("o", "{As}", "As", "o", DkmEvaluationResultFlags.Expandable)) Dim children = GetChildren(result) Verify(children, EvalResult("_f", "(Nothing, {Namespace.Structure})", "Object {(As, Namespace.Structure)}", "o._f", DkmEvaluationResultFlags.Expandable Or DkmEvaluationResultFlags.CanFavorite)) children = GetChildren(children(0)) Verify(children, EvalResult("Item1", "Nothing", "As", "DirectCast(o._f, ([As], [Namespace].[Structure])).Item1"), EvalResult("Item2", "{Namespace.Structure}", "Namespace.Structure", "DirectCast(o._f, ([As], [Namespace].[Structure])).Item2")) End Using End Sub Private Shared Function CreateCSharpCompilation(source As String, references As IEnumerable(Of MetadataReference)) As CSharpCompilation Dim tree = CSharpSyntaxTree.ParseText(source) Dim options = New CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary, concurrentBuild:=False) Return CSharpCompilation.Create(GetUniqueName(), {tree}, references, options) End Function Private Shared Function GenerateTupleAssembly() As ImmutableArray(Of Byte) Const source = "Namespace System Public Structure ValueTuple(Of T1) Public Item1 As T1 Public Sub New(_1 As T1) Item1 = _1 End Sub End Structure Public Structure ValueTuple(Of T1, T2) Public Item1 As T1 Public Item2 As T2 Public Sub New(_1 As T1, _2 As T2) Item1 = _1 Item2 = _2 End Sub End Structure Public Structure ValueTuple(Of T1, T2, T3) Public Item1 As T1 Public Item2 As T2 Public Item3 As T3 Public Sub New(_1 As T1, _2 As T2, _3 As T3) Item1 = _1 Item2 = _2 Item3 = _3 End Sub End Structure Public Structure ValueTuple(Of T1, T2, T3, T4) Public Item1 As T1 Public Item2 As T2 Public Item3 As T3 Public Item4 As T4 Public Sub New(_1 As T1, _2 As T2, _3 As T3, _4 As T4) Item1 = _1 Item2 = _2 Item3 = _3 Item4 = _4 End Sub End Structure Public Structure ValueTuple(Of T1, T2, T3, T4, T5) Public Item1 As T1 Public Item2 As T2 Public Item3 As T3 Public Item4 As T4 Public Item5 As T5 Public Sub New(_1 As T1, _2 As T2, _3 As T3, _4 As T4, _5 As T5) Item1 = _1 Item2 = _2 Item3 = _3 Item4 = _4 Item5 = _5 End Sub End Structure Public Structure ValueTuple(Of T1, T2, T3, T4, T5, T6) Public Item1 As T1 Public Item2 As T2 Public Item3 As T3 Public Item4 As T4 Public Item5 As T5 Public Item6 As T6 Public Sub New(_1 As T1, _2 As T2, _3 As T3, _4 As T4, _5 As T5, _6 As T6) Item1 = _1 Item2 = _2 Item3 = _3 Item4 = _4 Item5 = _5 Item6 = _6 End Sub End Structure Public Structure ValueTuple(Of T1, T2, T3, T4, T5, T6, T7) Public Item1 As T1 Public Item2 As T2 Public Item3 As T3 Public Item4 As T4 Public Item5 As T5 Public Item6 As T6 Public Item7 As T7 Public Sub New(_1 As T1, _2 As T2, _3 As T3, _4 As T4, _5 As T5, _6 As T6, _7 As T7) Item1 = _1 Item2 = _2 Item3 = _3 Item4 = _4 Item5 = _5 Item6 = _6 Item7 = _7 End Sub End Structure Public Structure ValueTuple(Of T1, T2, T3, T4, T5, T6, T7, T8) Public Item1 As T1 Public Item2 As T2 Public Item3 As T3 Public Item4 As T4 Public Item5 As T5 Public Item6 As T6 Public Item7 As T7 Public Rest As T8 Public Sub New(_1 As T1, _2 As T2, _3 As T3, _4 As T4, _5 As T5, _6 As T6, _7 As T7, _8 As T8) Item1 = _1 Item2 = _2 Item3 = _3 Item4 = _4 Item5 = _5 Item6 = _6 Item7 = _7 Rest = _8 End Sub End Structure End Namespace Namespace System.Runtime.CompilerServices Public Class TupleElementNamesAttribute Inherits Attribute Public Sub New(names As String()) End Sub End Class End Namespace" Dim comp = CreateCompilationWithMscorlib40({source}, options:=TestOptions.ReleaseDll, assemblyName:=GetUniqueName()) comp.VerifyDiagnostics() Return comp.EmitToArray() End Function End Class End Namespace