Update web-platform-tests to revision 1268bd5901289acc95b1a576f108bdf382d82e44

This commit is contained in:
WPT Sync Bot 2019-12-19 08:23:25 +00:00
parent f183d66217
commit 292a12e545
261 changed files with 5513 additions and 966 deletions

View file

@ -10,6 +10,3 @@
[Revoke blob URL after creating Request, will fetch]
expected: FAIL
[Revoke blob URL after calling fetch, fetch should succeed]
expected: FAIL

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,91 @@
[font-variation-settings-composition.html]
[Compositing: property <font-variation-settings> underlying ['test' 100\] from add [normal\] to replace ['test' 200\] at (1.5) should be ['test' 200\]]
expected: FAIL
[Compositing: property <font-variation-settings> underlying ['test' 100\] from add [normal\] to replace ['test' 200\] at (0.5) should be ['test' 200\]]
expected: FAIL
[Compositing: property <font-variation-settings> underlying ['test' 50\] from add ['test' 100\] to replace ['test' 200\] at (0) should be ['test' 150\]]
expected: FAIL
[Compositing: property <font-variation-settings> underlying ['aaaa' 100, 'bbbb' 200\] from add ['aaaa' 20, 'bbbb' 50\] to add ['aaaa' 30, 'bbbb' 100\] at (0) should be ['aaaa' 120, 'bbbb' 250\]]
expected: FAIL
[Compositing: property <font-variation-settings> underlying ['test' 100\] from add ['aaaa' 20, 'bbbb' 50\] to add ['aaaa' 30, 'bbbb' 100\] at (1.5) should be ['aaaa' 35, 'bbbb' 125\]]
expected: FAIL
[Compositing: property <font-variation-settings> underlying ['test' 100\] from add [normal\] to replace ['test' 200\] at (0) should be [normal\]]
expected: FAIL
[Compositing: property <font-variation-settings> underlying ['test' 50\] from add ['test' 100\] to add ['test' 200\] at (-0.3) should be ['test' 120\]]
expected: FAIL
[Compositing: property <font-variation-settings> underlying ['test' 100\] from add [normal\] to replace ['test' 200\] at (1) should be ['test' 200\]]
expected: FAIL
[Compositing: property <font-variation-settings> underlying ['aaaa' 100, 'bbbb' 200\] from add ['aaaa' 20, 'bbbb' 50\] to add ['aaaa' 30, 'bbbb' 100\] at (1) should be ['aaaa' 130, 'bbbb' 300\]]
expected: FAIL
[Compositing: property <font-variation-settings> underlying ['test' 100\] from add [normal\] to add ['test' 200\] at (0.5) should be ['test' 300\]]
expected: FAIL
[Compositing: property <font-variation-settings> underlying ['test' 50\] from add ['test' 100\] to replace ['test' 200\] at (0.5) should be ['test' 175\]]
expected: FAIL
[Compositing: property <font-variation-settings> underlying ['test' 100\] from add [normal\] to add ['test' 200\] at (-0.3) should be [normal\]]
expected: FAIL
[Compositing: property <font-variation-settings> underlying ['test' 100\] from add [normal\] to add ['test' 200\] at (0) should be [normal\]]
expected: FAIL
[Compositing: property <font-variation-settings> underlying ['test' 100\] from add ['aaaa' 20, 'bbbb' 50\] to add ['aaaa' 30, 'bbbb' 100\] at (-0.3) should be ['aaaa' 17, 'bbbb' 35\]]
expected: FAIL
[Compositing: property <font-variation-settings> underlying ['test' 50\] from add ['test' 100\] to add ['test' 200\] at (0.5) should be ['test' 200\]]
expected: FAIL
[Compositing: property <font-variation-settings> underlying ['test' 100\] from add [normal\] to add ['test' 200\] at (1) should be ['test' 300\]]
expected: FAIL
[Compositing: property <font-variation-settings> underlying ['test' 100\] from add [normal\] to replace ['test' 200\] at (-0.3) should be [normal\]]
expected: FAIL
[Compositing: property <font-variation-settings> underlying ['test' 50\] from add ['test' 100\] to add ['test' 200\] at (1) should be ['test' 250\]]
expected: FAIL
[Compositing: property <font-variation-settings> underlying ['test' 50\] from add ['test' 100\] to replace ['test' 200\] at (1.5) should be ['test' 225\]]
expected: FAIL
[Compositing: property <font-variation-settings> underlying ['aaaa' 100, 'bbbb' 200\] from add ['aaaa' 20, 'bbbb' 50\] to add ['aaaa' 30, 'bbbb' 100\] at (1.5) should be ['aaaa' 135, 'bbbb' 325\]]
expected: FAIL
[Compositing: property <font-variation-settings> underlying ['test' 50\] from add ['test' 100\] to replace ['test' 200\] at (1) should be ['test' 200\]]
expected: FAIL
[Compositing: property <font-variation-settings> underlying ['test' 50\] from add ['test' 100\] to replace ['test' 200\] at (-0.3) should be ['test' 135\]]
expected: FAIL
[Compositing: property <font-variation-settings> underlying ['test' 50\] from add ['test' 100\] to add ['test' 200\] at (0) should be ['test' 150\]]
expected: FAIL
[Compositing: property <font-variation-settings> underlying ['test' 100\] from add [normal\] to add ['test' 200\] at (1.5) should be ['test' 300\]]
expected: FAIL
[Compositing: property <font-variation-settings> underlying ['aaaa' 100, 'bbbb' 200\] from add ['aaaa' 20, 'bbbb' 50\] to add ['aaaa' 30, 'bbbb' 100\] at (-0.3) should be ['aaaa' 117, 'bbbb' 235\]]
expected: FAIL
[Compositing: property <font-variation-settings> underlying ['test' 100\] from add ['aaaa' 20, 'bbbb' 50\] to add ['aaaa' 30, 'bbbb' 100\] at (1) should be ['aaaa' 30, 'bbbb' 100\]]
expected: FAIL
[Compositing: property <font-variation-settings> underlying ['aaaa' 100, 'bbbb' 200\] from add ['aaaa' 20, 'bbbb' 50\] to add ['aaaa' 30, 'bbbb' 100\] at (0.5) should be ['aaaa' 125, 'bbbb' 275\]]
expected: FAIL
[Compositing: property <font-variation-settings> underlying ['test' 100\] from add ['aaaa' 20, 'bbbb' 50\] to add ['aaaa' 30, 'bbbb' 100\] at (0) should be ['aaaa' 20, 'bbbb' 50\]]
expected: FAIL
[Compositing: property <font-variation-settings> underlying ['test' 50\] from add ['test' 100\] to add ['test' 200\] at (1.5) should be ['test' 300\]]
expected: FAIL
[Compositing: property <font-variation-settings> underlying ['test' 100\] from add ['aaaa' 20, 'bbbb' 50\] to add ['aaaa' 30, 'bbbb' 100\] at (0.5) should be ['aaaa' 25, 'bbbb' 75\]]
expected: FAIL

View file

@ -17,3 +17,6 @@
[Property image-orientation has initial value 0deg]
expected: FAIL
[Property image-orientation has initial value from-image]
expected: FAIL

View file

@ -0,0 +1,11 @@
[ch-recalc-on-font-load.html]
expected: ERROR
[ch in a normal div should be recalculated after loading a web font]
expected: FAIL
[ch in display:none should be recalculated after loading a web font]
expected: FAIL
[ch in display:contents should be recalculated after loading a web font]
expected: FAIL

View file

@ -2,3 +2,6 @@
[listeners are called when <iframe> is resized]
expected: FAIL
[listeners are called correct number of times]
expected: FAIL

View file

@ -1,4 +0,0 @@
[MediaQueryListEvent.html]
[argument of onchange]
expected: FAIL

View file

@ -1,4 +0,0 @@
[elementFromPoint-001.html]
[CSSOM View - 5 - extensions to the Document interface]
expected: FAIL

View file

@ -0,0 +1,10 @@
[getClientRects-inline-atomic-child.html]
[getClientRects-inline-atomic-child]
expected: FAIL
[getClientRects-inline-atomic-child 2]
expected: FAIL
[getClientRects-inline-atomic-child 1]
expected: FAIL

View file

@ -1,7 +0,0 @@
[offsetTopLeft-border-box.html]
[container: 1]
expected: FAIL
[container: 0]
expected: FAIL

View file

@ -2,7 +2,6 @@
type: testharness
[single-byte-decoder.html?document]
expected: TIMEOUT
[ISO-8859-4: iso_8859-4:1988 (document.characterSet and document.inputEncoding)]
expected: FAIL

View file

@ -5,3 +5,6 @@
[Check isHistoryNavigation attribute]
expected: FAIL
[Check destination attribute]
expected: FAIL

View file

