mirror of
https://github.com/servo/servo.git
synced 2025-06-25 01:24:37 +01:00
72 lines
2.4 KiB
JavaScript
72 lines
2.4 KiB
JavaScript
// META: script=resources/fetch-tests.js
|
|
// META: script=/common/gc.js
|
|
|
|
function fetch_should_succeed(test, request) {
|
|
return fetch(request).then(response => response.text());
|
|
}
|
|
|
|
function fetch_should_fail(test, url, method = 'GET') {
|
|
return promise_rejects_js(test, TypeError, fetch(url, {method: method}));
|
|
}
|
|
|
|
fetch_tests('fetch', fetch_should_succeed, fetch_should_fail);
|
|
|
|
promise_test(t => {
|
|
const blob_contents = 'test blob contents';
|
|
const blob_type = 'image/png';
|
|
const blob = new Blob([blob_contents], {type: blob_type});
|
|
const url = URL.createObjectURL(blob);
|
|
|
|
return fetch(url).then(response => {
|
|
assert_equals(response.headers.get('Content-Type'), blob_type);
|
|
});
|
|
}, 'fetch should return Content-Type from Blob');
|
|
|
|
promise_test(t => {
|
|
const blob_contents = 'test blob contents';
|
|
const blob = new Blob([blob_contents]);
|
|
const url = URL.createObjectURL(blob);
|
|
const request = new Request(url);
|
|
|
|
// Revoke the object URL. Request should take a reference to the blob as
|
|
// soon as it receives it in open(), so the request succeeds even though we
|
|
// revoke the URL before calling fetch().
|
|
URL.revokeObjectURL(url);
|
|
|
|
return fetch_should_succeed(t, request).then(text => {
|
|
assert_equals(text, blob_contents);
|
|
});
|
|
}, 'Revoke blob URL after creating Request, will fetch');
|
|
|
|
promise_test(async t => {
|
|
const blob_contents = 'test blob contents';
|
|
const blob = new Blob([blob_contents]);
|
|
const url = URL.createObjectURL(blob);
|
|
let request = new Request(url);
|
|
|
|
// Revoke the object URL. Request should take a reference to the blob as
|
|
// soon as it receives it in open(), so the request succeeds even though we
|
|
// revoke the URL before calling fetch().
|
|
URL.revokeObjectURL(url);
|
|
|
|
request = request.clone();
|
|
await garbageCollect();
|
|
|
|
const text = await fetch_should_succeed(t, request);
|
|
assert_equals(text, blob_contents);
|
|
}, 'Revoke blob URL after creating Request, then clone Request, will fetch');
|
|
|
|
promise_test(function(t) {
|
|
const blob_contents = 'test blob contents';
|
|
const blob = new Blob([blob_contents]);
|
|
const url = URL.createObjectURL(blob);
|
|
|
|
const result = fetch_should_succeed(t, url).then(text => {
|
|
assert_equals(text, blob_contents);
|
|
});
|
|
|
|
// Revoke the object URL. fetch should have already resolved the blob URL.
|
|
URL.revokeObjectURL(url);
|
|
|
|
return result;
|
|
}, 'Revoke blob URL after calling fetch, fetch should succeed');
|