public void EvaluateUndefinedVariable() { Context context = new Context(); VariableExpression expr = new VariableExpression("Foo"); Assert.IsNull(expr.Evaluate(context)); }
public void EvaluateDefinedVariable() { Context context = new Context(); context.SetValue("One", 1); VariableExpression expr = new VariableExpression("One"); Assert.AreEqual(1, expr.Evaluate(context)); }
public void EvaluateDefinedMethod() { Context context = new Context(); IList<ICommand> commandlist = new List<ICommand>(); commandlist.Add(new SetVariableCommand("a", new ConstantExpression(1))); commandlist.Add(new SetVariableCommand("b", new ConstantExpression(2))); commandlist.Add(new ExpressionCommand(new VariableExpression("b"))); CompositeCommand commands = new CompositeCommand(commandlist); DefinedMethod method = new DefinedMethod(null, commands); context.SetValue("foo", method); VariableExpression expr = new VariableExpression("foo"); Assert.AreEqual(2, expr.Evaluate(context)); }
private IExpression ParseSimpleExpression() { Token token = this.NextToken(); if (token == null) return null; switch (token.Type) { case TokenType.Integer: return new ConstantExpression(int.Parse(token.Value, CultureInfo.InvariantCulture)); case TokenType.Name: string name = token.Value; token = this.NextToken(); if (IsReservedWord(token)) { this.PushToken(token); return new VariableExpression(name); } if (token != null && token.Type != TokenType.Separator && token.Type != TokenType.Operator && token.Type != TokenType.EndOfLine) { this.PushToken(token); return new CallExpression(new NameExpression(name), new IExpression[] { this.ParseExpression() }); } if (token != null && token.Type == TokenType.Separator && token.Type == TokenType.Separator && token.Value == "(") { this.PushToken(token); return new CallExpression(new NameExpression(name), this.ParseArguments()); } IExpression expr = new VariableExpression(name); if (token != null) this.PushToken(token); return expr; case TokenType.String: return new ConstantExpression(token.Value); } throw new ParserException(string.Format("Unexpected '{0}'", token.Value)); }