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()); }
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()); }