WPT
wpt / dom / observable / tentative / observable-constructor.any.html
Spec: DOM ↗
Runs: Chrome 155.0.8041.0 (wpt@4a01b83e3, 2026-09-04) | Firefox 157.0a1 (wpt@e7122b73f, 2026-09-04) | Safari 251 preview (wpt@2c385f65e, 2026-09-04) | Ladybird 1.0-70fb3 (wpt@4a01b83e3, 2026-09-04) | Servo Servo 0.6 (wpt@7e3d005d7, 2026-09-03) | Blitz a50cb8971 (wpt@a95401e4e, 2026-09-03)
View on the Blitz WPT dashboard | Open test on wpt.live | wpt.fyi
| Chrome | Firefox | Safari | Ladybird | Servo | Blitz | |
|---|---|---|---|---|---|---|
| Total | 44/44 | 0/44 | 0/44 | 0/44 | 0/44 | NOT RUN |
| Subtest | Chrome | Firefox | Safari | Ladybird | Servo | Blitz |
|---|---|---|---|---|---|---|
| Observable constructor | PASS | FAIL | FAIL | FAIL | FAIL | — |
| subscribe() can be called with no arguments | PASS | FAIL | FAIL | FAIL | FAIL | — |
| Subscriber interface is not constructible | PASS | FAIL | FAIL | FAIL | FAIL | — |
| Subscribe with just a function as the next handler | PASS | FAIL | FAIL | FAIL | FAIL | — |
| Observable constructor calls initializer on subscribe | PASS | FAIL | FAIL | FAIL | FAIL | — |
| Observable error path called synchronously | PASS | FAIL | FAIL | FAIL | FAIL | — |
| Subscriber must have receiver | PASS | FAIL | FAIL | FAIL | FAIL | — |
| Subscriber next & error must recieve argument | PASS | FAIL | FAIL | FAIL | FAIL | — |
| Subscriber complete() will set active to false, and abort signal | PASS | FAIL | FAIL | FAIL | FAIL | — |
| Subscriber active is readonly | PASS | FAIL | FAIL | FAIL | FAIL | — |
| Subscriber signal is readonly | PASS | FAIL | FAIL | FAIL | FAIL | — |
| Observable should error if initializer throws | PASS | FAIL | FAIL | FAIL | FAIL | — |
| Subscription is inactive after complete() | PASS | FAIL | FAIL | FAIL | FAIL | — |
| Subscription is inactive after error() | PASS | FAIL | FAIL | FAIL | FAIL | — |
| Subscription is inactive when aborted signal is passed in | PASS | FAIL | FAIL | FAIL | FAIL | — |
| Subscriber#signal is not the same AbortSignal as the one passed into `subscribe()` | PASS | FAIL | FAIL | FAIL | FAIL | — |
| Subscription does not emit values after completion | PASS | FAIL | FAIL | FAIL | FAIL | — |
| Subscription does not emit values after error | PASS | FAIL | FAIL | FAIL | FAIL | — |
| Completing or nexting a subscriber after an error does nothing | PASS | FAIL | FAIL | FAIL | FAIL | — |
| Errors pushed to the subscriber that are not handled by the subscription are reported to the global | PASS | FAIL | FAIL | FAIL | FAIL | — |
| Errors thrown in the initializer that are not handled by the subscription are reported to the global | PASS | FAIL | FAIL | FAIL | FAIL | — |
| Subscription reports errors that are pushed after subscriber is closed by completion | PASS | FAIL | FAIL | FAIL | FAIL | — |
| Errors thrown by initializer function after subscriber is closed by completion are reported | PASS | FAIL | FAIL | FAIL | FAIL | — |
| Errors thrown by initializer function after subscriber is closed by error are reported | PASS | FAIL | FAIL | FAIL | FAIL | — |
| Errors pushed by initializer function after subscriber is closed by error are reported | PASS | FAIL | FAIL | FAIL | FAIL | — |
| Subscriber#complete() cannot re-entrantly invoke itself | PASS | FAIL | FAIL | FAIL | FAIL | — |
| Subscriber#error() cannot re-entrantly invoke itself | PASS | FAIL | FAIL | FAIL | FAIL | — |
| Unsubscription lifecycle | PASS | FAIL | FAIL | FAIL | FAIL | — |
| Teardowns are called in upstream->downstream order on consumer-initiated unsubscription | PASS | FAIL | FAIL | FAIL | FAIL | — |
| Teardowns are called in downstream->upstream order on consumer-initiated unsubscription with pre-aborted Signal | PASS | FAIL | FAIL | FAIL | FAIL | — |
| Producer-initiated unsubscription in a downstream Observable fires abort events before each teardown, in downstream->upstream order | PASS | FAIL | FAIL | FAIL | FAIL | — |
| Subscriber#error() value is stored as Subscriber's AbortSignal's reason | PASS | FAIL | FAIL | FAIL | FAIL | — |
| Aborting a subscription should stop emitting values | PASS | FAIL | FAIL | FAIL | FAIL | — |
| Calling subscribe should never throw an error synchronously, initializer throws error | PASS | FAIL | FAIL | FAIL | FAIL | — |
| Calling subscribe should never throw an error synchronously, subscriber pushes error | PASS | FAIL | FAIL | FAIL | FAIL | — |
| Teardown should be called when subscription is aborted | PASS | FAIL | FAIL | FAIL | FAIL | — |
| Teardowns should be called when subscription is closed by completion | PASS | FAIL | FAIL | FAIL | FAIL | — |
| Teardowns should be called when subscription is closed by subscriber pushing an error | PASS | FAIL | FAIL | FAIL | FAIL | — |
| Teardowns should be called when subscription is closed by subscriber throwing error | PASS | FAIL | FAIL | FAIL | FAIL | — |
| Teardowns should be called synchronously during addTeardown() if the subscription is inactive | PASS | FAIL | FAIL | FAIL | FAIL | — |
| Multiple subscriptions share the same producer and teardown runs only after last subscription abort | PASS | FAIL | FAIL | FAIL | FAIL | — |
| New subscription after complete creates new producer | PASS | FAIL | FAIL | FAIL | FAIL | — |
| Teardown runs after last unsubscribe regardless of unsubscription order | PASS | FAIL | FAIL | FAIL | FAIL | — |
| Subscriber iterates over a snapshot of its internal observers | PASS | FAIL | FAIL | FAIL | FAIL | — |