@ -309,15 +309,24 @@
[<iframe>: separate response Content-Type: */* text/html]
expected: FAIL
[<iframe>: combined response Content-Type: */* text/html]
expected: FAIL
[<iframe>: separate response Content-Type: text/html;" text/plain]
expected: FAIL
[<iframe>: separate response Content-Type: text/html */*]
expected: FAIL
[<iframe>: separate response Content-Type: text/html;" \\" text/plain]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;" text/plain]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
expected: FAIL
[<iframe>: separate response Content-Type: text/plain */*]
expected: FAIL
[<iframe>: combined response Content-Type: text/html */*;charset=gbk]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;x=" text/plain]
expected: FAIL
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
expected: FAIL

View file

@ -53,6 +53,3 @@
[combined text/javascript ]
expected: FAIL
[separate text/javascript x/x]
expected: FAIL

View file

@ -27,3 +27,12 @@
[Https downgrade-upgrade top level navigation: sec-fetch-site]
expected: FAIL
[Https downgrade-upgrade script => No headers: sec-fetch-dest]
expected: FAIL
[Https downgrade-upgrade iframe: sec-fetch-dest]
expected: FAIL
[Https downgrade-upgrade top level navigation: sec-fetch-dest]
expected: FAIL

View file

@ -27,3 +27,12 @@
[Http upgrade script => No headers: sec-fetch-site]
expected: FAIL
[Http upgrade script => No headers: sec-fetch-dest]
expected: FAIL
[Http upgrade iframe: sec-fetch-dest]
expected: FAIL
[Http upgrade top level navigation: sec-fetch-dest]
expected: FAIL

View file

@ -11,3 +11,6 @@
[X-Content-Type-Options%3A%20nosniff%0C]
expected: FAIL
[X-Content-Type-Options%3A%20%2Cnosniff]
expected: FAIL

View file

@ -8,8 +8,14 @@
expected: FAIL
[Embedded credentials are treated as network errors in new windows.]
expected: TIMEOUT
expected: FAIL
[Embedded credentials matching the top-level are treated as network errors for cross-origin URLs.]
expected: TIMEOUT
[Embedded credentials matching the top-level are not treated as network errors for same-origin URLs.]
expected: TIMEOUT
[Embedded credentials matching the top-level are not treated as network errors for relative URLs.]
expected: TIMEOUT

View file

@ -1,4 +0,0 @@
[traverse_the_history_1.html]
[Multiple history traversals from the same task]
expected: FAIL

View file

@ -0,0 +1,4 @@
[creating_browsing_context_test_01.html]
[first argument: absolute url]
expected: FAIL

View file

@ -12597,3 +12597,63 @@
[link.autofocus: setAttribute() to object "[object Object\]"]
expected: FAIL
[link.referrerPolicy: setAttribute() to "ſtrict-origin"]
expected: FAIL
[link.as: setAttribute() to "xſlt"]
expected: FAIL
[link.referrerPolicy: setAttribute() to "unſafe-url"]
expected: FAIL
[link.as: setAttribute() to "ſharedworker"]
expected: FAIL
[link.as: IDL set to "ſharedworker"]
expected: FAIL
[link.referrerPolicy: setAttribute() to "ſtrict-origin-when-croſſ-origin"]
expected: FAIL
[link.referrerPolicy: IDL set to "origin-when-croſſ-origin"]
expected: FAIL
[link.referrerPolicy: IDL set to "ſtrict-origin"]
expected: FAIL
[link.referrerPolicy: IDL set to "unſafe-url"]
expected: FAIL
[link.referrerPolicy: IDL set to "ſame-origin"]
expected: FAIL
[link.as: IDL set to "ſcript"]
expected: FAIL
[link.as: IDL set to "manifeſt"]
expected: FAIL
[link.referrerPolicy: setAttribute() to "origin-when-croſſ-origin"]
expected: FAIL
[link.referrerPolicy: IDL set to "ſtrict-origin-when-croſſ-origin"]
expected: FAIL
[link.as: setAttribute() to "ſtyle"]
expected: FAIL
[link.as: IDL set to "xſlt"]
expected: FAIL
[link.referrerPolicy: setAttribute() to "ſame-origin"]
expected: FAIL
[link.as: IDL set to "ſtyle"]
expected: FAIL
[link.as: setAttribute() to "ſcript"]
expected: FAIL
[link.as: setAttribute() to "manifeſt"]
expected: FAIL

View file

@ -21252,3 +21252,27 @@
[summary.autofocus: typeof IDL attribute]
expected: FAIL
[undefinedelement.enterKeyHint: IDL set to "previouſ"]
expected: FAIL
[undefinedelement.inputMode: IDL set to "ſearch"]
expected: FAIL
[undefinedelement.enterKeyHint: IDL set to "ſearch"]
expected: FAIL
[undefinedelement.enterKeyHint: IDL set to "ſend"]
expected: FAIL
[undefinedelement.enterKeyHint: setAttribute() to "ſend"]
expected: FAIL
[undefinedelement.enterKeyHint: setAttribute() to "ſearch"]
expected: FAIL
[undefinedelement.inputMode: setAttribute() to "ſearch"]
expected: FAIL
[undefinedelement.enterKeyHint: setAttribute() to "previouſ"]
expected: FAIL

View file

@ -39759,3 +39759,33 @@
[bdi.autofocus: IDL set to -Infinity]
expected: FAIL
[a.referrerPolicy: setAttribute() to "ſtrict-origin"]
expected: FAIL
[a.referrerPolicy: IDL set to "ſame-origin"]
expected: FAIL
[a.referrerPolicy: IDL set to "ſtrict-origin"]
expected: FAIL
[a.referrerPolicy: setAttribute() to "ſame-origin"]
expected: FAIL
[a.referrerPolicy: IDL set to "ſtrict-origin-when-croſſ-origin"]
expected: FAIL
[a.referrerPolicy: setAttribute() to "unſafe-url"]
expected: FAIL
[a.referrerPolicy: IDL set to "origin-when-croſſ-origin"]
expected: FAIL
[a.referrerPolicy: setAttribute() to "ſtrict-origin-when-croſſ-origin"]
expected: FAIL
[a.referrerPolicy: IDL set to "unſafe-url"]
expected: FAIL
[a.referrerPolicy: setAttribute() to "origin-when-croſſ-origin"]
expected: FAIL

View file

@ -5,14 +5,14 @@
expected: NOTRUN
[Check that rel=noopener with target=_parent does a normal load]
expected: TIMEOUT
expected: FAIL
[Check that rel=noopener with target=_top does a normal load]
expected: TIMEOUT
expected: FAIL
[Check that targeting of rel=noopener with a given name reuses an existing window with that name]
expected: NOTRUN
[Check that rel=noopener with target=_self does a normal load]
expected: NOTRUN
expected: FAIL

View file

@ -0,0 +1,4 @@
[DOMContentLoaded-defer.html]
[The end: DOMContentLoaded and defer scripts]
expected: FAIL

View file

@ -1,5 +1,4 @@
[promise-rejection-events.html]
expected: TIMEOUT
[delayed handling: delaying handling rejected promise created from createImageBitmap will cause both events to fire]
expected: FAIL
@ -9,6 +8,3 @@
[no unhandledrejection/rejectionhandled: rejection handler attached synchronously to a promise created from createImageBitmap]
expected: FAIL
[rejectionhandled is dispatched from a queued task, and not immediately]
expected: TIMEOUT

View file

@ -10,3 +10,6 @@
[Verifies the resolution of entry.startTime is at least 20 microseconds.]
expected: TIMEOUT
[Verifies the resolution of performance.now() is at least 5 microseconds.]
expected: FAIL

View file

@ -1,5 +1,4 @@
[realtimeanalyser-fft-scaling.html]
expected: TIMEOUT
[X 2048-point FFT peak position is not equal to 64. Got 0.]
expected: FAIL

View file

@ -1,2 +1,11 @@
[audiobuffersource-multi-channels.html]
expected: ERROR
[Executing "initialize"]
expected: TIMEOUT
[Audit report]
expected: NOTRUN
[Executing "test"]
expected: NOTRUN

View file

@ -18,3 +18,12 @@
[< [test-resume\] 1 out of 4 assertions were failed.]
expected: FAIL
[Executing "test-after-close"]
expected: TIMEOUT
[Audit report]
expected: NOTRUN
[Executing "resume-running-context"]
expected: NOTRUN

View file

@ -1,2 +1,4 @@
[audioworklet-suspend.https.html]
expected: ERROR
[Executing "load-worklet-and-suspend"]
expected: FAIL

View file

@ -1,5 +1,4 @@
[xrSession_features_deviceSupport.https.html]
expected: ERROR
[Immersive XRSession requests with no supported device should reject]
expected: FAIL

View file

@ -1,4 +1,5 @@
[005.html]
expected: ERROR
[dedicated worker in shared worker in dedicated worker]
expected: FAIL

View file

@ -6,6 +6,7 @@
<script src="/common/namespaces.js"></script>
<script src="/common/media.js"></script>
<script src="common.sub.js"></script>
<script src="/common/get-host-info.sub.js"></script>
<div id=log></div>
<script>
let worker, continuations = {};
@ -40,4 +41,12 @@ for (let { name, factory } of imageSourceTypes) {
});
}, `Serialize ImageBitmap created from ${name}`);
}
promise_test(async (t) => {
const url = get_host_info().REMOTE_ORIGIN + '/images/pattern.png';
const image = await makeMakeHTMLImage(url)();
const bitmap = await createImageBitmap(image);
assert_throws('DataCloneError', () => worker.postMessage(bitmap));
}, 'Serializing a non-origin-clean ImageBitmap throws.');
</script>

View file

@ -5,6 +5,7 @@
<script src="/resources/testharnessreport.js"></script>
<script src="/common/media.js"></script>
<script src="common.sub.js"></script>
<script src="/common/get-host-info.sub.js"></script>
<div id=log></div>
<script>
let worker, continuations = {};
@ -39,4 +40,14 @@ for (let { name, factory } of imageSourceTypes) {
});
}, `Transfer ImageBitmap created from ${name}`);
}
promise_test(async (t) => {
const url = get_host_info().REMOTE_ORIGIN + '/images/pattern.png';
const image = await makeMakeHTMLImage(url)();
const bitmap = await createImageBitmap(image);
assert_throws('DataCloneError',
() => worker.postMessage(bitmap, [bitmap]));
}, 'Transferring a non-origin-clean ImageBitmap throws.');
</script>

View file

@ -1,50 +0,0 @@
// META: script=/common/utils.js
// META: script=/common/get-host-info.sub.js
function taintedImageBitmap(t) {
return new Promise(resolve => {
const img = new Image();
img.src = `${get_host_info().HTTPS_REMOTE_ORIGIN}/images/blue.png`;
img.onload = t.step_func(() => {
resolve(createImageBitmap(img));
});
img.onerror = t.unreached_func();
});
}
async_test(t => {
const bc = new BroadcastChannel(token());
const popup = window.open(`resources/coop-coep-popup.html?channel=${bc.name}`);
const popupReady = new Promise(resolve => {
bc.onmessage = t.step_func(resolve);
});
const imageReady = taintedImageBitmap(t);
Promise.all([popupReady, imageReady]).then(t.step_func(([, bitmap]) => {
bc.onmessage = t.step_func_done(e => {
assert_equals(e.data, "Got failure as expected.");
});
bc.postMessage(bitmap);
}));
}, "BroadcastChannel'ing a tainted ImageBitmap to a COOP+COEP popup");
[
{
"type": "serialize/deserialize",
"message": (port, bitmap) => port.postMessage(bitmap)
},
{
"type": "transfer",
"message": (port, bitmap) => port.postMessage(bitmap, [bitmap])
}
].forEach(({ type, message }) => {
async_test(t => {
const sw = new SharedWorker("resources/coop-coep-worker.js");
const imageReady = taintedImageBitmap(t);
imageReady.then(t.step_func(bitmap => {
sw.port.onmessage = t.step_func_done(e => {
assert_equals(e.data, "Got failure as expected.");
});
message(sw.port, bitmap);
}));
}, `Messaging a tainted ImageBitMap via ${type} to a COEP shared worker`);
});

View file

@ -1,11 +0,0 @@
<script>
const channel = new URLSearchParams(location.search).get("channel");
const bc = new BroadcastChannel(channel);
bc.onmessageerror = e => {
bc.postMessage("Got failure as expected.");
}
bc.onmessage = e => {
bc.postMessage("Got message, expected failure.");
}
bc.postMessage("Initialize");
</script>

View file

@ -1,2 +0,0 @@
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp

View file

@ -1,9 +0,0 @@
onconnect = e => {
const port = e.source;
port.onmessageerror = e => {
port.postMessage("Got failure as expected.");
}
port.onmessage = e => {
port.postMessage("Got message, expected failure.");
}
}

View file

@ -1 +0,0 @@
Cross-Origin-Embedder-Policy: require-corp

View file

@ -8,6 +8,7 @@
'use strict';
const test_desc = 'Requires a user gesture.';
const expected = new DOMException(
'Failed to execute \'requestDevice\' on \'Bluetooth\': ' +
'Must be handling a user gesture to show a permission request.',
'SecurityError');

View file

@ -6,8 +6,9 @@
const test_desc = 'disconnect() called before getPrimaryService. ' +
'Reject with NetworkError.';
const expected = new DOMException(
'GATT Server is disconnected. Cannot retrieve services. (Re)connect ' +
'first with `device.gatt.connect`.',
`Failed to execute 'getPrimaryService' on 'BluetoothRemoteGATTServer': ` +
`GATT Server is disconnected. Cannot retrieve services. (Re)connect ` +
`first with \`device.gatt.connect\`.`,
'NetworkError');
let device;

View file

@ -7,6 +7,14 @@ const test_desc = 'Calls on services after we disconnect and connect again. ' +
'Should reject with InvalidStateError.';
let device, services;
function createDOMException(func, uuid) {
return new DOMException(
`Failed to execute '${func}' on 'BluetoothRemoteGATTService': ` +
`Service with UUID ${uuid} is no longer valid. Remember to retrieve ` +
`the service again after reconnecting.`,
'InvalidStateError');
}
bluetooth_test(
() => getHealthThermometerDevice(
{filters: [{services: ['health_thermometer']}]})
@ -19,22 +27,18 @@ bluetooth_test(
.then(() => {
let promises = Promise.resolve();
for (let service of services) {
let error = new DOMException(
`Service with UUID ${
service.uuid} is no longer valid. Remember ` +
`to retrieve the service again after reconnecting.`,
'InvalidStateError');
promises = promises.then(
() => assert_promise_rejects_with_message(
service.getCharacteristic('measurement_interval'),
error));
createDOMException('getCharacteristic' , service.uuid)));
promises = promises.then(
() => assert_promise_rejects_with_message(
service.getCharacteristics(), error));
service.getCharacteristics(),
createDOMException('getCharacteristics' , service.uuid)));
promises = promises.then(
() => assert_promise_rejects_with_message(
service.getCharacteristics('measurement_interval'),
error));
createDOMException('getCharacteristics' , service.uuid)));
}
return promises;
}),

View file

@ -6,8 +6,9 @@
const test_desc = 'getPrimaryService called before connecting. Reject with ' +
'NetworkError.';
const expected = new DOMException(
'GATT Server is disconnected. Cannot retrieve services. (Re)connect ' +
'first with `device.gatt.connect`.',
`Failed to execute 'getPrimaryService' on 'BluetoothRemoteGATTServer': ` +
`GATT Server is disconnected. Cannot retrieve services. (Re)connect ` +
`first with \`device.gatt.connect\`.`,
'NetworkError');
bluetooth_test(

View file

@ -6,8 +6,9 @@
const test_desc = 'disconnect() called before getPrimaryServices. ' +
'Reject with NetworkError.';
const expected = new DOMException(
'GATT Server is disconnected. Cannot retrieve services. (Re)connect ' +
'first with `device.gatt.connect`.',
`Failed to execute 'getPrimaryServices' on 'BluetoothRemoteGATTServer': ` +
`GATT Server is disconnected. Cannot retrieve services. (Re)connect ` +
`first with \`device.gatt.connect\`.`,
'NetworkError');
let device;

View file

@ -6,8 +6,9 @@
const test_desc = 'disconnect() called before getPrimaryServices. ' +
'Reject with NetworkError.';
const expected = new DOMException(
'GATT Server is disconnected. Cannot retrieve services. (Re)connect ' +
'first with `device.gatt.connect`.',
`Failed to execute 'getPrimaryServices' on 'BluetoothRemoteGATTServer': ` +
`GATT Server is disconnected. Cannot retrieve services. (Re)connect ` +
`first with \`device.gatt.connect\`.`,
'NetworkError');
let device;

View file

@ -7,6 +7,14 @@ const test_desc = 'Calls on services after we disconnect and connect again. ' +
'Should reject with InvalidStateError.';
let device, services;
function createDOMException(func, uuid) {
return new DOMException(
`Failed to execute '${func}' on 'BluetoothRemoteGATTService': ` +
`Service with UUID ${uuid} is no longer valid. Remember to retrieve ` +
`the service again after reconnecting.`,
'InvalidStateError');
}
bluetooth_test(
() => getHealthThermometerDevice(
{filters: [{services: ['health_thermometer']}]})
@ -19,22 +27,18 @@ bluetooth_test(
.then(() => {
let promises = Promise.resolve();
for (let service of services) {
let error = new DOMException(
`Service with UUID ${
service.uuid} is no longer valid. Remember ` +
`to retrieve the service again after reconnecting.`,
'InvalidStateError');
promises = promises.then(
() => assert_promise_rejects_with_message(
service.getCharacteristic('measurement_interval'),
error));
createDOMException('getCharacteristic', service.uuid)));
promises = promises.then(
() => assert_promise_rejects_with_message(
service.getCharacteristics(), error));
service.getCharacteristics(),
createDOMException('getCharacteristics', service.uuid)));
promises = promises.then(
() => assert_promise_rejects_with_message(
service.getCharacteristics('measurement_interval'),
error));
createDOMException('getCharacteristics', service.uuid)));
}
return promises;
}),

View file

@ -7,6 +7,14 @@ const test_desc = 'Calls on services after we disconnect and connect again. ' +
'Should reject with InvalidStateError.';
let device, services;
function createDOMException(func, uuid) {
return new DOMException(
`Failed to execute '${func}' on 'BluetoothRemoteGATTService': ` +
`Service with UUID ${uuid} is no longer valid. Remember to retrieve ` +
`the service again after reconnecting.`,
'InvalidStateError');
}
bluetooth_test(
() => getHealthThermometerDevice(
{filters: [{services: ['health_thermometer']}]})
@ -19,22 +27,18 @@ bluetooth_test(
.then(() => {
let promises = Promise.resolve();
for (let service of services) {
let error = new DOMException(
`Service with UUID ${
service.uuid} is no longer valid. Remember ` +
`to retrieve the service again after reconnecting.`,
'InvalidStateError');
promises = promises.then(
() => assert_promise_rejects_with_message(
service.getCharacteristic('measurement_interval'),
error));
createDOMException('getCharacteristic', service.uuid)));
promises = promises.then(
() => assert_promise_rejects_with_message(
service.getCharacteristics(), error));
service.getCharacteristics(),
createDOMException('getCharacteristics', service.uuid)));
promises = promises.then(
() => assert_promise_rejects_with_message(
service.getCharacteristics('measurement_interval'),
error));
createDOMException('getCharacteristics', service.uuid)));
}
return promises;
}),

View file

@ -6,8 +6,9 @@
const test_desc = 'getPrimaryServices called before connecting. Reject with ' +
'NetworkError.';
const expected = new DOMException(
'GATT Server is disconnected. Cannot retrieve services. (Re)connect ' +
'first with `device.gatt.connect`.',
`Failed to execute 'getPrimaryServices' on 'BluetoothRemoteGATTServer': ` +
`GATT Server is disconnected. Cannot retrieve services. (Re)connect ` +
`first with \`device.gatt.connect\`.`,
'NetworkError');
bluetooth_test(

View file

@ -6,8 +6,9 @@
const test_desc = 'getPrimaryServices called before connecting. Reject with ' +
'NetworkError.';
const expected = new DOMException(
'GATT Server is disconnected. Cannot retrieve services. (Re)connect ' +
'first with `device.gatt.connect`.',
`Failed to execute 'getPrimaryServices' on 'BluetoothRemoteGATTServer': ` +
`GATT Server is disconnected. Cannot retrieve services. (Re)connect ` +
`first with \`device.gatt.connect\`.`,
'NetworkError');
bluetooth_test(

View file

@ -0,0 +1,11 @@
<!DOCTYPE html>
<title>Compatibility Test Reference</title>
<style>
#square {
height: 100px;
width: 100px;
background-image: linear-gradient(to bottom, orange, blue);
}
</style>
<p>You should see a square, orange at the top, blue at the bottom.</p>
<div id="square"></div>

View file

@ -0,0 +1,18 @@
<!DOCTYPE html>
<title>Compatibility Test: -webkit-linear-gradient() diff with linear-gradient()</title>
<link rel="help" href="https://compat.spec.whatwg.org/#css-gradients-webkit-linear-gradient">
<link rel="match" href="webkit-linear-gradient-diff-unprefixed-ref.html">
<style>
#square {
height: 100px;
width: 100px;
}
</style>
<p>You should see a square, orange at the top, blue at the bottom.</p>
<div id="square"></div>
<script>
square.offsetTop;
square.style.backgroundImage = "-webkit-linear-gradient(bottom, orange, blue)";
square.offsetTop;
square.style.backgroundImage = "linear-gradient(to bottom, orange, blue)";
</script>

View file

@ -0,0 +1,28 @@
<!doctype html>
<title>CSS Color Adjust Test: meta color-scheme - attribute changes</title>
<meta id="meta" name="color-scheme" content="dark">
<link rel="help" href="https://drafts.csswg.org/css-color-adjust-1/#color-scheme-meta">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/compute-root-color-scheme.js"></script>
<script>
assert_root_color_scheme("dark", "Meta color-scheme initially 'dark'.");
meta.removeAttribute("name");
assert_root_color_scheme("normal", "Removed name attribute from meta color-scheme.");
meta.setAttribute("name", "color-scheme");
assert_root_color_scheme("dark", "Set meta name to color-scheme.");
meta.setAttribute("content", "");
assert_root_color_scheme("normal", "Set content attribute of meta color-scheme to empty string.");
meta.setAttribute("content", ",,invalid");
assert_root_color_scheme("normal", "Set content attribute of meta color-scheme to an invalid value.");
meta.setAttribute("content", "light");
assert_root_color_scheme("light", "Set content attribute of meta color-scheme to 'light'.");
meta.removeAttribute("content");
assert_root_color_scheme("normal", "Removed the content attribute of meta color-scheme.");
</script>

View file

@ -0,0 +1,10 @@
<!doctype html>
<title>CSS Color Adjust Test: meta color-scheme - empty content value</title>
<meta name="color-scheme" content="">
<link rel="help" href="https://drafts.csswg.org/css-color-adjust-1/#color-scheme-meta">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/compute-root-color-scheme.js"></script>
<script>
assert_root_color_scheme("normal", "Meta color-scheme with empty content attribute has no effect.");
</script>

View file

@ -0,0 +1,16 @@
<!doctype html>
<title>CSS Color Adjust Test: multiple meta tags - first valid applies</title>
<meta name="color-scheme">
<meta name="color-scheme" content>
<meta name="color-scheme" content="">
<meta name="color-scheme" content="light,dark">
<!-- This is first with a valid content value -->
<meta name="color-scheme" content="dark">
<meta name="color-scheme" content="light">
<link rel="help" href="https://drafts.csswg.org/css-color-adjust-1/#color-scheme-meta">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/compute-root-color-scheme.js"></script>
<script>
assert_root_color_scheme("dark", "Tree order decides which meta color-scheme applies.");
</script>

View file

@ -0,0 +1,22 @@
<!doctype html>
<title>CSS Color Adjust Test: insert meta tags</title>
<link rel="help" href="https://drafts.csswg.org/css-color-adjust-1/#color-scheme-meta">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/compute-root-color-scheme.js"></script>
<script>
function createMeta(content) {
const meta = document.createElement("meta");
meta.setAttribute("name", "color-scheme");
meta.setAttribute("content", content);
return meta;
}
assert_root_color_scheme("normal", "Initial color-scheme");
document.head.appendChild(createMeta("light"));
assert_root_color_scheme("light", "Inserted meta color-scheme applies");
document.head.insertBefore(createMeta("dark"), document.head.lastChild);
assert_root_color_scheme("dark", "Inserted meta color-scheme before existing in head applies");
</script>

View file

@ -0,0 +1,10 @@
<!doctype html>
<title>CSS Color Adjust Test: meta color-scheme - no content value</title>
<meta name="color-scheme">
<link rel="help" href="https://drafts.csswg.org/css-color-adjust-1/#color-scheme-meta">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/compute-root-color-scheme.js"></script>
<script>
assert_root_color_scheme("normal", "Meta color-scheme without content attribute has no effect.");
</script>

View file

@ -0,0 +1,15 @@
<!doctype html>
<title>CSS Color Adjust Test: meta color-scheme - presentational hint</title>
<link rel="help" href="https://drafts.csswg.org/css-color-adjust-1/#color-scheme-meta">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/compute-root-color-scheme.js"></script>
<style>
* { color-scheme: light }
</style>
<meta name="color-scheme" content="dark">
<script>
// Author level CSS color-scheme property overrides meta color-scheme value
// which is at the presentational hint cascade order.
assert_root_color_scheme("light", "Author origin style rule overrides meta color-scheme.");
</script>

View file

@ -0,0 +1,13 @@
<!doctype html>
<title>CSS Color Adjust Test: Remove head with meta color-scheme</title>
<meta name="color-scheme" content="dark">
<link rel="help" href="https://drafts.csswg.org/css-color-adjust-1/#color-scheme-meta">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/compute-root-color-scheme.js"></script>
<body></body>
<script>
assert_root_color_scheme("dark", "Meta color-scheme applies.");
document.head.remove();
assert_root_color_scheme("normal", "Initial value after removing head including meta color-scheme.");
</script>

View file

@ -0,0 +1,15 @@
<!doctype html>
<title>CSS Color Adjust Test: remove meta tag</title>
<meta id="dark" name="color-scheme" content="dark">
<meta id="light" name="color-scheme" content="light">
<link rel="help" href="https://drafts.csswg.org/css-color-adjust-1/#color-scheme-meta">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/compute-root-color-scheme.js"></script>
<script>
assert_root_color_scheme("dark", "First meta applies.");
dark.remove();
assert_root_color_scheme("light", "Second meta applies after first one is removed.");
light.remove();
assert_root_color_scheme("normal", "Initial color-scheme with both meta elements removed.");
</script>

View file

@ -0,0 +1,12 @@
<!doctype html>
<title>CSS Color Adjust Test: meta color-scheme in body should not apply</title>
<link rel="help" href="https://drafts.csswg.org/css-color-adjust-1/#color-scheme-meta">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/compute-root-color-scheme.js"></script>
<body>
<meta name="color-scheme" content="dark">
</body>
<script>
assert_root_color_scheme("normal", "Meta color-scheme in body does not apply.");
</script>

View file

@ -0,0 +1,10 @@
<!doctype html>
<title>CSS Color Adjust Test: Single meta color-scheme in head</title>
<meta name="color-scheme" content="dark">
<link rel="help" href="https://drafts.csswg.org/css-color-adjust-1/#color-scheme-meta">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/compute-root-color-scheme.js"></script>
<script>
assert_root_color_scheme("dark", "Meta color-scheme in head applies.");
</script>

View file

@ -0,0 +1,18 @@
<!doctype html>
<title>CSS Color Adjust Test: meta color-scheme in shadow-tree should not apply</title>
<link rel="help" href="https://drafts.csswg.org/css-color-adjust-1/#color-scheme-meta">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/compute-root-color-scheme.js"></script>
<script>
const host = document.createElement("div");
host.id = "host";
document.head.appendChild(host);
const root = host.attachShadow({mode:"open"});
const meta = document.createElement("meta");
meta.setAttribute("name", "color-scheme");
meta.setAttribute("content", "dark");
root.appendChild(meta);
assert_root_color_scheme("normal", "Meta color-scheme in shadow tree does not apply.");
</script>

View file

@ -0,0 +1,7 @@
'use strict';
function assert_root_color_scheme(expected, description) {
test(() => {
assert_equals(getComputedStyle(document.documentElement).colorScheme, expected), "Check root element color scheme";
}, description);
}

View file

@ -0,0 +1,92 @@
<!DOCTYPE html>
<meta charset="UTF-8">
<title>font-variation-settings composition</title>
<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#propdef-font-variation-settings">
<meta name="assert" content="font-variation-settings supports animation pairwise by 'like' properties">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/interpolation-testcommon.js"></script>
<body></body>
<script>
test_composition({
property: 'font-variation-settings',
underlying: "'test' 50",
addFrom: "'test' 100",
addTo: "'test' 200",
}, [
{at: -0.3, expect: "'test' 120"},
{at: 0, expect: "'test' 150"},
{at: 0.5, expect: "'test' 200"},
{at: 1, expect: "'test' 250"},
{at: 1.5, expect: "'test' 300"},
]);
test_composition({
property: 'font-variation-settings',
underlying: "'test' 50",
addFrom: "'test' 100",
replaceTo: "'test' 200",
}, [
{at: -0.3, expect: "'test' 135"},
{at: 0, expect: "'test' 150"},
{at: 0.5, expect: "'test' 175"},
{at: 1, expect: "'test' 200"},
{at: 1.5, expect: "'test' 225"},
]);
test_composition({
property: 'font-variation-settings',
underlying: "'test' 100",
addFrom: 'normal',
replaceTo: "'test' 200",
}, [
{at: -0.3, expect: 'normal'},
{at: 0, expect: 'normal'},
{at: 0.5, expect: "'test' 200"},
{at: 1, expect: "'test' 200"},
{at: 1.5, expect: "'test' 200"},
]);
test_composition({
property: 'font-variation-settings',
underlying: "'test' 100",
addFrom: 'normal',
addTo: "'test' 200",
}, [
{at: -0.3, expect: 'normal'},
{at: 0, expect: 'normal'},
{at: 0.5, expect: "'test' 300"},
{at: 1, expect: "'test' 300"},
{at: 1.5, expect: "'test' 300"},
]);
test_composition({
property: 'font-variation-settings',
underlying: "'aaaa' 100, 'bbbb' 200",
addFrom: "'aaaa' 20, 'bbbb' 50",
addTo: "'aaaa' 30, 'bbbb' 100",
}, [
{at: -0.3, expect: "'aaaa' 117, 'bbbb' 235"},
{at: 0, expect: "'aaaa' 120, 'bbbb' 250"},
{at: 0.5, expect: "'aaaa' 125, 'bbbb' 275"},
{at: 1, expect: "'aaaa' 130, 'bbbb' 300"},
{at: 1.5, expect: "'aaaa' 135, 'bbbb' 325"},
]);
test_composition({
property: 'font-variation-settings',
underlying: "'test' 100",
addFrom: "'aaaa' 20, 'bbbb' 50",
addTo: "'aaaa' 30, 'bbbb' 100",
}, [
{at: -0.3, expect: "'aaaa' 17, 'bbbb' 35"},
{at: 0, expect: "'aaaa' 20, 'bbbb' 50"},
{at: 0.5, expect: "'aaaa' 25, 'bbbb' 75"},
{at: 1, expect: "'aaaa' 30, 'bbbb' 100"},
{at: 1.5, expect: "'aaaa' 35, 'bbbb' 125"},
]);
</script>
</body>

View file

@ -15,7 +15,7 @@
<div id="target"></div>
</div>
<script>
assert_inherited('image-orientation', '0deg', 'from-image'); // none is 0deg
assert_inherited('image-orientation', 'from-image', 'none');
assert_inherited('image-rendering', 'auto', 'pixelated');
assert_not_inherited('object-fit', 'fill', 'contain');
assert_not_inherited('object-position', '50% 50%', '10px 20px');

View file

@ -0,0 +1,28 @@
<!DOCTYPE html>
<html lang="en">
<meta charset="UTF-8">
<title>CSS Reftest Reference</title>
<link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/">
<style>
div
{
font-size: 300%;
}
span
{
color: maroon;
text-decoration: underline dotted fuchsia;
}
</style>
<p>PREREQUISITE: User agent needs to have an enabled and capable grammar error module. If it does not, then this test does not apply to such user agent.
<p>Test passes if each glyph of "thing" is maroon and if "thing" is underlined with a fuchsia dotted line.
<div contenteditable="true">Many <span>thing</span> can happen.</div>

View file

@ -0,0 +1,33 @@
<!DOCTYPE html>
<html lang="en">
<meta charset="UTF-8">
<title>CSS Pseudo-Elements Test: highlighting of grammar error (basic)</title>
<link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/">
<link rel="help" href="https://www.w3.org/TR/css-pseudo-4/#highlight-selectors">
<link rel="help" href="https://www.w3.org/TR/css-pseudo-4/#highlight-styling">
<link rel="match" href="grammar-error-001-ref.html">
<meta content="" name="flags">
<style>
div
{
font-size: 300%;
}
div::grammar-error
{
color: maroon;
text-decoration: underline dotted fuchsia;
}
</style>
<p>PREREQUISITE: User agent needs to have an enabled and capable grammar error module. If it does not, then this test does not apply to such user agent.
<p>Test passes if each glyph of "thing" is maroon and if "thing" is underlined with a fuchsia dotted line.
<div contenteditable="true">Many thing can happen.</div>

View file

@ -0,0 +1,72 @@
<!DOCTYPE html>
<html><head>
<meta charset="utf-8">
<title>CSS Reference: ::marker pseudo elements styled with 'content' property</title>
<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com">
<style>
:root {
--red-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="32" height="16" style="background: red"></svg>');
--green-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="32" height="16" style="background: green"></svg>');
}
ul {
float: left;
}
.inside {
list-style-position: inside;
}
.text, .image {
list-style-type: none;
list-style-image: none;
}
.outside.text::before, .outside.image::before {
display: inline-block;
direction: rtl;
width: 0;
}
.text::before {
content: "text";
}
.image::before {
content: var(--green-image);
}
</style>
<ul style="list-style-type: none">
<li class="outside normal">item</li>
<li class="outside text">item</li>
<li class="outside image">item</li>
<li class="inside normal">item</li>
<li class="inside text">item</li>
<li class="inside image">item</li>
</ul>
<ul style="list-style-type: decimal">
<li class="outside normal">item</li>
<li class="outside text">item</li>
<li class="outside image">item</li>
<li class="inside normal">item</li>
<li class="inside text">item</li>
<li class="inside image">item</li>
</ul>
<ul style="list-style-type: disc">
<li class="outside normal">item</li>
<li class="outside text">item</li>
<li class="outside image">item</li>
<li class="inside normal">item</li>
<li class="inside text">item</li>
<li class="inside image">item</li>
</ul>
<ul style="list-style-type: 'string'">
<li class="outside normal">item</li>
<li class="outside text">item</li>
<li class="outside image">item</li>
<li class="inside normal">item</li>
<li class="inside text">item</li>
<li class="inside image">item</li>
</ul>
<ul style="list-style-image: var(--red-image)">
<li class="outside normal">item</li>
<li class="outside text">item</li>
<li class="outside image">item</li>
<li class="inside normal">item</li>
<li class="inside text">item</li>
<li class="inside image">item</li>
</ul>

View file

@ -0,0 +1,66 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Test: ::marker pseudo elements styled with 'content' property</title>
<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com">
<link rel="match" href="marker-content-012-ref.html">
<link rel="help" href="https://drafts.csswg.org/css-pseudo-4/#marker-pseudo">
<link rel="help" href="https://drafts.csswg.org/css-lists/#content-property">
<meta name="assert" content="Checks that ::marker's 'content' takes precendence over 'list-style-type' and 'list-style-image'">
<style>
:root {
--red-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="32" height="16" style="background: red"></svg>');
--green-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="32" height="16" style="background: green"></svg>');
}
ul {
float: left;
}
.inside {
list-style-position: inside;
}
.text::marker {
content: "text";
}
.image::marker {
content: var(--green-image);
}
</style>
<ul style="list-style-type: none">
<li class="outside normal">item</li>
<li class="outside text">item</li>
<li class="outside image">item</li>
<li class="inside normal">item</li>
<li class="inside text">item</li>
<li class="inside image">item</li>
</ul>
<ul style="list-style-type: decimal">
<li class="outside normal">item</li>
<li class="outside text">item</li>
<li class="outside image">item</li>
<li class="inside normal">item</li>
<li class="inside text">item</li>
<li class="inside image">item</li>
</ul>
<ul style="list-style-type: disc">
<li class="outside normal">item</li>
<li class="outside text">item</li>
<li class="outside image">item</li>
<li class="inside normal">item</li>
<li class="inside text">item</li>
<li class="inside image">item</li>
</ul>
<ul style="list-style-type: 'string'">
<li class="outside normal">item</li>
<li class="outside text">item</li>
<li class="outside image">item</li>
<li class="inside normal">item</li>
<li class="inside text">item</li>
<li class="inside image">item</li>
</ul>
<ul style="list-style-image: var(--red-image)">
<li class="outside normal">item</li>
<li class="outside text">item</li>
<li class="outside image">item</li>
<li class="inside normal">item</li>
<li class="inside text">item</li>
<li class="inside image">item</li>
</ul>

View file

@ -0,0 +1,26 @@
<!DOCTYPE html>
<html><head>
<meta charset="utf-8">
<title>CSS Reference: ::marker pseudo elements styled with 'content' property</title>
<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com">
<style>
.inside {
list-style-position: inside;
}
.string {
list-style-type: "string";
}
.content::marker {
content: "content";
}
</style>
<ol class="outside">
<li class="decimal">item</li>
<li class="string">item</li>
<li class="content">item</li>
</ol>
<ol class="inside">
<li class="decimal">item</li>
<li class="string">item</li>
<li class="content">item</li>
</ol>

View file

@ -0,0 +1,44 @@
<!DOCTYPE html>
<html class="reftest-wait">
<meta charset="utf-8">
<title>CSS Test: ::marker pseudo elements styled with 'content' property</title>
<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com">
<link rel="match" href="marker-content-013-ref.html">
<link rel="help" href="https://drafts.csswg.org/css-pseudo-4/#marker-pseudo">
<link rel="help" href="https://drafts.csswg.org/css-lists/#list-style-position-property">
<meta name="assert" content="Checks that ::marker is updated when 'list-style-position' changes dynamically.">
<style>
.inside {
list-style-position: inside;
}
.string {
list-style-type: "string";
}
.content::marker {
content: "content";
}
</style>
<ol class="inside">
<li class="decimal">item</li>
<li class="string">item</li>
<li class="content">item</li>
</ol>
<ol class="outside">
<li class="decimal">item</li>
<li class="string">item</li>
<li class="content">item</li>
</ol>
<script src="/common/reftest-wait.js"></script>
<script>
"use strict";
addEventListener("load", function() {
requestAnimationFrame(() => {
for (const list of document.querySelectorAll("ol")) {
list.classList.toggle("inside");
list.classList.toggle("outside");
}
takeScreenshot();
});
}, {once: true});
</script>
</html>

View file

@ -0,0 +1,35 @@
<!DOCTYPE html>
<meta charset="UTF-8">
<title>CSS Pseudo-Elements Test: partial selection done manually and multiple text-shadow (complex)</title>
<link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/">
<link rel="help" href="https://www.w3.org/TR/css-pseudo-4/#highlight-styling">
<meta content="interact" name="flags">
<meta content="This test checks that text selectedness done manually must affect multiple text shadows." name="assert">
<style>
div
{
color: blue;
font-size: 300%;
margin-left: 7.16667em;
margin-top: 1.5em;
text-shadow: red 0em -1.2em 0em, red -7em 0em 0em, red 7em 0em 0em, red 0em 1.2em 0em;
}
div::selection
{
background-color: yellow;
color: green;
text-shadow: none;
}
</style>
<p>Instructions: select a few characters from the blue words "Text sample". Select them with mouse dragging (leftwardedly or rightwardedly) or text-highlighting them with <kbd>Shift</kbd> and keyboard arrows when keyboard navigation (also called caret browsing) is enabled.
<p>Test passes if each of the 4 correspondent red glyph counterparts disappear.
<div>Text sample</div>

View file

@ -0,0 +1,21 @@
<!DOCTYPE html>
<meta charset="UTF-8">
<title>CSS Reftest Reference</title>
<link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/">
<style>
div
{
color: green;
font-size: 300%;
margin-left: 0.66667em;
margin-top: 1.5em;
}
</style>
<p>Test passes if each glyph of "Selected Text" is green and not red.
<div>Selected Text</div>

View file

@ -0,0 +1,47 @@
<!DOCTYPE html>
<meta charset="UTF-8">
<title>CSS Pseudo-Elements Test: selection and text-shadow in 4 directions (static variation)</title>
<link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/">
<link rel="help" href="https://www.w3.org/TR/css-pseudo-4/#highlight-styling">
<link rel="match" href="selection-text-shadow-016-ref.html">
<meta content="" name="flags">
<meta content="This test checks that text selectedness must affect multiple text shadows." name="assert">
<style>
div
{
color: blue;
font-size: 300%;
margin-left: 0.66667em;
margin-top: 1.5em;
text-shadow: red 0em -0.5em 0em, red -0.5em 0em 0em, red 0.5em 0em 0em, red 0em 0.5em 0em;
}
div::selection
{
color: green;
text-shadow: none;
}
</style>
<script>
function startTest()
{
var targetRange = document.createRange();
/* We first create an empty range */
targetRange.selectNodeContents(document.getElementById("test"));
/* Then we set the range boundaries to the children of div#test */
window.getSelection().addRange(targetRange);
/* Finally, we now select such range of content */
}
</script>
<body onload="startTest();">
<p>Test passes if each glyph of "Selected Text" is green and not red.
<div id="test">Selected Text</div>

View file

@ -0,0 +1,28 @@
<!DOCTYPE html>
<html lang="en">
<meta charset="UTF-8">
<title>CSS Reftest Reference</title>
<link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/">
<style>
div
{
font-size: 300%;
}
span
{
color: maroon;
text-decoration: underline dotted fuchsia;
}
</style>
<p>PREREQUISITE: User agent needs to have an enabled and capable spelling error module. If it does not, then this test does not apply to such user agent.
<p>Test passes if each glyph of "txet" is maroon and if "txet" is underlined with a fuchsia dotted line.
<div contenteditable="true">A <span>txet</span> sample</div>

View file

@ -0,0 +1,33 @@
<!DOCTYPE html>
<html lang="en">
<meta charset="UTF-8">
<title>CSS Pseudo-Elements Test: highlighting of spelling error (basic)</title>
<link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/">
<link rel="help" href="https://www.w3.org/TR/css-pseudo-4/#highlight-selectors">
<link rel="help" href="https://www.w3.org/TR/css-pseudo-4/#highlight-styling">
<link rel="match" href="spelling-error-001-ref.html">
<meta content="" name="flags">
<style>
div
{
font-size: 300%;
}
div::spelling-error
{
color: maroon;
text-decoration: underline dotted fuchsia;
}
</style>
<p>PREREQUISITE: User agent needs to have an enabled and capable spelling error module. If it does not, then this test does not apply to such user agent.
<p>Test passes if each glyph of "txet" is maroon and if "txet" is underlined with a fuchsia dotted line.
<div contenteditable="true">A txet sample</div>

View file

@ -0,0 +1,11 @@
<!doctype html>
<title>CSS Rest Reference</title>
<style>
table {
outline: 1px solid blue;
outline-offset: 10px;
}
</style>
<table>
Some content
</table>

View file

@ -0,0 +1,13 @@
<!doctype html>
<title>outline-offset applies to tables</title>
<link rel="help" href="https://drafts.csswg.org/css-ui/#propdef-outline">
<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1603049">
<link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez">
<link rel="author" href="https://mozilla.org" title="Mozilla">
<link rel="mismatch" href="outline-offset-table-001-notref.html">
<style>
table { outline: 1px solid blue }
</style>
<table>
Some content
</table>

View file

@ -0,0 +1,78 @@
<!DOCTYPE html>
<title>Length unit 'ch' should be recalculated after loading a web font</title>
<link rel="help" href="https://www.w3.org/TR/css-values-4/#font-relative-lengths">
<link rel="author" href="mailto:xiaochengh@chromium.org">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
.container {
font: 25px/1 "custom font", monospace;
}
.test {
width: 1ch;
}
</style>
<div class="container">
<div class="test"></div>
</div>
<div class="container" style="display: contents">
<div class="test"></div>
</div>
<div class="container" style="display: none">
<div class="test"></div>
</div>
<script>
function parseWidthInPx(element) {
const value = CSSNumericValue.parse(getComputedStyle(element).width);
if (!value || !(value instanceof CSSUnitValue) || value.unit !== 'px')
throw 'Cannot parse width in pixels';
return value.value;
}
const testCases = document.querySelectorAll('.test');
const asyncTests = [
async_test('ch in a normal div should be recalculated after loading a web font'),
async_test('ch in display:contents should be recalculated after loading a web font'),
async_test('ch in display:none should be recalculated after loading a web font')
];
// Before loading custom font, tests should be rendered with monospace
// fallback and have a '1ch' measurement much shorter than 25px.
for (let i = 0; i < testCases.length; ++i) {
asyncTests[i].step(() => {
const widthPx = parseWidthInPx(testCases[i]);
assert_less_than(widthPx, 24);
});
}
// Insert custom font into style sheet and load it
const customFont = new FontFace('custom font', 'url(/fonts/Ahem.ttf)');
document.fonts.add(customFont);
// After loading custom font, tests should be rendered with the custom font,
// which is Ahem, and have a '1ch' measurement that equals 25px.
customFont.load().then(
() => {
for (let i = 0; i < testCases.length; ++i) {
asyncTests[i].step(() => {
const widthPx = parseWidthInPx(testCases[i]);
assert_approx_equals(widthPx, 25, 0.1);
asyncTests[i].done();
});
}
},
() => {
for (let i = 0; i < testCases.length; ++i) {
asyncTests[i].step(() => {
assert_unreached('Failed to load font');
});
}
}
);
</script>

View file

@ -33,7 +33,7 @@
div.vrl
{
writing-mode: vertical-lr;
writing-mode: vertical-rl;
}
div.vlr

View file

@ -0,0 +1,44 @@
<!DOCTYPE html>
<link rel="help" href="https://drafts.csswg.org/cssom-view-1/#dom-element-getclientrects">
<link rel="author" title="Koji Ishii" href="mailto:kojii@chromium.org">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
inline-block {
display: inline-block;
height: 100px;
}
</style>
<body>
<div>
<span class="target">
<inline-block></inline-block>
</span>
</div>
<div>
<span class="target">
<span>
<inline-block></inline-block>
</span>
</span>
</div>
<div>
<span class="target">
<span>
<span>
<inline-block></inline-block>
</span>
</span>
</span>
</div>
<script>
for (let element of document.getElementsByClassName('target')) {
let rects = element.getClientRects();
test(() => {
assert_equals(rects.length, 1);
for (let rect of rects)
assert_not_equals(rect.height, 100);
});
}
</script>
</body>

View file

@ -1,6 +1,7 @@
'use strict';
(function() {
var interpolationTests = [];
var compositionTests = [];
var cssAnimationsData = {
sharedStyle: null,
nextID: 0,
@ -301,7 +302,75 @@
});
}
function createTestTargets(interpolationMethods, interpolationTests, container) {
function createCompositionTestTargets(compositionContainer, compositionTest) {
var options = compositionTest.options;
var property = options.property;
var underlying = options.underlying;
var comparisonFunction = options.comparisonFunction;
var from = options.accumulateFrom || options.addFrom || options.replaceFrom;
var to = options.accumulateTo || options.addTo || options.replaceTo;
var fromComposite = 'accumulateFrom' in options ? 'accumulate' : 'addFrom' in options ? 'add' : 'replace';
var toComposite = 'accumulateTo' in options ? 'accumulate' : 'addTo' in options ? 'add' : 'replace';
const invalidFrom = 'addFrom' in options === 'replaceFrom' in options
&& 'addFrom' in options === 'accumulateFrom' in options;
const invalidTo = 'addTo' in options === 'replaceTo' in options
&& 'addTo' in options === 'accumulateTo' in options;
if (invalidFrom || invalidTo) {
test(function() {
assert_false(invalidFrom, 'Exactly one of accumulateFrom, addFrom, or replaceFrom must be specified');
assert_false(invalidTo, 'Exactly one of accumulateTo, addTo, or replaceTo must be specified');
}, `Composition tests must have valid setup`);
}
var testText = `Compositing: property <${property}> underlying [${underlying}] from ${fromComposite} [${from}] to ${toComposite} [${to}]`;
var testContainer = createElement(compositionContainer, 'div');
createElement(testContainer);
// Setup a standard equality function if an override is not provided.
if (!comparisonFunction) {
comparisonFunction = (actual, expected) => {
assert_equals(normalizeValue(actual), normalizeValue(expected));
};
}
return compositionTest.expectations.map(function(expectation) {
var actualTargetContainer = createTargetContainer(testContainer, 'actual');
var expectedTargetContainer = createTargetContainer(testContainer, 'expected');
var expectedStr = expectation.option || expectation.expect;
if (!isNeutralKeyframe(expectedStr)) {
expectedTargetContainer.target.style.setProperty(property, expectedStr);
}
var target = actualTargetContainer.target;
target.style.setProperty(property, underlying);
target.interpolate = function() {
webAnimationsInterpolation.interpolateComposite(property, from, fromComposite, to, toComposite, expectation.at, target);
};
target.measure = function() {
var expectedValue = getComputedStyle(expectedTargetContainer.target).getPropertyValue(property);
test(function() {
if (from && from !== neutralKeyframe) {
assert_true(CSS.supports(property, from), '\'from\' value should be supported');
}
if (to && to !== neutralKeyframe) {
assert_true(CSS.supports(property, to), '\'to\' value should be supported');
}
if (typeof underlying !== 'undefined') {
assert_true(CSS.supports(property, underlying), '\'underlying\' value should be supported');
}
comparisonFunction(
getComputedStyle(target).getPropertyValue(property),
expectedValue);
}, `${testText} at (${expectation.at}) should be [${sanitizeUrls(expectedStr)}]`);
};
return target;
});
}
function createTestTargets(interpolationMethods, interpolationTests, compositionTests, container) {
var targets = [];
for (var interpolationMethod of interpolationMethods) {
var interpolationMethodContainer = createElement(container);
@ -309,15 +378,17 @@
[].push.apply(targets, createInterpolationTestTargets(interpolationMethod, interpolationMethodContainer, interpolationTest));
}
}
var compositionContainer = createElement(container);
for (var compositionTest of compositionTests) {
[].push.apply(targets, createCompositionTestTargets(compositionContainer, compositionTest));
}
return targets;
}
function test_no_interpolation(options) {
test_interpolation(options, expectNoInterpolation);
}
function test_interpolation(options, expectations) {
interpolationTests.push({options, expectations});
function create_tests() {
var interpolationMethods = [
cssTransitionsInterpolation,
cssTransitionAllInterpolation,
@ -325,7 +396,7 @@
webAnimationsInterpolation,
];
var container = createElement(document.body);
var targets = createTestTargets(interpolationMethods, interpolationTests, container);
var targets = createTestTargets(interpolationMethods, interpolationTests, compositionTests, container);
// Separate interpolation and measurement into different phases to avoid O(n^2) of the number of targets.
for (var target of targets) {
target.interpolate();
@ -334,10 +405,20 @@
target.measure();
}
container.remove();
interpolationTests = [];
}
function test_interpolation(options, expectations) {
interpolationTests.push({options, expectations});
create_tests();
interpolationTests = [];
}
function test_composition(options, expectations) {
compositionTests.push({options, expectations});
create_tests();
compositionTests = [];
}
window.test_interpolation = test_interpolation;
window.test_no_interpolation = test_no_interpolation;
window.test_composition = test_composition;
window.neutralKeyframe = neutralKeyframe;
})();

