public void TestBasicExtensibility()
        {
            var extendable = new SomeObj().Dynamify();
            extendable.NewProperty = 10;
            extendable.IntProp = 10;

            // Validate an extended property
            Assert.AreEqual(10, extendable.NewProperty);
            Assert.AreEqual(10, (extendable.Unwrap() as object).GetProperty("NewProperty"));

            // Validate a normal property
            Assert.AreEqual(10, extendable.IntProp);
            Assert.AreEqual(10, (extendable.Unwrap() as object).GetProperty("IntProp"));
            Assert.AreEqual(10, (extendable.Unwrap() as SomeObj).IntProp);
        }
        public void TestThatExtendableIsAlsoObservable()
        {
            var extendable = new SomeObj().Dynamify();

            var token = (extendable as IObjectObservable).SetExpectedChanges(
                new Change(extendable, "First", null, "Adam"),
                new Change(extendable, "First", "Adam", "Joe"),
                new Change(extendable, "IntProp", 0, 10));

            extendable.First = "Adam";
            extendable.First = "Joe";
            Assert.AreEqual("Joe", (extendable.Unwrap() as object).GetProperty("First"));

            extendable.IntProp = 10;
            token.ValidateAllNotificationsHappened();
        }