Merge branch 'traceur'
This commit is contained in:
@@ -3,7 +3,7 @@ var fs = require("fs");
|
||||
var _ = require("lodash");
|
||||
|
||||
var humanise = function (val) {
|
||||
return val.replace(/-/g, " ");
|
||||
return path.basename(val, path.extname(val)).replace(/-/g, " ");
|
||||
};
|
||||
|
||||
var readFile = exports.readFile = function (filename) {
|
||||
@@ -16,11 +16,11 @@ var readFile = exports.readFile = function (filename) {
|
||||
}
|
||||
};
|
||||
|
||||
exports.get = function (entryName) {
|
||||
exports.get = function (entryName, entryLoc) {
|
||||
if (exports.cache[entryName]) return exports.cache[entryName];
|
||||
|
||||
var suites = [];
|
||||
var entryLoc = __dirname + "/fixtures/" + entryName;
|
||||
var entryLoc = entryLoc || __dirname + "/fixtures/" + entryName;
|
||||
|
||||
_.each(fs.readdirSync(entryLoc), function (suiteName) {
|
||||
if (suiteName[0] === ".") return;
|
||||
@@ -36,8 +36,18 @@ exports.get = function (entryName) {
|
||||
var suiteOptsLoc = suite.filename + "/options.json";
|
||||
if (fs.existsSync(suiteOptsLoc)) suite.options = require(suiteOptsLoc);
|
||||
|
||||
_.each(fs.readdirSync(suite.filename), function (taskName) {
|
||||
var taskDir = suite.filename + "/" + taskName;
|
||||
if (fs.statSync(suite.filename).isFile()) {
|
||||
push(suiteName, suite.filename);
|
||||
} else {
|
||||
_.each(fs.readdirSync(suite.filename), function (taskName) {
|
||||
var taskDir = suite.filename + "/" + taskName;
|
||||
push(taskName, taskDir);
|
||||
});
|
||||
}
|
||||
|
||||
function push(taskName, taskDir) {
|
||||
// tracuer error tests
|
||||
if (taskName.indexOf("Error_") >= 0) return;
|
||||
|
||||
var actualLocAlias = suiteName + "/" + taskName + "/actual.js";
|
||||
var expectLocAlias = suiteName + "/" + taskName + "/expected.js";
|
||||
@@ -49,7 +59,7 @@ exports.get = function (entryName) {
|
||||
|
||||
if (fs.statSync(taskDir).isFile()) {
|
||||
var ext = path.extname(taskDir);
|
||||
if (ext !== ".js") return;
|
||||
if (ext !== ".js" && ext !== ".module.js") return;
|
||||
|
||||
execLoc = taskDir;
|
||||
}
|
||||
@@ -84,6 +94,18 @@ exports.get = function (entryName) {
|
||||
}
|
||||
};
|
||||
|
||||
// traceur checks
|
||||
|
||||
var shouldSkip = function (code) {
|
||||
return code.indexOf("// Error:") >= 0 || code.indexOf("// Skip.") >= 0;
|
||||
};
|
||||
|
||||
if (shouldSkip(test.actual.code) || shouldSkip(test.exec.code)) {
|
||||
return;
|
||||
} else if (test.exec.code.indexOf("// Async.") >= 0) {
|
||||
//test.options.asyncExec = true;
|
||||
}
|
||||
|
||||
suite.tests.push(test);
|
||||
|
||||
var sourceMappingsLoc = taskDir + "/source-mappings.json";
|
||||
@@ -97,7 +119,7 @@ exports.get = function (entryName) {
|
||||
test.options.sourceMap = true;
|
||||
test.sourceMap = require(sourceMap);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
return exports.cache[entryName] = suites;
|
||||
@@ -111,4 +133,5 @@ try {
|
||||
var cache = exports.cache = {};
|
||||
cache.transformation = exports.get("transformation");
|
||||
cache.generation = exports.get("generation");
|
||||
cache.esnext = exports.get("esnext");
|
||||
}
|
||||
|
||||
152
test/_transformation-helper.js
Normal file
152
test/_transformation-helper.js
Normal file
@@ -0,0 +1,152 @@
|
||||
var genHelpers = require("./_generator-helpers");
|
||||
var transform = require("../lib/6to5/transformation/transform");
|
||||
var sourceMap = require("source-map");
|
||||
var Module = require("module");
|
||||
var helper = require("./_helper");
|
||||
var assert = require("assert");
|
||||
var chai = require("chai");
|
||||
var path = require("path");
|
||||
var util = require("../lib/6to5/util");
|
||||
var _ = require("lodash");
|
||||
|
||||
require("../lib/6to5/polyfill");
|
||||
|
||||
global.assertNoOwnProperties = function (obj) {
|
||||
assert.equal(Object.getOwnPropertyNames(obj).length, 0);
|
||||
};
|
||||
|
||||
global.assertArrayEquals = assert.deepEqual;
|
||||
global.assert = chai.assert;
|
||||
global.chai = chai;
|
||||
global.genHelpers = genHelpers;
|
||||
|
||||
// Different Traceur generator message
|
||||
chai.assert._throw = chai.assert.throw;
|
||||
chai.assert.throw = function (fn, msg) {
|
||||
if (msg === '"throw" on executing generator' ||
|
||||
msg === '"next" on executing generator') {
|
||||
msg = "Generator is already running";
|
||||
} else if (msg === "Sent value to newborn generator") {
|
||||
msg = /^attempt to send (.*?) to newborn generator$/;
|
||||
}
|
||||
|
||||
return chai.assert._throw(fn, msg);
|
||||
};
|
||||
|
||||
var run = function (task, done) {
|
||||
var actual = task.actual;
|
||||
var expect = task.expect;
|
||||
var exec = task.exec;
|
||||
var opts = task.options;
|
||||
|
||||
var getOpts = function (self) {
|
||||
return _.merge({
|
||||
filename: self.loc
|
||||
}, opts);
|
||||
};
|
||||
|
||||
var execCode = exec.code;
|
||||
var result;
|
||||
|
||||
if (execCode) {
|
||||
result = transform(execCode, getOpts(exec));
|
||||
execCode = result.code;
|
||||
|
||||
try {
|
||||
var fakeRequire = function (loc) {
|
||||
if (loc === "../../../src/runtime/polyfills/Number.js") {
|
||||
return Number;
|
||||
} else if (loc === "../../../src/runtime/polyfills/Math.js") {
|
||||
return Math;
|
||||
} else {
|
||||
return require(path.resolve(exec.loc, "..", loc));
|
||||
}
|
||||
};
|
||||
|
||||
var fn = new Function("require", "done", execCode);
|
||||
fn.call(global, fakeRequire, chai.assert, done);
|
||||
} catch (err) {
|
||||
err.message = exec.loc + ": " + err.message;
|
||||
err.message += util.codeFrame(execCode);
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
|
||||
var actualCode = actual.code;
|
||||
var expectCode = expect.code;
|
||||
if (!execCode || actualCode) {
|
||||
result = transform(actualCode, getOpts(actual));
|
||||
actualCode = result.code;
|
||||
|
||||
chai.expect(actualCode).to.be.equal(expectCode, actual.loc + " !== " + expect.loc);
|
||||
}
|
||||
|
||||
if (task.sourceMap) {
|
||||
chai.expect(result.map).to.deep.equal(task.sourceMap);
|
||||
}
|
||||
|
||||
if (task.sourceMappings) {
|
||||
var consumer = new sourceMap.SourceMapConsumer(result.map);
|
||||
|
||||
_.each(task.sourceMappings, function (mapping, i) {
|
||||
var expect = mapping.original;
|
||||
|
||||
var actual = consumer.originalPositionFor(mapping.generated);
|
||||
chai.expect({ line: actual.line, column: actual.column }).to.deep.equal(expect);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = function (suiteOpts, taskOpts, dynamicOpts) {
|
||||
taskOpts = taskOpts || {};
|
||||
|
||||
require("6to5/register")(taskOpts);
|
||||
|
||||
_.each(helper.get(suiteOpts.name, suiteOpts.loc), function (testSuite) {
|
||||
if (_.contains(suiteOpts.ignoreSuites, testSuite.title)) return;
|
||||
|
||||
suite(suiteOpts.name + "/" + testSuite.title, function () {
|
||||
_.each(testSuite.tests, function (task) {
|
||||
if (_.contains(suiteOpts.ignoreTasks, task.title) || _.contains(suiteOpts.ignoreTasks, testSuite.title + "/" + task.title)) return;
|
||||
|
||||
var runTest = function (done) {
|
||||
var runTask = function () {
|
||||
try {
|
||||
run(task, done);
|
||||
} catch (err) {
|
||||
if (task.options.after) task.options.after();
|
||||
throw err;
|
||||
}
|
||||
};
|
||||
|
||||
_.extend(task.options, taskOpts);
|
||||
if (dynamicOpts) dynamicOpts(task.options, task);
|
||||
|
||||
var throwMsg = task.options.throws;
|
||||
if (throwMsg) {
|
||||
// internal api doesn't have this option but it's best not to pollute
|
||||
// the options object with useless options
|
||||
delete task.options.throws;
|
||||
|
||||
assert.throws(runTask, function (err) {
|
||||
return throwMsg === true || err.message.indexOf(throwMsg) >= 0;
|
||||
});
|
||||
} else {
|
||||
runTask();
|
||||
}
|
||||
};
|
||||
|
||||
var callback;
|
||||
if (task.options.asyncExec) {
|
||||
callback = runTest;
|
||||
} else {
|
||||
callback = function () {
|
||||
return runTest();
|
||||
};
|
||||
}
|
||||
|
||||
test(task.title, !task.disabled && callback);
|
||||
});
|
||||
});
|
||||
});
|
||||
};
|
||||
5
test/esnext.js
Normal file
5
test/esnext.js
Normal file
@@ -0,0 +1,5 @@
|
||||
if (!process.env.ALL_6TO5_TESTS) return;
|
||||
|
||||
require("./_transformation-helper")({
|
||||
name: "esnext"
|
||||
});
|
||||
@@ -2,6 +2,9 @@
|
||||
|
||||
var _slice = Array.prototype.slice;
|
||||
var _inherits = function (child, parent) {
|
||||
if (typeof parent !== "function" && parent !== null) {
|
||||
throw new TypeError("Super expression must either be null or a function, not " + typeof parent);
|
||||
}
|
||||
child.prototype = Object.create(parent && parent.prototype, {
|
||||
constructor: {
|
||||
value: child,
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
"use strict";
|
||||
|
||||
var _inherits = function (child, parent) {
|
||||
if (typeof parent !== "function" && parent !== null) {
|
||||
throw new TypeError("Super expression must either be null or a function, not " + typeof parent);
|
||||
}
|
||||
child.prototype = Object.create(parent && parent.prototype, {
|
||||
constructor: {
|
||||
value: child,
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
"use strict";
|
||||
|
||||
var _inherits = function (child, parent) {
|
||||
if (typeof parent !== "function" && parent !== null) {
|
||||
throw new TypeError("Super expression must either be null or a function, not " + typeof parent);
|
||||
}
|
||||
child.prototype = Object.create(parent && parent.prototype, {
|
||||
constructor: {
|
||||
value: child,
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
"use strict";
|
||||
|
||||
var _inherits = function (child, parent) {
|
||||
if (typeof parent !== "function" && parent !== null) {
|
||||
throw new TypeError("Super expression must either be null or a function, not " + typeof parent);
|
||||
}
|
||||
child.prototype = Object.create(parent && parent.prototype, {
|
||||
constructor: {
|
||||
value: child,
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
"use strict";
|
||||
|
||||
var _inherits = function (child, parent) {
|
||||
if (typeof parent !== "function" && parent !== null) {
|
||||
throw new TypeError("Super expression must either be null or a function, not " + typeof parent);
|
||||
}
|
||||
child.prototype = Object.create(parent && parent.prototype, {
|
||||
constructor: {
|
||||
value: child,
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
"use strict";
|
||||
|
||||
var _inherits = function (child, parent) {
|
||||
if (typeof parent !== "function" && parent !== null) {
|
||||
throw new TypeError("Super expression must either be null or a function, not " + typeof parent);
|
||||
}
|
||||
child.prototype = Object.create(parent && parent.prototype, {
|
||||
constructor: {
|
||||
value: child,
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
Copyright (c) 2014, Facebook, Inc.
|
||||
All rights reserved.
|
||||
|
||||
This source code is licensed under the BSD-style license found in the
|
||||
https://raw.github.com/facebook/regenerator/master/LICENSE file. An
|
||||
additional grant of patent rights can be found in the PATENTS file in
|
||||
the same directory.
|
||||
@@ -1,24 +0,0 @@
|
||||
function *gen() {
|
||||
var a$0 = 0, a$1 = 1;
|
||||
|
||||
let a = 3;
|
||||
|
||||
{
|
||||
let a = 1;
|
||||
yield a + a$0;
|
||||
}
|
||||
|
||||
{
|
||||
let a = 2;
|
||||
yield a - 1 + a$1;
|
||||
}
|
||||
|
||||
yield a;
|
||||
}
|
||||
|
||||
var g = gen();
|
||||
|
||||
assert.deepEqual(g.next(), { value: 1, done: false });
|
||||
assert.deepEqual(g.next(), { value: 2, done: false });
|
||||
assert.deepEqual(g.next(), { value: 3, done: false });
|
||||
assert.deepEqual(g.next(), { value: void 0, done: true });
|
||||
@@ -1,22 +0,0 @@
|
||||
function *gen() {
|
||||
let arr = [];
|
||||
|
||||
for (let x = 0; x < 3; x++) {
|
||||
let y = x;
|
||||
arr.push(function() { return y; });
|
||||
}
|
||||
|
||||
{
|
||||
let x;
|
||||
while( x = arr.pop() ) {
|
||||
yield x;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var g = gen();
|
||||
|
||||
assert.equal(g.next().value(), 2);
|
||||
assert.equal(g.next().value(), 1);
|
||||
assert.equal(g.next().value(), 0);
|
||||
assert.deepEqual(g.next(), { value: void 0, done: true });
|
||||
@@ -1,15 +0,0 @@
|
||||
function *gen() {
|
||||
try {
|
||||
genHelpers.raise("e1");
|
||||
} catch (e) {
|
||||
yield e;
|
||||
try {
|
||||
genHelpers.raise("e2");
|
||||
} catch (e) {
|
||||
yield e;
|
||||
}
|
||||
yield e;
|
||||
}
|
||||
}
|
||||
|
||||
genHelpers.check(gen(), ["e1", "e2", "e1"]);
|
||||
@@ -1,22 +0,0 @@
|
||||
function *gen(x) {
|
||||
var y = x + 1;
|
||||
try {
|
||||
throw x + 2;
|
||||
} catch (x) {
|
||||
yield x;
|
||||
x += 1;
|
||||
yield x;
|
||||
}
|
||||
yield x;
|
||||
try {
|
||||
throw x + 3;
|
||||
} catch (y) {
|
||||
yield y;
|
||||
y *= 2;
|
||||
yield y;
|
||||
}
|
||||
yield y;
|
||||
}
|
||||
|
||||
genHelpers.check(gen(1), [3, 4, 1, 4, 8, 2]);
|
||||
genHelpers.check(gen(2), [4, 5, 2, 5, 10, 3]);
|
||||
@@ -1,32 +0,0 @@
|
||||
function *gen(x) {
|
||||
try {
|
||||
throw x;
|
||||
} catch (x) {
|
||||
yield x;
|
||||
|
||||
yield (function(x) {
|
||||
return x += 1;
|
||||
}(x + 1));
|
||||
|
||||
yield (function() {
|
||||
var x = arguments[0];
|
||||
return x * 2;
|
||||
}(x + 2));
|
||||
|
||||
yield (function() {
|
||||
function notCalled(x) {
|
||||
throw x;
|
||||
}
|
||||
|
||||
x >>= 1;
|
||||
return x;
|
||||
}());
|
||||
|
||||
yield x -= 1;
|
||||
}
|
||||
|
||||
yield x;
|
||||
}
|
||||
|
||||
genHelpers.check(gen(10), [10, 12, 24, 5, 4, 10]);
|
||||
genHelpers.check(gen(11), [11, 13, 26, 5, 4, 11]);
|
||||
@@ -1,42 +0,0 @@
|
||||
function *gen(n) {
|
||||
var count = 0;
|
||||
|
||||
yield n;
|
||||
|
||||
while (n !== 1) {
|
||||
count += 1;
|
||||
|
||||
if (n % 2) {
|
||||
yield n = n * 3 + 1;
|
||||
} else {
|
||||
yield n >>= 1;
|
||||
}
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
function collatz(n) {
|
||||
var result = [n];
|
||||
|
||||
while (n !== 1) {
|
||||
if (n % 2) {
|
||||
n *= 3;
|
||||
n += 1;
|
||||
} else {
|
||||
n >>= 1;
|
||||
}
|
||||
|
||||
result.push(n);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
var seven = collatz(7);
|
||||
var fiftyTwo = seven.slice(seven.indexOf(52));
|
||||
var eightyTwo = collatz(82);
|
||||
|
||||
genHelpers.check(gen(7), seven, 16);
|
||||
genHelpers.check(gen(52), fiftyTwo, 11);
|
||||
genHelpers.check(gen(82), eightyTwo, 110);
|
||||
@@ -1,11 +0,0 @@
|
||||
function *gen() {
|
||||
return "ALL DONE";
|
||||
}
|
||||
|
||||
var g = gen();
|
||||
|
||||
assert.deepEqual(g.next(), {
|
||||
value: "ALL DONE", done: true
|
||||
});
|
||||
|
||||
genHelpers.assertAlreadyFinished(g);
|
||||
@@ -1,27 +0,0 @@
|
||||
var error = new Error("thrown");
|
||||
|
||||
function *outer(n) {
|
||||
try {
|
||||
yield 0;
|
||||
yield* inner(n);
|
||||
yield 1;
|
||||
} catch (err) {
|
||||
yield err.message;
|
||||
}
|
||||
yield 4;
|
||||
}
|
||||
|
||||
function *inner(n) {
|
||||
while (n --> 0) {
|
||||
try {
|
||||
if (n === 3) {
|
||||
genHelpers.raise(error);
|
||||
}
|
||||
} finally {
|
||||
yield n;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
genHelpers.check(outer(3), [0, 2, 1, 0, 1, 4]);
|
||||
genHelpers.check(outer(5), [0, 4, 3, "thrown", 4]);
|
||||
@@ -1,10 +0,0 @@
|
||||
function *gen(condition) {
|
||||
if (condition) {
|
||||
yield 0;
|
||||
yield* gen(false);
|
||||
yield 1;
|
||||
}
|
||||
}
|
||||
|
||||
genHelpers.check(gen(true), [0, 1]);
|
||||
genHelpers.check(gen(false), []);
|
||||
@@ -1,12 +0,0 @@
|
||||
function *gen(condition) {
|
||||
yield 0;
|
||||
if (condition) {
|
||||
yield 1;
|
||||
yield* gen(false);
|
||||
yield 2;
|
||||
}
|
||||
yield 3;
|
||||
}
|
||||
|
||||
genHelpers.check(gen(true), [0, 1, 0, 3, 2, 3]);
|
||||
genHelpers.check(gen(false), [0, 3]);
|
||||
@@ -1,37 +0,0 @@
|
||||
var count = 0;
|
||||
|
||||
function *gen() {
|
||||
yield* inner();
|
||||
try {
|
||||
yield* inner();
|
||||
} catch (err) {
|
||||
// pass
|
||||
}
|
||||
return yield* inner();
|
||||
}
|
||||
|
||||
function *inner() {
|
||||
return yield count++;
|
||||
}
|
||||
|
||||
var g = gen();
|
||||
|
||||
assert.deepEqual(g.next(), {
|
||||
value: 0,
|
||||
done: false
|
||||
});
|
||||
|
||||
assert.deepEqual(g.next(), {
|
||||
value: 1,
|
||||
done: false
|
||||
});
|
||||
|
||||
assert.deepEqual(g.throw(new Error("lol")), {
|
||||
value: 2,
|
||||
done: false,
|
||||
});
|
||||
|
||||
assert.deepEqual(g.next("sent"), {
|
||||
value: "sent",
|
||||
done: true
|
||||
});
|
||||
@@ -1,15 +0,0 @@
|
||||
function *outer(n) {
|
||||
yield* inner(n << 1);
|
||||
yield "zxcv";
|
||||
}
|
||||
|
||||
function *inner(n) {
|
||||
return yield yield yield n;
|
||||
}
|
||||
|
||||
var g = outer(3);
|
||||
assert.deepEqual(g.next(), { value: 6, done: false });
|
||||
assert.deepEqual(g.next(1), { value: 1, done: false });
|
||||
assert.deepEqual(g.next(2), { value: 2, done: false });
|
||||
assert.deepEqual(g.next(4), { value: "zxcv", done: false });
|
||||
assert.deepEqual(g.next(5), { value: void 0, done: true });
|
||||
@@ -1,18 +0,0 @@
|
||||
function *outer(n) {
|
||||
yield n;
|
||||
yield* middle(n - 1, inner(n + 10));
|
||||
yield n + 1;
|
||||
}
|
||||
|
||||
function *middle(n, plusTen) {
|
||||
yield n;
|
||||
yield* inner(n - 1);
|
||||
yield n + 1;
|
||||
yield* plusTen;
|
||||
}
|
||||
|
||||
function *inner(n) {
|
||||
yield n;
|
||||
}
|
||||
|
||||
genHelpers.check(outer(5), [5, 4, 3, 5, 15, 6]);
|
||||
@@ -1,11 +0,0 @@
|
||||
function *gen() {
|
||||
yield 0;
|
||||
yield* [
|
||||
yield "one",
|
||||
yield "two",
|
||||
yield "three"
|
||||
];
|
||||
yield 5;
|
||||
}
|
||||
|
||||
genHelpers.check(gen(), [0, "one", "two", "three", 2, 3, 4, 5]);
|
||||
@@ -1,20 +0,0 @@
|
||||
function *gen(x, fname) {
|
||||
try {
|
||||
return fns[fname](x);
|
||||
} catch (thrown) {
|
||||
yield thrown;
|
||||
}
|
||||
}
|
||||
|
||||
var fns = {
|
||||
f: function(x) {
|
||||
throw x;
|
||||
},
|
||||
|
||||
g: function(x) {
|
||||
return x;
|
||||
}
|
||||
};
|
||||
|
||||
genHelpers.check(gen("asdf", "f"), ["asdf"]);
|
||||
genHelpers.check(gen("asdf", "g"), [], "asdf");
|
||||
@@ -1,16 +0,0 @@
|
||||
function *gen(x) {
|
||||
while (x) {
|
||||
// empty while loop
|
||||
}
|
||||
|
||||
do {
|
||||
// empty do-while loop
|
||||
} while (x);
|
||||
|
||||
return gen.toString();
|
||||
}
|
||||
|
||||
var info = gen(false).next();
|
||||
assert.strictEqual(info.done, true);
|
||||
assert.ok(/do \{/.test(info.value));
|
||||
assert.ok(/while \(/.test(info.value));
|
||||
@@ -1,19 +0,0 @@
|
||||
function *gen(obj) {
|
||||
var count = 0;
|
||||
for (var key in (yield "why not", obj)) {
|
||||
if (obj.hasOwnProperty(key)) {
|
||||
if (key === "skip") {
|
||||
break;
|
||||
}
|
||||
count += 1;
|
||||
yield [key, obj[key]];
|
||||
}
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
genHelpers.check(
|
||||
gen({ a: 1, b: 2, skip: 3, c: 4 }),
|
||||
["why not", ["a", 1], ["b", 2]],
|
||||
2
|
||||
);
|
||||
@@ -1,13 +0,0 @@
|
||||
function *gen() {
|
||||
var count = 0;
|
||||
var obj = {foo: 1, bar: 2};
|
||||
for (var key in obj) {
|
||||
assert(obj.hasOwnProperty(key), key + " must be own property");
|
||||
yield [key, obj[key]];
|
||||
delete obj.bar;
|
||||
count += 1;
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
genHelpers.check(gen(), [["foo", 1]], 1);
|
||||
@@ -1,26 +0,0 @@
|
||||
function a(sent) {
|
||||
assert.strictEqual(sent, 1);
|
||||
a.called = true;
|
||||
}
|
||||
|
||||
function b(sent) {
|
||||
assert.strictEqual(sent, 2);
|
||||
b.called = true;
|
||||
return { callee: b };
|
||||
}
|
||||
|
||||
function *gen() {
|
||||
assert.ok(!a.called);
|
||||
assert.ok(!b.called);
|
||||
for (var key in a(yield 0), b(yield 1)) {
|
||||
assert.ok(a.called);
|
||||
assert.ok(b.called);
|
||||
assert.strictEqual(yield key, 3);
|
||||
}
|
||||
|
||||
for (var key in a(1), { foo: "foo", bar: "bar" }) {
|
||||
yield key;
|
||||
}
|
||||
}
|
||||
|
||||
genHelpers.check(gen(), [0, 1, "callee", "foo", "bar"]);
|
||||
@@ -1,12 +0,0 @@
|
||||
function *gen() {
|
||||
var count = 0;
|
||||
var obj = {foo: 1, bar: 2};
|
||||
for (var key in obj) {
|
||||
assert(obj.hasOwnProperty(key), key + " must be own property");
|
||||
yield [key, obj[key]];
|
||||
count += 1;
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
genHelpers.check(gen(), [["foo", 1], ["bar", 2]], 2);
|
||||
@@ -1,16 +0,0 @@
|
||||
function *gen() {
|
||||
var count = 0;
|
||||
function Foo() {
|
||||
this.baz = 1
|
||||
}
|
||||
Foo.prototype.bar = 2;
|
||||
|
||||
var foo = new Foo();
|
||||
for (var key in foo) {
|
||||
yield [key, foo[key]];
|
||||
count += 1;
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
genHelpers.check(gen(), [["baz", 1], ["bar", 2]], 2);
|
||||
@@ -1,7 +0,0 @@
|
||||
// https://github.com/facebook/regenerator/issues/103
|
||||
function *range() {
|
||||
for (var i = 0; false; ) {
|
||||
}
|
||||
}
|
||||
|
||||
genHelpers.check(range(), []);
|
||||
@@ -1,5 +0,0 @@
|
||||
var sum = 0;
|
||||
for (var x of [1, 2].concat(3)) {
|
||||
sum += x;
|
||||
}
|
||||
assert.strictEqual(sum, 6);
|
||||
@@ -1,10 +0,0 @@
|
||||
function *range(n) {
|
||||
for (var i = 0; i < n; ++i) {
|
||||
yield i;
|
||||
}
|
||||
}
|
||||
|
||||
var value, values = [];
|
||||
for (value of range(3))
|
||||
values.push(value);
|
||||
assert.deepEqual(values, [0, 1, 2]);
|
||||
@@ -1,45 +0,0 @@
|
||||
function *yieldPermutations(list) {
|
||||
if (list.length < 2) {
|
||||
yield list;
|
||||
return 1;
|
||||
}
|
||||
|
||||
var count = 0;
|
||||
var first = list.slice(0, 1);
|
||||
var genRest = yieldPermutations(list.slice(1));
|
||||
|
||||
for (var perm of genRest) {
|
||||
for (var i = 0; i < list.length; ++i) {
|
||||
var prefix = perm.slice(0, i);
|
||||
var suffix = perm.slice(i);
|
||||
yield prefix.concat(first, suffix);
|
||||
}
|
||||
|
||||
count += i;
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
var count = 0;
|
||||
for (var perm of yieldPermutations([])) {
|
||||
assert.deepEqual(perm, []);
|
||||
++count;
|
||||
}
|
||||
assert.strictEqual(count, 1);
|
||||
|
||||
genHelpers.check(yieldPermutations([1]), [[1]], 1);
|
||||
|
||||
genHelpers.check(yieldPermutations([2, 1]), [
|
||||
[2, 1],
|
||||
[1, 2]
|
||||
], 2);
|
||||
|
||||
genHelpers.check(yieldPermutations([1,3,2]), [
|
||||
[1, 3, 2],
|
||||
[3, 1, 2],
|
||||
[3, 2, 1],
|
||||
[1, 2, 3],
|
||||
[2, 1, 3],
|
||||
[2, 3, 1]
|
||||
], 6);
|
||||
@@ -1,24 +0,0 @@
|
||||
function *gen(n) {
|
||||
yield increment(n);
|
||||
|
||||
function increment(x) {
|
||||
return x + 1;
|
||||
}
|
||||
|
||||
if (n % 2) {
|
||||
yield halve(decrement(n));
|
||||
|
||||
function halve(x) {
|
||||
return x >> 1;
|
||||
}
|
||||
|
||||
function decrement(x) {
|
||||
return x - 1;
|
||||
}
|
||||
}
|
||||
|
||||
yield increment(increment(n));
|
||||
}
|
||||
|
||||
genHelpers.check(gen(3), [4, 1, 5]);
|
||||
genHelpers.check(gen(4), [5, 6]);
|
||||
@@ -1,15 +0,0 @@
|
||||
function *outer(n) {
|
||||
yield 0;
|
||||
assert.ok(regeneratorRuntime.isGeneratorFunction(inner));
|
||||
return yield* inner(n);
|
||||
|
||||
// Note that this function declaration comes after everything else
|
||||
// in the outer function, but needs to be fully available above.
|
||||
function *inner(n) {
|
||||
yield n - 1;
|
||||
yield n;
|
||||
return yield n + 1;
|
||||
}
|
||||
}
|
||||
|
||||
genHelpers.check(outer(2), [0, 1, 2, 3], 4);
|
||||
@@ -1,6 +0,0 @@
|
||||
genHelpers.check(function *(x, y) {
|
||||
yield x;
|
||||
yield y;
|
||||
yield x + y;
|
||||
return x * y;
|
||||
}(3, 7), [3, 7, 10], 21);
|
||||
@@ -1,60 +0,0 @@
|
||||
|
||||
var GeneratorFunctionPrototype = f.__proto__;
|
||||
var GeneratorFunction = GeneratorFunctionPrototype.constructor;
|
||||
|
||||
assert.strictEqual(GeneratorFunction.name, 'GeneratorFunction');
|
||||
assert.strictEqual(GeneratorFunction.prototype,
|
||||
GeneratorFunctionPrototype);
|
||||
assert.strictEqual(GeneratorFunctionPrototype.prototype.constructor,
|
||||
GeneratorFunctionPrototype);
|
||||
assert.strictEqual(GeneratorFunctionPrototype.prototype,
|
||||
f.prototype.__proto__);
|
||||
assert.strictEqual(GeneratorFunctionPrototype.__proto__,
|
||||
Function.prototype);
|
||||
assert.strictEqual(GeneratorFunctionPrototype.name,
|
||||
"GeneratorFunctionPrototype");
|
||||
|
||||
assert.strictEqual(typeof f2, "function");
|
||||
assert.strictEqual(f2.constructor, GeneratorFunction);
|
||||
assert.ok(f2 instanceof GeneratorFunction);
|
||||
assert.strictEqual(f2.name, "f2");
|
||||
|
||||
var g = f();
|
||||
assert.ok(g instanceof f);
|
||||
assert.strictEqual(g.__proto__, f.prototype);
|
||||
|
||||
assert.deepEqual([], Object.getOwnPropertyNames(f.prototype));
|
||||
// assert.deepEqual([], Object.getOwnPropertyNames(g));
|
||||
|
||||
f.prototype.x = 42;
|
||||
|
||||
var g2 = f();
|
||||
assert.strictEqual(g2.x, 42);
|
||||
|
||||
var g3 = new f();
|
||||
assert.strictEqual(g3.x, 42);
|
||||
|
||||
function* f2() {
|
||||
yield 1;
|
||||
}
|
||||
|
||||
assert.strictEqual(f.__proto__, f2.__proto__);
|
||||
assert.strictEqual(f.hasOwnProperty('constructor'), false);
|
||||
assert.strictEqual(f.__proto__.constructor.name, 'GeneratorFunction');
|
||||
|
||||
// Intentionally at the end to test hoisting.
|
||||
function* f() {
|
||||
yield this;
|
||||
}
|
||||
|
||||
function* f() {
|
||||
yield 1;
|
||||
}
|
||||
|
||||
var f2 = f;
|
||||
f = 42;
|
||||
var g = f2();
|
||||
|
||||
assert.deepEqual(g.next(), { value: 1, done: false });
|
||||
assert.deepEqual(g.next(), { value: void 0, done: true });
|
||||
assert.ok(g instanceof f2);
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user