From fb61e9274af8ef328ed0ebcd0fdc510b0dbf6a46 Mon Sep 17 00:00:00 2001 From: davidot Date: Wed, 31 Aug 2022 17:41:41 +0200 Subject: [PATCH] LibJS: Call resolve instead of reject in AsyncFromSyncIteratorPrototype --- .../AsyncFromSyncIteratorPrototype.cpp | 2 +- .../LibJS/Tests/loops/for-await-of.js | 24 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/Userland/Libraries/LibJS/Runtime/AsyncFromSyncIteratorPrototype.cpp b/Userland/Libraries/LibJS/Runtime/AsyncFromSyncIteratorPrototype.cpp index 4e71468cfd..83c913d77e 100644 --- a/Userland/Libraries/LibJS/Runtime/AsyncFromSyncIteratorPrototype.cpp +++ b/Userland/Libraries/LibJS/Runtime/AsyncFromSyncIteratorPrototype.cpp @@ -118,7 +118,7 @@ JS_DEFINE_NATIVE_FUNCTION(AsyncFromSyncIteratorPrototype::return_) auto* iter_result = create_iterator_result_object(vm, vm.argument(0), true); // b. Perform ! Call(promiseCapability.[[Resolve]], undefined, « iterResult »). - MUST(call(vm, *promise_capability.reject, js_undefined(), iter_result)); + MUST(call(vm, *promise_capability.resolve, js_undefined(), iter_result)); // c. Return promiseCapability.[[Promise]]. return promise_capability.promise; diff --git a/Userland/Libraries/LibJS/Tests/loops/for-await-of.js b/Userland/Libraries/LibJS/Tests/loops/for-await-of.js index c6e30a15e9..d3bcf12820 100644 --- a/Userland/Libraries/LibJS/Tests/loops/for-await-of.js +++ b/Userland/Libraries/LibJS/Tests/loops/for-await-of.js @@ -44,6 +44,30 @@ describe("basic behavior", () => { expect(loopIterations).toBe(1); expect(rejected).toBeFalse(); }); + + test("can break a for-await-of loop", () => { + var loopIterations = 0; + var rejected = false; + async function f() { + for await (const v of [1, 2, 3]) { + expect(v).toBe(1); + loopIterations++; + break; + } + } + + f().then( + () => { + expect(loopIterations).toBe(1); + }, + () => { + rejected = true; + } + ); + runQueuedPromiseJobs(); + expect(loopIterations).toBe(1); + expect(rejected).toBeFalse(); + }); }); describe("only allowed in async functions", () => {