From 1dd53618f6094ba310b05fe58803fef7f6546a70 Mon Sep 17 00:00:00 2001 From: Yutaka Hirano Date: Sat, 7 Jan 2017 19:37:24 +0900 Subject: [PATCH] Add a fetch test for upload streaming See https://github.com/whatwg/fetch/issues/88 for context. --- fetch/api/basic/request-upload.js | 36 +++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/fetch/api/basic/request-upload.js b/fetch/api/basic/request-upload.js index b5d79c4c185c23..8e9e89fab74bb1 100644 --- a/fetch/api/basic/request-upload.js +++ b/fetch/api/basic/request-upload.js @@ -18,6 +18,17 @@ function testUpload(desc, url, method, body, expectedBody) { }, desc); } +function testUploadFailure(desc, url, method, body) { + const requestInit = {"method": method}; + promise_test(test => { + if (typeof body === "function") + body = body(); + if (body) + requestInit["body"] = body; + return promise_rejects(new TypeError(), fetch(url, requestInit)); + }, desc); +} + var url = RESOURCES_DIR + "echo-content.py" testUpload("Fetch with PUT with body", url, "PUT", "Request's body", "Request's body"); @@ -31,5 +42,30 @@ testUpload("Fetch with POST with Float32Array body", url, "POST", new Float32Arr testUpload("Fetch with POST with Float64Array body", url, "POST", new Float64Array(1), "\0\0\0\0\0\0\0\0"); testUpload("Fetch with POST with DataView body", url, "POST", new DataView(new ArrayBuffer(8), 0, 4), "\0\0\0\0"); testUpload("Fetch with POST with Blob body with mime type", url, "POST", new Blob(["Test"], { type: "text/maybe" }), "Test"); +testUpload("Fetch with POST with ReadableStream", url, "POST", new ReadableStream({start: controller => { + const encoder = new TextEncoder(); + controller.enqueue(encoder.encode("Test")); + controller.close(); + }}), "Test"); +testUploadFailure("Fetch with POST with ReadableStream containing String", url, "POST", new ReadableStream({start: controller => { + controller.enqueue("Test"); + controller.close(); + }})); +testUploadFailure("Fetch with POST with ReadableStream containing null", url, "POST", new ReadableStream({start: controller => { + controller.enqueue(null); + controller.close(); + }})); +testUploadFailure("Fetch with POST with ReadableStream containing number", url, "POST", new ReadableStream({start: controller => { + controller.enqueue(99); + controller.close(); + }})); +testUploadFailure("Fetch with POST with ReadableStream containing ArrayBuffer", url, "POST", new ReadableStream({start: controller => { + controller.enqueue(new ArrayBuffer()); + controller.close(); + }})); +testUploadFailure("Fetch with POST with ReadableStream containing Blob", url, "POST", new ReadableStream({start: controller => { + controller.enqueue(new Blob()); + controller.close(); + }})); done();