1/* 2 * Copyright (c) 2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16/* 17 * @tc.name:asyncgenerator 18 * @tc.desc:test asyncgenerator function yield star 19 * @tc.type: FUNC 20 * @tc.require: issueI5NO8G 21 */ 22 23print("asyncgenerator yield star start"); 24var reason = {}; 25var obj = { 26 get [Symbol.iterator]() { 27 throw new Error('it should not get Symbol.iterator'); 28 }, 29 [Symbol.asyncIterator]() { 30 return { 31 next() { 32 return { 33 then() { 34 throw reason; 35 } 36 }; 37 } 38 }; 39 } 40}; 41 42 43 44var callCount = 0; 45 46var gen = async function *() { 47 callCount += 1; 48 yield* obj; 49 throw new Error('abrupt completion closes iter'); 50 51}; 52 53var iter = gen(); 54 55iter.next().then(() => { 56 throw new Error('Promise incorrectly fulfilled.'); 57}, v => { 58 print(v==reason); 59 iter.next().then(({ done, value }) => { 60 print(done); 61 print(value); 62 print("asyncgenerator yield star end"); 63 }); 64}); 65 66print(callCount); 67