View file

@ -76,4 +76,17 @@ test(function() {
new DOMParser().parseFromString("", "text/foo-this-is-invalid");
})
}, "DOMParser throws on an invalid enum value")
test(() => {
const doc = new DOMParser().parseFromString(`
<html><body>
<style>
@import url(/dummy.css)
</style>
<script>x = 8<\/script>
</body></html>`, 'text/html');
assert_not_equals(doc.querySelector('script'), null, 'script must be found');
assert_equals(doc.x, undefined, 'script must not be executed');
}, 'script is found synchronously even when there is a css import');
</script>

View file

@ -0,0 +1,24 @@
<!DOCTYPE html>
<link rel="help" href="https://www.w3.org/TR/1999/REC-xpath-19991116/#node-sets">
<body>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
function nodesetToSet(result) {
const set = new Set();
for (let node = result.iterateNext(); node; node = result.iterateNext()) {
set.add(node);
}
return set;
}
test(() => {
const doc = document.implementation.createHTMLDocument();
doc.documentElement.innerHTML = '<body><div></div></body>';
const result = nodesetToSet(doc.evaluate('(.//div)[1]|.', doc.documentElement));
assert_equals(result.size, 2);
assert_true(result.has(doc.documentElement));
assert_true(result.has(doc.body.firstChild));
}, '| operator should evaluate both sides of expressions with the same context node');
</script>
</body>

