public void AllowStringEqualityAndInequalityComparison(string op)
        {
            var left = new StringLiteral ("foobar");
            var right = new StringLiteral ("baz");
            var compared = new BinaryOperation (op, left, right);

            var type = compared.Walk (new TypeChecker ());

            Assert.AreEqual (SpecType.Boolean, type.Type);
        }
        public void AllowBooleanEqualityComparison(string op)
        {
            var left = new BooleanLiteral (true);
            var right = new BooleanLiteral (false);
            var compared = new BinaryOperation (op, left, right);

            var type = compared.Walk (new TypeChecker ());

            Assert.AreEqual (SpecType.Boolean, type.Type);
        }
示例#3
0
        public void SerializeBinaryOperation(string op)
        {
            var binaryNode = new BinaryOperation (op,
                new NumberLiteral (1),
                new NumberLiteral (2)
            );

            var binarySql = binaryNode.Walk (new Sqlizer (foobarTable()));

            var expected = String.Format ("(1 {0} 2)", op);
            Assert.AreEqual (expected, binarySql);
        }
        public void AllowNullEqualityComparison(string op)
        {
            var nullVal = new NullLiteral ();
            var numberVal = new NumberLiteral (42);

            var left = new BinaryOperation (op, nullVal, numberVal);
            var right = new BinaryOperation (op, numberVal, nullVal);

            var leftType = left.Walk (new TypeChecker ());
            var rightType = right.Walk (new TypeChecker ());

            Assert.AreEqual (SpecType.Boolean, leftType.Type);
            Assert.AreEqual (SpecType.Boolean, rightType.Type);
        }
        public void CheckOperatorDoesNothing()
        {
            var str = new StringLiteral ("baz");
            var nullNode = new NullLiteral ();
            var operation = new BinaryOperation ("=", str, nullNode);

            var result = operation.Walk (new RefChecker (), new [] { "Foobar" });

            Assert.AreEqual (1, result.Length);
            Assert.Contains ("Foobar", result);
        }
        public void CheckBinaryOperations(string op, SpecType expected)
        {
            var binary = new BinaryOperation (op, new NumberLiteral (1), new NumberLiteral (2));

            var type = binary.Walk (new TypeChecker ());

            Assert.AreEqual (expected, type.Type);
        }
        public void ErrorOnTypeMismatch()
        {
            var differentTypes = new BinaryOperation ("=", new NumberLiteral (1), new StringLiteral ("foobar"));

            var ex = Assert.Throws<TypeCheckException> (() => differentTypes.Walk (new TypeChecker ()));

            Assert.That (INCOMPATIBLE_RE.IsMatch (ex.Message));
        }
        public void ErrorOnStringArithmetric(string op)
        {
            var numberVal = new NumberLiteral (42);
            var stringVal = new StringLiteral ("qux");

            var left = new BinaryOperation (op, stringVal, numberVal);
            var right = new BinaryOperation (op, numberVal, stringVal);

            var leftEx = Assert.Throws<TypeCheckException> (() => left.Walk (new TypeChecker ()));
            var rightEx = Assert.Throws<TypeCheckException> (() => right.Walk (new TypeChecker ()));

            Assert.That (INVALID_RE.IsMatch (leftEx.Message));
            Assert.That (INVALID_RE.IsMatch (rightEx.Message));
        }
        public void ErrorOnNullInequalityComparison(string op)
        {
            var nullVal = new NullLiteral ();
            var numberVal = new NumberLiteral (42);

            var left = new BinaryOperation (op, nullVal, numberVal);
            var right = new BinaryOperation (op, numberVal, nullVal);

            var leftEx = Assert.Throws<TypeCheckException> (() => left.Walk (new TypeChecker ()));
            var rightEx = Assert.Throws<TypeCheckException> (() => right.Walk (new TypeChecker ()));

            Assert.That (INVALID_RE.IsMatch (leftEx.Message));
            Assert.That (INVALID_RE.IsMatch (rightEx.Message));
        }
        public void ErrorOnBooleanInequalityComparison(string op)
        {
            var left = new BooleanLiteral (true);
            var right = new BooleanLiteral (false);
            var compared = new BinaryOperation (op, left, right);

            var ex = Assert.Throws<TypeCheckException> (() => compared.Walk (new TypeChecker ()));

            Assert.That (INVALID_RE.IsMatch (ex.Message));
        }
        public void ErrorOnBooleanArithmetic(string op)
        {
            var numberVal = new NumberLiteral (42);
            var boolVal = new BooleanLiteral (false);

            var left = new BinaryOperation (op, boolVal, numberVal);
            var right = new BinaryOperation (op, numberVal, boolVal);

            var leftEx = Assert.Throws<TypeCheckException> (() => left.Walk (new TypeChecker ()));
            var rightEx = Assert.Throws<TypeCheckException> (() => right.Walk (new TypeChecker ()));

            Assert.That (INVALID_RE.IsMatch (leftEx.Message));
            Assert.That (INVALID_RE.IsMatch (rightEx.Message));
        }