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);