Пример #1
0
        public void RedefineSimpleClass()
        {
            Machine      machine = new Machine();
            Context      context = machine.RootContext;
            StringWriter writer  = new StringWriter();

            context.Self.Class.SetInstanceMethod("puts", new PutsFunction(writer));
            ClassExpression expr = new ClassExpression(new NameExpression("Dog"), new CallExpression("puts", new IExpression[] { new ConstantExpression(123) }));

            expr.Evaluate(context);

            var initial = context.GetValue("Dog");

            var result = expr.Evaluate(context);

            Assert.IsNull(result);

            var value = context.GetValue("Dog");

            Assert.IsInstanceOfType(value, typeof(DynamicClass));
            Assert.AreEqual(value, context.GetValue("Dog"));
            Assert.AreSame(initial, value);
            Assert.AreEqual("123\r\n123\r\n", writer.ToString());
        }
Пример #2
0
        public void DefineSimpleSubClass()
        {
            Machine      machine     = new Machine();
            Context      context     = machine.RootContext;
            DynamicClass animalclass = new DynamicClass("Animal", (DynamicClass)context.GetValue("Object"));

            context.SetLocalValue("Animal", animalclass);
            StringWriter writer = new StringWriter();

            context.Self.Class.SetInstanceMethod("puts", new PutsFunction(writer));
            ClassExpression expr = new ClassExpression(new NameExpression("Dog"), new CallExpression("puts", new IExpression[] { new ConstantExpression(123) }), new NameExpression("Animal"));

            var result = expr.Evaluate(context);

            Assert.IsNull(result);

            var value = context.GetValue("Dog");

            Assert.IsInstanceOfType(value, typeof(DynamicClass));
            Assert.AreEqual(value, context.GetValue("Dog"));
            Assert.AreSame(animalclass, ((DynamicClass)value).SuperClass);
            Assert.AreEqual("123\r\n", writer.ToString());
        }