From 26a029d407be480d791972afb5975cf62c9360a6 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Fri, 19 Apr 2024 02:47:55 +0200 Subject: Adding upstream version 124.0.1. Signed-off-by: Daniel Baumann --- dom/tests/mochitest/fetch/test_fetch_basic.js | 179 ++++++++++++++++++++++++++ 1 file changed, 179 insertions(+) create mode 100644 dom/tests/mochitest/fetch/test_fetch_basic.js (limited to 'dom/tests/mochitest/fetch/test_fetch_basic.js') diff --git a/dom/tests/mochitest/fetch/test_fetch_basic.js b/dom/tests/mochitest/fetch/test_fetch_basic.js new file mode 100644 index 0000000000..27343d8662 --- /dev/null +++ b/dom/tests/mochitest/fetch/test_fetch_basic.js @@ -0,0 +1,179 @@ +function testAboutURL() { + var p1 = fetch("about:blank").then( + function (res) { + ok(false, "about:blank should fail"); + }, + function (e) { + ok(e instanceof TypeError, "about:blank should fail"); + } + ); + + var p2 = fetch("about:config").then( + function (res) { + ok(false, "about:config should fail"); + }, + function (e) { + ok(e instanceof TypeError, "about:config should fail"); + } + ); + + return Promise.all([p1, p2]); +} + +function testDataURL() { + return Promise.all( + [ + [ + "data:text/plain;charset=UTF-8,Hello", + "text/plain;charset=UTF-8", + "Hello", + ], + [ + "data:text/plain;charset=utf-8;base64,SGVsbG8=", + "text/plain;charset=utf-8", + "Hello", + ], + [ + "data:text/xml,%3Cres%3Ehello%3C/res%3E%0A", + "text/xml", + "hello\n", + ], + ["data:text/plain,hello%20pass%0A", "text/plain", "hello pass\n"], + ["data:,foo", "text/plain;charset=US-ASCII", "foo"], + ["data:text/plain;base64,Zm9v", "text/plain", "foo"], + ["data:text/plain,foo#bar", "text/plain", "foo"], + ["data:text/plain,foo%23bar", "text/plain", "foo#bar"], + ].map(test => { + var uri = test[0], + contentType = test[1], + expectedBody = test[2]; + return fetch(uri).then(res => { + ok(true, "Data URL fetch should resolve"); + if (res.type == "error") { + ok(false, "Data URL fetch should not fail."); + return Promise.reject(); + } + ok(res instanceof Response, "Fetch should resolve to a Response"); + is(res.status, 200, "Data URL status should be 200"); + is(res.statusText, "OK", "Data URL statusText should be OK"); + ok( + res.headers.has("content-type"), + "Headers must have Content-Type header" + ); + is( + res.headers.get("content-type"), + contentType, + "Content-Type header should match specified value" + ); + return res + .text() + .then(body => is(body, expectedBody, "Data URL Body should match")); + }); + }) + ); +} + +function testSameOriginBlobURL() { + var blob = new Blob(["english ", "sentence"], { type: "text/plain" }); + var url = URL.createObjectURL(blob); + return fetch(url).then(function (res) { + URL.revokeObjectURL(url); + ok(true, "Blob URL fetch should resolve"); + if (res.type == "error") { + ok(false, "Blob URL fetch should not fail."); + return Promise.reject(); + } + ok(res instanceof Response, "Fetch should resolve to a Response"); + is(res.status, 200, "Blob fetch status should be 200"); + is(res.statusText, "OK", "Blob fetch statusText should be OK"); + ok( + res.headers.has("content-type"), + "Headers must have Content-Type header" + ); + is( + res.headers.get("content-type"), + blob.type, + "Content-Type header should match specified value" + ); + ok( + res.headers.has("content-length"), + "Headers must have Content-Length header" + ); + is( + parseInt(res.headers.get("content-length")), + 16, + "Content-Length should match Blob's size" + ); + return res.text().then(function (body) { + is(body, "english sentence", "Blob fetch body should match"); + }); + }); +} + +function testNonGetBlobURL() { + var blob = new Blob(["english ", "sentence"], { type: "text/plain" }); + var url = URL.createObjectURL(blob); + return Promise.all( + ["HEAD", "POST", "PUT", "DELETE"].map(method => { + var req = new Request(url, { method }); + return fetch(req) + .then(function (res) { + ok(false, "Blob URL with non-GET request should not succeed"); + }) + .catch(function (e) { + ok( + e instanceof TypeError, + "Blob URL with non-GET request should get a TypeError" + ); + }); + }) + ).then(function () { + URL.revokeObjectURL(url); + }); +} + +function testMozErrors() { + // mozErrors shouldn't be available to content and be ignored. + return fetch("http://localhost:4/should/fail", { mozErrors: true }) + .then(res => { + ok(false, "Request should not succeed"); + }) + .catch(err => { + ok(err instanceof TypeError); + }); +} + +function testRequestMozErrors() { + // mozErrors shouldn't be available to content and be ignored. + const r = new Request("http://localhost:4/should/fail", { mozErrors: true }); + return fetch(r) + .then(res => { + ok(false, "Request should not succeed"); + }) + .catch(err => { + ok(err instanceof TypeError); + }); +} + +function testViewSourceURL() { + var p2 = fetch("view-source:/").then( + function (res) { + ok(false, "view-source: URL should fail"); + }, + function (e) { + ok(e instanceof TypeError, "view-source: URL should fail"); + } + ); +} + +function runTest() { + return Promise.resolve() + .then(testAboutURL) + .then(testDataURL) + .then(testSameOriginBlobURL) + .then(testNonGetBlobURL) + .then(testMozErrors) + .then(testRequestMozErrors) + .then(testViewSourceURL); + // Put more promise based tests here. +} -- cgit v1.2.3