提交 78d63442 编写于 作者: D Dustin Coleman

Do not return favorites in expansions of null values

上级 b8a5611e
......@@ -81,6 +81,51 @@ class C
EvalResult("s2", @"""S2""", "string", "(new C()).a.s2", DkmEvaluationResultFlags.RawString | DkmEvaluationResultFlags.CanFavorite, editableValue: @"""S2"""));
}
[Fact]
public void ExpansionOfNullValue()
{
var source =
@"class A
{
string s1 = ""S1"";
string s2 = ""S2"";
}
class B
{
A a1 = new A();
A a2 = null;
}";
var assembly = GetAssembly(source);
var type = assembly.GetType("B");
var rootExpr = "new B()";
var favoritesByTypeName = new Dictionary<string, DkmClrObjectFavoritesInfo>()
{
{ "A", new DkmClrObjectFavoritesInfo(new[] { "s2" }) }
};
var runtime = new DkmClrRuntimeInstance(ReflectionUtilities.GetMscorlib(assembly), favoritesByTypeName);
var value = CreateDkmClrValue(
value: Activator.CreateInstance(type),
type: runtime.GetType((TypeImpl)type));
var evalResult = FormatResult(rootExpr, value);
Verify(evalResult,
EvalResult(rootExpr, "{B}", "B", rootExpr, DkmEvaluationResultFlags.Expandable));
var children = GetChildren(evalResult);
Verify(children,
EvalResult("a1", "{A}", "A", "(new B()).a1", DkmEvaluationResultFlags.Expandable | DkmEvaluationResultFlags.CanFavorite | DkmEvaluationResultFlags.HasFavorites),
EvalResult("a2", "null", "A", "(new B()).a2", DkmEvaluationResultFlags.CanFavorite));
// A a1 = new A();
var more = GetChildren(children[0]);
Verify(more,
EvalResult("s2", @"""S2""", "string", "(new B()).a1.s2", DkmEvaluationResultFlags.RawString | DkmEvaluationResultFlags.CanFavorite | DkmEvaluationResultFlags.IsFavorite, editableValue: @"""S2"""),
EvalResult("s1", @"""S1""", "string", "(new B()).a1.s1", DkmEvaluationResultFlags.RawString | DkmEvaluationResultFlags.CanFavorite, editableValue: @"""S1"""));
}
[Fact]
public void FilteredExpansion()
{
......
......@@ -79,7 +79,7 @@ internal sealed class MemberExpansion : Expansion
foreach (var member in allMembers)
{
if (member.IsFavorite)
if (member.IsFavorite && !value.IsNull) // Favorites are never static
{
favoritesMembersByName.Add(member.Name, member);
}
......
......@@ -69,6 +69,49 @@ End Class"
EvalResult("s2", """S2""", "String", "(new C()).a.s2", DkmEvaluationResultFlags.RawString Or DkmEvaluationResultFlags.CanFavorite, editableValue:="""S2"""))
End Sub
<Fact>
Public Sub ExpansionOfNullValue()
Dim source =
"Class A
Dim s1 As String = ""S1""
Dim s2 As String = ""S2""
End Class
Class B
Dim a1 As A = new A()
Dim a2 As A = Nothing
End Class"
Dim assembly = GetAssembly(source)
Dim type = assembly.GetType("B")
Dim rootExpr = "new B()"
Dim favoritesByTypeName = New Dictionary(Of String, DkmClrObjectFavoritesInfo) From
{
{"A", New DkmClrObjectFavoritesInfo(New String() {"s2"})}
}
Dim runtime = New DkmClrRuntimeInstance(ReflectionUtilities.GetMscorlib(assembly), favoritesByTypeName)
Dim value = CreateDkmClrValue(
value:=Activator.CreateInstance(type),
type:=runtime.GetType(type))
Dim result = FormatResult(rootExpr, value)
Verify(result,
EvalResult(rootExpr, "{B}", "B", rootExpr, DkmEvaluationResultFlags.Expandable))
Dim children = GetChildren(result)
Verify(children,
EvalResult("a1", "{A}", "A", "(new B()).a1", DkmEvaluationResultFlags.Expandable Or DkmEvaluationResultFlags.CanFavorite Or DkmEvaluationResultFlags.HasFavorites),
EvalResult("a2", "Nothing", "A", "(new B()).a2", DkmEvaluationResultFlags.CanFavorite))
' Dim a1 As A = new A()
Dim more = GetChildren(children(0))
Verify(more,
EvalResult("s2", """S2""", "String", "(new B()).a1.s2", DkmEvaluationResultFlags.RawString Or DkmEvaluationResultFlags.CanFavorite Or DkmEvaluationResultFlags.IsFavorite, editableValue:="""S2"""),
EvalResult("s1", """S1""", "String", "(new B()).a1.s1", DkmEvaluationResultFlags.RawString Or DkmEvaluationResultFlags.CanFavorite, editableValue:="""S1"""))
End Sub
<Fact>
Public Sub FilteredExpansion()
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册