76 lines
1.3 KiB
JavaScript
76 lines
1.3 KiB
JavaScript
// Async.
|
|
// Options: --async-functions --for-on
|
|
|
|
import {AsyncGeneratorFunction} from './resources/observable.js';
|
|
|
|
var o1 = new AsyncGeneratorFunction(function* () {
|
|
// TODO(mnieper): As soon as proper async generators are implemented, they
|
|
// should be used here.
|
|
yield 1;
|
|
yield 2;
|
|
yield 3;
|
|
return 4;
|
|
});
|
|
|
|
(async function () {
|
|
|
|
// test for on
|
|
var squares = [];
|
|
for (var i on o1) {
|
|
squares.push(i * i);
|
|
}
|
|
assert.deepEqual(squares, [1, 4, 9]);
|
|
|
|
// test break
|
|
var cubes = [];
|
|
for (var i on o1) {
|
|
if (i > 2) {
|
|
break;
|
|
}
|
|
cubes.push(i * i * i);
|
|
}
|
|
assert.deepEqual(cubes, [1, 8]);
|
|
|
|
// test continue
|
|
var list = [];
|
|
for (var i on o1) {
|
|
if (i === 2) {
|
|
continue;
|
|
}
|
|
list.push(i);
|
|
}
|
|
assert.deepEqual(list, [1, 3]);
|
|
|
|
// test outer continue
|
|
var almostEmpty = [];
|
|
label: do {
|
|
for (var i on o1) {
|
|
if (i === 2) {
|
|
continue label;
|
|
}
|
|
almostEmpty.push(i);
|
|
}
|
|
} while (false);
|
|
assert.deepEqual(almostEmpty, [1]);
|
|
|
|
// test return
|
|
var value = await (async function () {
|
|
for (var i on o1) {
|
|
if (i === 1) {
|
|
return 42;
|
|
}
|
|
}
|
|
})();
|
|
assert.equal(value, 42);
|
|
|
|
// test asynchronous loop body
|
|
var sum = 0;
|
|
for (var i on o1) {
|
|
sum += i;
|
|
await Promise.resolve();
|
|
}
|
|
assert.equal(sum, 6);
|
|
|
|
done();
|
|
}()).catch(done);
|