提交 19983a3f 编写于 作者: A Andrew Casey

Add regression tests for DevDiv #1134746.

上级 1b460858
......@@ -1289,6 +1289,51 @@ .maxstack 1
AssertEx.SetEqual(GetLocalNames(context), "ch", "<>TypeVariables");
}
[WorkItem(1134746, "DevDiv")]
[Fact]
public void Caching()
{
var source = @"
using System.Collections.Generic;
class C
{
static IEnumerable<int> M()
{
#line 100
int x = 1;
yield return x;
{
#line 200
int y = x + 1;
yield return y;
}
}
}";
var comp = CreateCompilationWithMscorlib(source, options: TestOptions.DebugDll);
var runtime = CreateRuntimeInstance(comp);
var context = CreateMethodContext(
runtime,
methodName: "C.<M>d__0.MoveNext",
atLineNumber: 100);
string error;
context.CompileExpression("x", out error);
Assert.Null(error);
context.CompileExpression("y", out error);
Assert.Equal("error CS0103: The name 'y' does not exist in the current context", error);
context = CreateMethodContext(
runtime,
methodName: "C.<M>d__0.MoveNext",
atLineNumber: 200,
previous: new CSharpMetadataContext(context));
context.CompileExpression("x", out error);
Assert.Null(error);
context.CompileExpression("y", out error);
Assert.Null(error);
}
private static string[] GetLocalNames(EvaluationContext context)
{
string unused;
......
......@@ -1364,6 +1364,51 @@ End Class
AssertEx.SetEqual(GetLocalNames(context), "ch", "<>TypeVariables")
End Sub
<WorkItem(1134746, "DevDiv")>
<Fact>
Public Sub Caching()
Const source = "
Imports System.Collections.Generic
Class C
Shared Iterator Function M() As IEnumerable(Of Integer)
#ExternalSource(""Test"", 100)
Dim x As Integer = 1
Yield x
#End ExternalSource
If True Then
#ExternalSource(""Test"", 200)
Dim y As Integer = x + 1
Yield y
#End ExternalSource
End If
End Function
End Class
"
Dim comp = CreateCompilationWithMscorlib({source}, compOptions:=TestOptions.DebugDll)
Dim runtime = CreateRuntimeInstance(comp)
Dim context = CreateMethodContext(
runtime,
methodName:="C.VB$StateMachine_1_M.MoveNext",
atLineNumber:=100)
Dim errorMessage As String = Nothing
context.CompileExpression("x", errorMessage)
Assert.Null(errorMessage)
context.CompileExpression("y", errorMessage)
Assert.Equal("(1,2): error BC30451: 'y' is not declared. It may be inaccessible due to its protection level.", errorMessage)
context = CreateMethodContext(
runtime,
methodName:="C.VB$StateMachine_1_M.MoveNext",
atLineNumber:=200,
previous:=New VisualBasicMetadataContext(context))
context.CompileExpression("x", errorMessage)
Assert.Null(errorMessage)
context.CompileExpression("y", errorMessage)
Assert.Null(errorMessage)
End Sub
Private Shared Function GetLocalNames(context As EvaluationContext) As String()
Dim unused As String = Nothing
Dim locals = New ArrayBuilder(Of LocalAndMethod)()
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册