Ejemplo n.º 1
0
        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]);
        }
Ejemplo n.º 2
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));
        }
Ejemplo n.º 3
0
        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]);
        }
Ejemplo n.º 4
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));
        }
Ejemplo n.º 5
0
        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));
        }