public void VirtualProperty() { EvaluationOptions ops = EvaluationOptions.DefaultOptions.Clone(); ops.FlattenHierarchy = false; ObjectValue val = Frame.GetExpressionValue("c", ops); Assert.IsNotNull(val); val.WaitHandle.WaitOne(); Assert.IsFalse(val.IsError); Assert.IsFalse(val.IsUnknown); // The C class does not have a Prop property ObjectValue prop = val.GetChild("Prop", ops); Assert.IsNull(prop); prop = val.GetChild("PropNoVirt1", ops); Assert.IsNull(prop); prop = val.GetChild("PropNoVirt2", ops); Assert.IsNull(prop); val = val.GetChild("base", ops); Assert.IsNotNull(val); val.WaitHandle.WaitOne(); Assert.IsFalse(val.IsError); Assert.IsFalse(val.IsUnknown); // The B class has a Prop property, value is 2 prop = val.GetChild("Prop", ops); Assert.IsNotNull(prop); Assert.AreEqual("2", prop.Value); prop = val.GetChild("PropNoVirt1", ops); Assert.IsNotNull(prop); Assert.AreEqual("2", prop.Value); prop = val.GetChild("PropNoVirt2", ops); Assert.IsNotNull(prop); Assert.AreEqual("2", prop.Value); val = val.GetChild("base", ops); Assert.IsNotNull(val); val.WaitHandle.WaitOne(); Assert.IsFalse(val.IsError); Assert.IsFalse(val.IsUnknown); // The A class has a Prop property, value is 1, but must return 2 becasue it is overriden prop = val.GetChild("Prop", ops); Assert.IsNotNull(prop); Assert.AreEqual("2", prop.Value); prop = val.GetChild("PropNoVirt1", ops); Assert.IsNotNull(prop); Assert.AreEqual("1", prop.Value); prop = val.GetChild("PropNoVirt2", ops); Assert.IsNotNull(prop); Assert.AreEqual("1", prop.Value); }
public static ObjectValue GetChildSync(this ObjectValue val, string name, EvaluationOptions ops) { var result = val.GetChild(name, ops); return(result != null?result.Sync() : null); }