提交 80771ee4 编写于 作者: T Tomáš Matoušek

Merge pull request #8276 from tmat/EEPortableTest

Switch most VB EE tests to helpers that excercise both Windows and Portable PDBs
......@@ -33,23 +33,26 @@ End Class
"
Dim comp = CreateCompilationWithMscorlib({source}, options:=TestOptions.DebugDll)
Dim runtime = CreateRuntimeInstance(comp)
Dim context = CreateMethodContext(runtime, "C.M")
Dim resultProperties As ResultProperties = Nothing
Dim errorMessage As String = Nothing
Dim missingAssemblyIdentities As ImmutableArray(Of AssemblyIdentity) = Nothing
context.CompileExpression(
"Me.get_P()",
DkmEvaluationFlags.TreatAsExpression,
NoAliases,
DebuggerDiagnosticFormatter.Instance,
resultProperties,
errorMessage,
missingAssemblyIdentities,
EnsureEnglishUICulture.PreferredOrNull,
testData:=Nothing)
Assert.Equal("error BC30456: 'get_P' is not a member of 'C'.", errorMessage)
WithRuntimeInstance(comp,
Sub(runtime)
Dim context = CreateMethodContext(runtime, "C.M")
Dim resultProperties As ResultProperties = Nothing
Dim errorMessage As String = Nothing
Dim missingAssemblyIdentities As ImmutableArray(Of AssemblyIdentity) = Nothing
context.CompileExpression(
"Me.get_P()",
DkmEvaluationFlags.TreatAsExpression,
NoAliases,
DebuggerDiagnosticFormatter.Instance,
resultProperties,
errorMessage,
missingAssemblyIdentities,
EnsureEnglishUICulture.PreferredOrNull,
testData:=Nothing)
Assert.Equal("error BC30456: 'get_P' is not a member of 'C'.", errorMessage)
End Sub)
End Sub
<Fact>
......@@ -166,14 +169,13 @@ End Class
"
Dim comp = CreateCompilationWithMscorlib({source}, options:=TestOptions.DebugDll)
Dim runtime = CreateRuntimeInstance(comp)
Dim context = CreateMethodContext(
runtime,
methodName:="C.Test")
Dim errorMessage As String = Nothing
Dim testData = New CompilationTestData()
context.CompileExpression("Me.M(Me.P)", errorMessage, testData)
testData.GetMethodData("<>x.<>m0").VerifyIL(
WithRuntimeInstance(comp,
Sub(runtime)
Dim context = CreateMethodContext(runtime, "C.Test")
Dim errorMessage As String = Nothing
Dim testData = New CompilationTestData()
context.CompileExpression("Me.M(Me.P)", errorMessage, testData)
testData.GetMethodData("<>x.<>m0").VerifyIL(
"{
// Code size 13 (0xd)
.maxstack 2
......@@ -184,6 +186,7 @@ End Class
IL_0007: callvirt ""Function B.M(Integer) As Integer""
IL_000c: ret
}")
End Sub)
End Sub
<Fact>
......
......@@ -31,13 +31,14 @@ Public Class Derived
End Class
"
Dim comp = CreateCompilationWithMscorlib({source}, options:=TestOptions.DebugDll)
Dim runtime = CreateRuntimeInstance(comp)
Dim context = CreateTypeContext(runtime, "Derived")
Dim errorMessage As String = Nothing
Dim testData As New CompilationTestData()
Dim result = context.CompileExpression("GetDebuggerDisplay()", errorMessage, testData)
Assert.Null(errorMessage)
testData.GetMethodData("<>x.<>m0").VerifyIL("
WithRuntimeInstance(comp,
Sub(runtime)
Dim context = CreateTypeContext(runtime, "Derived")
Dim errorMessage As String = Nothing
Dim testData As New CompilationTestData()
Dim result = context.CompileExpression("GetDebuggerDisplay()", errorMessage, testData)
Assert.Null(errorMessage)
testData.GetMethodData("<>x.<>m0").VerifyIL("
{
// Code size 7 (0x7)
.maxstack 1
......@@ -45,6 +46,7 @@ End Class
IL_0001: callvirt ""Function Derived.GetDebuggerDisplay() As String""
IL_0006: ret
}")
End Sub)
End Sub
End Class
End Namespace
\ No newline at end of file
......@@ -116,24 +116,26 @@ End Namespace
Public Sub DteeEntryPointImportsIgnored()
Dim comp = CreateCompilationWithMscorlib({s_dteeEntryPointSource}, options:=TestOptions.DebugDll, assemblyName:=GetUniqueName())
Dim runtimeInstance = CreateRuntimeInstance(comp, {MscorlibRef})
Dim lazyAssemblyReaders = MakeLazyAssemblyReaders(runtimeInstance)
Dim evalContext = CreateMethodContext(runtimeInstance, s_dteeEntryPointName, lazyAssemblyReaders:=lazyAssemblyReaders)
Dim compContext = evalContext.CreateCompilationContext(MakeDummySyntax())
Dim rootNamespace As NamespaceSymbol = Nothing
Dim currentNamespace As NamespaceSymbol = Nothing
Dim typesAndNamespaces As ImmutableArray(Of NamespaceOrTypeAndImportsClausePosition) = Nothing
Dim aliases As Dictionary(Of String, AliasAndImportsClausePosition) = Nothing
Dim xmlNamespaces As Dictionary(Of String, XmlNamespaceAndImportsClausePosition) = Nothing
ImportsDebugInfoTests.GetImports(compContext, rootNamespace, currentNamespace, typesAndNamespaces, aliases, xmlNamespaces)
Assert.Equal("", rootNamespace.Name)
Assert.Equal("", currentNamespace.Name)
Assert.True(typesAndNamespaces.IsDefault)
Assert.Null(aliases)
Assert.Null(xmlNamespaces)
WithRuntimeInstance(comp, {MscorlibRef},
Sub(runtime)
Dim lazyAssemblyReaders = MakeLazyAssemblyReaders(runtime)
Dim evalContext = CreateMethodContext(runtime, s_dteeEntryPointName, lazyAssemblyReaders:=lazyAssemblyReaders)
Dim compContext = evalContext.CreateCompilationContext(MakeDummySyntax())
Dim rootNamespace As NamespaceSymbol = Nothing
Dim currentNamespace As NamespaceSymbol = Nothing
Dim typesAndNamespaces As ImmutableArray(Of NamespaceOrTypeAndImportsClausePosition) = Nothing
Dim aliases As Dictionary(Of String, AliasAndImportsClausePosition) = Nothing
Dim xmlNamespaces As Dictionary(Of String, XmlNamespaceAndImportsClausePosition) = Nothing
ImportsDebugInfoTests.GetImports(compContext, rootNamespace, currentNamespace, typesAndNamespaces, aliases, xmlNamespaces)
Assert.Equal("", rootNamespace.Name)
Assert.Equal("", currentNamespace.Name)
Assert.True(typesAndNamespaces.IsDefault)
Assert.Null(aliases)
Assert.Null(xmlNamespaces)
End Sub)
End Sub
<Fact>
......@@ -211,12 +213,13 @@ End Namespace
<Fact>
Public Sub ImportStrings_NoMethods()
Dim comp = CreateCompilationWithMscorlib({""}, {MsvbRef}, options:=TestOptions.DebugDll.WithRootNamespace("root"), assemblyName:=GetUniqueName())
Dim runtimeInstance = CreateRuntimeInstance(comp, {MscorlibRef, MsvbRef})
' Since there are no methods in the assembly, there is no import custom debug info, so we
' have no way to find the root namespace.
Dim methodDebugInfo = EvaluationContext.SynthesizeMethodDebugInfoForDtee(MakeAssemblyReaders(runtimeInstance))
CheckDteeMethodDebugInfo(methodDebugInfo)
WithRuntimeInstance(comp, {MscorlibRef, MsvbRef},
Sub(runtime)
' Since there are no methods in the assembly, there is no import custom debug info, so we
' have no way to find the root namespace.
Dim methodDebugInfo = EvaluationContext.SynthesizeMethodDebugInfoForDtee(MakeAssemblyReaders(runtime))
CheckDteeMethodDebugInfo(methodDebugInfo)
End Sub)
End Sub
<Fact>
......
......@@ -45,6 +45,34 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.ExpressionEvaluator.UnitTests
_runtimeInstances.Free()
End Sub
' TODO: remove -- workaround for bugs in Portable PDB handling in EE
Friend Shared Sub WithRuntimeInstancePortableBug(compilation As Compilation, validator As Action(Of RuntimeInstance))
WithRuntimeInstancePortableBug(compilation, Nothing, validator)
End Sub
' TODO: remove -- workaround for bugs in Portable PDB handling in EE
Friend Shared Sub WithRuntimeInstancePortableBug(compilation As Compilation, references As IEnumerable(Of MetadataReference), validator As Action(Of RuntimeInstance))
Using instance = RuntimeInstance.Create(compilation, references, DebugInformationFormat.Pdb, True)
validator(instance)
End Using
End Sub
Friend Shared Sub WithRuntimeInstance(compilation As Compilation, validator As Action(Of RuntimeInstance))
WithRuntimeInstance(compilation, Nothing, True, validator)
End Sub
Friend Shared Sub WithRuntimeInstance(compilation As Compilation, references As IEnumerable(Of MetadataReference), validator As Action(Of RuntimeInstance))
WithRuntimeInstance(compilation, references, True, validator)
End Sub
Friend Shared Sub WithRuntimeInstance(compilation As Compilation, references As IEnumerable(Of MetadataReference), includeLocalSignatures As Boolean, validator As Action(Of RuntimeInstance))
For Each debugFormat In {DebugInformationFormat.Pdb, DebugInformationFormat.PortablePdb}
Using instance = RuntimeInstance.Create(compilation, references, debugFormat, includeLocalSignatures)
validator(instance)
End Using
Next
End Sub
Friend Function CreateRuntimeInstance(modules As IEnumerable(Of ModuleInstance)) As RuntimeInstance
Dim instance = RuntimeInstance.Create(modules)
_runtimeInstances.Add(instance)
......
......@@ -543,23 +543,24 @@ End Class
"
Dim comp = CreateCompilationWithReferences({VisualBasicSyntaxTree.ParseText(source)}, {MscorlibRef, MsvbRef}, TestOptions.DebugDll)
Dim runtime = CreateRuntimeInstance(comp)
Dim compOptions = TestOptions.DebugDll.WithMetadataImportOptions(MetadataImportOptions.All)
Dim dummyComp = CreateCompilationWithMscorlibAndVBRuntimeAndReferences((<Compilation/>), {comp.EmitToImageReference()}, compOptions)
Dim typeC = dummyComp.GlobalNamespace.GetMember(Of NamedTypeSymbol)("C")
Dim displayClassTypes = typeC.GetMembers().OfType(Of NamedTypeSymbol)()
Assert.True(displayClassTypes.Any())
For Each displayClassType In displayClassTypes
Dim displayClassName = displayClassType.Name
Assert.True(displayClassName.StartsWith(StringConstants.DisplayClassPrefix, StringComparison.Ordinal))
For Each displayClassMethod In displayClassType.GetMembers().OfType(Of MethodSymbol)().Where(AddressOf IsLambda)
Dim lambdaMethodName = String.Format("C.{0}.{1}", displayClassName, displayClassMethod.Name)
Dim context = CreateMethodContext(runtime, lambdaMethodName)
Dim expectedIL = String.Format(expectedILTemplate, displayClassName)
VerifyHasMe(context, "C", expectedIL)
Next
Next
WithRuntimeInstance(comp,
Sub(runtime)
Dim compOptions = TestOptions.DebugDll.WithMetadataImportOptions(MetadataImportOptions.All)
Dim dummyComp = CreateCompilationWithMscorlibAndVBRuntimeAndReferences((<Compilation/>), {comp.EmitToImageReference()}, compOptions)
Dim typeC = dummyComp.GlobalNamespace.GetMember(Of NamedTypeSymbol)("C")
Dim displayClassTypes = typeC.GetMembers().OfType(Of NamedTypeSymbol)()
Assert.True(displayClassTypes.Any())
For Each displayClassType In displayClassTypes
Dim displayClassName = displayClassType.Name
Assert.True(displayClassName.StartsWith(StringConstants.DisplayClassPrefix, StringComparison.Ordinal))
For Each displayClassMethod In displayClassType.GetMembers().OfType(Of MethodSymbol)().Where(AddressOf IsLambda)
Dim lambdaMethodName = String.Format("C.{0}.{1}", displayClassName, displayClassMethod.Name)
Dim context = CreateMethodContext(runtime, lambdaMethodName)
Dim expectedIL = String.Format(expectedILTemplate, displayClassName)
VerifyHasMe(context, "C", expectedIL)
Next
Next
End Sub)
End Sub
<WorkItem(1069554, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1069554")>
......@@ -599,21 +600,23 @@ End Module
"
Dim comp = CreateCompilationWithReferences({VisualBasicSyntaxTree.ParseText(source)}, {MscorlibRef, MsvbRef}, TestOptions.DebugDll)
Dim runtime = CreateRuntimeInstance(comp)
Dim dummyComp As VisualBasicCompilation = MakeDummyCompilation(comp)
Dim typeC = dummyComp.GlobalNamespace.GetMember(Of NamedTypeSymbol)("M")
Dim displayClassTypes = typeC.GetMembers().OfType(Of NamedTypeSymbol)()
Assert.True(displayClassTypes.Any())
For Each displayClassType In displayClassTypes
Dim displayClassName = displayClassType.Name
Assert.True(displayClassName.StartsWith(StringConstants.DisplayClassPrefix, StringComparison.Ordinal))
For Each displayClassMethod In displayClassType.GetMembers().OfType(Of MethodSymbol)().Where(AddressOf IsLambda)
Dim lambdaMethodName = String.Format("M.{0}.{1}", displayClassName, displayClassMethod.Name)
Dim context = CreateMethodContext(runtime, lambdaMethodName)
VerifyNoMe(context)
Next
Next
WithRuntimeInstance(comp,
Sub(runtime)
Dim dummyComp As VisualBasicCompilation = MakeDummyCompilation(comp)
Dim typeC = dummyComp.GlobalNamespace.GetMember(Of NamedTypeSymbol)("M")
Dim displayClassTypes = typeC.GetMembers().OfType(Of NamedTypeSymbol)()
Assert.True(displayClassTypes.Any())
For Each displayClassType In displayClassTypes
Dim displayClassName = displayClassType.Name
Assert.True(displayClassName.StartsWith(StringConstants.DisplayClassPrefix, StringComparison.Ordinal))
For Each displayClassMethod In displayClassType.GetMembers().OfType(Of MethodSymbol)().Where(AddressOf IsLambda)
Dim lambdaMethodName = String.Format("M.{0}.{1}", displayClassName, displayClassMethod.Name)
Dim context = CreateMethodContext(runtime, lambdaMethodName)
VerifyNoMe(context)
Next
Next
End Sub)
End Sub
Private Sub VerifyHasMe(source As String, moveNextMethodName As String, expectedType As String, expectedIL As String)
......@@ -621,17 +624,18 @@ End Module
{VisualBasicSyntaxTree.ParseText(source)},
{MscorlibRef_v4_0_30316_17626, SystemRef_v4_0_30319_17929, MsvbRef_v4_0_30319_17929},
TestOptions.DebugDll)
Dim runtime = CreateRuntimeInstance(sourceCompilation)
Dim context = CreateMethodContext(runtime, moveNextMethodName)
VerifyHasMe(context, expectedType, expectedIL)
WithRuntimeInstance(sourceCompilation,
Sub(runtime)
VerifyHasMe(CreateMethodContext(runtime, moveNextMethodName), expectedType, expectedIL)
End Sub)
' Now recompile and test CompileExpression with optimized code.
sourceCompilation = sourceCompilation.WithOptions(sourceCompilation.Options.WithOptimizationLevel(OptimizationLevel.Release))
runtime = CreateRuntimeInstance(sourceCompilation)
context = CreateMethodContext(runtime, moveNextMethodName)
' In VB, "Me" is never optimized away.
VerifyHasMe(context, expectedType, expectedIL:=Nothing)
WithRuntimeInstance(sourceCompilation.WithOptions(sourceCompilation.Options.WithOptimizationLevel(OptimizationLevel.Release)),
Sub(runtime)
' In VB, "Me" is never optimized away.
VerifyHasMe(CreateMethodContext(runtime, moveNextMethodName), expectedType, expectedIL:=Nothing)
End Sub)
End Sub
Private Sub VerifyHasMe(context As EvaluationContext, expectedType As String, expectedIL As String)
......@@ -668,10 +672,10 @@ End Module
{VisualBasicSyntaxTree.ParseText(source)},
{MscorlibRef_v4_0_30316_17626, SystemRef_v4_0_30319_17929, MsvbRef_v4_0_30319_17929},
TestOptions.DebugDll)
Dim runtime = CreateRuntimeInstance(comp)
Dim context = CreateMethodContext(runtime, moveNextMethodName)
VerifyNoMe(context)
WithRuntimeInstance(comp,
Sub(runtime)
VerifyNoMe(CreateMethodContext(runtime, moveNextMethodName))
End Sub)
End Sub
Private Shared Sub VerifyNoMe(context As EvaluationContext)
......@@ -723,15 +727,16 @@ Class C
End Class
"
Dim comp = CreateCompilationWithMscorlib({source}, options:=TestOptions.DebugDll)
Dim runtime = CreateRuntimeInstance(comp)
Dim context = CreateMethodContext(runtime, "C.VB$StateMachine_2_F.MoveNext")
Dim resultProperties As ResultProperties = Nothing
Dim errorMessage As String = Nothing
Dim testData = New CompilationTestData()
context.CompileExpression("Me.x", errorMessage, testData)
Assert.Null(errorMessage)
testData.GetMethodData("<>x.<>m0").VerifyIL("
WithRuntimeInstance(comp,
Sub(runtime)
Dim context = CreateMethodContext(runtime, "C.VB$StateMachine_2_F.MoveNext")
Dim resultProperties As ResultProperties = Nothing
Dim errorMessage As String = Nothing
Dim testData = New CompilationTestData()
context.CompileExpression("Me.x", errorMessage, testData)
Assert.Null(errorMessage)
testData.GetMethodData("<>x.<>m0").VerifyIL("
{
// Code size 12 (0xc)
.maxstack 1
......@@ -743,6 +748,7 @@ End Class
IL_000b: ret
}
")
End Sub)
End Sub
<WorkItem(1024137, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1024137")>
......@@ -759,15 +765,16 @@ Class C
End Class
"
Dim comp = CreateCompilationWithMscorlib({source}, options:=TestOptions.DebugDll)
Dim runtime = CreateRuntimeInstance(comp)
Dim context = CreateMethodContext(runtime, "C._Lambda$__2-0")
Dim resultProperties As ResultProperties = Nothing
Dim errorMessage As String = Nothing
Dim testData = New CompilationTestData()
context.CompileExpression("Me.x", errorMessage, testData)
Assert.Null(errorMessage)
testData.GetMethodData("<>x.<>m0").VerifyIL("
WithRuntimeInstance(comp,
Sub(runtime)
Dim context = CreateMethodContext(runtime, "C._Lambda$__2-0")
Dim resultProperties As ResultProperties = Nothing
Dim errorMessage As String = Nothing
Dim testData = New CompilationTestData()
context.CompileExpression("Me.x", errorMessage, testData)
Assert.Null(errorMessage)
testData.GetMethodData("<>x.<>m0").VerifyIL("
{
// Code size 7 (0x7)
.maxstack 1
......@@ -776,6 +783,7 @@ End Class
IL_0006: ret
}
")
End Sub)
End Sub
<WorkItem(1024137, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1024137")>
......@@ -797,15 +805,16 @@ End Class
{VisualBasicSyntaxTree.ParseText(source)},
{MscorlibRef_v4_0_30316_17626, SystemRef_v4_0_30319_17929, MsvbRef_v4_0_30319_17929},
TestOptions.DebugDll)
Dim runtime = CreateRuntimeInstance(comp)
Dim context = CreateMethodContext(runtime, "C.VB$StateMachine_2_F.MoveNext")
Dim resultProperties As ResultProperties = Nothing
Dim errorMessage As String = Nothing
Dim testData = New CompilationTestData()
context.CompileExpression("Me.x", errorMessage, testData)
Assert.Null(errorMessage)
testData.GetMethodData("<>x.<>m0").VerifyIL("
WithRuntimeInstance(comp,
Sub(runtime)
Dim context = CreateMethodContext(runtime, "C.VB$StateMachine_2_F.MoveNext")
Dim resultProperties As ResultProperties = Nothing
Dim errorMessage As String = Nothing
Dim testData = New CompilationTestData()
context.CompileExpression("Me.x", errorMessage, testData)
Assert.Null(errorMessage)
testData.GetMethodData("<>x.<>m0").VerifyIL("
{
// Code size 12 (0xc)
.maxstack 1
......@@ -819,6 +828,7 @@ End Class
IL_000b: ret
}
")
End Sub)
End Sub
<Fact>
......@@ -837,15 +847,16 @@ Class Derived : Inherits Base
End Class
"
Dim comp = CreateCompilationWithMscorlib({source}, options:=TestOptions.DebugDll)
Dim runtime = CreateRuntimeInstance(comp)
Dim context = CreateMethodContext(runtime, "Derived.VB$StateMachine_2_F.MoveNext")
Dim resultProperties As ResultProperties = Nothing
Dim errorMessage As String = Nothing
Dim testData = New CompilationTestData()
context.CompileExpression("MyBase.x", errorMessage, testData)
Assert.Null(errorMessage)
testData.GetMethodData("<>x.<>m0").VerifyIL("
WithRuntimeInstance(comp,
Sub(runtime)
Dim context = CreateMethodContext(runtime, "Derived.VB$StateMachine_2_F.MoveNext")
Dim resultProperties As ResultProperties = Nothing
Dim errorMessage As String = Nothing
Dim testData = New CompilationTestData()
context.CompileExpression("MyBase.x", errorMessage, testData)
Assert.Null(errorMessage)
testData.GetMethodData("<>x.<>m0").VerifyIL("
{
// Code size 12 (0xc)
.maxstack 1
......@@ -857,6 +868,7 @@ End Class
IL_000b: ret
}
")
End Sub)
End Sub
<Fact>
......@@ -881,15 +893,16 @@ End Class
{VisualBasicSyntaxTree.ParseText(source)},
{MscorlibRef_v4_0_30316_17626, SystemRef_v4_0_30319_17929, MsvbRef_v4_0_30319_17929},
TestOptions.DebugDll)
Dim runtime = CreateRuntimeInstance(comp)
Dim context = CreateMethodContext(runtime, "Derived.VB$StateMachine_2_F.MoveNext")
Dim resultProperties As ResultProperties = Nothing
Dim errorMessage As String = Nothing
Dim testData = New CompilationTestData()
context.CompileExpression("MyBase.x", errorMessage, testData)
Assert.Null(errorMessage)
testData.GetMethodData("<>x.<>m0").VerifyIL("
WithRuntimeInstance(comp,
Sub(runtime)
Dim context = CreateMethodContext(runtime, "Derived.VB$StateMachine_2_F.MoveNext")
Dim resultProperties As ResultProperties = Nothing
Dim errorMessage As String = Nothing
Dim testData = New CompilationTestData()
context.CompileExpression("MyBase.x", errorMessage, testData)
Assert.Null(errorMessage)
testData.GetMethodData("<>x.<>m0").VerifyIL("
{
// Code size 12 (0xc)
.maxstack 1
......@@ -903,6 +916,7 @@ End Class
IL_000b: ret
}
")
End Sub)
End Sub
<Fact>
......@@ -922,15 +936,16 @@ Class Derived : Inherits Base
End Class
"
Dim comp = CreateCompilationWithMscorlib({source}, options:=TestOptions.DebugDll)
Dim runtime = CreateRuntimeInstance(comp)
Dim context = CreateMethodContext(runtime, "Derived._Lambda$__2-0")
Dim resultProperties As ResultProperties = Nothing
Dim errorMessage As String = Nothing
Dim testData = New CompilationTestData()
context.CompileExpression("MyBase.x", errorMessage, testData)
Assert.Null(errorMessage)
testData.GetMethodData("<>x.<>m0").VerifyIL("
WithRuntimeInstance(comp,
Sub(runtime)
Dim context = CreateMethodContext(runtime, "Derived._Lambda$__2-0")
Dim resultProperties As ResultProperties = Nothing
Dim errorMessage As String = Nothing
Dim testData = New CompilationTestData()
context.CompileExpression("MyBase.x", errorMessage, testData)
Assert.Null(errorMessage)
testData.GetMethodData("<>x.<>m0").VerifyIL("
{
// Code size 7 (0x7)
.maxstack 1
......@@ -939,6 +954,7 @@ End Class
IL_0006: ret
}
")
End Sub)
End Sub
<Fact>
......
......@@ -328,32 +328,34 @@ End Namespace
Dim aliases As Dictionary(Of String, AliasAndImportsClausePosition) = Nothing
Dim xmlNamespaces As Dictionary(Of String, XmlNamespaceAndImportsClausePosition) = Nothing
Dim runtime = CreateRuntimeInstance(comp)
GetImports(
runtime,
"root.N.C.M",
GetExpressionStatement(comp),
rootNamespace,
currentNamespace,
typesAndNamespaces,
aliases,
xmlNamespaces)
Assert.Equal("root", rootNamespace.ToTestDisplayString())
Assert.Equal("root.N", currentNamespace.ToTestDisplayString())
AssertEx.SetEqual(typesAndNamespaces.Select(Function(i) i.NamespaceOrType.ToTestDisplayString()), "System", "System.IO.Path", "System.Runtime", "System.Threading.Thread", "root.N")
AssertEx.SetEqual(aliases.Keys, "A", "B", "D", "E")
Assert.Equal("System.Collections", aliases("A").Alias.Target.ToTestDisplayString())
Assert.Equal("System.Collections.ArrayList", aliases("B").Alias.Target.ToTestDisplayString())
Assert.Equal("System.Threading.Tasks", aliases("D").Alias.Target.ToTestDisplayString())
Assert.Equal("System.Threading.Timer", aliases("E").Alias.Target.ToTestDisplayString())
AssertEx.SetEqual(xmlNamespaces.Keys, "", "C", "F")
Assert.Equal("http://xml0", xmlNamespaces("").XmlNamespace)
Assert.Equal("http://xml1", xmlNamespaces("C").XmlNamespace)
Assert.Equal("http://xml3", xmlNamespaces("F").XmlNamespace)
WithRuntimeInstancePortableBug(comp,
Sub(runtime)
GetImports(
runtime,
"root.N.C.M",
GetExpressionStatement(comp),
rootNamespace,
currentNamespace,
typesAndNamespaces,
aliases,
xmlNamespaces)
Assert.Equal("root", rootNamespace.ToTestDisplayString())
Assert.Equal("root.N", currentNamespace.ToTestDisplayString())
AssertEx.SetEqual(typesAndNamespaces.Select(Function(i) i.NamespaceOrType.ToTestDisplayString()), "System", "System.IO.Path", "System.Runtime", "System.Threading.Thread", "root.N")
AssertEx.SetEqual(aliases.Keys, "A", "B", "D", "E")
Assert.Equal("System.Collections", aliases("A").Alias.Target.ToTestDisplayString())
Assert.Equal("System.Collections.ArrayList", aliases("B").Alias.Target.ToTestDisplayString())
Assert.Equal("System.Threading.Tasks", aliases("D").Alias.Target.ToTestDisplayString())
Assert.Equal("System.Threading.Timer", aliases("E").Alias.Target.ToTestDisplayString())
AssertEx.SetEqual(xmlNamespaces.Keys, "", "C", "F")
Assert.Equal("http://xml0", xmlNamespaces("").XmlNamespace)
Assert.Equal("http://xml1", xmlNamespaces("C").XmlNamespace)
Assert.Equal("http://xml3", xmlNamespaces("F").XmlNamespace)
End Sub)
End Sub
<Fact>
......@@ -372,29 +374,31 @@ End Namespace
Dim comp = CreateCompilationWithMscorlib({source}, options:=TestOptions.ReleaseDll.WithRootNamespace(rootNamespaceName))
comp.GetDiagnostics().Where(Function(d) d.Severity > DiagnosticSeverity.Info).Verify()
Dim rootNamespace As NamespaceSymbol = Nothing
Dim currentNamespace As NamespaceSymbol = Nothing
Dim typesAndNamespaces As ImmutableArray(Of NamespaceOrTypeAndImportsClausePosition) = Nothing
Dim aliases As Dictionary(Of String, AliasAndImportsClausePosition) = Nothing
Dim xmlNamespaces As Dictionary(Of String, XmlNamespaceAndImportsClausePosition) = Nothing
Dim runtime = CreateRuntimeInstance(comp)
GetImports(
runtime,
"N.C.M",
GetExpressionStatement(comp),
rootNamespace,
currentNamespace,
typesAndNamespaces,
aliases,
xmlNamespaces)
Assert.True(rootNamespace.IsGlobalNamespace)
Assert.Equal("N", currentNamespace.ToTestDisplayString())
Assert.Equal("N", typesAndNamespaces.Single().NamespaceOrType.ToTestDisplayString())
Assert.Null(aliases)
Assert.Null(xmlNamespaces)
WithRuntimeInstancePortableBug(comp,
Sub(runtime)
Dim rootNamespace As NamespaceSymbol = Nothing
Dim currentNamespace As NamespaceSymbol = Nothing
Dim typesAndNamespaces As ImmutableArray(Of NamespaceOrTypeAndImportsClausePosition) = Nothing
Dim aliases As Dictionary(Of String, AliasAndImportsClausePosition) = Nothing
Dim xmlNamespaces As Dictionary(Of String, XmlNamespaceAndImportsClausePosition) = Nothing
GetImports(
runtime,
"N.C.M",
GetExpressionStatement(comp),
rootNamespace,
currentNamespace,
typesAndNamespaces,
aliases,
xmlNamespaces)
Assert.True(rootNamespace.IsGlobalNamespace)
Assert.Equal("N", currentNamespace.ToTestDisplayString())
Assert.Equal("N", typesAndNamespaces.Single().NamespaceOrType.ToTestDisplayString())
Assert.Null(aliases)
Assert.Null(xmlNamespaces)
End Sub)
Next
End Sub
......@@ -435,30 +439,32 @@ End Namespace
Dim aliases As Dictionary(Of String, AliasAndImportsClausePosition) = Nothing
Dim xmlNamespaces As Dictionary(Of String, XmlNamespaceAndImportsClausePosition) = Nothing
Dim runtime = CreateRuntimeInstance(comp)
GetImports(
runtime,
"root.N.C.M",
GetExpressionStatement(comp),
rootNamespace,
currentNamespace,
typesAndNamespaces,
aliases,
xmlNamespaces)
Assert.Equal("root", rootNamespace.ToTestDisplayString())
Assert.Equal("root.N", currentNamespace.ToTestDisplayString())
' CONSIDER: We could de-dup unaliased imports as well.
AssertEx.SetEqual(typesAndNamespaces.Select(Function(i) i.NamespaceOrType.ToTestDisplayString()), "System", "System.IO.Path", "System", "System.IO.Path", "root.N")
AssertEx.SetEqual(aliases.Keys, "A", "B")
Assert.Equal("System.Collections", aliases("A").Alias.Target.ToTestDisplayString())
Assert.Equal("System.Collections.ArrayList", aliases("B").Alias.Target.ToTestDisplayString())
AssertEx.SetEqual(xmlNamespaces.Keys, "", "C")
Assert.Equal("http://xml0", xmlNamespaces("").XmlNamespace)
Assert.Equal("http://xml1", xmlNamespaces("C").XmlNamespace)
WithRuntimeInstancePortableBug(comp,
Sub(runtime)
GetImports(
runtime,
"root.N.C.M",
GetExpressionStatement(comp),
rootNamespace,
currentNamespace,
typesAndNamespaces,
aliases,
xmlNamespaces)
Assert.Equal("root", rootNamespace.ToTestDisplayString())
Assert.Equal("root.N", currentNamespace.ToTestDisplayString())
' CONSIDER: We could de-dup unaliased imports as well.
AssertEx.SetEqual(typesAndNamespaces.Select(Function(i) i.NamespaceOrType.ToTestDisplayString()), "System", "System.IO.Path", "System", "System.IO.Path", "root.N")
AssertEx.SetEqual(aliases.Keys, "A", "B")
Assert.Equal("System.Collections", aliases("A").Alias.Target.ToTestDisplayString())
Assert.Equal("System.Collections.ArrayList", aliases("B").Alias.Target.ToTestDisplayString())
AssertEx.SetEqual(xmlNamespaces.Keys, "", "C")
Assert.Equal("http://xml0", xmlNamespaces("").XmlNamespace)
Assert.Equal("http://xml1", xmlNamespaces("C").XmlNamespace)
End Sub)
End Sub
<WorkItem(2441, "https://github.com/dotnet/roslyn/issues/2441")>
......
......@@ -26,19 +26,19 @@ Class C
Dim o As I = Nothing
End Sub
End Class"
Dim compilation0 = CreateCompilationWithMscorlib(
Dim comp = CreateCompilationWithMscorlib(
{source},
options:=TestOptions.DebugDll,
assemblyName:=ExpressionCompilerUtilities.GenerateUniqueName())
Dim runtime = CreateRuntimeInstance(compilation0)
Dim context = CreateMethodContext(
runtime,
methodName:="C.M")
Dim errorMessage As String = Nothing
Dim testData = New CompilationTestData()
context.CompileExpression("Me", errorMessage, testData, DebuggerDiagnosticFormatter.Instance)
Assert.Null(errorMessage)
testData.GetMethodData("<>x.<>m0").VerifyIL(
WithRuntimeInstance(comp,
Sub(runtime)
Dim context = CreateMethodContext(runtime, "C.M")
Dim errorMessage As String = Nothing
Dim testData = New CompilationTestData()
context.CompileExpression("Me", errorMessage, testData, DebuggerDiagnosticFormatter.Instance)
Assert.Null(errorMessage)
testData.GetMethodData("<>x.<>m0").VerifyIL(
"{
// Code size 2 (0x2)
.maxstack 1
......@@ -46,6 +46,7 @@ End Class"
IL_0000: ldarg.0
IL_0001: ret
}")
End Sub)
End Sub
End Class
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册