mirror of
https://github.com/servo/servo.git
synced 2025-08-04 13:10:20 +01:00
Update web-platform-tests to revision 1268bd5901289acc95b1a576f108bdf382d82e44
This commit is contained in:
parent
f183d66217
commit
292a12e545
261 changed files with 5513 additions and 966 deletions
|
@ -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
|
@ -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
|
||||
|
|
@ -17,3 +17,6 @@
|
|||
[Property image-orientation has initial value 0deg]
|
||||
expected: FAIL
|
||||
|
||||
[Property image-orientation has initial value from-image]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
@ -2,3 +2,6 @@
|
|||
[listeners are called when <iframe> is resized]
|
||||
expected: FAIL
|
||||
|
||||
[listeners are called correct number of times]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
[MediaQueryListEvent.html]
|
||||
[argument of onchange]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
[elementFromPoint-001.html]
|
||||
[CSSOM View - 5 - extensions to the Document interface]
|
||||
expected: FAIL
|
||||
|
|
@ -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
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
[offsetTopLeft-border-box.html]
|
||||
[container: 1]
|
||||
expected: FAIL
|
||||
|
||||
[container: 0]
|
||||
expected: FAIL
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
@ -5,3 +5,6 @@
|
|||
[Check isHistoryNavigation attribute]
|
||||
expected: FAIL
|
||||
|
||||
[Check destination attribute]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -53,6 +53,3 @@
|
|||
[combined text/javascript ]
|
||||
expected: FAIL
|
||||
|
||||
[separate text/javascript x/x]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -11,3 +11,6 @@
|
|||
[X-Content-Type-Options%3A%20nosniff%0C]
|
||||
expected: FAIL
|
||||
|
||||
[X-Content-Type-Options%3A%20%2Cnosniff]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
[traverse_the_history_1.html]
|
||||
[Multiple history traversals from the same task]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[creating_browsing_context_test_01.html]
|
||||
[first argument: absolute url]
|
||||
expected: FAIL
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[DOMContentLoaded-defer.html]
|
||||
[The end: DOMContentLoaded and defer scripts]
|
||||
expected: FAIL
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -1,2 +1,11 @@
|
|||
[audiobuffersource-multi-channels.html]
|
||||
expected: ERROR
|
||||
[Executing "initialize"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[Audit report]
|
||||
expected: NOTRUN
|
||||
|
||||
[Executing "test"]
|
||||
expected: NOTRUN
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -1,2 +1,4 @@
|
|||
[audioworklet-suspend.https.html]
|
||||
expected: ERROR
|
||||
[Executing "load-worklet-and-suspend"]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
[xrSession_features_deviceSupport.https.html]
|
||||
expected: ERROR
|
||||
[Immersive XRSession requests with no supported device should reject]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
[005.html]
|
||||
expected: ERROR
|
||||
[dedicated worker in shared worker in dedicated worker]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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`);
|
||||
});
|
|
@ -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>
|
|
@ -1,2 +0,0 @@
|
|||
Cross-Origin-Opener-Policy: same-origin
|
||||
Cross-Origin-Embedder-Policy: require-corp
|
|
@ -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.");
|
||||
}
|
||||
}
|
|
@ -1 +0,0 @@
|
|||
Cross-Origin-Embedder-Policy: require-corp
|
|
@ -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');
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
}),
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
}),
|
||||
|
|
|
@ -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;
|
||||
}),
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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);
|
||||
}
|
|
@ -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>
|
|
@ -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');
|
||||
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -33,7 +33,7 @@
|
|||
|
||||
div.vrl
|
||||
{
|
||||
writing-mode: vertical-lr;
|
||||
writing-mode: vertical-rl;
|
||||
}
|
||||
|
||||
div.vlr
|
||||
|
|
|
@ -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>
|
|
@ -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;
|
||||
})();
|
||||
|
|
|
@ -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>
|
||||
|
|
24
tests/wpt/web-platform-tests/domxpath/node-sets.html
Normal file
24
tests/wpt/web-platform-tests/domxpath/node-sets.html
Normal 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>
|
25
tests/wpt/web-platform-tests/domxpath/predicates.html
Normal file
25
tests/wpt/web-platform-tests/domxpath/predicates.html
Normal 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>
|
|
@ -0,0 +1 @@
|
|||
X-Content-Type-Options: nosniff
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -0,0 +1,14 @@
|
|||
<!doctype html>
|
||||
<title>fa windows-1256</title>
|
||||
<script src=/resources/testharness.js></script>
|
||||
<script src=/resources/testharnessreport.js></script>
|
||||
<p>Çیä ی˜ ÊÓÊ ÑãÒ<C3A3>ÐÇÑی ˜ÇÑǘÊÑ ÇÓÊ.</p>
|
||||
<script>
|
||||
setup({explicit_done:true});
|
||||
onload = function() {
|
||||
test(function() {
|
||||
assert_equals(document.characterSet, "windows-1256", 'Expected windows-1256');
|
||||
}, "Check detection result");
|
||||
done();
|
||||
};
|
||||
</script>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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
Loading…
Add table
Add a link
Reference in a new issue