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); }
public void EvaluateArrayVariableExpression() { BindingEnvironment environment = new BindingEnvironment(); environment.SetValue("array", new string[] { "one", "two", "three" }); IExpression expression = new ArrayExpression(new VariableExpression("array"), new IExpression[] { new ConstantExpression(1) }); object result = expression.Evaluate(environment); Assert.IsNotNull(result); Assert.AreEqual("two", result); }
private IExpression ParseTermExpression() { IExpression expression = this.ParseSimpleTermExpression(); while (this.TryParse(TokenType.Operator, ".") || this.TryParse(TokenType.Separator, "[", "(")) { if (this.TryParse(TokenType.Separator, "(")) expression = new InvokeExpressionExpression(expression, this.ParseArgumentList()); else if (this.TryParse(TokenType.Operator, ".")) { this.lexer.NextToken(); string name = this.ParseName(); List<IExpression> arguments = null; if (this.TryParse(TokenType.Separator, "(")) arguments = this.ParseArgumentList(); expression = new DotExpression(expression, name, arguments); } else expression = new ArrayExpression(expression, this.ParseArrayArgumentList()); } return expression; }