diff --git a/test/types.js b/test/types.js index f6fd11acbf..eafc0ebfaf 100644 --- a/test/types.js +++ b/test/types.js @@ -1,9 +1,85 @@ var assert = require("assert"); +var parse = require("../lib/babel/helpers/parse"); var t = require("../lib/babel/types"); suite("types", function () { test("evaluate", function () { + var evaluateAssert = function (code, expect) { + var res = t.evaluate(parse({}, code).program.body[0].expression); + assert.ok(res.confident, "Not confident"); + assert.equal(res.value, expect); + assert.equal(res.value, eval(code)); + }; + // Literal + evaluateAssert("5", 5); + evaluateAssert("true", true); + evaluateAssert("false", false); + evaluateAssert("null", null); + evaluateAssert("'foo'", "foo"); + + // SequenceExpression + evaluateAssert("(false, true)", true); + evaluateAssert("(false, false)", false); + + // Identifier + evaluateAssert("undefined", undefined); + + // ConditionalExpression + evaluateAssert("true ? 'foo' : 'bar'", "foo"); + evaluateAssert("false ? 'foo' : 'bar'", "bar"); + evaluateAssert("'' ? 'foo' : 'bar'", "bar"); + evaluateAssert("'foobar' ? 'foo' : 'bar'", "foo"); + evaluateAssert("5 < 22 ? 'foo' : 'bar'", "foo"); + evaluateAssert("22 < 5 ? 'foo' : 'bar'", "bar"); + + // BinaryExpression - + evaluateAssert("5 - 5", 0); + evaluateAssert("5 - 6", -1); + evaluateAssert("5.5 - 6", -0.5); + + // BinaryExpression + + evaluateAssert("5 + 5", 10); + evaluateAssert("5 + 6", 11); + evaluateAssert("5.5 + 6", 11.5); + evaluateAssert("-5 + 5", 0); + + // BinaryExpression / + + // BinaryExpression * + + // BinaryExpression % + + // BinaryExpression < + + // BinaryExpression > + + // BinaryExpression <= + + // BinaryExpression >= + + // BinaryExpression == + + // BinaryExpression != + + // BinaryExpression === + + // BinaryExpression !== + + // UnaryExpression void + + // UnaryExpression ! + + // UnaryExpression + + + // UnaryExpression - + + // LogicalExpression || + + // LogicalExpression && + evaluateAssert("true && true", true); + evaluateAssert("true && false", false); + evaluateAssert("false && false", false); }); test("evaluateTruthy", function () {