View file

@ -0,0 +1,25 @@
<!DOCTYPE html>
<link rel="help" href="https://www.w3.org/TR/1999/REC-xpath-19991116/#predicates">
<body>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
function nodesetToSet(result) {
const set = new Set();
for (let node = result.iterateNext(); node; node = result.iterateNext()) {
set.add(node);
}
return set;
}
test(() => {
const doc = document.implementation.createHTMLDocument();
doc.body.innerHTML = '<table></table>' +
'<table><tr><th><th><th><th></table>' +
'<table></table>';
const result = nodesetToSet(doc.evaluate('(//table)[count((//table)[2]/descendant::th)-1]', doc.documentElement));
assert_equals(result.size, 1);
assert_true(result.has(doc.body.lastChild));
}, 'An expression in a predicate should not change the context node');
</script>
</body>

View file

@ -0,0 +1 @@
X-Content-Type-Options: nosniff

View file

@ -0,0 +1,16 @@
<!doctype html>
<meta charset="utf-8">
<title>ar ISO-8859-6 late</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script>
setup({explicit_done:true});
window.onmessage = function(e) {
test(function() {
assert_equals(e.data, "ISO-8859-6", 'Expected ISO-8859-6');
}, "Check detection result");
w.close();
done();
};
var w = window.open("support/ar-ISO-8859-6-late.sub.html");
</script>

