diff options
author | Milly <milly.ca@gmail.com> | 2024-05-23 20:55:07 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-23 13:55:07 +0200 |
commit | fa273509771c01d603d403002481bc1d01e4dd8b (patch) | |
tree | 578f03b94f5ddbd93b826a4d4a43cb8b5e19d541 /tests/wpt | |
parent | de5b47b13c457800828d2f3720706c44932ad772 (diff) |
fix(ext/web): `ReadableStream.from()` ignores null `Symbol.asyncIterator` (#23910)
If `@@asyncIterator` is `null` or `undefined`, it should ignores and
fallback to `@@iterator`.
Tests have been merged into WPT.
https://github.com/web-platform-tests/wpt/pull/46374
The proposal of `ReadableStream.from` uses TC39 [GetIterator][] and
[GetMethod][] within it.
GetMethod treats null as undefined.
So if `@@asyncIterator` is `null` it should be ignored and fallback to
`@@iterator`.
[GetIterator]: https://tc39.es/ecma262/#sec-getiterator
[GetMethod]: https://tc39.es/ecma262/#sec-getmethod
```bash
> deno eval "ReadableStream.from({ [Symbol.asyncIterator]: null, [Symbol.iterator]: () => ({ next: () => ({ done: true }) }) }).pipeTo(new WritableStream())"
error: Uncaught (in promise) TypeError: obj[SymbolAsyncIterator] is not a function
ReadableStream.from({ [Symbol.asyncIterator]: null, [Symbol.iterator]: () => ({ next: () => ({ done: true }) }) }).pipeTo(new WritableStream())
^
at getIterator (ext:deno_web/06_streams.js:5105:38)
at Function.from (ext:deno_web/06_streams.js:5207:22)
at file:///D:/work/js/deno/tests/wpt/suite/$deno$eval:1:16
```
---------
Co-authored-by: Asher Gomez <ashersaupingomez@gmail.com>
Diffstat (limited to 'tests/wpt')
-rw-r--r-- | tests/wpt/runner/expectation.json | 17 | ||||
m--------- | tests/wpt/suite | 0 |
2 files changed, 14 insertions, 3 deletions
diff --git a/tests/wpt/runner/expectation.json b/tests/wpt/runner/expectation.json index e3f2ac972..78a33badf 100644 --- a/tests/wpt/runner/expectation.json +++ b/tests/wpt/runner/expectation.json @@ -3170,8 +3170,14 @@ "owning-type-message-port.any.worker.html": false, "owning-type.any.html": false, "owning-type.any.worker.html": false, - "from.any.html": true, - "from.any.worker.html": true + "from.any.html": [ + "ReadableStream.from accepts a sync iterable of values", + "ReadableStream.from accepts a sync iterable of promises" + ], + "from.any.worker.html": [ + "ReadableStream.from accepts a sync iterable of values", + "ReadableStream.from accepts a sync iterable of promises" + ] }, "transform-streams": { "backpressure.any.html": true, @@ -10072,7 +10078,6 @@ "Worker-replace-event-handler.any.worker.html": true, "Worker-replace-global-constructor.any.worker.html": true, "Worker-replace-self.any.worker.html": true, - "WorkerGlobalScope_requestAnimationFrame.tentative.worker.html": false, "WorkerLocation-origin.sub.window.html": false, "WorkerNavigator-hardware-concurrency.any.worker.html": true, "WorkerNavigator.any.worker.html": false, @@ -10753,6 +10758,9 @@ }, "service-workers": { "idlharness.https.any.html": [ + "ServiceWorkerContainer interface: operation register((TrustedScriptURL or USVString), optional RegistrationOptions)", + "ServiceWorkerContainer interface: navigator.serviceWorker must inherit property \"register((TrustedScriptURL or USVString), optional RegistrationOptions)\" with the proper type", + "ServiceWorkerContainer interface: calling register((TrustedScriptURL or USVString), optional RegistrationOptions) on navigator.serviceWorker with too few arguments must throw TypeError", "ServiceWorker interface: existence and properties of interface object", "ServiceWorker interface object length", "ServiceWorker interface object name", @@ -10861,6 +10869,9 @@ "idl_test setup" ], "idlharness.https.any.worker.html": [ + "ServiceWorkerContainer interface: operation register((TrustedScriptURL or USVString), optional RegistrationOptions)", + "ServiceWorkerContainer interface: navigator.serviceWorker must inherit property \"register((TrustedScriptURL or USVString), optional RegistrationOptions)\" with the proper type", + "ServiceWorkerContainer interface: calling register((TrustedScriptURL or USVString), optional RegistrationOptions) on navigator.serviceWorker with too few arguments must throw TypeError", "ServiceWorker interface: existence and properties of interface object", "ServiceWorker interface object length", "ServiceWorker interface object name", diff --git a/tests/wpt/suite b/tests/wpt/suite -Subproject 915d40b37fbd3554548d5cbec9f335f329ccc94 +Subproject 5b7a1a44887d1c68ad67a4df894febd45f520c2 |