Skip to content

Commit 117bd2d

Browse files
committed
Resync web-platform-tests/dom/observable
https://bugs.webkit.org/show_bug.cgi?id=276708 Reviewed by Tim Nguyen. Upstream commit: web-platform-tests/wpt@c4ba02f * LayoutTests/TestExpectations: * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-constructor.any-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-constructor.any.js: (test.t.source.subscribe.complete): (test.t.source.subscribe.error): (test): * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-constructor.any.worker-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-drop.any-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-drop.any.html: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-drop.any.js: Added. (test): * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-drop.any.worker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-drop.any.worker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-every.any-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-every.any.html: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-every.any.js: Added. (promise_test.async const): (promise_test): (promise_test.async let): (promise_test.async t): (createTestSubject): * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-every.any.worker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-every.any.worker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-filter.any-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-filter.any.html: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-filter.any.js: Added. (test): * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-filter.any.worker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-filter.any.worker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-find.any-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-find.any.html: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-find.any.js: Added. (promise_test.async let): (promise_test): (promise_test.async const): (promise_test.async t): * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-find.any.worker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-find.any.worker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-first.any-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-first.any.html: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-first.any.js: Added. (promise_test.async const): (promise_test): * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-first.any.worker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-first.any.worker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-flatMap.any-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-flatMap.any.html: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-flatMap.any.js: Added. (test): (createTestSubject): * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-flatMap.any.worker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-flatMap.any.worker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-forEach.any-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-forEach.any.html: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-forEach.any.js: Added. (promise_test.async t): * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-forEach.any.worker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-forEach.any.worker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-forEach.window-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-forEach.window.html: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-forEach.window.js: Added. (async loadIframeAndReturnContentWindow): (promise_test.async t): * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-from.any-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-from.any.html: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-from.any.js: Added. (test): (promise_test.async const): (promise_test): (promise_test.async t): * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-from.any.worker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-from.any.worker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-inspect.any-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-inspect.any.html: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-inspect.any.js: Added. (test): * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-inspect.any.worker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-inspect.any.worker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-last.any-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-last.any.html: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-last.any.js: Added. (promise_test.async const): (promise_test): * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-last.any.worker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-last.any.worker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-map.any-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-map.any.html: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-map.any.js: Added. (test): * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-map.any.worker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-map.any.worker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-map.window-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-map.window.html: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-map.window.js: Added. (async loadIframeAndReturnContentWindow): (promise_test.async t): * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-some.any-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-some.any.html: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-some.any.js: Added. (promise_test.async let): (promise_test): (promise_test.async const): (promise_test.async t): * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-some.any.worker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-some.any.worker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-switchMap.any-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-switchMap.any.html: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-switchMap.any.js: Added. (test): (createTestSubject): * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-switchMap.any.worker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-switchMap.any.worker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-take.any-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-take.any.html: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-take.any.js: Added. (test): * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-take.any.worker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-take.any.worker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-takeUntil.any-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-takeUntil.any.js: (promise_test.async const): (promise_test): (promise_test.async t): * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-takeUntil.any.worker-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-toArray.any.js: (promise_test): * LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/w3c-import.log: * LayoutTests/platform/gtk/imported/w3c/web-platform-tests/dom/observable/tentative/observable-from.any-expected.txt: Added. * LayoutTests/platform/ios/imported/w3c/web-platform-tests/dom/observable/observable-from.any-expected.txt: Added. * LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/dom/observable/tentative/observable-from.any-expected.txt: Added. * LayoutTests/platform/mac-wk2/imported/w3c/web-platform-tests/dom/observable/observable-from.any-expected.txt: Added. Canonical link: https://commits.webkit.org/281344@main
1 parent 46b0523 commit 117bd2d

File tree

89 files changed

+3815
-75
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

89 files changed

+3815
-75
lines changed

LayoutTests/TestExpectations

