WPT
wpt / streams / readable-streams / async-iterator.any.worker.html
Spec: Streams ↗
Runs: Chrome 155.0.8041.0 (wpt@4a01b83e3, 2026-09-04) | Firefox 157.0a1 (wpt@4a01b83e3, 2026-09-04) | Safari 251 preview (wpt@2c385f65e, 2026-09-04) | Ladybird 1.0-a7825 (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 | 40/41 | 37/41 | 41/41 | 41/41 | 0/41 | NOT RUN |
| Subtest | Chrome | Firefox | Safari | Ladybird | Servo | Blitz |
|---|---|---|---|---|---|---|
| Async iterator instances should have the correct list of properties | FAIL | FAIL | PASS | PASS | FAIL | — |
| Async-iterating a push source | PASS | PASS | PASS | PASS | FAIL | — |
| Async-iterating a pull source | PASS | PASS | PASS | PASS | FAIL | — |
| Async-iterating a push source with undefined values | PASS | PASS | PASS | PASS | FAIL | — |
| Async-iterating a pull source with undefined values | PASS | PASS | PASS | PASS | FAIL | — |
| Async-iterating a pull source manually | PASS | PASS | PASS | PASS | FAIL | — |
| Async-iterating an errored stream throws | PASS | PASS | PASS | PASS | FAIL | — |
| Async-iterating a closed stream never executes the loop body, but works fine | PASS | PASS | PASS | PASS | FAIL | — |
| Async-iterating an empty but not closed/errored stream never executes the loop body and stalls the async function | PASS | PASS | PASS | PASS | FAIL | — |
| Async-iterating a partially consumed stream | PASS | PASS | PASS | PASS | FAIL | — |
| Cancellation behavior when throwing inside loop body; preventCancel = false | PASS | PASS | PASS | PASS | FAIL | — |
| Cancellation behavior when throwing inside loop body; preventCancel = true | PASS | PASS | PASS | PASS | FAIL | — |
| Cancellation behavior when breaking inside loop body; preventCancel = false | PASS | PASS | PASS | PASS | FAIL | — |
| Cancellation behavior when breaking inside loop body; preventCancel = true | PASS | PASS | PASS | PASS | FAIL | — |
| Cancellation behavior when returning inside loop body; preventCancel = false | PASS | PASS | PASS | PASS | FAIL | — |
| Cancellation behavior when returning inside loop body; preventCancel = true | PASS | PASS | PASS | PASS | FAIL | — |
| Cancellation behavior when manually calling return(); preventCancel = false | PASS | PASS | PASS | PASS | FAIL | — |
| Cancellation behavior when manually calling return(); preventCancel = true | PASS | PASS | PASS | PASS | FAIL | — |
| next() rejects if the stream errors | PASS | PASS | PASS | PASS | FAIL | — |
| return() does not rejects if the stream has not errored yet | PASS | PASS | PASS | PASS | FAIL | — |
| return() rejects if the stream has errored | PASS | PASS | PASS | PASS | FAIL | — |
| next() that succeeds; next() that reports an error; next() | PASS | PASS | PASS | PASS | FAIL | — |
| next() that succeeds; next() that reports an error(); next() [no awaiting] | PASS | PASS | PASS | PASS | FAIL | — |
| next() that succeeds; next() that reports an error(); return() | PASS | PASS | PASS | PASS | FAIL | — |
| next() that succeeds; next() that reports an error(); return() [no awaiting] | PASS | PASS | PASS | PASS | FAIL | — |
| next() that succeeds; return() | PASS | PASS | PASS | PASS | FAIL | — |
| next() that succeeds; return() [no awaiting] | PASS | PASS | PASS | PASS | FAIL | — |
| return(); next() | PASS | PASS | PASS | PASS | FAIL | — |
| return(); next() [no awaiting] | PASS | FAIL | PASS | PASS | FAIL | — |
| return(); next() with delayed cancel() | PASS | PASS | PASS | PASS | FAIL | — |
| return(); next() with delayed cancel() [no awaiting] | PASS | FAIL | PASS | PASS | FAIL | — |
| return(); return() | PASS | PASS | PASS | PASS | FAIL | — |
| return(); return() [no awaiting] | PASS | FAIL | PASS | PASS | FAIL | — |
| values() throws if there's already a lock | PASS | PASS | PASS | PASS | FAIL | — |
| Acquiring a reader after exhaustively async-iterating a stream | PASS | PASS | PASS | PASS | FAIL | — |
| Acquiring a reader after return()ing from a stream that errors | PASS | PASS | PASS | PASS | FAIL | — |
| Acquiring a reader after partially async-iterating a stream | PASS | PASS | PASS | PASS | FAIL | — |
| Acquiring a reader and reading the remaining chunks after partially async-iterating a stream with preventCancel = true | PASS | PASS | PASS | PASS | FAIL | — |
| return() should unlock the stream synchronously when preventCancel = false | PASS | PASS | PASS | PASS | FAIL | — |
| return() should unlock the stream synchronously when preventCancel = true | PASS | PASS | PASS | PASS | FAIL | — |
| close() while next() is pending | PASS | PASS | PASS | PASS | FAIL | — |