View file

@ -0,0 +1,14 @@
<!doctype html>
<title>ar ISO-8859-6</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<p>çÐÇ çè ÇÎÊÈÇÑ ÊÑåêÒ ÇäÃÍÑá.</p>
<script>
setup({explicit_done:true});
onload = function() {
test(function() {
assert_equals(document.characterSet, "ISO-8859-6", 'Expected ISO-8859-6');
}, "Check detection result");
done();
};
</script>

View file

@ -0,0 +1,16 @@
<!doctype html>
<meta charset="utf-8">
<title>ar windows-1256 late</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script>
setup({explicit_done:true});
window.onmessage = function(e) {
test(function() {
assert_equals(e.data, "windows-1256", 'Expected windows-1256');
}, "Check detection result");
w.close();
done();
};
var w = window.open("support/ar-windows-1256-late.sub.html");
</script>

View file

@ -0,0 +1,14 @@
<!doctype html>
<title>ar windows-1256</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<p>åÐÇ åæ ÇÎÊÈÇÑ ÊÑãíÒ ÇáÃÍÑÝ.</p>
<script>
setup({explicit_done:true});
onload = function() {
test(function() {
assert_equals(document.characterSet, "windows-1256", 'Expected windows-1256');
}, "Check detection result");
done();
};
</script>

