public void RetrieveDefinedInstanceMethodIsNull() { DynamicClass dclass = new DynamicClass("Dog"); IFunction foo = new DefinedFunction(null, null, null); dclass.SetInstanceMethod("foo", foo); Assert.AreSame(foo, dclass.GetInstanceMethod("foo")); }
public Machine() { this.requirepaths.Add("."); var basicobjectclass = new DynamicClass("BasicObject", null); var objectclass = new DynamicClass("Object", basicobjectclass); var moduleclass = new DynamicClass("Module", objectclass); var classclass = new DynamicClass("Class", moduleclass); this.rootcontext.SetLocalValue("BasicObject", basicobjectclass); this.rootcontext.SetLocalValue("Object", objectclass); this.rootcontext.SetLocalValue("Module", moduleclass); this.rootcontext.SetLocalValue("Class", classclass); basicobjectclass.SetClass(classclass); objectclass.SetClass(classclass); moduleclass.SetClass(classclass); classclass.SetClass(classclass); basicobjectclass.SetInstanceMethod("class", new LambdaFunction(GetClass)); basicobjectclass.SetInstanceMethod("methods", new LambdaFunction(GetMethods)); basicobjectclass.SetInstanceMethod("singleton_methods", new LambdaFunction(GetSingletonMethods)); moduleclass.SetInstanceMethod("superclass", new LambdaFunction(GetSuperClass)); moduleclass.SetInstanceMethod("name", new LambdaFunction(GetName)); classclass.SetInstanceMethod("new", new LambdaFunction(NewInstance)); this.rootcontext.SetLocalValue("Fixnum", new FixnumClass(this)); this.rootcontext.SetLocalValue("Float", new FloatClass(this)); this.rootcontext.SetLocalValue("String", new StringClass(this)); this.rootcontext.SetLocalValue("NilClass", new NilClass(this)); this.rootcontext.SetLocalValue("FalseClass", new FalseClass(this)); this.rootcontext.SetLocalValue("TrueClass", new TrueClass(this)); this.rootcontext.SetLocalValue("Array", new ArrayClass(this)); this.rootcontext.SetLocalValue("Hash", new HashClass(this)); this.rootcontext.SetLocalValue("Range", new RangeClass(this)); this.rootcontext.Self = objectclass.CreateInstance(); this.rootcontext.Self.Class.SetInstanceMethod("puts", new PutsFunction(System.Console.Out)); this.rootcontext.Self.Class.SetInstanceMethod("print", new PrintFunction(System.Console.Out)); this.rootcontext.Self.Class.SetInstanceMethod("require", new RequireFunction(this)); }
public void CreateInstance() { DynamicClass dclass = new DynamicClass("Dog"); IFunction foo = new DefinedFunction(null, null, null); dclass.SetInstanceMethod("foo", foo); var result = dclass.CreateInstance(); Assert.IsNotNull(result); Assert.AreSame(dclass, result.Class); Assert.AreSame(foo, result.GetMethod("foo")); }
public void GetOwnInstanceMethodNames() { DynamicClass dclass = new DynamicClass("Dog"); IFunction foo = new DefinedFunction(null, null, null); dclass.SetInstanceMethod("foo", foo); var result = dclass.GetOwnInstanceMethodNames(); Assert.IsNotNull(result); Assert.AreNotEqual(0, result.Count); Assert.IsTrue(result.Contains("foo")); }
public void ApplyNewMethodCallingInitialize() { Machine machine = new Machine(); DynamicClass @class = new DynamicClass((DynamicClass)machine.RootContext.GetLocalValue("Class"), "Dog", (DynamicClass)machine.RootContext.GetLocalValue("Object")); IFunction initialize = new DefinedFunction(new AssignInstanceVarExpression("age", new ConstantExpression(10)), new string[0], null); @class.SetInstanceMethod("initialize", initialize); var result = @class.GetMethod("new").Apply(@class, @class.Constants, new object[] { }); Assert.IsNotNull(result); Assert.IsInstanceOfType(result, typeof(DynamicObject)); var obj = (DynamicObject)result; Assert.AreSame(@class, obj.Class); Assert.AreEqual(10, obj.GetValue("age")); }
public void ExecuteAssignDotCommand() { Machine machine = new Machine(); var @class = new DynamicClass("Dog"); var method = new DefinedFunction((new Parser("@name = name")).ParseCommand(), new string[] { "name" }, machine.RootContext); @class.SetInstanceMethod("name=", method); var nero = @class.CreateInstance(); machine.RootContext.SetLocalValue("nero", nero); var leftvalue = (DotExpression)(new Parser("nero.name")).ParseExpression(); var value = new ConstantExpression("Nero"); AssignDotExpressions cmd = new AssignDotExpressions(leftvalue, value); var result = cmd.Evaluate(machine.RootContext); Assert.IsNotNull(result); Assert.AreEqual("Nero", result); Assert.AreEqual("Nero", nero.GetValue("name")); }