fune/testing/web-platform/tests/web-locks/resource-names.https.any.js
Kagami Sascha Rosylight d79e8ec3f8 Bug 1878367 - Mark Web Locks tests non-tentative r=smaug
This removes `tentative` from Web Locks tests which all three engines are passing. A couple of exceptions from https://wpt.fyi/results/web-locks?label=experimental&label=master&aligned

* clientids: The test follows the spec, I think this is a Chrome bug. (https://w3c.github.io/web-locks/#dom-lockmanager-request, the use of environment's id)
* signal: A couple of WebKit failures because of lack of AbortSignal custom reason support.

Differential Revision: https://phabricator.services.mozilla.com/D200477
2024-02-05 17:42:44 +00:00

56 lines
1.7 KiB
JavaScript

// META: title=Web Locks API: Resources DOMString edge cases
// META: global=window,dedicatedworker,sharedworker,serviceworker
'use strict';
function code_points(s) {
return [...s]
.map(c => '0x' + c.charCodeAt(0).toString(16).toUpperCase())
.join(' ');
}
[
'', // Empty strings
'abc\x00def', // Embedded NUL
'\uD800', // Unpaired low surrogage
'\uDC00', // Unpaired high surrogage
'\uDC00\uD800', // Swapped surrogate pair
'\uFFFF' // Non-character
].forEach(string => {
promise_test(async t => {
await navigator.locks.request(string, lock => {
assert_equals(lock.name, string,
'Requested name matches granted name');
});
}, 'DOMString: ' + code_points(string));
});
promise_test(async t => {
// '\uD800' treated as a USVString would become '\uFFFD'.
await navigator.locks.request('\uD800', async lock => {
assert_equals(lock.name, '\uD800');
// |lock| is held for the duration of this name. It
// Should not block acquiring |lock2| with a distinct
// DOMString.
await navigator.locks.request('\uFFFD', lock2 => {
assert_equals(lock2.name, '\uFFFD');
});
// If we did not time out, this passed.
});
}, 'Resource names that are not valid UTF-16 are not mangled');
promise_test(async t => {
for (const name of ['-', '-foo']) {
await promise_rejects_dom(
t, 'NotSupportedError',
navigator.locks.request(name, lock => {}),
'Names starting with "-" should be rejected');
}
let got_lock = false;
await navigator.locks.request('x-anything', lock => {
got_lock = true;
});
assert_true(got_lock, 'Names with embedded "-" should be accepted');
}, 'Names cannot start with "-"');