提交 154ab21c 编写于 作者: C Charles Stoner

Port Tuple SymbolDisplay tests to VB

上级 2a82acab
......@@ -2930,7 +2930,7 @@ private static void Verify(ImmutableArray<SymbolDisplayPart> actualParts, string
Assert.Equal(expectedText, actualParts.ToDisplayString());
if (expectedKinds.Length > 0)
{
AssertEx.Equal(expectedKinds, actualParts.Select(p => p.Kind), itemInspector: p => $"SymbolDisplayPartKind.{p}");
AssertEx.Equal(expectedKinds, actualParts.Select(p => p.Kind), itemInspector: p => $" SymbolDisplayPartKind.{p}");
}
}
......@@ -4674,6 +4674,41 @@ class C
SymbolDisplayPartKind.PropertyName);
}
[Fact, CompilerTrait(CompilerFeature.Tuples)]
public void TupleFullyQualified()
{
var text =
@"using N;
namespace N
{
class A
{
internal class B { }
}
class C<T>
{
}
}
class C
{
#pragma warning disable CS0169
(int One, C<(object[], A.B Two)>, int, object Four, int, object, int, object, A Nine) f;
#pragma warning restore CS0169
}";
var format = new SymbolDisplayFormat(
globalNamespaceStyle: SymbolDisplayGlobalNamespaceStyle.Included,
typeQualificationStyle: SymbolDisplayTypeQualificationStyle.NameAndContainingTypesAndNamespaces,
genericsOptions: SymbolDisplayGenericsOptions.IncludeTypeParameters,
memberOptions: SymbolDisplayMemberOptions.IncludeType,
miscellaneousOptions: SymbolDisplayMiscellaneousOptions.UseSpecialTypes);
var comp = CreateCompilationWithMscorlib(text, references: new[] { ValueTupleRef });
comp.VerifyDiagnostics();
var symbol = comp.GetMember("C.f");
Verify(
SymbolDisplay.ToDisplayParts(symbol, format),
"(int One, global::N.C<(object[], global::N.A.B Two)>, int, object Four, int, object, int, object, global::N.A Nine) f");
}
/// <summary>
/// This is a type symbol that claims to be a tuple symbol, but is not TupleTypeSymbol. Yet, it can still be displayed.
/// </summary>
......@@ -5179,7 +5214,7 @@ public string ToMinimalDisplayString(SemanticModel semanticModel, int position,
}
[Fact, CompilerTrait(CompilerFeature.Tuples)]
public void DisplayFakeTupleTypeSymbol()
public void NonTupleTypeSymbol()
{
var comp = CSharpCompilation.Create("test", references: new[] { MscorlibRef });
ITypeSymbol intType = comp.GetSpecialType(SpecialType.System_Int32);
......
......@@ -4653,6 +4653,230 @@ class Outer
Assert.Equal(Nothing, SymbolDisplay.FormatPrimitive(New Object(), quoteStrings:=False, useHexadecimalNumbers:=False))
End Sub
<Fact()>
Public Sub Tuple()
TestSymbolDescription(
<compilation>
<file name="a.vb">
Class C
Private f As (Integer, String)
End Class
</file>
</compilation>,
FindSymbol("C.f"),
New SymbolDisplayFormat(memberOptions:=SymbolDisplayMemberOptions.IncludeType),
"f As (Int32, String)",
SymbolDisplayPartKind.FieldName,
SymbolDisplayPartKind.Space,
SymbolDisplayPartKind.Keyword,
SymbolDisplayPartKind.Space,
SymbolDisplayPartKind.Punctuation,
SymbolDisplayPartKind.StructName,
SymbolDisplayPartKind.Punctuation,
SymbolDisplayPartKind.Space,
SymbolDisplayPartKind.ClassName,
SymbolDisplayPartKind.Punctuation)
End Sub
<Fact()>
Public Sub TupleWithNames()
TestSymbolDescription(
<compilation>
<file name="a.vb">
Class C
Private f As (x As Integer, y As String)
End Class
</file>
</compilation>,
FindSymbol("C.f"),
New SymbolDisplayFormat(memberOptions:=SymbolDisplayMemberOptions.IncludeType),
"f As (x As Int32, y As String)",
SymbolDisplayPartKind.FieldName,
SymbolDisplayPartKind.Space,
SymbolDisplayPartKind.Keyword,
SymbolDisplayPartKind.Space,
SymbolDisplayPartKind.Punctuation,
SymbolDisplayPartKind.FieldName,
SymbolDisplayPartKind.Space,
SymbolDisplayPartKind.Punctuation,
SymbolDisplayPartKind.Space,
SymbolDisplayPartKind.StructName,
SymbolDisplayPartKind.Punctuation,
SymbolDisplayPartKind.Space,
SymbolDisplayPartKind.FieldName,
SymbolDisplayPartKind.Space,
SymbolDisplayPartKind.Punctuation,
SymbolDisplayPartKind.Space,
SymbolDisplayPartKind.ClassName,
SymbolDisplayPartKind.Punctuation)
End Sub
<Fact()>
Public Sub LongTupleWithSpecialTypes()
TestSymbolDescription(
<compilation>
<file name="a.vb">
Class C
Private f As (Integer, String, Boolean, Byte, Long, ULong, Short, UShort)
End Class
</file>
</compilation>,
FindSymbol("C.f"),
New SymbolDisplayFormat(
memberOptions:=SymbolDisplayMemberOptions.IncludeType,
miscellaneousOptions:=SymbolDisplayMiscellaneousOptions.UseSpecialTypes),
"f As (Integer, String, Boolean, Byte, Long, ULong, Short, UShort)",
SymbolDisplayPartKind.FieldName,
SymbolDisplayPartKind.Space,
SymbolDisplayPartKind.Keyword,
SymbolDisplayPartKind.Space,
SymbolDisplayPartKind.Punctuation,
SymbolDisplayPartKind.Keyword,
SymbolDisplayPartKind.Punctuation,
SymbolDisplayPartKind.Space,
SymbolDisplayPartKind.Keyword,
SymbolDisplayPartKind.Punctuation,
SymbolDisplayPartKind.Space,
SymbolDisplayPartKind.Keyword,
SymbolDisplayPartKind.Punctuation,
SymbolDisplayPartKind.Space,
SymbolDisplayPartKind.Keyword,
SymbolDisplayPartKind.Punctuation,
SymbolDisplayPartKind.Space,
SymbolDisplayPartKind.Keyword,
SymbolDisplayPartKind.Punctuation,
SymbolDisplayPartKind.Space,
SymbolDisplayPartKind.Keyword,
SymbolDisplayPartKind.Punctuation,
SymbolDisplayPartKind.Space,
SymbolDisplayPartKind.Keyword,
SymbolDisplayPartKind.Punctuation,
SymbolDisplayPartKind.Space,
SymbolDisplayPartKind.Keyword,
SymbolDisplayPartKind.Punctuation)
End Sub
<Fact()>
Public Sub TupleProperty()
TestSymbolDescription(
<compilation>
<file name="a.vb">
Class C
Property P As (Item1 As Integer, Item2 As String)
End Class
</file>
</compilation>,
FindSymbol("C.P"),
New SymbolDisplayFormat(
memberOptions:=SymbolDisplayMemberOptions.IncludeType,
miscellaneousOptions:=SymbolDisplayMiscellaneousOptions.UseSpecialTypes),
"P As (Item1 As Integer, Item2 As String)",
SymbolDisplayPartKind.PropertyName,
SymbolDisplayPartKind.Space,
SymbolDisplayPartKind.Keyword,
SymbolDisplayPartKind.Space,
SymbolDisplayPartKind.Punctuation,
SymbolDisplayPartKind.FieldName,
SymbolDisplayPartKind.Space,
SymbolDisplayPartKind.Punctuation,
SymbolDisplayPartKind.Space,
SymbolDisplayPartKind.Keyword,
SymbolDisplayPartKind.Punctuation,
SymbolDisplayPartKind.Space,
SymbolDisplayPartKind.FieldName,
SymbolDisplayPartKind.Space,
SymbolDisplayPartKind.Punctuation,
SymbolDisplayPartKind.Space,
SymbolDisplayPartKind.Keyword,
SymbolDisplayPartKind.Punctuation)
End Sub
<Fact()>
Public Sub TupleFullyQualified()
Dim source =
<compilation>
<file name="a.vb">
Imports N
Namespace N
Class A
Friend Class B
End Class
End Class
Class C(Of T)
End Class
End Namespace
Class C
Private f As (One As Integer, C(Of (Object(), Two As A.B)), Integer, Four As Object, Integer, Object, Integer, Object, Nine As A)
End Class
</file>
</compilation>
Dim format = New SymbolDisplayFormat(
globalNamespaceStyle:=SymbolDisplayGlobalNamespaceStyle.Included,
typeQualificationStyle:=SymbolDisplayTypeQualificationStyle.NameAndContainingTypesAndNamespaces,
genericsOptions:=SymbolDisplayGenericsOptions.IncludeTypeParameters,
memberOptions:=SymbolDisplayMemberOptions.IncludeType,
miscellaneousOptions:=SymbolDisplayMiscellaneousOptions.UseSpecialTypes)
Dim comp = CompilationUtils.CreateCompilationWithMscorlib(source, references:={ValueTupleRef})
comp.VerifyDiagnostics()
Dim symbol = comp.GetMember("C.f")
Verify(
SymbolDisplay.ToDisplayParts(symbol, format),
"f As (One As Integer, Global.N.C(Of (Object(), Two As Global.N.A.B)), Integer, Four As Object, Integer, Object, Integer, Object, Nine As Global.N.A)")
End Sub
' A tuple type symbol that is not Microsoft.CodeAnalysis.VisualBasic.Symbols.TupleTypeSymbol.
<Fact()>
Public Sub NonTupleTypeSymbol()
Dim source =
"class C
{
#pragma warning disable CS0169
(int Alice, string Bob) F;
(int, string) G;
#pragma warning restore CS0169
}"
Dim format = New SymbolDisplayFormat(
memberOptions:=SymbolDisplayMemberOptions.IncludeType,
miscellaneousOptions:=SymbolDisplayMiscellaneousOptions.UseSpecialTypes)
Dim comp = CreateCSharpCompilation(GetUniqueName(), source, referencedAssemblies:={MscorlibRef, ValueTupleRef})
comp.VerifyDiagnostics()
Dim type = comp.GlobalNamespace.GetTypeMembers("C").Single()
Verify(
SymbolDisplay.ToDisplayParts(type.GetMembers("F").Single(), format),
"F As (Alice As Integer, Bob As String)",
SymbolDisplayPartKind.FieldName,
SymbolDisplayPartKind.Space,
SymbolDisplayPartKind.Keyword,
SymbolDisplayPartKind.Space,
SymbolDisplayPartKind.Punctuation,
SymbolDisplayPartKind.FieldName,
SymbolDisplayPartKind.Space,
SymbolDisplayPartKind.Punctuation,
SymbolDisplayPartKind.Space,
SymbolDisplayPartKind.Keyword,
SymbolDisplayPartKind.Punctuation,
SymbolDisplayPartKind.Space,
SymbolDisplayPartKind.FieldName,
SymbolDisplayPartKind.Space,
SymbolDisplayPartKind.Punctuation,
SymbolDisplayPartKind.Space,
SymbolDisplayPartKind.Keyword,
SymbolDisplayPartKind.Punctuation)
Verify(
SymbolDisplay.ToDisplayParts(type.GetMembers("G").Single(), format),
"G As (Integer, String)",
SymbolDisplayPartKind.FieldName,
SymbolDisplayPartKind.Space,
SymbolDisplayPartKind.Keyword,
SymbolDisplayPartKind.Space,
SymbolDisplayPartKind.Punctuation,
SymbolDisplayPartKind.Keyword,
SymbolDisplayPartKind.Punctuation,
SymbolDisplayPartKind.Space,
SymbolDisplayPartKind.Keyword,
SymbolDisplayPartKind.Punctuation)
End Sub
' SymbolDisplayMemberOptions.IncludeRef is ignored in VB.
<WorkItem(11356, "https://github.com/dotnet/roslyn/issues/11356")>
<Fact()>
......@@ -4896,11 +5120,16 @@ End Class")
Assert.Equal(expectedText, parts.ToDisplayString())
If (kinds.Length > 0) Then
AssertEx.Equal(kinds, parts.Select(Function(p) p.Kind), itemInspector:=Function(p) $"SymbolDisplayPartKind.{p}")
AssertEx.Equal(kinds, parts.Select(Function(p) p.Kind), itemInspector:=Function(p) $" SymbolDisplayPartKind.{p}")
End If
Return parts
End Function
Private Shared Function FindSymbol(qualifiedName As String) As Func(Of NamespaceSymbol, Symbol)
Return Function([namespace]) [namespace].GetMember(qualifiedName)
End Function
#End Region
End Class
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册