| promise_test(async () => { |
| let inactiveAfterFirstGood = true; |
| |
| const source = new Observable(subscriber => { |
| subscriber.next("good"); |
| inactiveAfterFirstGood = !subscriber.active; |
| subscriber.next("good"); |
| subscriber.next("good"); |
| subscriber.complete(); |
| }); |
| |
| const result = await source.some((value) => value === "good"); |
| |
| assert_true(result, "Promise resolves with true if any value passes the predicate"); |
| |
| assert_true(inactiveAfterFirstGood, |
| "subscriber is inactive after the first value that passes the " + |
| "predicate, because the source was unsubscribed from"); |
| }, "some(): subscriber is inactive after the first value that passes the predicate, because the source was unsubscribed from"); |
| |
| promise_test(async () => { |
| const source = new Observable(subscriber => { |
| subscriber.next("bad"); |
| subscriber.next("bad"); |
| subscriber.next("bad"); |
| subscriber.complete(); |
| }); |
| |
| const result = await source.some((value) => value === "good"); |
| |
| assert_false(result, "some(): Promise resolves with false if no value passes the predicate"); |
| }); |
| |
| promise_test(async () => { |
| const source = new Observable(subscriber => { |
| subscriber.next("bad"); |
| subscriber.next("bad"); |
| subscriber.next("good"); |
| subscriber.complete(); |
| }); |
| |
| const result = await source.some((value) => value === "good"); |
| |
| assert_true(result, "some(): Promise resolves with true if any value passes the predicate"); |
| }); |
| |
| promise_test(async t => { |
| const source = new Observable(subscriber => { |
| subscriber.next("not used"); |
| }); |
| |
| const error = new Error("thrown from predicate"); |
| promise_rejects_exactly(t, error, source.some(() => {throw error}), |
| "The returned promise rejects with an error if the predicate errors"); |
| }, "some(): The returned promise rejects with an error if the predicate errors"); |
| |
| promise_test(async t => { |
| const error = new Error("error from source"); |
| const source = new Observable(subscriber => { |
| subscriber.error(error); |
| }); |
| |
| promise_rejects_exactly(t, error, source.some(() => true), |
| "The returned promise rejects with an error if the source observable errors"); |
| }, "some(): The returned promise rejects with an error if the source observable errors"); |
| |
| promise_test(async () => { |
| const source = new Observable(subscriber => { |
| subscriber.complete(); |
| }); |
| |
| const result = await source.some(() => true); |
| |
| assert_false(result, |
| "The returned promise resolves as false if the source observable " + |
| "completes without emitting a value"); |
| }, "some(): The returned promise resolves as false if the source observable " + |
| "completes without emitting a value"); |
| |
| promise_test(async t => { |
| let teardownCalled = false; |
| const source = new Observable(subscriber => { |
| subscriber.addTeardown(() => { |
| teardownCalled = true; |
| }); |
| }); |
| |
| const controller = new AbortController(); |
| const promise = source.some(() => true, { signal: controller.signal }); |
| |
| controller.abort(); |
| |
| promise_rejects_dom(t, 'AbortError', promise); |
| assert_true(teardownCalled, |
| "The teardown function is called when the signal is aborted"); |
| }, "some(): The return promise rejects with a DOMException if the signal is aborted"); |