diff --git a/.gitmodules b/.gitmodules index fbbbb71463..3f6a39f50c 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,6 @@ [submodule "vendor/regenerator"] path = vendor/regenerator url = https://github.com/facebook/regenerator +[submodule "vendor/test262"] + path = vendor/test262 + url = https://github.com/tc39/test262 diff --git a/Makefile b/Makefile index 9b490e8c66..d27512973b 100644 --- a/Makefile +++ b/Makefile @@ -37,6 +37,11 @@ test: lint $(MOCHA_CMD) make test-clean +test-simple: + # excludes test262 + export SIMPLE_6TO5_TESTS=1 + make test + test-cov: rm -rf coverage node $(ISTANBUL_CMD) $(MOCHA_CMD) -- diff --git a/test/test262.js b/test/test262.js new file mode 100644 index 0000000000..67e89f092b --- /dev/null +++ b/test/test262.js @@ -0,0 +1,55 @@ +if (process.env.SIMPLE_6TO5_TESTS) return; + +var transform = require("../lib/6to5/transformation/transform"); +var readdir = require("fs-readdir-recursive"); +var path = require("path"); +var fs = require("fs"); +var _ = require("lodash"); + +var test262Loc = __dirname + "/../vendor/test262"; +if (!fs.existsSync(traceurLoc)) { + console.error("No vendor/test262 - run `make bootstrap`"); + process.exit(1); +} + +var read = function (loc) { + return readdir(loc).map(function (filename) { + return path.join(loc, filename); + }); +}; + +var exec = function (loc) { + try { + var file = fs.readFileSync(loc, "utf8"); + + // this normalises syntax and early runtime reference errors + // SyntaxError: var null; + // ReferenceError: 1++; (runtime) + var lazyError = /negative: (\S+)/.test(file); + + var compiled = transform(file, { + filename: loc, + blacklist: ["useStrict"] + }); + + global.eval(compiled); + } catch (err) { + if (err && lazyError && err instanceof SyntaxError) { + return; + } else { + throw err; + } + } +}; + +// harness +var harness = read(test262Loc + "/harness"); +_.each(harness, exec); + +// tests! +var tests = read(test262Loc + "/test"); +_.each(tests, function (loc) { + test(loc, function () { + exec(loc); + }); +}); diff --git a/vendor/test262 b/vendor/test262 new file mode 160000 index 0000000000..d075338699 --- /dev/null +++ b/vendor/test262 @@ -0,0 +1 @@ +Subproject commit d075338699cc8eaf123d5f5491f0d68116ee224a