96 lines
3.2 KiB
JavaScript
96 lines
3.2 KiB
JavaScript
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");
|