// |reftest| async // Copyright 2018 Valerie Young. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- esid: sec-asyncgenerator-prototype-return description: return rejects promise when `this` value not an object info: | AsyncGenerator.prototype.return ( value ) 1. Let generator be the this value. 2. Let completion be Completion{[[Type]]: return, [[Value]]: value, [[Target]]: empty}. 3. Return ! AsyncGeneratorEnqueue(generator, completion). AsyncGeneratorEnqueue ( generator, completion ) ... 3. If Type(generator) is not Object, or if generator does not have an [[AsyncGeneratorState]] internal slot, then a. Let badGeneratorError be a newly created TypeError object. b. Perform ! Call(promiseCapability.[[Reject]], undefined, « badGeneratorError »). c. Return promiseCapability.[[Promise]]. flags: [async] features: [async-iteration] ---*/ async function* g() {} var AsyncGeneratorPrototype = Object.getPrototypeOf(g).prototype; var symbol = Symbol(); var testPromises = [ AsyncGeneratorPrototype.return.call(undefined).then( function () { throw new Test262Error("AsyncGeneratorPrototype.return should reject promise" + " when `this` value `undefined`"); }, function (e) { if (!(e instanceof TypeError)) { throw new Test262Error("(undefined) expected TypeError but got " + e); } } ), AsyncGeneratorPrototype.return.call(1).then( function () { throw new Test262Error("AsyncGeneratorPrototype.return should reject promise" + " when `this` value is a Number"); }, function (e) { if (!(e instanceof TypeError)) { throw new Test262Error("(Number) expected TypeError but got " + e); } } ), AsyncGeneratorPrototype.return.call("string").then( function () { throw new Test262Error("AsyncGeneratorPrototype.return should reject promise" + " when `this` value is a String"); }, function (e) { if (!(e instanceof TypeError)) { throw new Test262Error("(String) expected TypeError but got " + e); } } ), AsyncGeneratorPrototype.return.call(null).then( function () { throw new Test262Error("AsyncGeneratorPrototype.return should reject promise" + " when `this` value `null`"); }, function (e) { if (!(e instanceof TypeError)) { throw new Test262Error("(null) expected TypeError but got " + e); } } ), AsyncGeneratorPrototype.return.call(true).then( function () { throw new Test262Error("AsyncGeneratorPrototype.return should reject promise" + " when `this` value is a Boolean"); }, function (e) { if (!(e instanceof TypeError)) { throw new Test262Error("(Boolean) expected TypeError but got " + e); } } ), AsyncGeneratorPrototype.return.call(symbol).then( function () { throw new Test262Error("AsyncGeneratorPrototype.return should reject promise" + " when `this` value is a Symbol"); }, function (e) { if (!(e instanceof TypeError)) { throw new Test262Error("(Symbol) expected TypeError but got " + e); } } ) ] Promise.all(testPromises).then(() => {}).then($DONE, $DONE)