private static string AsName(IExpression expression) { if (expression is VariableExpression) { return(((VariableExpression)expression).Name); } if (expression is DotExpression) { DotExpression dot = (DotExpression)expression; return(AsName(dot.Expression) + "." + dot.Name); } return(null); }
public void EvaluateDotExpressionOnString() { IExpression expression = new DotExpression(new ConstantExpression("foo"), "Length"); Assert.AreEqual(3, expression.Evaluate(null)); }
public void EvaluateDotExpressionOnInteger() { IExpression expression = new DotExpression(new ConstantExpression(1), "ToString", new List<IExpression>()); Assert.AreEqual("1", expression.Evaluate(null)); }
public void EvaluateDotExpressionAsTypeInvocation() { DotExpression dot = new DotExpression(new DotExpression(new DotExpression(new VariableExpression("System"), "IO"), "File"), "Exists", new IExpression[] { new ConstantExpression("unknown.txt") }); Assert.IsFalse((bool) dot.Evaluate(new Context())); }
private IExpression ParseDotExpression() { IExpression expression = this.ParseSimpleExpression(); if (expression == null) return null; while (this.TryParseToken(".", TokenType.Separator)) { string name = this.ParseName(); if (this.TryParseToken("(", TokenType.Separator)) { expression = new DotExpression(expression, name, this.ParseExpressionList(")")); } else expression = new DotExpression(expression, name); } return expression; }