コード例 #1
0
        public void GetValueFromDynamicObject()
        {
            DynamicObject dynobj = new DynamicObject();
            dynobj.SetValue("FirstName", "Adam");

            Assert.AreEqual("Adam", ObjectUtilities.GetValue(dynobj, "FirstName"));
        }
コード例 #2
0
ファイル: FunctionTests.cs プロジェクト: ajlopez/AjSharp
        public void EvaluateCallObject()
        {
            Machine machine = new Machine();
            ICommand body = new ReturnCommand(new ArithmeticBinaryExpression(ArithmeticOperator.Add, new VariableExpression("x"), new DotExpression(new VariableExpression("this"), "Age")));
            Function function = new Function(new string[] { "x" }, body);
            DynamicObject person = new DynamicObject();
            person.SetValue("Age", 30);

            Assert.AreEqual(40, function.Call(person, new object[] { 10 }));
        }
コード例 #3
0
        public void GetIndexedValuesFromDynamicObject()
        {
            DynamicObject obj = new DynamicObject();
            obj.SetValue("Name", "Adam");
            obj.SetValue("GetAge", new Function(new string[] { "n" }, null));

            Assert.AreEqual("Adam", ObjectUtilities.GetIndexedValue(obj, new object[] { "Name" }));

            object f = ObjectUtilities.GetIndexedValue(obj, new object[] { "GetAge" });
            Assert.IsNotNull(f);
            Assert.IsInstanceOfType(f, typeof(Function));
        }
コード例 #4
0
ファイル: ExpressionsTests.cs プロジェクト: ajlopez/AjSharp
        public void EvaluateArrayDotExpression()
        {
            BindingEnvironment environment = new BindingEnvironment();

            DynamicObject data = new DynamicObject();
            data.SetValue("Numbers", new string[] { "one", "two", "three" });

            environment.SetValue("data", data);

            IExpression expression = new ArrayExpression(new DotExpression(new VariableExpression("data"), "Numbers"), new IExpression[] { new ConstantExpression(1) });

            object result = expression.Evaluate(environment);

            Assert.IsNotNull(result);
            Assert.AreEqual("two", result);
        }
コード例 #5
0
        public void Execute(IBindingEnvironment environment)
        {
            DynamicObject dynobj = new DynamicObject();

            int k = 0;

            if (this.memberExpressions != null)
                foreach (IExpression expression in this.memberExpressions)
                {
                    string name = this.memberNames[k++];
                    object value = null;

                    if (expression != null)
                        value = expression.Evaluate(environment);

                    dynobj.SetValue(name, value);
                }

            environment.SetValue(this.name, dynobj);
        }
コード例 #6
0
        private static object ResolveToObject(DotExpression expression, IBindingEnvironment environment)
        {
            object obj = ResolveToObject(expression.Expression, environment);

            if (obj is DynamicObject)
            {
                DynamicObject dynobj = (DynamicObject)obj;

                obj = dynobj.GetValue(expression.Name);

                if (obj == null)
                {
                    obj = new DynamicObject();
                    dynobj.SetValue(expression.Name, obj);
                }

                return obj;
            }

            return ObjectUtilities.GetValue(obj, expression.Name);
        }
コード例 #7
0
        private static object ResolveToObject(VariableExpression expression, IBindingEnvironment environment)
        {
            string name = expression.VariableName;

            object obj = environment.GetValue(name);

            if (obj == null)
            {
                obj = new DynamicObject();

                // TODO Review if Local or not
                environment.SetValue(name, obj);
            }

            return obj;
        }
コード例 #8
0
ファイル: ObjectEnvironment.cs プロジェクト: ajlopez/AjSharp
 public ObjectEnvironment(DynamicObject obj, IBindingEnvironment parent)
 {
     this.obj = obj;
     this.parent = parent;
 }
コード例 #9
0
ファイル: ObjectEnvironment.cs プロジェクト: ajlopez/AjSharp
 public ObjectEnvironment(DynamicObject obj)
     : this(obj, null)
 {
 }
コード例 #10
0
ファイル: DynamicObjectTests.cs プロジェクト: ajlopez/AjSharp
 public void SetupDynamicObject()
 {
     this.machine = new Machine();
     this.dynobj = new DynamicObject();
 }
コード例 #11
0
ファイル: ExpressionsTests.cs プロジェクト: ajlopez/AjSharp
        public void EvaluateMultipleSetExpressionUsingDynamicObject()
        {
            DynamicObject dynobj = new DynamicObject();

            MultipleSetExpression expression = new MultipleSetExpression(new ConstantExpression(dynobj), new string[] { "FirstName", "LastName" }, new IExpression[] { new ConstantExpression("John"), new ConstantExpression("Doe") });

            object result = expression.Evaluate(new BindingEnvironment());

            Assert.IsNotNull(result);
            Assert.IsTrue(result == dynobj);

            Assert.AreEqual("John", dynobj.GetValue("FirstName"));
            Assert.AreEqual("Doe", dynobj.GetValue("LastName"));
        }
コード例 #12
0
 public void SetUp()
 {
     this.dynobj = new DynamicObject();
     this.environment = new ObjectEnvironment(this.dynobj);
 }