babel/test/types.js
2015-03-02 01:28:17 +11:00

89 lines
2.1 KiB
JavaScript

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 () {
});
});