View file

@ -0,0 +1,16 @@
<!doctype html>
<meta charset="utf-8">
<title>el ISO-8859-7 late</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script>
setup({explicit_done:true});
window.onmessage = function(e) {
test(function() {
assert_equals(e.data, "ISO-8859-7", 'Expected ISO-8859-7');
}, "Check detection result");
w.close();
done();
};
var w = window.open("support/el-ISO-8859-7-late.sub.html");
</script>

View file

@ -0,0 +1,15 @@
<!doctype html>
<title>el ISO-8859-7</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<p>Ðñüêåéôáé ãéá äïêéìÞ êùäéêïðïßçóçò ÷áñáêôÞñùí: ¶ñçò
<!-- I needed to work capital alpha with tonos into the test somehow... --></p>
<script>
setup({explicit_done:true});
onload = function() {
test(function() {
assert_equals(document.characterSet, "ISO-8859-7", 'Expected ISO-8859-7');
}, "Check detection result");
done();
};
</script>

View file

@ -0,0 +1,16 @@
<!doctype html>
<meta charset="utf-8">
<title>el windows-1253 late</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script>
setup({explicit_done:true});
window.onmessage = function(e) {
test(function() {
assert_equals(e.data, "windows-1253", 'Expected windows-1253');
}, "Check detection result");
w.close();
done();
};
var w = window.open("support/el-windows-1253-late.sub.html");
</script>

