summaryrefslogtreecommitdiffstats
path: root/js/src/tests/test262/built-ins/AsyncFromSyncIteratorPrototype/return/return-null.js
blob: 50f94bba85701e0fe9123653d10e2f3eb24a6777 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
// |reftest| async
// 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]
includes: [asyncHelpers.js]
---*/

var iterationCount = 0;
var returnGets = 0;

var syncIterator = {
  [Symbol.iterator]() {
    return this;
  },
  next() {
    return {value: 1, done: false};
  },
  get return() {
    returnGets += 1;
    return null;
  },
};

asyncTest(async function() {
  for await (let _ of syncIterator) {
    iterationCount += 1;
    break;
  }

  assert.sameValue(iterationCount, 1);
  assert.sameValue(returnGets, 1);
});