public void BodyPropertyReturnsPassedBody2()
            {
                var name       = new IdentifierExpr(RandomGenerator.String());
                var arguments  = new VarDefinitionStmt[0];
                var body       = new ScopeBlockStmt(new [] { new NoOpStatement() });
                var returnType = new IdentifierExpr(RandomGenerator.String());

                var target = new FunctionDefinitionExpr(name, arguments, body, returnType);

                Assert.AreSame(body, target.Body);
            }
            public void BodyPropertyReturnsPassedBody2()
            {
                var name = new IdentifierExpr(RandomGenerator.String());
                var arguments = new VarDefinitionStmt[0];
                var body = new ScopeBlockStmt(new [] { new NoOpStatement()});
                var returnType = new IdentifierExpr(RandomGenerator.String());

                var target = new FunctionDefinitionExpr(name, arguments, body, returnType);

                Assert.AreSame(body, target.Body);
            }
Example #3
0
        public Value Visit(ScopeBlockStmt stmt, Scope scope)
        {
            using (scope.PushScope())
            {
                foreach (var statement in stmt.Statements)
                {
                    statement.Accept(this, scope);
                }
            }

            return(Value.Unit);
        }
Example #4
0
        public string Visit(ScopeBlockStmt stmt, Scope scope)
        {
            var block = "{{\r\n";

            foreach (var statement in stmt.Statements)
            {
                block += string.Format("\t{0}\r\n", statement.Accept(this, scope));
            }

            block += "}}";

            return(block);
        }
Example #5
0
            public void StatementBlockCallsAllStatementsTest()
            {
                var target = new EvaluateVisitor();

                var statement1 = new Mock <Statement>();
                var statement2 = new Mock <Statement>();
                var statement3 = new Mock <Statement>();

                var stmt = new ScopeBlockStmt(new[] { statement1.Object, statement2.Object, statement3.Object });

                target.Visit(stmt, _scope);

                statement1.Verify(s => s.Accept(target, It.IsAny <Scope>()), Times.Once);
                statement2.Verify(s => s.Accept(target, It.IsAny <Scope>()), Times.Once);
                statement3.Verify(s => s.Accept(target, It.IsAny <Scope>()), Times.Once);
            }
Example #6
0
            public void StatementBlockAllStatementsAreExecutedInOrderTest()
            {
                var target = new EvaluateVisitor();

                var statement1 = new Mock <Statement>();
                var statement2 = new Mock <Statement>();
                var statement3 = new Mock <Statement>();

                int invocations     = 0;
                var invocationOrder = new int[3];

                statement1.Setup(c => c.Accept(It.IsAny <IExpressionVisitor <Value, Scope> >(), It.IsAny <Scope>()))
                .Returns <IExpressionVisitor <Value, Scope>, Scope>(
                    (v, s) =>
                {
                    invocationOrder[0] = invocations;
                    invocations++;
                    return(Value.Unit);;
                });
                statement2.Setup(c => c.Accept(It.IsAny <IExpressionVisitor <Value, Scope> >(), It.IsAny <Scope>()))
                .Returns <IExpressionVisitor <Value, Scope>, Scope>(
                    (v, s) =>
                {
                    invocationOrder[1] = invocations;
                    invocations++;
                    return(Value.Unit);;
                });
                statement3.Setup(c => c.Accept(It.IsAny <IExpressionVisitor <Value, Scope> >(), It.IsAny <Scope>()))
                .Returns <IExpressionVisitor <Value, Scope>, Scope>(
                    (v, s) =>
                {
                    invocationOrder[2] = invocations;
                    invocations++;
                    return(Value.Unit);;
                });

                var stmt = new ScopeBlockStmt(new[] { statement1.Object, statement2.Object, statement3.Object });

                target.Visit(stmt, _scope);

                for (int i = 0; i < invocationOrder.Length; i++)
                {
                    Assert.AreEqual(i, invocationOrder[i]);
                }
            }
Example #7
0
 public ValueType Visit(ScopeBlockStmt stmt, Scope scope)
 {
     return(ValueType.Unit);
 }
            public void StatementBlockAllStatementsAreExecutedInOrderTest()
            {
                var target = new EvaluateVisitor();

                var statement1 = new Mock<Statement>();
                var statement2 = new Mock<Statement>();
                var statement3 = new Mock<Statement>();

                int invocations = 0;
                var invocationOrder = new int[3];

                statement1.Setup(c => c.Accept(It.IsAny<IExpressionVisitor<Value, Scope>>(), It.IsAny<Scope>()))
                    .Returns<IExpressionVisitor<Value, Scope>, Scope>(
                        (v, s) =>
                        {
                            invocationOrder[0] = invocations;
                            invocations++;
                            return Value.Unit;;
                        });
                statement2.Setup(c => c.Accept(It.IsAny<IExpressionVisitor<Value, Scope>>(), It.IsAny<Scope>()))
                    .Returns<IExpressionVisitor<Value, Scope>, Scope>(
                        (v, s) =>
                        {
                            invocationOrder[1] = invocations;
                            invocations++;
                            return Value.Unit;;
                        });
                statement3.Setup(c => c.Accept(It.IsAny<IExpressionVisitor<Value, Scope>>(), It.IsAny<Scope>()))
                    .Returns<IExpressionVisitor<Value, Scope>, Scope>(
                        (v, s) =>
                        {
                            invocationOrder[2] = invocations;
                            invocations++;
                            return Value.Unit;;
                        });

                var stmt = new ScopeBlockStmt(new[] { statement1.Object, statement2.Object, statement3.Object });

                target.Visit(stmt, _scope);

                for (int i = 0; i < invocationOrder.Length; i++)
                {
                    Assert.AreEqual(i, invocationOrder[i]);
                }
            }
            public void StatementBlockCallsAllStatementsTest()
            {
                var target = new EvaluateVisitor();

                var statement1 = new Mock<Statement>();
                var statement2 = new Mock<Statement>();
                var statement3 = new Mock<Statement>();

                var stmt = new ScopeBlockStmt(new[] { statement1.Object, statement2.Object, statement3.Object });

                target.Visit(stmt, _scope);

                statement1.Verify(s => s.Accept(target, It.IsAny<Scope>()), Times.Once);
                statement2.Verify(s => s.Accept(target, It.IsAny<Scope>()), Times.Once);
                statement3.Verify(s => s.Accept(target, It.IsAny<Scope>()), Times.Once);
            }