示例#1
0
        public void VirtualProperty()
        {
            var soft = Session as SoftDebuggerSession;

            if (soft != null && soft.ProtocolVersion < new Version(2, 31))
            {
                Assert.Ignore("A newer version of the Mono runtime is required.");
            }

            var ops = EvaluationOptions.DefaultOptions.Clone();

            ops.FlattenHierarchy = false;

            ObjectValue val = Frame.GetExpressionValue("c", ops);

            Assert.IsNotNull(val);
            val = val.Sync();
            Assert.IsFalse(val.IsError);
            Assert.IsFalse(val.IsUnknown);

            // The C class does not have a Prop property

            ObjectValue prop = val.GetChildSync("Prop", ops);

            Assert.IsNull(prop);

            prop = val.GetChildSync("PropNoVirt1", ops);
            Assert.IsNull(prop);

            prop = val.GetChildSync("PropNoVirt2", ops);
            Assert.IsNull(prop);

            val = val.GetChildSync("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.GetChildSync("Prop", ops);
            Assert.IsNotNull(prop);
            Assert.AreEqual("2", prop.Value);

            prop = val.GetChildSync("PropNoVirt1", ops);
            Assert.IsNotNull(prop);
            Assert.AreEqual("2", prop.Value);

            prop = val.GetChildSync("PropNoVirt2", ops);
            Assert.IsNotNull(prop);
            Assert.AreEqual("2", prop.Value);

            val = val.GetChildSync("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.GetChildSync("Prop", ops);
            Assert.IsNotNull(prop);
            Assert.AreEqual("2", prop.Value);

            prop = val.GetChildSync("PropNoVirt1", ops);
            Assert.IsNotNull(prop);
            Assert.AreEqual("1", prop.Value);

            prop = val.GetChildSync("PropNoVirt2", ops);
            Assert.IsNotNull(prop);
            Assert.AreEqual("1", prop.Value);
        }