babel/test/core/kangax.js
2015-03-28 05:38:12 +11:00

76 lines
1.7 KiB
JavaScript

require("./_helper").assertVendor("compat-table");
require("../../polyfill");
var transform = require("../../lib/babel/transformation");
var assert = require("assert");
var data = require("../../vendor/compat-table/data-es6");
var _ = require("lodash");
global.__createIterableObject = function (a, b, c) {
var arr = [a, b, c, ,];
var iterable = {
next: function() {
return { value: arr.shift(), done: arr.length <= 0 };
},
};
iterable[Symbol.iterator] = function(){ return iterable; }
return iterable;
};
var tests = {};
_.each(data.tests, function (test, key) {
if (test.subtests) {
_.extend(tests, test.subtests);
} else {
tests[test.name] = test;
}
});
suite("kangax/compat-table", function () {
for (var key in tests) {
var data = tests[key];
if (data.res._babel !== true) continue;
var exec = data.exec;
var code = exec.toString().match(/[^]*\/\*([^]*)\*\/\}$/)[1];
// eval test
if (_.contains(code, "eval") || _.contains(code, "Function")) continue;
// async test
if (_.contains(code, "function check() {")) continue;
test(key, function () {
code = transform(code, {
filename: key,
blacklist: ["strict"],
optional: ["es6.symbols", "es6.blockScopingTDZ"]
}).code;
code = '"use strict";\n' + code;
var fn;
try {
fn = new Function(code);
} catch (err) {
return;
}
try {
var fn = new Function(code);
assert.ok(fn.call(undefined));
} catch (err) {
if (err.message === "Cannot redefine property: name") {
return;
} else {
throw err;
}
}
});
}
});