View file

@ -0,0 +1,15 @@
<!doctype html>
<title>el windows-1253</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<p>Ðñüêåéôáé ãéá äïêéìÞ êùäéêïðïßçóçò ÷áñáêôÞñùí: ¢ñçò
<!-- I needed to work capital alpha with tonos into the test somehow... --></p>
<script>
setup({explicit_done:true});
onload = function() {
test(function() {
assert_equals(document.characterSet, "windows-1253", 'Expected windows-1253');
}, "Check detection result");
done();
};
</script>

View file

@ -0,0 +1,16 @@
<!doctype html>
<meta charset="utf-8">
<title>fa windows-1256 late</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script>
setup({explicit_done:true});
window.onmessage = function(e) {
test(function() {
assert_equals(e.data, "windows-1256", 'Expected windows-1256');
}, "Check detection result");
w.close();
done();
};
var w = window.open("support/fa-windows-1256-late.sub.html");
</script>

View file

@ -0,0 +1,14 @@
<!doctype html>
<title>fa windows-1256</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<p>Ç&#1740;ä &#1740;˜ ÊÓÊ ÑãÒ<C3A3>ÐÇÑ&#1740; ˜ÇÑǘÊÑ ÇÓÊ.</p>
<script>
setup({explicit_done:true});
onload = function() {
test(function() {
assert_equals(document.characterSet, "windows-1256", 'Expected windows-1256');
}, "Check detection result");
done();
};
</script>

View file

@ -0,0 +1,16 @@
<!doctype html>
<meta charset="utf-8">
<title>fi windows-1252 late</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script>
setup({explicit_done:true});
window.onmessage = function(e) {
test(function() {
assert_equals(e.data, "windows-1252", 'Expected windows-1252');
}, "Check detection result");
w.close();
done();
};
var w = window.open("support/fi-windows-1252-late.sub.html");
</script>

View file

@ -0,0 +1,14 @@
<!doctype html>
<title>fi windows-1252</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<p>Tämä on merkkikoodaustesti.</p>
<script>
setup({explicit_done:true});
onload = function() {
test(function() {
assert_equals(document.characterSet, "windows-1252", 'Expected windows-1252');
}, "Check detection result");
done();
};
</script>

View file

@ -0,0 +1,16 @@
<!doctype html>
<meta charset="utf-8">
<title>he ISO-8859-8 late</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script>
setup({explicit_done:true});
window.onmessage = function(e) {
test(function() {
assert_equals(e.data, "ISO-8859-8", 'Expected ISO-8859-8');
}, "Check detection result");
w.close();
done();
};
var w = window.open("support/he-ISO-8859-8-late.sub.html");
</script>

Some files were not shown because too many files have changed in this diff Show more