summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorLuca Casonato <hello@lcas.dev>2024-11-15 15:54:28 +0100
committerGitHub <noreply@github.com>2024-11-15 15:54:28 +0100
commitb8cf2599242a9d85d03b57d3649ccdf8bce1530e (patch)
tree87a6288f2174aa6d22730a9ec020292b778c9dca /tests
parent3f26310728ef2d56ace7370a555eb9a862295983 (diff)
feat(fetch): accept async iterables for body (#26882)
Reland of #24623, but with a fix for `String` objects. Co-authored-by: crowlkats <crowlkats@toaxl.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/integration/node_unit_tests.rs1
-rw-r--r--tests/unit/fetch_test.ts27
-rw-r--r--tests/unit/streams_test.ts15
-rw-r--r--tests/unit_node/fetch_test.ts18
-rw-r--r--tests/wpt/runner/expectation.json10
5 files changed, 68 insertions, 3 deletions
diff --git a/tests/integration/node_unit_tests.rs b/tests/integration/node_unit_tests.rs
index 40bd7b2fb..9cb1af949 100644
--- a/tests/integration/node_unit_tests.rs
+++ b/tests/integration/node_unit_tests.rs
@@ -72,6 +72,7 @@ util::unit_test_factory!(
dgram_test,
domain_test,
fs_test,
+ fetch_test,
http_test,
http2_test,
inspector_test,
diff --git a/tests/unit/fetch_test.ts b/tests/unit/fetch_test.ts
index 3ae96746a..6d3fd8cc1 100644
--- a/tests/unit/fetch_test.ts
+++ b/tests/unit/fetch_test.ts
@@ -2119,3 +2119,30 @@ Deno.test(
await server;
},
);
+
+Deno.test("fetch async iterable", async () => {
+ const iterable = (async function* () {
+ yield new Uint8Array([1, 2, 3, 4, 5]);
+ yield new Uint8Array([6, 7, 8, 9, 10]);
+ })();
+ const res = new Response(iterable);
+ const actual = await res.bytes();
+ const expected = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
+ assertEquals(actual, expected);
+});
+
+Deno.test("fetch iterable", async () => {
+ const iterable = (function* () {
+ yield new Uint8Array([1, 2, 3, 4, 5]);
+ yield new Uint8Array([6, 7, 8, 9, 10]);
+ })();
+ const res = new Response(iterable);
+ const actual = await res.bytes();
+ const expected = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
+ assertEquals(actual, expected);
+});
+
+Deno.test("fetch string object", async () => {
+ const res = new Response(Object("hello"));
+ assertEquals(await res.text(), "hello");
+});
diff --git a/tests/unit/streams_test.ts b/tests/unit/streams_test.ts
index b866fa7d5..73f9a6095 100644
--- a/tests/unit/streams_test.ts
+++ b/tests/unit/streams_test.ts
@@ -1,5 +1,10 @@
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
-import { assertEquals, assertRejects, fail } from "./test_util.ts";
+import {
+ assertEquals,
+ assertRejects,
+ assertThrows,
+ fail,
+} from "./test_util.ts";
const {
core,
@@ -533,3 +538,11 @@ Deno.test(async function decompressionStreamInvalidGzipStillReported() {
"corrupt gzip stream does not have a matching checksum",
);
});
+
+Deno.test(function readableStreamFromWithStringThrows() {
+ assertThrows(
+ () => ReadableStream.from("string"),
+ TypeError,
+ "Failed to execute 'ReadableStream.from': Argument 1 can not be converted to async iterable.",
+ );
+});
diff --git a/tests/unit_node/fetch_test.ts b/tests/unit_node/fetch_test.ts
new file mode 100644
index 000000000..399d6052a
--- /dev/null
+++ b/tests/unit_node/fetch_test.ts
@@ -0,0 +1,18 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+
+import { assertEquals } from "@std/assert";
+import { createReadStream } from "node:fs";
+
+Deno.test("fetch node stream", async () => {
+ const file = createReadStream("tests/testdata/assets/fixture.json");
+
+ const response = await fetch("http://localhost:4545/echo_server", {
+ method: "POST",
+ body: file,
+ });
+
+ assertEquals(
+ await response.text(),
+ await Deno.readTextFile("tests/testdata/assets/fixture.json"),
+ );
+});
diff --git a/tests/wpt/runner/expectation.json b/tests/wpt/runner/expectation.json
index 3477d8d9b..23cc85b49 100644
--- a/tests/wpt/runner/expectation.json
+++ b/tests/wpt/runner/expectation.json
@@ -3257,8 +3257,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 ignores a null @@asyncIterator",
+ "ReadableStream.from accepts a string"
+ ],
+ "from.any.worker.html": [
+ "ReadableStream.from ignores a null @@asyncIterator",
+ "ReadableStream.from accepts a string"
+ ]
},
"transform-streams": {
"backpressure.any.html": true,