From 5ea57d5e9cb1c049fba142930ba3acde9cc473c2 Mon Sep 17 00:00:00 2001 From: Henry Zhu Date: Mon, 26 Sep 2016 22:20:13 -0400 Subject: [PATCH] fix tests and add exec test --- .../src/transformation/file/index.js | 4 +-- packages/babel-generator/src/index.js | 2 +- .../src/index.js | 16 ++++++++++-- .../async-generators/declaration/expected.js | 5 ++-- .../async-generators/expression/expected.js | 4 +-- .../async-generators/yield-star/expected.js | 5 ++-- .../for-await/async-function/expected.js | 5 ++-- .../for-await/async-generator-exec/exec.js | 26 +++++++++++++++++++ .../async-generator-exec/options.json | 11 ++++++++ .../for-await/async-generator/expected.js | 5 ++-- .../for-await/destructuring/expected.js | 5 ++-- .../test/fixtures/for-await/options.json | 2 +- .../nested/arrows-in-declaration/expected.js | 5 ++-- .../nested/async-in-params/expected.js | 5 ++-- .../nested/generator-in-async/expected.js | 10 ++++--- 15 files changed, 84 insertions(+), 26 deletions(-) create mode 100644 packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-generator-exec/exec.js create mode 100644 packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-generator-exec/options.json diff --git a/packages/babel-core/src/transformation/file/index.js b/packages/babel-core/src/transformation/file/index.js index 793d850adf..617fde6b1d 100644 --- a/packages/babel-core/src/transformation/file/index.js +++ b/packages/babel-core/src/transformation/file/index.js @@ -414,7 +414,7 @@ export default class File extends Store { parse(code: string) { let parseCode = parse; - let parserOpts = this.opts.parserOpts || this.parserOpts; + let parserOpts = this.opts.parserOpts; if (parserOpts) { parserOpts = Object.assign({}, this.parserOpts, parserOpts); @@ -441,7 +441,7 @@ export default class File extends Store { } this.log.debug("Parse start"); - let ast = parseCode(code, parserOpts); + let ast = parseCode(code, parserOpts || this.parserOpts); this.log.debug("Parse stop"); return ast; } diff --git a/packages/babel-generator/src/index.js b/packages/babel-generator/src/index.js index 098a343256..ad6fee5724 100644 --- a/packages/babel-generator/src/index.js +++ b/packages/babel-generator/src/index.js @@ -122,7 +122,7 @@ function findCommonStringDelimiter(code, tokens) { if (occurences.single > occurences.double) { return "single"; } else { - return DEFAULT_STRING_DELIMITER; + return "double"; } } diff --git a/packages/babel-helper-transform-fixture-test-runner/src/index.js b/packages/babel-helper-transform-fixture-test-runner/src/index.js index 766d3424d3..f1361482ff 100644 --- a/packages/babel-helper-transform-fixture-test-runner/src/index.js +++ b/packages/babel-helper-transform-fixture-test-runner/src/index.js @@ -47,6 +47,7 @@ function run(task) { let execCode = exec.code; let result; + let resultExec; if (execCode) { let execOpts = getOpts(exec); @@ -54,7 +55,7 @@ function run(task) { execCode = result.code; try { - runExec(execOpts, execCode); + resultExec = runExec(execOpts, execCode); } catch (err) { err.message = exec.loc + ": " + err.message; err.message += codeFrame(execCode); @@ -90,6 +91,10 @@ function run(task) { chai.expect({ line: expect.line, column: expect.column }).to.deep.equal(actual); }); } + + if (execCode && resultExec) { + return resultExec; + } } function runExec(opts, execCode) { @@ -151,7 +156,14 @@ export default function ( return throwMsg === true || err.message.indexOf(throwMsg) >= 0; }); } else { - runTask(); + if (task.exec.code) { + let result = run(task); + if (result && typeof result.then === "function") { + return result; + } + } else { + runTask(); + } } }); } diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/async-generators/declaration/expected.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/async-generators/declaration/expected.js index 601b960323..20293ae9a0 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/async-generators/declaration/expected.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/async-generators/declaration/expected.js @@ -1,11 +1,12 @@ let agf = (() => { - var ref = babelHelpers.asyncGenerator.wrap(function* () { + var _ref = babelHelpers.asyncGenerator.wrap(function* () { this; yield babelHelpers.asyncGenerator.await(1); yield 2; return 3; }); + return function agf() { - return ref.apply(this, arguments); + return _ref.apply(this, arguments); }; })(); diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/async-generators/expression/expected.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/async-generators/expression/expected.js index e28863c78a..551b495d20 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/async-generators/expression/expected.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/async-generators/expression/expected.js @@ -1,5 +1,5 @@ (() => { - var ref = babelHelpers.asyncGenerator.wrap(function* () { + var _ref = babelHelpers.asyncGenerator.wrap(function* () { this; yield babelHelpers.asyncGenerator.await(1); yield 2; @@ -7,7 +7,7 @@ }); function agf() { - return ref.apply(this, arguments); + return _ref.apply(this, arguments); } return agf; diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/async-generators/yield-star/expected.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/async-generators/yield-star/expected.js index f8fc4eeaad..153b55cf29 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/async-generators/yield-star/expected.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/async-generators/yield-star/expected.js @@ -1,9 +1,10 @@ let g = (() => { - var ref = babelHelpers.asyncGenerator.wrap(function* () { + var _ref = babelHelpers.asyncGenerator.wrap(function* () { yield* babelHelpers.asyncGeneratorDelegate(babelHelpers.asyncIterator([1, 2, 3]), babelHelpers.asyncGenerator.await); yield* babelHelpers.asyncGeneratorDelegate(babelHelpers.asyncIterator(iterable), babelHelpers.asyncGenerator.await); }); + return function g() { - return ref.apply(this, arguments); + return _ref.apply(this, arguments); }; })(); diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-function/expected.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-function/expected.js index ad3d17208f..432fe03b12 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-function/expected.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-function/expected.js @@ -1,5 +1,5 @@ let f = (() => { - var ref = babelHelpers.asyncToGenerator(function* () { + var _ref = babelHelpers.asyncToGenerator(function* () { var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; @@ -25,7 +25,8 @@ let f = (() => { } } }); + return function f() { - return ref.apply(this, arguments); + return _ref.apply(this, arguments); }; })(); diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-generator-exec/exec.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-generator-exec/exec.js new file mode 100644 index 0000000000..3cf76d12ef --- /dev/null +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-generator-exec/exec.js @@ -0,0 +1,26 @@ +"use strict"; + +async function* genAnswers() { + var stream = [ Promise.resolve(4), Promise.resolve(9), Promise.resolve(12) ]; + var total = 0; + for await (let val of stream) { + total += await val; + yield total; + } +} + +function forEach(ai, fn) { + return ai.next().then(function (r) { + if (!r.done) { + fn(r); + return forEach(ai, fn); + } + }); +} + +var output = 0; +return forEach(genAnswers(), function(val) { output += val.value }) +.then(function () { + assert.equal(output, 42); +}); + diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-generator-exec/options.json b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-generator-exec/options.json new file mode 100644 index 0000000000..1130726a1c --- /dev/null +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-generator-exec/options.json @@ -0,0 +1,11 @@ +{ + "plugins": [ + "external-helpers", + "transform-async-to-generator", + "transform-async-generator-functions" + ], + "presets": ["es2015"], + "parserOpts": { + "allowReturnOutsideFunction": true + } +} diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-generator/expected.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-generator/expected.js index a7909972cb..cb749b1f40 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-generator/expected.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-generator/expected.js @@ -1,5 +1,5 @@ let g = (() => { - var ref = babelHelpers.asyncGenerator.wrap(function* () { + var _ref = babelHelpers.asyncGenerator.wrap(function* () { var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; @@ -25,7 +25,8 @@ let g = (() => { } } }); + return function g() { - return ref.apply(this, arguments); + return _ref.apply(this, arguments); }; })(); diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/destructuring/expected.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/destructuring/expected.js index 1019484706..d65b4e8c71 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/destructuring/expected.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/destructuring/expected.js @@ -1,5 +1,5 @@ let f = (() => { - var ref = babelHelpers.asyncToGenerator(function* () { + var _ref = babelHelpers.asyncToGenerator(function* () { var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; @@ -25,7 +25,8 @@ let f = (() => { } } }); + return function f() { - return ref.apply(this, arguments); + return _ref.apply(this, arguments); }; })(); diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/options.json b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/options.json index fb37d724a8..3fa0c29078 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/options.json +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/options.json @@ -1,7 +1,7 @@ { "plugins": [ "external-helpers", - "transform-async-to-generator", + "transform-async-to-generator", "transform-async-generator-functions" ] } diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/nested/arrows-in-declaration/expected.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/nested/arrows-in-declaration/expected.js index 2c8fd3d2d3..23d3264481 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/nested/arrows-in-declaration/expected.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/nested/arrows-in-declaration/expected.js @@ -1,5 +1,5 @@ let g = (() => { - var ref = babelHelpers.asyncGenerator.wrap(function* () { + var _ref = babelHelpers.asyncGenerator.wrap(function* () { var _this = this; (function () { @@ -14,7 +14,8 @@ let g = (() => { }); yield babelHelpers.asyncGenerator.await(1); }); + return function g() { - return ref.apply(this, arguments); + return _ref.apply(this, arguments); }; })(); diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/nested/async-in-params/expected.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/nested/async-in-params/expected.js index be6fbdee9e..4ad05ddcfa 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/nested/async-in-params/expected.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/nested/async-in-params/expected.js @@ -1,11 +1,12 @@ let g = (() => { - var ref = babelHelpers.asyncGenerator.wrap(function* (x = babelHelpers.asyncToGenerator(function* () { + var _ref = babelHelpers.asyncGenerator.wrap(function* (x = babelHelpers.asyncToGenerator(function* () { yield 1; })) { yield babelHelpers.asyncGenerator.await(2); yield 3; }); + return function g(_x) { - return ref.apply(this, arguments); + return _ref.apply(this, arguments); }; })(); diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/nested/generator-in-async/expected.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/nested/generator-in-async/expected.js index 08b98dd771..77d601e920 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/nested/generator-in-async/expected.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/nested/generator-in-async/expected.js @@ -1,18 +1,20 @@ let f = (() => { - var ref = babelHelpers.asyncToGenerator(function* () { + var _ref = babelHelpers.asyncToGenerator(function* () { let g = (() => { - var ref = babelHelpers.asyncGenerator.wrap(function* () { + var _ref2 = babelHelpers.asyncGenerator.wrap(function* () { yield babelHelpers.asyncGenerator.await(2); yield 3; }); + return function g() { - return ref.apply(this, arguments); + return _ref2.apply(this, arguments); }; })(); yield 1; }); + return function f() { - return ref.apply(this, arguments); + return _ref.apply(this, arguments); }; })();