コード例 #1
0
ファイル: VariableTests.cs プロジェクト: mdcuesta/Ongle
        public void TestAccessArray()
        {
            IKernel kernel = TestModule.GetTestKernel ();
            var factory = kernel.Get<IExecutorFactory>();

            Block statements = new Block ();
            statements.Scope = new Scope ();

            ArrayExpr array = new ArrayExpr(factory.GetArrayExecutor());
            array.Scope = statements.Scope;

            array.Elements.Add(new StringLiteral {
                Value = "yay"
            });

            array.Elements.Add(new StringLiteral {
                Value = "boo"
            });

            Assign assign = new Assign(factory.GetAssignExecutor())
            {
                Ident = new Variable ( factory.GetVariableExecutor ())
                {
                    Scope = statements.Scope,
                    Ident = "x"
                },
                Expr = array,
                Scope = statements.Scope
            };

            Print print = new Print(factory.GetPrintExecutor());
            print.Expr = new Variable( factory.GetVariableExecutor())
            {
                Scope = statements.Scope,
                Ident = "x",
                Indexer = new NumberLiteral()
                {
                    Value = 1
                }
            };

            statements.Add ( assign );
            statements.Add ( print );

            statements.Execute();

            StandardOutDummy output = kernel.Get<IStandardOut> () as StandardOutDummy;
            Assert.AreEqual ( "boo", output.Text );
        }
コード例 #2
0
ファイル: ExpressionParser.cs プロジェクト: mdcuesta/Ongle
        public Expression ParseArray(IScope scope, Tokens tokens)
        {
            var result = new ArrayExpr( _executorFactory.GetArrayExecutor() );

            tokens.RemoveNextToken(BeginArray);

            while (tokens.PeekToken() != EndArray)
            {
                result.Elements.Add(this.ParseValue(scope, tokens));
                tokens.RemoveNextToken(ArraySeparator);
            }

            tokens.RemoveNextToken(EndArray);

            return result;
        }
コード例 #3
0
ファイル: ArrayTest.cs プロジェクト: mdcuesta/Ongle
        public void TestEvaluateArrayWithArithLiterals()
        {
            IKernel kernel = TestModule.GetTestKernel ();
            var factory = kernel.Get<IExecutorFactory>();
            ArrayExpr array = new ArrayExpr(factory.GetArrayExecutor());

            array.Elements.Add(new ArithExpr {
                Left = new NumberLiteral {
                    Value = 3 },
                Right = new NumberLiteral {
                    Value = 4 },
                Op = ArithOp.Add
            });

            Dynamic dynamic = array.Evaluate();
            Assert.AreEqual(dynamic.ArrayValue[0].NumberValue, 7, "First element should be 3+4");
        }
コード例 #4
0
ファイル: ArrayTest.cs プロジェクト: mdcuesta/Ongle
        public void TestEvaluateArrayWithStringLiterals()
        {
            IKernel kernel = TestModule.GetTestKernel ();
            var factory = kernel.Get<IExecutorFactory>();
            ArrayExpr array = new ArrayExpr(factory.GetArrayExecutor());

            array.Elements.Add(new StringLiteral {
                Value = "yay"
            });

            array.Elements.Add(new StringLiteral {
                Value = "boo"
            });

            Dynamic dynamic = array.Evaluate();
            Assert.AreEqual(DynamicType.arrayType, dynamic.Type, "Type should be array");
            Assert.AreEqual(dynamic.ArrayValue[0].StringValue, "yay", "First element should be 'yay'");
            Assert.AreEqual(dynamic.ArrayValue[1].StringValue, "boo", "Second element should be 'boo'");
        }