WPT
wpt / dom / observable / tentative / observable-from.any.worker.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 | 46/48 | 0/48 | 0/48 | 0/48 | 0/48 | NOT RUN |
| Subtest | Chrome | Firefox | Safari | Ladybird | Servo | Blitz |
|---|---|---|---|---|---|---|
| from(): Observable.from() is a function | PASS | FAIL | FAIL | FAIL | FAIL | — |
| from(): Failed conversions | PASS | FAIL | FAIL | FAIL | FAIL | — |
| from(): Given an observable, it returns that exact observable | PASS | FAIL | FAIL | FAIL | FAIL | — |
| from(): Given an array | PASS | FAIL | FAIL | FAIL | FAIL | — |
| from(): Iterable converts to Observable | PASS | FAIL | FAIL | FAIL | FAIL | — |
| from(): [Symbol.iterator] side-effects (one observable) | PASS | FAIL | FAIL | FAIL | FAIL | — |
| from(): [Symbol.iterator] not callable | PASS | FAIL | FAIL | FAIL | FAIL | — |
| from(): [Symbol.iterator] not callable AFTER SUBSCRIBE throws | PASS | FAIL | FAIL | FAIL | FAIL | — |
| from(): [Symbol.iterator] returns null AFTER SUBSCRIBE throws | PASS | FAIL | FAIL | FAIL | FAIL | — |
| from(): [Symbol.iterator] is not cached | PASS | FAIL | FAIL | FAIL | FAIL | — |
| from(): [Symbol.iterator] side-effects (many observables) | PASS | FAIL | FAIL | FAIL | FAIL | — |
| from(): [Symbol.iterator] next() throws error | PASS | FAIL | FAIL | FAIL | FAIL | — |
| from(): Converts Promise to Observable | PASS | FAIL | FAIL | FAIL | FAIL | — |
| from(): Converts rejected Promise to Observable. No `unhandledrejection` event when error is handled by subscription | PASS | FAIL | FAIL | FAIL | FAIL | — |
| from(): Rejections not handled by subscription are reported to the global, and still not sent as an unhandledrejection event | PASS | FAIL | FAIL | FAIL | FAIL | — |
| from(): Observable that implements @@iterator protocol gets converted as an Observable, not iterator | PASS | FAIL | FAIL | FAIL | FAIL | — |
| from(): Promise that implements @@iterator protocol gets converted as an iterable, not Promise | PASS | FAIL | FAIL | FAIL | FAIL | — |
| from(): Promise whose [Symbol.iterator] returns null converts as Promise | PASS | FAIL | FAIL | FAIL | FAIL | — |
| from(): Rethrows the error when Converting an object whose @@iterator method *getter* throws an error | PASS | FAIL | FAIL | FAIL | FAIL | — |
| from(): Async iterable protocol null, converts as iterator | PASS | FAIL | FAIL | FAIL | FAIL | — |
| from(): Asynchronous iterable conversion | PASS | FAIL | FAIL | FAIL | FAIL | — |
| from(): Asynchronous iterable multiple in-flight subscriptions | PASS | FAIL | FAIL | FAIL | FAIL | — |
| from(): Sync iterable multiple in-flight subscriptions | PASS | FAIL | FAIL | FAIL | FAIL | — |
| from(): Asynchronous generator conversion: can only be used once | PASS | FAIL | FAIL | FAIL | FAIL | — |
| from(): Promise-wrapping semantics of IteratorResult interface | PASS | FAIL | FAIL | FAIL | FAIL | — |
| from(): Errors thrown in Symbol.asyncIterator() are propagated synchronously | PASS | FAIL | FAIL | FAIL | FAIL | — |
| from(): Errors thrown in async iterator's next() GETTER are propagated in a microtask | FAIL | FAIL | FAIL | FAIL | FAIL | — |
| from(): Errors thrown in async iterator's next() are propagated in a microtask | PASS | FAIL | FAIL | FAIL | FAIL | — |
| from(): Aborting sync iterable midway through iteration both stops iteration and invokes `IteratorRecord#return() | PASS | FAIL | FAIL | FAIL | FAIL | — |
| from(): Aborting async iterable midway through iteration both stops iteration and invokes `IteratorRecord#return() | PASS | FAIL | FAIL | FAIL | FAIL | — |
| from(): Sync iterable: `Iterator#return()` must return an Object, or an error is thrown | PASS | FAIL | FAIL | FAIL | FAIL | — |
| from(): Async iterable: `Iterator#return()` must return an Object, or a Promise rejects asynchronously | PASS | FAIL | FAIL | FAIL | FAIL | — |
| from(): Asynchronous iterable conversion, with synchronous iterable fallback | FAIL | FAIL | FAIL | FAIL | FAIL | — |
| from(): Generator finally block runs when subscription is aborted | PASS | FAIL | FAIL | FAIL | FAIL | — |
| from(): Generator finally block run when Observable completes | PASS | FAIL | FAIL | FAIL | FAIL | — |
| from(): Generator finally block run when Observable errors | PASS | FAIL | FAIL | FAIL | FAIL | — |
| from(): Async generator finally block run when subscription is aborted | PASS | FAIL | FAIL | FAIL | FAIL | — |
| from(): Async generator finally block runs when Observable completes | PASS | FAIL | FAIL | FAIL | FAIL | — |
| from(): Async generator finally block run when Observable errors | PASS | FAIL | FAIL | FAIL | FAIL | — |
| from(): Sync iterable: error thrown from IteratorRecord#return() can be synchronously caught | PASS | FAIL | FAIL | FAIL | FAIL | — |
| from(): Async iterable: error thrown from IteratorRecord#return() is wrapped in rejected Promise | PASS | FAIL | FAIL | FAIL | FAIL | — |
| from(): Subscribing to an iterable Observable with an aborted signal does not call next() | PASS | FAIL | FAIL | FAIL | FAIL | — |
| from(): When iterable conversion aborts the subscription, next() is never called | PASS | FAIL | FAIL | FAIL | FAIL | — |
| from(): Aborting an async iterable subscription stops subsequent next() calls, but old next() Promise reactions are web-observable | PASS | FAIL | FAIL | FAIL | FAIL | — |
| from(): Abort after complete does NOT call IteratorRecord#return() | PASS | FAIL | FAIL | FAIL | FAIL | — |
| Invalid async iterator protocol error is surfaced before Subscriber#signal is consulted | PASS | FAIL | FAIL | FAIL | FAIL | — |
| Invalid iterator protocol error is surfaced before Subscriber#signal is consulted | PASS | FAIL | FAIL | FAIL | FAIL | — |
| No error is reported when aborting a subscription to a sync iterator that has no `return()` implementation | PASS | FAIL | FAIL | FAIL | FAIL | — |