Ejemplo n.º 1
0
            public void VisitBinaryOperatorTest(object a, object b, Type expressionType, ValueType expectedType)
            {
                var target = new TypeCheckingVisitor();

                var lhs = new ConstantExpr(a);
                var rhs = new ConstantExpr(b);

                var expression = (Expression)Activator.CreateInstance(expressionType, new object[] { lhs, rhs });

                var method =
                    typeof(TypeCheckingVisitor).GetMethods()
                    .First(m => m.Name == "Visit" && m.GetParameters().ElementAt(0).ParameterType == expressionType);

                ValueType actual;

                try
                {
                    actual = (ValueType)method.Invoke(target, new object[] { expression, scope });
                }
                catch (TargetInvocationException ex)
                {
                    throw ex.InnerException;
                }

                Assert.AreEqual(expectedType, actual);
            }
Ejemplo n.º 2
0
        /// <summary>
        /// Parses the date expression.
        /// - Oct 10
        /// - Oct 10 2011
        /// - Oct 10, 2011
        /// - Oct 10th
        /// - Oct 10th 2011
        /// - Oct 10th, 2011
        /// - October 10
        /// - October 10, 2011
        /// - October 10th
        /// - October 10th, 2011
        /// </summary>
        /// <returns></returns>
        public override Expr Parse()
        {
            DateTime date = ParseDate(this);
            Expr     exp  = new ConstantExpr(date);

            return(exp);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Parse the expression.
        /// </summary>
        /// <returns></returns>
        public override Expr Parse()
        {
            var  printToken = _tokenIt.NextToken;
            var  lineToken  = _tokenIt.AdvanceAndGet <Token>();
            Expr lineExp    = null;

            if (lineToken.Kind == TokenKind.Multi)
            {
                lineExp = _parser.ParseInterpolatedExpression(lineToken);
            }
            else
            {
                lineExp = new ConstantExpr(lineToken.Value);
            }

            var exp = new FunctionCallExpr();

            exp.NameExp = new VariableExpr("print");
            exp.ParamListExpressions.Add(lineExp);
            _parser.SetScriptPosition(exp, printToken);

            // Move past this plugin.
            _tokenIt.Advance();
            return(exp);
        }
Ejemplo n.º 4
0
        void IsConstant(Expr e, object o)
        {
            Assert.That(e is ConstantExpr);
            ConstantExpr c = e as ConstantExpr;

            Assert.That(c.Value, Is.EqualTo(o));
        }
Ejemplo n.º 5
0
        void IsConstant(Expr e, object o)
        {
            e.Should().BeOfType <ConstantExpr>();
            ConstantExpr c = e as ConstantExpr;

            c.Value.Should().Be(o);
        }
        public ConditionalExpr MakeCondition(bool condition, int valueTrue, int valueFalse)
        {
            var conditionExpression = new ConstantExpr(condition);
            var trueExpression = new ConstantExpr(valueTrue);
            var falseExpression = new ConstantExpr(valueFalse);

            return new ConditionalExpr(conditionExpression, trueExpression, falseExpression);
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Creates a variable expression with symbol scope, context, script refernce set.
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        public static Expr Const(LObject obj, TokenData token)
        {
            var exp = new ConstantExpr();

            exp.Value = obj;
            SetupContext(exp, token);
            return(exp);
        }
        public ConditionalExpr MakeCondition(bool condition, int valueTrue, int valueFalse)
        {
            var conditionExpression = new ConstantExpr(condition);
            var trueExpression      = new ConstantExpr(valueTrue);
            var falseExpression     = new ConstantExpr(valueFalse);

            return(new ConditionalExpr(conditionExpression, trueExpression, falseExpression));
        }
Ejemplo n.º 9
0
        public void AcceptMethodCallsVisitOnVisitorWithThis()
        {
            var target = new ConstantExpr(1357);
            var visitor = new Mock<IExpressionVisitor<string, int>>();

            target.Accept(visitor.Object, 0);

            visitor.Verify(x => x.Visit(target, 0), Times.Once);
        }
Ejemplo n.º 10
0
            public void LeftPropertyReturnsPassedLhsInstance()
            {
                var lhs = new ConstantExpr(1);
                var rhs = new ConstantExpr(2);

                var target = new MultExpr(lhs, rhs);

                Assert.AreSame(lhs, target.Left);
            }
Ejemplo n.º 11
0
            public void RightPropertyReturnsPassedRhsInstance()
            {
                var lhs = new ConstantExpr(1);
                var rhs = new ConstantExpr(2);

                var target = new MinusExpr(lhs, rhs);

                Assert.AreSame(rhs, target.Right);
            }
Ejemplo n.º 12
0
        public virtual bool VisitConstantExpr(ConstantExpr stmt)
        {
            if (!VisitFullExpr(stmt))
            {
                return(false);
            }

            return(true);
        }
Ejemplo n.º 13
0
            public void RightPropertyReturnsPassedRhsInstance()
            {
                var lhs = new ConstantExpr(1);
                var rhs = new ConstantExpr(2);

                var target = new DivExpr(lhs, rhs);

                Assert.AreSame(rhs, target.Right);
            }
Ejemplo n.º 14
0
            public void LeftPropertyReturnsPassedLhsInstance()
            {
                var lhs = new ConstantExpr(1);
                var rhs = new ConstantExpr(2);

                var target = new DivExpr(lhs, rhs);

                Assert.AreSame(lhs, target.Left);
            }
Ejemplo n.º 15
0
        public void AcceptMethodCallsVisitOnVisitorWithThis()
        {
            var target  = new ConstantExpr(1357);
            var visitor = new Mock <IExpressionVisitor <string, int> >();

            target.Accept(visitor.Object, 0);

            visitor.Verify(x => x.Visit(target, 0), Times.Once);
        }
Ejemplo n.º 16
0
        public void AcceptMethodCallsOnlyVisitOnVisitorWithThisAndNoOtherVisitMethods()
        {
            var target = new ConstantExpr(1357);
            // throw exception is any other methods called other than the ConstantExpr overload.
            var visitor = new Mock<IExpressionVisitor<string, int>>(MockBehavior.Strict);
            visitor.Setup(x => x.Visit(It.IsAny<ConstantExpr>(), It.IsAny<int>())).Returns("");

            target.Accept(visitor.Object, 0);
        }
 public PExpr Visit( ConstantExpr e )
 {
     if( e.Value == null ) return new PExpr( RuntimeObj.Null );
     if( e.Value is string ) return new PExpr( _global.CreateString( (string)e.Value ) );
     if( e == ConstantExpr.UndefinedExpr ) return new PExpr( RuntimeObj.Undefined );
     if( e.Value is Double ) return new PExpr( _global.CreateNumber( (Double)e.Value ) );
     if( e.Value is Boolean ) return new PExpr( _global.CreateBoolean( (Boolean)e.Value ) );
     return new PExpr( new RuntimeError( e, "Unsupported JS type: " + e.Value.GetType().Name ) );
 }
Ejemplo n.º 18
0
            public void VisitBooleanConstantExpr(bool value)
            {
                var target = new TypeCheckingVisitor();

                var expression = new ConstantExpr(value);

                var actual = target.Visit(expression, scope);

                Assert.AreEqual(ValueType.Boolean, actual);
            }
Ejemplo n.º 19
0
            public void VisitFloatConstantExpr()
            {
                var target = new EvaluateVisitor();

                var expression = new ConstantExpr(12.34);

                var actual = target.Visit(expression, _scope);

                Assert.AreEqual("12.34", actual.ToString());
            }
Ejemplo n.º 20
0
            public void VisitBooleanConstantExpr(bool value)
            {
                var target = new EvaluateVisitor();

                var expression = new ConstantExpr(value);

                var actual = target.Visit(expression, _scope);

                Assert.AreEqual(value.ToString(), actual.ToString());
            }
Ejemplo n.º 21
0
        public void AcceptMethodCallsOnlyVisitOnVisitorWithThisAndNoOtherVisitMethods()
        {
            var target = new ConstantExpr(1357);
            // throw exception is any other methods called other than the ConstantExpr overload.
            var visitor = new Mock <IExpressionVisitor <string, int> >(MockBehavior.Strict);

            visitor.Setup(x => x.Visit(It.IsAny <ConstantExpr>(), It.IsAny <int>())).Returns("");

            target.Accept(visitor.Object, 0);
        }
Ejemplo n.º 22
0
            public void VisitConditionMustBeBooleanType(object condition)
            {
                var target = new TypeCheckingVisitor();

                var conditionExpression = new ConstantExpr(condition);

                var expr = new ConditionalExpr(conditionExpression, new ConstantExpr(0), new ConstantExpr(0));

                target.Visit(expr, scope);
            }
Ejemplo n.º 23
0
            public void VisitIntegerConstantExpr()
            {
                var target = new TypeCheckingVisitor();

                var expression = new ConstantExpr(1234);

                var actual = target.Visit(expression, scope);

                Assert.AreEqual(ValueType.Int, actual);
            }
Ejemplo n.º 24
0
            public void VisitIntegerConstantExpr()
            {
                var target = new PrintVisitor();

                var expression = new ConstantExpr(1234);

                var actual = target.Visit(expression, scope);

                Assert.AreEqual("1234", actual);
            }
            public void ReturnTypePropertyReturnsPassedReturnType()
            {
                var name       = new IdentifierExpr(RandomGenerator.String());
                var arguments  = new VarDefinitionStmt[0];
                var body       = new ConstantExpr(RandomGenerator.Int());
                var returnType = new IdentifierExpr(RandomGenerator.String());

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

                Assert.AreSame(returnType, target.ReturnType);
            }
Ejemplo n.º 26
0
            public void VisitBooleanNotExpr(bool a, string expected)
            {
                var target = new PrintVisitor();

                var aExpression = new ConstantExpr(a);
                var expr        = new NotExpr(aExpression);

                var actual = target.Visit(expr, scope);

                Assert.AreEqual(expected, actual);
            }
            public void ReturnTypePropertyReturnsPassedReturnType()
            {
                var name = new IdentifierExpr(RandomGenerator.String());
                var arguments = new VarDefinitionStmt[0];
                var body = new ConstantExpr(RandomGenerator.Int());
                var returnType = new IdentifierExpr(RandomGenerator.String());

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

                Assert.AreSame(returnType, target.ReturnType);
            }
Ejemplo n.º 28
0
            public void VisitBooleanNotExpr(bool a, bool expected)
            {
                var target = new EvaluateVisitor();

                var aExpression = new ConstantExpr(a);
                var expr        = new NotExpr(aExpression);

                var actual = target.Visit(expr, _scope);

                Assert.AreEqual(expected, actual.ToBoolean());
            }
Ejemplo n.º 29
0
            public void VisitBooleanNotExpr(bool a, ValueType expected)
            {
                var target = new TypeCheckingVisitor();

                var aExpression = new ConstantExpr(a);
                var expr        = new NotExpr(aExpression);

                var actual = target.Visit(expr, scope);

                Assert.AreEqual(expected, actual);
            }
Ejemplo n.º 30
0
            public void VisitBooleanOrExpr(object a, object b, string expected)
            {
                var target = new PrintVisitor();

                var aExpression = new ConstantExpr(a);
                var bExpression = new ConstantExpr(b);
                var expr        = new OrExpr(aExpression, bExpression);

                var actual = target.Visit(expr, scope);

                Assert.AreEqual(expected, actual);
            }
Ejemplo n.º 31
0
            public void VisitPlusWithDoubleAndIntExpr()
            {
                var target = new TypeCheckingVisitor();

                var lhs        = new ConstantExpr(1.1);
                var rhs        = new ConstantExpr(2);
                var expression = new PlusExpr(lhs, rhs);

                var actual = target.Visit(expression, scope);

                Assert.AreEqual(ValueType.Float, actual);
            }
Ejemplo n.º 32
0
            public void VisitDivExpr()
            {
                var target = new EvaluateVisitor();

                var lhs        = new ConstantExpr(10);
                var rhs        = new ConstantExpr(2);
                var expression = new DivExpr(lhs, rhs);

                var actual = target.Visit(expression, _scope);

                Assert.AreEqual("5", actual.ToString());
            }
Ejemplo n.º 33
0
            public void VisitDivExpr()
            {
                var target = new TypeCheckingVisitor();

                var lhs        = new ConstantExpr(10);
                var rhs        = new ConstantExpr(2);
                var expression = new DivExpr(lhs, rhs);

                var actual = target.Visit(expression, scope);

                Assert.AreEqual(ValueType.Int, actual);
            }
Ejemplo n.º 34
0
            public void VisitDivExpr()
            {
                var target = new PrintVisitor();

                var lhs        = new ConstantExpr(1);
                var rhs        = new ConstantExpr(2);
                var expression = new DivExpr(lhs, rhs);

                var actual = target.Visit(expression, scope);

                Assert.AreEqual("1/2", actual);
            }
Ejemplo n.º 35
0
            public void VisitConditionalExpr(bool condition, object thenValue, object elseValue, ValueType expected)
            {
                var target = new TypeCheckingVisitor();

                var conditionExpression = new ConstantExpr(condition);
                var thenExpression      = new ConstantExpr(thenValue);
                var elseExpression      = new ConstantExpr(elseValue);

                var expr = new ConditionalExpr(conditionExpression, thenExpression, elseExpression);

                var actual = target.Visit(expr, scope);

                Assert.AreEqual(expected, actual);
            }
Ejemplo n.º 36
0
            public void VisitConditionalExpr(bool condition, int thenValue, int elseValue, string expected)
            {
                var target = new PrintVisitor();

                var conditionExpression = new ConstantExpr(condition);
                var thenExpression      = new ConstantExpr(thenValue);
                var elseExpression      = new ConstantExpr(elseValue);

                var expr = new ConditionalExpr(conditionExpression, thenExpression, elseExpression);

                var actual = target.Visit(expr, scope);

                Assert.AreEqual(expected, actual);
            }
Ejemplo n.º 37
0
            public void VisitMassEnergyEquavalenceExpressionTree()
            {
                var target = new PrintVisitor();

                var e   = new IdentifierExpr("e");
                var m   = new IdentifierExpr("m");
                var c   = new IdentifierExpr("C");
                var two = new ConstantExpr(2);

                var expression = new AssignmentExpr(e, new MultExpr(m, new PowExpr(c, two)));

                var actual = target.Visit(expression, scope);

                Assert.AreEqual("e=m*C^2", actual);
            }
Ejemplo n.º 38
0
            public void VisitBooleanNotExpr(bool a, bool expected)
            {
                var target = new EvaluateVisitor();

                var aExpression = new ConstantExpr(a);
                var expr = new NotExpr(aExpression);

                var actual = target.Visit(expr, _scope);

                Assert.AreEqual(expected, actual.ToBoolean());
            }
Ejemplo n.º 39
0
 public Expr Constant(ConstantExpr constant)
 {
     return Expr.Zero;
 }
Ejemplo n.º 40
0
            public void VisitBooleanConstantExpr(bool value)
            {
                var target = new EvaluateVisitor();

                var expression = new ConstantExpr(value);

                var actual = target.Visit(expression, _scope);

                Assert.AreEqual(value.ToString(), actual.ToString());
            }
Ejemplo n.º 41
0
            public void VisitBinaryOperatorTest(object a, object b, Type expressionType, ValueType expectedType)
            {
                var target = new TypeCheckingVisitor();

                var lhs = new ConstantExpr(a);
                var rhs = new ConstantExpr(b);

                var expression = (Expression)Activator.CreateInstance(expressionType, new object[] { lhs, rhs });

                var method =
                    typeof(TypeCheckingVisitor).GetMethods()
                        .First(m => m.Name == "Visit" && m.GetParameters().ElementAt(0).ParameterType == expressionType);

                ValueType actual;

                try
                {
                    actual = (ValueType)method.Invoke(target, new object[] { expression, scope });
                }
                catch (TargetInvocationException ex)
                {
                    throw ex.InnerException;
                }

                Assert.AreEqual(expectedType, actual);
            }
Ejemplo n.º 42
0
            public void VisitConditionalExpr(bool condition, object thenValue, object elseValue, ValueType expected)
            {
                var target = new TypeCheckingVisitor();

                var conditionExpression = new ConstantExpr(condition);
                var thenExpression = new ConstantExpr(thenValue);
                var elseExpression = new ConstantExpr(elseValue);

                var expr = new ConditionalExpr(conditionExpression, thenExpression, elseExpression);

                var actual = target.Visit(expr, scope);

                Assert.AreEqual(expected, actual);
            }
Ejemplo n.º 43
0
            public void VisitMathExpressionTree()
            {
                var target = new TypeCheckingVisitor();

                var one = new ConstantExpr(1);
                var two = new ConstantExpr(2);
                var three = new ConstantExpr(3);
                var four = new ConstantExpr(4);
                var five = new ConstantExpr(5);
                var six = new ConstantExpr(6);

                var expr = new DivExpr(new MultExpr(three, six), new MultExpr(new MinusExpr(five, one), new PlusExpr(four, two)));

                var actual = target.Visit(expr, scope);

                Assert.AreEqual(ValueType.Int, actual);
            }
Ejemplo n.º 44
0
            public void VisitPlusWithDoubleAndIntExpr()
            {
                var target = new TypeCheckingVisitor();

                var lhs = new ConstantExpr(1.1);
                var rhs = new ConstantExpr(2);
                var expression = new PlusExpr(lhs, rhs);

                var actual = target.Visit(expression, scope);

                Assert.AreEqual(ValueType.Float, actual);
            }
Ejemplo n.º 45
0
            public void VisitAlgebraicExpressionTree()
            {
                var target = new PrintVisitor();

                var a = new IdentifierExpr("a");
                var b = new IdentifierExpr("b");
                var c = new IdentifierExpr("c");
                var one = new ConstantExpr(1);
                var two = new ConstantExpr(2);
                var three = new ConstantExpr(3);
                var four = new ConstantExpr(4);
                var five = new ConstantExpr(5);
                var six = new ConstantExpr(6);

                var expression = new DivExpr(new MultExpr(three,new MultExpr(a, two)), new MultExpr(new MinusExpr(new PowExpr(five,b), one), new PlusExpr(new MinusExpr(six, four), c)));

                var actual = target.Visit(expression, scope);

                Assert.AreEqual("3*a*2/5^b-1*6-4+c", actual);
            }
Ejemplo n.º 46
0
            public void VisitMathExpressionTree()
            {
                var target = new PrintVisitor();

                var one = new ConstantExpr(1);
                var two = new ConstantExpr(2);
                var three = new ConstantExpr(3);
                var four = new ConstantExpr(4);
                var five = new ConstantExpr(5);
                var six = new ConstantExpr(6);

                var expression = new DivExpr(new MultExpr(three, six), new MultExpr(new MinusExpr(five, one), new PlusExpr(four, two)));

                var actual = target.Visit(expression, scope);

                Assert.AreEqual("3*6/5-1*4+2", actual);
            }
Ejemplo n.º 47
0
            public void VisitDivExpr()
            {
                var target = new PrintVisitor();

                var lhs = new ConstantExpr(1);
                var rhs = new ConstantExpr(2);
                var expression = new DivExpr(lhs, rhs);

                var actual = target.Visit(expression, scope);

                Assert.AreEqual("1/2", actual);
            }
Ejemplo n.º 48
0
            public void VisitMathExpressionUsingFloatingPointDivisionTree()
            {
                var target = new EvaluateVisitor();

                var one = new ConstantExpr(1.0);
                var two = new ConstantExpr(2);
                var three = new ConstantExpr(3);
                var four = new ConstantExpr(4);
                var five = new ConstantExpr(5);
                var six = new ConstantExpr(6);

                var expr = new DivExpr(new MultExpr(three, six), new MultExpr(new MinusExpr(five, one), new PlusExpr(four, two)));

                var actual = target.Visit(expr, _scope);

                Assert.AreEqual("0.75", actual.ToString());
            }
Ejemplo n.º 49
0
            public void VisitDivExpr()
            {
                var target = new EvaluateVisitor();

                var lhs = new ConstantExpr(10);
                var rhs = new ConstantExpr(2);
                var expression = new DivExpr(lhs, rhs);

                var actual = target.Visit(expression, _scope);

                Assert.AreEqual("5", actual.ToString());
            }
Ejemplo n.º 50
0
        public void ValueStoredIsAvailableFromTheValueProperty(object value)
        {
            var target = new ConstantExpr(value);

            Assert.AreSame(value, target.Value);
        }
Ejemplo n.º 51
0
            public void VisitBooleanConstantExpr(bool value)
            {
                var target = new TypeCheckingVisitor();

                var expression = new ConstantExpr(value);

                var actual = target.Visit(expression, scope);

                Assert.AreEqual(ValueType.Boolean, actual);
            }
Ejemplo n.º 52
0
            public void VisitMassEnergyEquavalenceExpressionTree()
            {
                var target = new PrintVisitor();

                var e = new IdentifierExpr("e");
                var m = new IdentifierExpr("m");
                var c = new IdentifierExpr("C");
                var two = new ConstantExpr(2);

                var expression = new AssignmentExpr(e, new MultExpr(m, new PowExpr(c, two)));

                var actual = target.Visit(expression, scope);

                Assert.AreEqual("e=m*C^2", actual);
            }
Ejemplo n.º 53
0
            public void VisitDivExpr()
            {
                var target = new TypeCheckingVisitor();

                var lhs = new ConstantExpr(10);
                var rhs = new ConstantExpr(2);
                var expression = new DivExpr(lhs, rhs);

                var actual = target.Visit(expression, scope);

                Assert.AreEqual(ValueType.Int, actual);
            }
Ejemplo n.º 54
0
            public void VisitBooleanOrExpr(object a, object b, string expected)
            {
                var target = new PrintVisitor();

                var aExpression = new ConstantExpr(a);
                var bExpression = new ConstantExpr(b);
                var expr = new OrExpr(aExpression, bExpression);

                var actual = target.Visit(expr, scope);

                Assert.AreEqual(expected, actual);
            }
Ejemplo n.º 55
0
            public void VisitBooleanNotExpr(bool a, ValueType expected)
            {
                var target = new TypeCheckingVisitor();

                var aExpression = new ConstantExpr(a);
                var expr = new NotExpr(aExpression);

                var actual = target.Visit(expr, scope);

                Assert.AreEqual(expected, actual);
            }
Ejemplo n.º 56
0
            public void VisitBooleanNotExpr(bool a, string expected)
            {
                var target = new PrintVisitor();

                var aExpression = new ConstantExpr(a);
                var expr = new NotExpr(aExpression);

                var actual = target.Visit(expr, scope);

                Assert.AreEqual(expected, actual);
            }
Ejemplo n.º 57
0
            public void VisitConditionMustBeBooleanType(object condition)
            {
                var target = new TypeCheckingVisitor();

                var conditionExpression = new ConstantExpr(condition);

                var expr = new ConditionalExpr(conditionExpression, new ConstantExpr(0), new ConstantExpr(0));

                target.Visit(expr, scope);
            }
Ejemplo n.º 58
0
            public void VisitConditionalExpr(bool condition, int thenValue, int elseValue, string expected)
            {
                var target = new PrintVisitor();

                var conditionExpression = new ConstantExpr(condition);
                var thenExpression = new ConstantExpr(thenValue);
                var elseExpression = new ConstantExpr(elseValue);

                var expr = new ConditionalExpr(conditionExpression, thenExpression, elseExpression);

                var actual = target.Visit(expr, scope);

                Assert.AreEqual(expected, actual);
            }
Ejemplo n.º 59
0
            public void VisitIntegerConstantExpr()
            {
                var target = new TypeCheckingVisitor();

                var expression = new ConstantExpr(1234);

                var actual = target.Visit(expression, scope);

                Assert.AreEqual(ValueType.Int, actual);
            }
Ejemplo n.º 60
0
            public void VisitIntegerConstantExpr()
            {
                var target = new PrintVisitor();

                var expression = new ConstantExpr(1234);

                var actual = target.Visit(expression, scope);

                Assert.AreEqual("1234", actual);
            }