Add AsyncFromSyncIterator tests

This commit is contained in:
Alexey Shvayka 2020-05-27 12:33:01 +03:00 committed by Rick Waldron
parent 7f53ea671c
commit 02013fd1d6
2 changed files with 115 additions and 0 deletions

View File

@ -0,0 +1,53 @@
// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-%asyncfromsynciteratorprototype%.return
description: >
If syncIterator's "return" method is `null`,
a Promise resolved with `undefined` value is returned.
info: |
%AsyncFromSyncIteratorPrototype%.return ( value )
[...]
5. Let return be GetMethod(syncIterator, "return").
[...]
7. If return is undefined, then
a. Let iterResult be ! CreateIterResultObject(value, true).
b. Perform ! Call(promiseCapability.[[Resolve]], undefined, « iterResult »).
c. Return promiseCapability.[[Promise]].
GetMethod ( V, P )
[...]
2. Let func be ? GetV(V, P).
3. If func is either undefined or null, return undefined.
flags: [async]
features: [async-iteration]
---*/
var iterationCount = 0;
var returnGets = 0;
var syncIterator = {
[Symbol.iterator]() {
return this;
},
next() {
return {value: 1, done: false};
},
get return() {
returnGets += 1;
return null;
},
};
(async function() {
for await (let _ of syncIterator) {
iterationCount += 1;
break;
}
assert.sameValue(iterationCount, 1);
assert.sameValue(returnGets, 1);
}()).then($DONE, $DONE);

View File

@ -0,0 +1,62 @@
// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-%asyncfromsynciteratorprototype%.throw
description: >
If syncIterator's "throw" method is `null`,
a Promise rejected with provided value is returned.
info: |
%AsyncFromSyncIteratorPrototype%.throw ( value )
[...]
5. Let throw be GetMethod(syncIterator, "throw").
[...]
7. If throw is undefined, then
a. Perform ! Call(promiseCapability.[[Reject]], undefined, « value »).
b. Return promiseCapability.[[Promise]].
GetMethod ( V, P )
[...]
2. Let func be ? GetV(V, P).
3. If func is either undefined or null, return undefined.
flags: [async]
features: [async-iteration]
---*/
var throwGets = 0;
var syncIterator = {
[Symbol.iterator]() {
return this;
},
next() {
return {value: 1, done: false};
},
get throw() {
throwGets += 1;
return null;
},
};
async function* asyncGenerator() {
yield* syncIterator;
}
var asyncIterator = asyncGenerator();
asyncIterator.next().then(function() {
var thrownError = { name: "err" };
asyncIterator.throw(thrownError).then(
function(result) {
throw new Test262Error("Promise should be rejected, got: " + result.value);
},
function(err) {
assert.sameValue(err, thrownError);
asyncIterator.next().then(function(result) {
assert.sameValue(result.value, undefined);
assert.sameValue(result.done, true);
}).then($DONE, $DONE);
}
).catch($DONE);
}).catch($DONE);