public void EvaluateArrayVariableExpression() { Context context = new Context(); context.SetValue("array", new string[] { "one", "two", "three" }); IExpression expression = new ArrayExpression(new VariableExpression("array"), new IExpression[] { new ConstantExpression(1) }); object result = expression.Evaluate(context); Assert.IsNotNull(result); Assert.AreEqual("two", result); }
public void EvaluateArrayDotExpression() { Context context = new Context(); DynamicObject data = new DynamicObject(); data.SetValue("Numbers", new string[] { "one", "two", "three" }); context.SetValue("data", data); IExpression expression = new ArrayExpression(new DotExpression(new VariableExpression("data"), "Numbers"), new IExpression[] { new ConstantExpression(1) }); object result = expression.Evaluate(context); Assert.IsNotNull(result); Assert.AreEqual("two", result); }
private IExpression ParseTermExpression() { if (this.TryParse(TokenType.Name, "new")) return ParseNewExpression(); IExpression expression = this.ParseSimpleTermExpression(); while (this.TryParse(TokenType.Operator, ".") || this.TryParse(TokenType.Separator, "[", "(")) { if (this.TryParse(TokenType.Operator, ".")) { this.lexer.NextToken(); string name = this.ParseName(); IList<IExpression> arguments = null; if (this.TryParse(TokenType.Separator, "(")) arguments = this.ParseArgumentList(); expression = new DotExpression(expression, name, arguments); continue; } if (this.TryParse(TokenType.Separator, "(")) { IList<IExpression> arguments = this.ParseArgumentList(); expression = new InvokeExpression(expression, arguments); continue; } expression = new ArrayExpression(expression, this.ParseArrayArgumentList()); } return expression; }