+3
Original file line numberDiff line numberDiff line change
@@ -7887,3 +7887,6 @@ imported/w3c/web-platform-tests/css/css-viewport/zoom/word-spacing.html [ ImageO
78877887

78887888
# WebRTC Encoded Transform - Test Expectation - Crashes on 'mac-wk2' debug and gtk-wk2 / wpe-wk2
78897889
webkit.org/b/275663 imported/w3c/web-platform-tests/webrtc-encoded-transform/script-transform-generateKeyFrame-simulcast.https.html [ Skip ]
7890+
7891+
# https://bugs.webkit.org/show_bug.cgi?id=266843 flakey tests with racey promise console.logs
7892+
imported/w3c/web-platform-tests/dom/observable/tentative/observable-from.any.html [ Skip ]

LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-constructor.any-expected.txt

+6-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ CONSOLE MESSAGE: not a real error
88
CONSOLE MESSAGE: not a real error
99
CONSOLE MESSAGE: not a real error
1010
CONSOLE MESSAGE: Error: assert_false: expected false got true
11+
CONSOLE MESSAGE: calling error()
1112
CONSOLE MESSAGE: Error: custom error
1213
CONSOLE MESSAGE: Error: custom error
1314

@@ -38,7 +39,11 @@ PASS Errors thrown by initializer function after subscriber is closed by error a
3839
PASS Errors pushed by initializer function after subscriber is closed by error are reported
3940
PASS Subscriber#complete() cannot re-entrantly invoke itself
4041
PASS Subscriber#error() cannot re-entrantly invoke itself
41-
FAIL Unsubscription lifecycle assert_array_equals: expected property 1 to be "outer abort handler" but got "inner abort handler" (expected array ["subscribe() callback", "outer abort handler", "teardown 2", "teardown 1", "inner abort handler", "abort() returned"] got ["subscribe() callback", "inner abort handler", "teardown 2", "teardown 1", "outer abort handler", "abort() returned"])
42+
PASS Unsubscription lifecycle
43+
PASS Teardowns are called in upstream->downstream order on consumer-initiated unsubscription
44+
PASS Teardowns are called in downstream->upstream order on consumer-initiated unsubscription with pre-aborted Signal
45+
PASS Producer-initiated unsubscription in a downstream Observable fires abort events before each teardown, in downstream->upstream order
46+
FAIL Subscriber#error() value is stored as Subscriber's AbortSignal's reason assert_equals: Reason is set correctly expected (string) "calling error()" but got (object) object "AbortError: The operation was aborted."
4247
PASS Aborting a subscription should stop emitting values
4348
PASS Calling subscribe should never throw an error synchronously, initializer throws error
4449
PASS Calling subscribe should never throw an error synchronously, subscriber pushes error

LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-constructor.any.js

+168-10
Original file line numberDiff line numberDiff line change
@@ -235,14 +235,18 @@ test(t => {
235235

236236
source.subscribe({
237237
complete: () => {
238-
activeDuringComplete = innerSubscriber.active
239-
abortedDuringComplete = innerSubscriber.active
238+
activeDuringComplete = innerSubscriber.active;
239+
abortedDuringComplete = innerSubscriber.signal.aborted;
240240
}
241241
});
242242
assert_true(activeBeforeComplete, "Subscription is active before complete");
243243
assert_false(abortedBeforeComplete, "Subscription is not aborted before complete");
244-
assert_false(activeDuringComplete, "Subscription is not active during complete");
245-
assert_false(abortedDuringComplete, "Subscription is not aborted during complete");
244+
assert_false(activeDuringComplete,
245+
"Subscription becomes inactive during Subscriber#complete(), just " +
246+
"before Observer#complete() callback is invoked");
247+
assert_true(abortedDuringComplete,
248+
"Subscription's signal is aborted during Subscriber#complete(), just " +
249+
"before Observer#complete() callback is invoked");
246250
assert_false(activeAfterComplete, "Subscription is not active after complete");
247251
assert_true(abortedAfterComplete, "Subscription is aborted after complete");
248252
}, "Subscription is inactive after complete()");
@@ -269,13 +273,18 @@ test(t => {
269273

270274
source.subscribe({
271275
error: () => {
272-
activeDuringError = innerSubscriber.active
276+
activeDuringError = innerSubscriber.active;
277+
abortedDuringError = innerSubscriber.signal.aborted;
273278
}
274279
});
275280
assert_true(activeBeforeError, "Subscription is active before error");
276281
assert_false(abortedBeforeError, "Subscription is not aborted before error");
277-
assert_false(activeDuringError, "Subscription is not active during error");
278-
assert_false(abortedDuringError, "Subscription is not aborted during error");
282+
assert_false(activeDuringError,
283+
"Subscription becomes inactive during Subscriber#error(), just " +
284+
"before Observer#error() callback is invoked");
285+
assert_true(abortedDuringError,
286+
"Subscription's signal is aborted during Subscriber#error(), just " +
287+
"before Observer#error() callback is invoked");
279288
assert_false(activeAfterError, "Subscription is not active after error");
280289
assert_true(abortedAfterError, "Subscription is not aborted after error");
281290
}, "Subscription is inactive after error()");
@@ -679,17 +688,166 @@ test(() => {
679688
assert_array_equals(results, ['subscribe() callback']);
680689
ac.abort();
681690
results.push('abort() returned');
691+
// The reason the "inner" abort event handler is invoked first is because the
692+
// "inner" AbortSignal is not a dependent signal (that would ordinarily get
693+
// aborted after the parent, aka "outer" signal, is completely finished being
694+
// aborted). Instead, the order of operations looks like this:
695+
// 1. "Outer" signal begins to be aborted
696+
// 2. Its abort algorithms [1] run [2]; the internal abort algorithm here is
697+
// the "inner" Subscriber's "Close a subscription" [0].
698+
// a. This signals abort on the "inner" Subscriber's signal, firing the
699+
// abort event
700+
// b. Then, the "inner" Subscriber's teardowns run.
701+
// 3. Once the "outer" signal's abort algorithms are finished, the abort
702+
// event is fired [3], triggering the outer abort handler.
703+
//
704+
// [0]: https://wicg.github.io/observable/#close-a-subscription
705+
// [1]: https://dom.spec.whatwg.org/#abortsignal-abort-algorithms
706+
// [2]: https://dom.spec.whatwg.org/#ref-for-abortsignal-abort-algorithms%E2%91%A2:~:text=For%20each%20algorithm%20of%20signal%E2%80%99s%20abort%20algorithms%3A%20run%20algorithm
707+
// [3]: https://dom.spec.whatwg.org/#abortsignal-signal-abort:~:text=Fire%20an%20event%20named%20abort%20at%20signal
682708
assert_array_equals(results, [
683-
'subscribe() callback',
684-
'outer abort handler', 'teardown 2', 'teardown 1',
685-
'inner abort handler', 'abort() returned',
709+
'subscribe() callback', 'inner abort handler', 'teardown 2', 'teardown 1',
710+
'outer abort handler', 'abort() returned',
686711
]);
687712
assert_false(activeDuringTeardown1, 'should not be active during teardown callback 1');
688713
assert_false(activeDuringTeardown2, 'should not be active during teardown callback 2');
689714
assert_true(abortedDuringTeardown1, 'should be aborted during teardown callback 1');
690715
assert_true(abortedDuringTeardown2, 'should be aborted during teardown callback 2');
691716
}, "Unsubscription lifecycle");
692717

718+
// In the usual consumer-initiated unsubscription case, when the AbortController
719+
// is aborted after subscription, teardowns run from upstream->downstream. This
720+
// is because for a given Subscriber, when a downstream signal is aborted
721+
// (`ac.signal` in this case), the "Close" algorithm prompts the Subscriber to
722+
// first abort *its* own signal (the one accessible via `Subscriber#signal`) and
723+
// then run its teardowns.
724+
//
725+
// This means upstream Subscribers get the first opportunity their teardowns
726+
// before the control flow is returned to downstream Subscribers to run *their*
727+
// teardowns (after they abort their internal signal).
728+
test(() => {
729+
const results = [];
730+
const upstream = new Observable(subscriber => {
731+
subscriber.signal.addEventListener('abort',
732+
e => results.push('upstream abort handler'), {once: true});
733+
subscriber.addTeardown(
734+
() => results.push(`upstream teardown. reason: ${subscriber.signal.reason}`));
735+
});
736+
const middle = new Observable(subscriber => {
737+
subscriber.signal.addEventListener('abort',
738+
e => results.push('middle abort handler'), {once: true});
739+
subscriber.addTeardown(
740+
() => results.push(`middle teardown. reason: ${subscriber.signal.reason}`));
741+
upstream.subscribe({}, {signal: subscriber.signal});
742+
});
743+
const downstream = new Observable(subscriber => {
744+
subscriber.signal.addEventListener('abort',
745+
e => results.push('downstream abort handler'), {once: true});
746+
subscriber.addTeardown(
747+
() => results.push(`downstream teardown. reason: ${subscriber.signal.reason}`));
748+
middle.subscribe({}, {signal: subscriber.signal});
749+
});
750+
751+
const ac = new AbortController();
752+
downstream.subscribe({}, {signal: ac.signal});
753+
ac.abort('Abort!');
754+
assert_array_equals(results, [
755+
'upstream abort handler',
756+
'upstream teardown. reason: Abort!',
757+
'middle abort handler',
758+
'middle teardown. reason: Abort!',
759+
'downstream abort handler',
760+
'downstream teardown. reason: Abort!',
761+
]);
762+
}, "Teardowns are called in upstream->downstream order on " +
763+
"consumer-initiated unsubscription");
764+
765+
// This test is like the above, but asserts the exact opposite order of
766+
// teardowns. This is because, since the Subscriber's signal is aborted
767+
// immediately upon construction, `addTeardown()` runs teardowns synchronously
768+
// in subscriber-order, which goes from downstream->upstream.
769+
test(() => {
770+
const results = [];
771+
const upstream = new Observable(subscriber => {
772+
subscriber.addTeardown(
773+
() => results.push(`upstream teardown. reason: ${subscriber.signal.reason}`));
774+
});
775+
const middle = new Observable(subscriber => {
776+
subscriber.addTeardown(
777+
() => results.push(`middle teardown. reason: ${subscriber.signal.reason}`));
778+
upstream.subscribe({}, {signal: subscriber.signal});
779+
});
780+
const downstream = new Observable(subscriber => {
781+
subscriber.addTeardown(
782+
() => results.push(`downstream teardown. reason: ${subscriber.signal.reason}`));
783+
middle.subscribe({}, {signal: subscriber.signal});
784+
});
785+
786+
downstream.subscribe({}, {signal: AbortSignal.abort('Initial abort')});
787+
assert_array_equals(results, [
788+
"downstream teardown. reason: Initial abort",
789+
"middle teardown. reason: Initial abort",
790+
"upstream teardown. reason: Initial abort",
791+
]);
792+
}, "Teardowns are called in downstream->upstream order on " +
793+
"consumer-initiated unsubscription with pre-aborted Signal");
794+
795+
// Producer-initiated unsubscription test, capturing the ordering of abort events and teardowns.
796+
test(() => {
797+
const results = [];
798+
799+
const source = new Observable(subscriber => {
800+
subscriber.addTeardown(() => results.push('source teardown'));
801+
subscriber.signal.addEventListener('abort',
802+
e => results.push('source abort event'));
803+
});
804+
805+
const middle = new Observable(subscriber => {
806+
subscriber.addTeardown(() => results.push('middle teardown'));
807+
subscriber.signal.addEventListener('abort',
808+
e => results.push('middle abort event'));
809+
810+
source.subscribe(() => {}, {signal: subscriber.signal});
811+
});
812+
813+
let innerSubscriber = null;
814+
const downstream = new Observable(subscriber => {
815+
innerSubscriber = subscriber;
816+
subscriber.addTeardown(() => results.push('downstream teardown'));
817+
subscriber.signal.addEventListener('abort',
818+
e => results.push('downstream abort event'));
819+
820+
middle.subscribe(() => {}, {signal: subscriber.signal});
821+
});
822+
823+
downstream.subscribe();
824+
825+
// Trigger a producer-initiated unsubscription from the most-downstream Observable.
826+
innerSubscriber.complete();
827+
828+
assert_array_equals(results, [
829+
'source abort event',
830+
'source teardown',
831+
'middle abort event',
832+
'middle teardown',
833+
'downstream abort event',
834+
'downstream teardown',
835+
]);
836+
}, "Producer-initiated unsubscription in a downstream Observable fires abort " +
837+
"events before each teardown, in downstream->upstream order");
838+
839+
test(t => {
840+
let innerSubscriber = null;
841+
const source = new Observable(subscriber => {
842+
innerSubscriber = subscriber;
843+
subscriber.error('calling error()');
844+
});
845+
846+
source.subscribe();
847+
assert_equals(innerSubscriber.signal.reason, "calling error()",
848+
"Reason is set correctly");
849+
}, "Subscriber#error() value is stored as Subscriber's AbortSignal's reason");
850+
693851
test(t => {
694852
const source = new Observable((subscriber) => {
695853
let n = 0;

LayoutTests/imported/w3c/web-platform-tests/dom/observable/tentative/observable-constructor.any.worker-expected.txt

+5-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,11 @@ PASS Errors thrown by initializer function after subscriber is closed by error a
2626
PASS Errors pushed by initializer function after subscriber is closed by error are reported
2727
PASS Subscriber#complete() cannot re-entrantly invoke itself
2828
PASS Subscriber#error() cannot re-entrantly invoke itself
29-
FAIL Unsubscription lifecycle assert_array_equals: expected property 1 to be "outer abort handler" but got "inner abort handler" (expected array ["subscribe() callback", "outer abort handler", "teardown 2", "teardown 1", "inner abort handler", "abort() returned"] got ["subscribe() callback", "inner abort handler", "teardown 2", "teardown 1", "outer abort handler", "abort() returned"])
29+
PASS Unsubscription lifecycle
30+
PASS Teardowns are called in upstream->downstream order on consumer-initiated unsubscription
31+
PASS Teardowns are called in downstream->upstream order on consumer-initiated unsubscription with pre-aborted Signal
32+
PASS Producer-initiated unsubscription in a downstream Observable fires abort events before each teardown, in downstream->upstream order
33+
FAIL Subscriber#error() value is stored as Subscriber's AbortSignal's reason assert_equals: Reason is set correctly expected (string) "calling error()" but got (object) object "AbortError: The operation was aborted."
3034
PASS Aborting a subscription should stop emitting values
3135
PASS Calling subscribe should never throw an error synchronously, initializer throws error
3236
PASS Calling subscribe should never throw an error synchronously, subscriber pushes error
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
2+
FAIL drop(): Observable should skip the first n values from the source observable, then pass through the rest of the values and completion source.drop is not a function. (In 'source.drop(2)', 'source.drop' is undefined)
3+
FAIL drop(): Observable passes through errors from source Observable source.drop is not a function. (In 'source.drop(2)', 'source.drop' is undefined)
4+
FAIL drop(): Observable passes through errors from source observable even before drop count is met source.drop is not a function. (In 'source.drop(2)', 'source.drop' is undefined)
5+
FAIL drop(): Observable passes through completions from source observable even before drop count is met source.drop is not a function. (In 'source.drop(2)', 'source.drop' is undefined)
6+
FAIL drop(): Unsubscribing from the Observable returned by drop() also unsubscribes from the source Observable source.drop is not a function. (In 'source.drop(2)', 'source.drop' is undefined)
7+
FAIL drop(): A drop amount of 0 simply mirrors the source Observable source.drop is not a function. (In 'source.drop(0)', 'source.drop' is undefined)
8+
FAIL drop(): Passing negative value wraps to maximum value source.drop is not a function. (In 'source.drop(-1)', 'source.drop' is undefined)
9+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<!-- This file is required for WebKit test infrastructure to run the templated test -->

0 commit comments

Comments
 (0)