public void ExecuteSetArrayCommandWithDotExpression() { BindingEnvironment environment = new BindingEnvironment(); DotExpression dotexpr = new DotExpression(new VariableExpression("foo"), "Values"); SetArrayCommand command = new SetArrayCommand(dotexpr, new IExpression[] { new ConstantExpression(0) }, new ConstantExpression("bar")); command.Execute(environment); object obj = environment.GetValue("foo"); Assert.IsNotNull(obj); Assert.IsInstanceOfType(obj, typeof(DynamicObject)); DynamicObject dynobj = (DynamicObject)obj; object obj2 = dynobj.GetValue("Values"); Assert.IsNotNull(obj2); Assert.IsInstanceOfType(obj2, typeof(IList)); IList list = (IList)obj2; Assert.AreEqual(1, list.Count); Assert.AreEqual("bar", list[0]); }
public void ParseSetArrayCommandWithDotExpression() { ICommand command = ParseCommand("foo.Values[0] = 1;"); Assert.IsNotNull(command); Assert.IsInstanceOfType(command, typeof(SetArrayCommand)); SetArrayCommand setcmd = (SetArrayCommand)command; Assert.IsInstanceOfType(setcmd.LeftValue, typeof(DotExpression)); Assert.AreEqual(1, setcmd.Arguments.Count); Assert.IsInstanceOfType(setcmd.Expression, typeof(ConstantExpression)); }
public void ExecuteSetArrayCommandWithVariable() { BindingEnvironment environment = new BindingEnvironment(); SetArrayCommand command = new SetArrayCommand(new VariableExpression("foo"), new IExpression[] { new ConstantExpression(0) }, new ConstantExpression("bar")); command.Execute(environment); object result = environment.GetValue("foo"); Assert.IsNotNull(result); Assert.IsInstanceOfType(result, typeof(IList)); Assert.AreEqual(1, ((IList)result).Count); Assert.AreEqual("bar", ((IList)result)[0]); }
private ICommand ParseSimpleCommand() { if (this.TryParse(TokenType.Name, "var")) { this.lexer.NextToken(); return(this.ParseVarCommand()); } if (this.TryParse(TokenType.Name, "exit")) { this.lexer.NextToken(); return(new ExitCommand()); } IExpression expression = this.ParseExpression(); if (expression == null) { return(null); } if (this.TryParse(TokenType.Operator, "=")) { this.lexer.NextToken(); ICommand command = null; if (expression is ArrayExpression) { ArrayExpression aexpr = (ArrayExpression)expression; command = new SetArrayCommand(aexpr.Expression, aexpr.Arguments, this.ParseExpression()); } else { command = new SetCommand(expression, this.ParseExpression()); } return(command); } if (this.TryParse(TokenType.Operator, "<-")) { this.lexer.NextToken(); return(new SetValueCommand(expression, this.ParseExpression())); } return(new ExpressionCommand(expression)); }
private ICommand ParseSimpleCommand() { if (this.TryParse(TokenType.Name, "var")) { this.lexer.NextToken(); return(this.ParseVarCommand()); } IExpression expression = this.ParseExpression(); if (expression == null) { return(null); } if (this.TryParse(TokenType.Operator, "=")) { this.lexer.NextToken(); ICommand command = null; if (expression is ArrayExpression) { ArrayExpression aexpr = (ArrayExpression)expression; command = new SetArrayCommand(aexpr.Expression, aexpr.Arguments, this.ParseExpression()); } else { if (expression is VariableExpression) { IsValidName(((VariableExpression)expression).Name); } command = new SetCommand(expression, this.ParseExpression()); } return(command); } // TODO Review trick to suppor function name(pars) {} without ending ; if (expression is FunctionExpression && ((FunctionExpression)expression).Name != null) { this.lexer.PushToken(tokenSemiColon); } return(new ExpressionCommand(expression)); }