mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
Update web-platform-tests to revision 2b80e6d28f3c1ca734384ebded282bf07df80657
This commit is contained in:
parent
32eb858a6a
commit
aff72973cf
379 changed files with 13969 additions and 2161 deletions
File diff suppressed because it is too large
Load diff
|
@ -2,12 +2,12 @@
|
|||
[#container 1]
|
||||
expected: FAIL
|
||||
|
||||
[[data-expected-height\] 1]
|
||||
expected: FAIL
|
||||
|
||||
[[data-expected-height\] 2]
|
||||
expected: FAIL
|
||||
|
||||
[[data-expected-height\] 7]
|
||||
expected: FAIL
|
||||
|
||||
[[data-expected-height\] 3]
|
||||
expected: FAIL
|
||||
|
||||
[[data-expected-height\] 4]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
[eol-spaces-bidi-001.html]
|
||||
expected: FAIL
|
|
@ -2,3 +2,15 @@
|
|||
[<li>Outside 1</li>]
|
||||
expected: FAIL
|
||||
|
||||
[<li>Image Outside 2</li>]
|
||||
expected: FAIL
|
||||
|
||||
[<li>Outside 2</li>]
|
||||
expected: FAIL
|
||||
|
||||
[<li>Image Outside 1</li>]
|
||||
expected: FAIL
|
||||
|
||||
[<li>Outside 3</li>]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
[matchMedia-display-none-iframe.html]
|
||||
expected: ERROR
|
|
@ -8,3 +8,6 @@
|
|||
[throws if handleEvent is thruthy and not callable]
|
||||
expected: FAIL
|
||||
|
||||
[doesn't look up handleEvent method on callable event listeners]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -324,9 +324,9 @@
|
|||
[<iframe>: combined response Content-Type: text/html;" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html;x=" 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
|
||||
|
||||
|
|
|
@ -56,6 +56,6 @@
|
|||
[separate text/javascript x/x]
|
||||
expected: FAIL
|
||||
|
||||
[separate text/javascript;charset=windows-1252 error text/javascript]
|
||||
[separate text/javascript;charset=windows-1252 text/javascript]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -9,3 +9,21 @@
|
|||
[Same-Origin embed]
|
||||
expected: TIMEOUT
|
||||
|
||||
[Wrapper: Navigate to cross-site embed]
|
||||
expected: NOTRUN
|
||||
|
||||
[Wrapper: cross-site embed]
|
||||
expected: NOTRUN
|
||||
|
||||
[Wrapper: same-site embed]
|
||||
expected: NOTRUN
|
||||
|
||||
[Wrapper: Navigate to same-origin embed]
|
||||
expected: NOTRUN
|
||||
|
||||
[Wrapper: Navigate to same-site embed]
|
||||
expected: NOTRUN
|
||||
|
||||
[Wrapper: same-origin embed]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[appcache.tentative.https.sub.html]
|
||||
[Appcache!]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
[embed.tentative.https.sub.html]
|
||||
expected: TIMEOUT
|
||||
[Cross-Site embed]
|
||||
expected: NOTRUN
|
||||
|
||||
[Same-Site embed]
|
||||
expected: NOTRUN
|
||||
|
||||
[Same-Origin embed]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
[fetch-preflight.tentative.https.sub.html]
|
||||
[Same-site fetch with preflight]
|
||||
expected: FAIL
|
||||
|
||||
[Cross-site fetch with preflight]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[fetch-via-serviceworker--fallback.tentative.https.sub.html]
|
||||
[Sec-Fetch headers after SW fallback]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[fetch-via-serviceworker--respondWith.tentative.https.sub.html]
|
||||
[Sec-Fetch headers after SW fallback]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
[fetch.tentative.https.sub.html]
|
||||
[Same-origin fetch]
|
||||
expected: FAIL
|
||||
|
||||
[Same-origin mode]
|
||||
expected: FAIL
|
||||
|
||||
[Cross-site fetch]
|
||||
expected: FAIL
|
||||
|
||||
[Same-site fetch]
|
||||
expected: FAIL
|
||||
|
||||
[no-CORS mode]
|
||||
expected: FAIL
|
||||
|
||||
[CORS mode]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[fetch.tentative.sub.html]
|
||||
[http->https fetch (cross-scheme => cross-site)]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[font.tentative.https.sub.html]
|
||||
[font]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
[frame.tentative.sub.html]
|
||||
expected: TIMEOUT
|
||||
[Secure, cross-site (cross-scheme, same-host) frame]
|
||||
expected: TIMEOUT
|
||||
|
||||
[Non-secure cross-site iframe => No headers.]
|
||||
expected: TIMEOUT
|
||||
|
||||
[Non-secure same-site iframe => No headers]
|
||||
expected: TIMEOUT
|
||||
|
||||
[Non-secure same-origin iframe => No headers]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
[history.tentative.https.sub.html]
|
||||
[back to same-origin-initiated navigation]
|
||||
expected: FAIL
|
||||
|
||||
[back to same-site-initiated navigation]
|
||||
expected: FAIL
|
||||
|
||||
[back to cross-site-initiated navigation]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[iframe.tentative.sub.html]
|
||||
[Secure, cross-site (cross-scheme, same-host) iframe]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
[img.tentative.https.sub.html]
|
||||
[Cross-site image]
|
||||
expected: FAIL
|
||||
|
||||
[Same-origin image]
|
||||
expected: FAIL
|
||||
|
||||
[Same-site image]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
[navigation.https.sub.html]
|
||||
expected: TIMEOUT
|
|
@ -0,0 +1,11 @@
|
|||
[object.tentative.https.sub.html]
|
||||
expected: TIMEOUT
|
||||
[Same-Origin object]
|
||||
expected: TIMEOUT
|
||||
|
||||
[Cross-Site object]
|
||||
expected: NOTRUN
|
||||
|
||||
[Same-Site object]
|
||||
expected: NOTRUN
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
[prefetch.tentative.https.sub.html]
|
||||
expected: TIMEOUT
|
||||
[<link rel='prefetch' href='https://www.web-platform.test:8443/...'>]
|
||||
expected: TIMEOUT
|
||||
|
||||
[<link rel='prefetch' href='https://www.not-web-platform.test:8443/...'>]
|
||||
expected: TIMEOUT
|
||||
|
||||
[<link rel='prefetch' href='https://web-platform.test:8443/...'>]
|
||||
expected: TIMEOUT
|
||||
|
||||
[Browser supports prefetch.]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
[preload.tentative.https.sub.html]
|
||||
expected: TIMEOUT
|
||||
[<link rel='preload' as='fetch' href='https://web-platform.test:8443/...'>]
|
||||
expected: TIMEOUT
|
||||
|
||||
[<link rel='preload' as='script' href='https://www.web-platform.test:8443/...'>]
|
||||
expected: TIMEOUT
|
||||
|
||||
[<link rel='preload' as='font' href='https://www.not-web-platform.test:8443/...'>]
|
||||
expected: TIMEOUT
|
||||
|
||||
[<link rel='preload' as='script' href='https://www.not-web-platform.test:8443/...'>]
|
||||
expected: TIMEOUT
|
||||
|
||||
[<link rel='preload' as='track' href='https://www.not-web-platform.test:8443/...'>]
|
||||
expected: TIMEOUT
|
||||
|
||||
[<link rel='preload' as='image' href='https://web-platform.test:8443/...'>]
|
||||
expected: TIMEOUT
|
||||
|
||||
[<link rel='preload' as='image' href='https://www.not-web-platform.test:8443/...'>]
|
||||
expected: TIMEOUT
|
||||
|
||||
[<link rel='preload' as='track' href='https://web-platform.test:8443/...'>]
|
||||
expected: TIMEOUT
|
||||
|
||||
[Browser supports preload.]
|
||||
expected: FAIL
|
||||
|
||||
[<link rel='preload' as='fetch' href='https://www.not-web-platform.test:8443/...'>]
|
||||
expected: TIMEOUT
|
||||
|
||||
[<link rel='preload' as='style' href='https://www.web-platform.test:8443/...'>]
|
||||
expected: TIMEOUT
|
||||
|
||||
[<link rel='preload' as='font' href='https://web-platform.test:8443/...'>]
|
||||
expected: TIMEOUT
|
||||
|
||||
[<link rel='preload' as='fetch' href='https://www.web-platform.test:8443/...'>]
|
||||
expected: TIMEOUT
|
||||
|
||||
[<link rel='preload' as='image' href='https://www.web-platform.test:8443/...'>]
|
||||
expected: TIMEOUT
|
||||
|
||||
[<link rel='preload' as='font' href='https://www.web-platform.test:8443/...'>]
|
||||
expected: TIMEOUT
|
||||
|
||||
[<link rel='preload' as='style' href='https://www.not-web-platform.test:8443/...'>]
|
||||
expected: TIMEOUT
|
||||
|
||||
[<link rel='preload' as='script' href='https://web-platform.test:8443/...'>]
|
||||
expected: TIMEOUT
|
||||
|
||||
[<link rel='preload' as='track' href='https://www.web-platform.test:8443/...'>]
|
||||
expected: TIMEOUT
|
||||
|
||||
[<link rel='preload' as='style' href='https://web-platform.test:8443/...'>]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
[cross-site-redirect.tentative.https.sub.html]
|
||||
[Cross-Site -> Cross-Site redirect]
|
||||
expected: FAIL
|
||||
|
||||
[Cross-Site -> Same-Site redirect]
|
||||
expected: FAIL
|
||||
|
||||
[Cross-Site -> Same-Origin redirect]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[multiple-redirect-cross-site.tentative.https.sub.html]
|
||||
[Same-Origin -> Cross-Site -> Same-Origin redirect]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[multiple-redirect-https-downgrade-upgrade.tentative.sub.html]
|
||||
[multiple-redirect-https-downgrade-upgrade]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[multiple-redirect-same-site.tentative.https.sub.html]
|
||||
[Same-Origin -> Same-Site -> Same-Origin redirect]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[redirect-http-upgrade.tentative.sub.html]
|
||||
[redirect-http-upgrade]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[redirect-https-downgrade.tentative.sub.html]
|
||||
[redirect-https-downgrade]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
[same-origin-redirect.tentative.https.sub.html]
|
||||
[Same-Origin -> Cross-Site redirect]
|
||||
expected: FAIL
|
||||
|
||||
[Same-Origin -> Same-Site redirect]
|
||||
expected: FAIL
|
||||
|
||||
[Same-Origin -> Same-Origin redirect]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
[same-site-redirect.tentative.https.sub.html]
|
||||
[Same-Site -> Same-Origin redirect]
|
||||
expected: FAIL
|
||||
|
||||
[Same-Site -> Same-Site redirect]
|
||||
expected: FAIL
|
||||
|
||||
[Same-Site -> Cross-Site redirect]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
[report.tentative.https.sub.html]
|
||||
expected: TIMEOUT
|
|
@ -0,0 +1,13 @@
|
|||
[script.tentative.https.sub.html]
|
||||
[Same-origin script]
|
||||
expected: FAIL
|
||||
|
||||
[Cross-site script]
|
||||
expected: FAIL
|
||||
|
||||
[Same-origin CORS script]
|
||||
expected: FAIL
|
||||
|
||||
[Same-site script]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[serviceworker.tentative.https.sub.html]
|
||||
[metadata for service worker scripts]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[sharedworker.tentative.https.sub.html]
|
||||
[sharedworker]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
[style.tentative.https.sub.html]
|
||||
[Same-Origin, cors style]
|
||||
expected: FAIL
|
||||
|
||||
[Cross-Site style]
|
||||
expected: FAIL
|
||||
|
||||
[Same-Site style]
|
||||
expected: FAIL
|
||||
|
||||
[Same-Origin style]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
[track.tentative.https.sub.html]
|
||||
expected: TIMEOUT
|
||||
[Same-Site track]
|
||||
expected: NOTRUN
|
||||
|
||||
[Same-Origin track]
|
||||
expected: TIMEOUT
|
||||
|
||||
[Same-Origin, CORS track]
|
||||
expected: NOTRUN
|
||||
|
||||
[Cross-Site track]
|
||||
expected: NOTRUN
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
[trailing-dot.tentative.https.sub.html]
|
||||
[Fetching a resource from a cross-site host, spelled with a trailing dot.]
|
||||
expected: FAIL
|
||||
|
||||
[Fetching a resource from the same origin, but spelled with a trailing dot.]
|
||||
expected: FAIL
|
||||
|
||||
[Fetching a resource from the same site, but spelled with a trailing dot.]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[worker.tentative.https.sub.html]
|
||||
[Same-Origin worker]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
[xslt.tentative.https.sub.html]
|
||||
[Same-Origin xslt]
|
||||
expected: FAIL
|
||||
|
||||
[Cross-site xslt]
|
||||
expected: FAIL
|
||||
|
||||
[Same-site xslt]
|
||||
expected: FAIL
|
||||
|
|
@ -11,3 +11,6 @@
|
|||
[X-Content-Type-Options%3A%20nosniff%0C]
|
||||
expected: FAIL
|
||||
|
||||
[X-Content-Type-Options%3A%0D%0AX-Content-Type-Options%3A%20nosniff]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
[traverse_the_history_1.html]
|
||||
[Multiple history traversals from the same task]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
[traverse_the_history_2.html]
|
||||
[Multiple history traversals, last would be aborted]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
[traverse_the_history_4.html]
|
||||
[Multiple history traversals, last would be aborted]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
[traverse_the_history_5.html]
|
||||
[Multiple history traversals, last would be aborted]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[cross-global-npo.html]
|
||||
[Named access across globals]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
[prototype.html]
|
||||
[Property on EventTarget.prototype.]
|
||||
expected: FAIL
|
||||
|
||||
[Property on window.]
|
||||
expected: FAIL
|
||||
|
||||
[Property on Window.prototype.]
|
||||
expected: FAIL
|
||||
|
|
@ -1,5 +1,4 @@
|
|||
[embedded-opener-remove-frame.html]
|
||||
expected: CRASH
|
||||
[opener and "removed" embedded documents]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
[non-active-document.html]
|
||||
[DOMParser]
|
||||
expected: FAIL
|
||||
|
||||
[createHTMLDocument]
|
||||
expected: FAIL
|
||||
|
||||
[<template>]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
[form-double-submit-2.html]
|
||||
expected: ERROR
|
||||
[preventDefault should allow onclick submit() to succeed]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
[form-double-submit-3.html]
|
||||
expected: ERROR
|
||||
[<button> should have the same double-submit protection as <input type=submit>]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
[form-double-submit.html]
|
||||
expected: ERROR
|
||||
[default submit action should supersede onclick submit()]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
[aborted-parser.window.html]
|
||||
[document.open() after parser is aborted]
|
||||
expected: FAIL
|
||||
|
||||
[async document.open() after parser is aborted]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
[location-set-and-document-open.html]
|
||||
expected: TIMEOUT
|
||||
[Location sets should cancel current navigation and prevent later document.open() from doing anything]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
[disallow-crossorigin.html]
|
||||
type: testharness
|
||||
expected: ERROR
|
||||
[Promise rejection event should be muted for cross-origin non-CORS script]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,7 +0,0 @@
|
|||
[events_referenceSpace_reset.https.html]
|
||||
[XRSession resetpose from a device properly fires off the right events for non-immersive sessions]
|
||||
expected: FAIL
|
||||
|
||||
[XRSession resetpose from a device properly fires off the right events for immersive sessions]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[events_referenceSpace_reset_immersive.https.html]
|
||||
[XRSession resetpose from a device properly fires off the right events for immersive sessions]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[events_referenceSpace_reset_inline.https.html]
|
||||
[XRSession resetpose from a device properly fires off the right events for non-immersive sessions]
|
||||
expected: FAIL
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
[Worker-constructor.html]
|
||||
expected: ERROR
|
|
@ -1,2 +0,0 @@
|
|||
[transition_calc_implicit.html]
|
||||
expected: TIMEOUT
|
|
@ -28,7 +28,7 @@ jobs:
|
|||
displayName: 'affected tests: Safari Technology Preview'
|
||||
condition: eq(variables['Build.Reason'], 'PullRequest')
|
||||
pool:
|
||||
vmImage: 'macOS-10.13'
|
||||
vmImage: 'macOS-10.14'
|
||||
steps:
|
||||
- template: tools/ci/azure/affected_tests.yml
|
||||
parameters:
|
||||
|
@ -42,7 +42,7 @@ jobs:
|
|||
displayName: 'affected tests without changes: Safari Technology Preview'
|
||||
condition: eq(variables['Build.Reason'], 'PullRequest')
|
||||
pool:
|
||||
vmImage: 'macOS-10.13'
|
||||
vmImage: 'macOS-10.14'
|
||||
steps:
|
||||
- template: tools/ci/azure/affected_tests.yml
|
||||
parameters:
|
||||
|
@ -76,7 +76,7 @@ jobs:
|
|||
dependsOn: decision
|
||||
condition: dependencies.decision.outputs['test_jobs.wptrunner_infrastructure']
|
||||
pool:
|
||||
vmImage: 'macOS-10.13'
|
||||
vmImage: 'macOS-10.14'
|
||||
steps:
|
||||
- template: tools/ci/azure/checkout.yml
|
||||
- template: tools/ci/azure/pip_install.yml
|
||||
|
@ -106,7 +106,7 @@ jobs:
|
|||
dependsOn: decision
|
||||
condition: dependencies.decision.outputs['test_jobs.tools_unittest']
|
||||
pool:
|
||||
vmImage: 'macOS-10.13'
|
||||
vmImage: 'macOS-10.14'
|
||||
steps:
|
||||
- template: tools/ci/azure/checkout.yml
|
||||
- template: tools/ci/azure/tox_pytest.yml
|
||||
|
@ -119,7 +119,7 @@ jobs:
|
|||
dependsOn: decision
|
||||
condition: dependencies.decision.outputs['test_jobs.wptrunner_unittest']
|
||||
pool:
|
||||
vmImage: 'macOS-10.13'
|
||||
vmImage: 'macOS-10.14'
|
||||
steps:
|
||||
- template: tools/ci/azure/checkout.yml
|
||||
- template: tools/ci/azure/tox_pytest.yml
|
||||
|
@ -131,7 +131,7 @@ jobs:
|
|||
dependsOn: decision
|
||||
condition: dependencies.decision.outputs['test_jobs.wpt_integration']
|
||||
pool:
|
||||
vmImage: 'macOS-10.13'
|
||||
vmImage: 'macOS-10.14'
|
||||
steps:
|
||||
# full checkout required
|
||||
- template: tools/ci/azure/install_chrome.yml
|
||||
|
@ -353,7 +353,7 @@ jobs:
|
|||
parallel: 5 # chosen to make runtime ~2h
|
||||
timeoutInMinutes: 360
|
||||
pool:
|
||||
vmImage: 'macOS-10.13'
|
||||
vmImage: 'macOS-10.14'
|
||||
steps:
|
||||
- template: tools/ci/azure/checkout.yml
|
||||
- template: tools/ci/azure/pip_install.yml
|
||||
|
|
|
@ -25,31 +25,27 @@ tasks:
|
|||
}
|
||||
each(browser):
|
||||
$map:
|
||||
- [testharness, 1, 15]
|
||||
- [testharness, 2, 15]
|
||||
- [testharness, 3, 15]
|
||||
- [testharness, 4, 15]
|
||||
- [testharness, 5, 15]
|
||||
- [testharness, 6, 15]
|
||||
- [testharness, 7, 15]
|
||||
- [testharness, 8, 15]
|
||||
- [testharness, 9, 15]
|
||||
- [testharness, 10, 15]
|
||||
- [testharness, 11, 15]
|
||||
- [testharness, 12, 15]
|
||||
- [testharness, 13, 15]
|
||||
- [testharness, 14, 15]
|
||||
- [testharness, 15, 15]
|
||||
- [reftest, 1, 10]
|
||||
- [reftest, 2, 10]
|
||||
- [reftest, 3, 10]
|
||||
- [reftest, 4, 10]
|
||||
- [reftest, 5, 10]
|
||||
- [reftest, 6, 10]
|
||||
- [reftest, 7, 10]
|
||||
- [reftest, 8, 10]
|
||||
- [reftest, 9, 10]
|
||||
- [reftest, 10, 10]
|
||||
- [testharness, 1, 16]
|
||||
- [testharness, 2, 16]
|
||||
- [testharness, 3, 16]
|
||||
- [testharness, 4, 16]
|
||||
- [testharness, 5, 16]
|
||||
- [testharness, 6, 16]
|
||||
- [testharness, 7, 16]
|
||||
- [testharness, 8, 16]
|
||||
- [testharness, 9, 16]
|
||||
- [testharness, 10, 16]
|
||||
- [testharness, 11, 16]
|
||||
- [testharness, 12, 16]
|
||||
- [testharness, 13, 16]
|
||||
- [testharness, 14, 16]
|
||||
- [testharness, 15, 16]
|
||||
- [testharness, 16, 16]
|
||||
- [reftest, 1, 5]
|
||||
- [reftest, 2, 5]
|
||||
- [reftest, 3, 5]
|
||||
- [reftest, 4, 5]
|
||||
- [reftest, 5, 5]
|
||||
- [wdspec, 1, 1]
|
||||
each(chunk):
|
||||
taskId: {$eval: 'as_slugid(browser.name + browser.channel + chunk[0] + str(chunk[1]))'}
|
||||
|
|
|
@ -0,0 +1,39 @@
|
|||
// META: title=Blob Content Type
|
||||
// META: script=support.js
|
||||
// META: timeout=long
|
||||
|
||||
indexeddb_test(
|
||||
function upgrade(t, db) {
|
||||
db.createObjectStore('store');
|
||||
},
|
||||
function success(t, db) {
|
||||
var type = 'x-files/trust-no-one';
|
||||
|
||||
var blob = new Blob(['mulder', 'scully'], {type: type});
|
||||
assert_equals(blob.type, type, 'Blob type should match constructor option');
|
||||
|
||||
var tx = db.transaction('store', 'readwrite');
|
||||
tx.objectStore('store').put(blob, 'key');
|
||||
|
||||
tx.oncomplete = t.step_func(function() {
|
||||
var tx = db.transaction('store');
|
||||
tx.objectStore('store').get('key').onsuccess = t.step_func(function(e) {
|
||||
var result = e.target.result;
|
||||
assert_equals(result.type, type, 'Blob type should survive round-trip');
|
||||
|
||||
var url = URL.createObjectURL(result);
|
||||
var xhr = new XMLHttpRequest(), async = true;
|
||||
xhr.open('GET', url, async);
|
||||
xhr.send();
|
||||
xhr.onreadystatechange = t.step_func(function() {
|
||||
if (xhr.readyState !== XMLHttpRequest.DONE)
|
||||
return;
|
||||
assert_equals(xhr.getResponseHeader('Content-Type'), type,
|
||||
'Blob type should be preserved when fetched');
|
||||
t.done();
|
||||
});
|
||||
});
|
||||
});
|
||||
},
|
||||
'Ensure that content type round trips when reading blob data'
|
||||
);
|
|
@ -0,0 +1,47 @@
|
|||
// META: title=Blob Delete Object Store
|
||||
// META: script=support.js
|
||||
|
||||
let key = "blob key";
|
||||
|
||||
indexeddb_test(
|
||||
function upgrade(t, db) {
|
||||
const store0 = db.createObjectStore('store0');
|
||||
const store1 = db.createObjectStore('store1');
|
||||
|
||||
const blobAContent = "First blob content";
|
||||
const blobA = new Blob([blobAContent], {"type" : "text/plain"});
|
||||
|
||||
store0.put(blobA, key);
|
||||
},
|
||||
function success(t, db) {
|
||||
db.close();
|
||||
const request = indexedDB.open(db.name, 2);
|
||||
|
||||
request.onupgradeneeded = t.step_func(function(e) {
|
||||
const db = e.target.result;
|
||||
db.deleteObjectStore('store0');
|
||||
|
||||
request.onsuccess = t.step_func(function() {
|
||||
const blobBContent = "Second blob content";
|
||||
const trans = db.transaction('store1', 'readwrite');
|
||||
const store1 = trans.objectStore('store1');
|
||||
const blobB = new Blob([blobBContent], {"type" : "text/plain"});
|
||||
store1.put(blobB, key);
|
||||
|
||||
trans.oncomplete = t.step_func(function() {
|
||||
db.close();
|
||||
const delete_request = indexedDB.deleteDatabase(db.name);
|
||||
|
||||
// The test passes if it successfully completes.
|
||||
delete_request.onsuccess = t.step_func_done();
|
||||
|
||||
delete_request.onerror = t.unreached_func("Request should not fail.");
|
||||
});
|
||||
|
||||
trans.onabort = t.unreached_func("Transaction should not be aborted.");
|
||||
});
|
||||
});
|
||||
request.onsuccess = t.unreached_func("Request should not succeed without an upgrade.");
|
||||
request.onerror = t.unreached_func("Request should not fail.");
|
||||
request.onblocked = t.unreached_func("Request should not be blocked.");
|
||||
}, "Deleting an object store and a database containing blobs doesn't crash.");
|
|
@ -0,0 +1,53 @@
|
|||
// META: title=Blob Valid After Deletion
|
||||
// META: script=support.js
|
||||
|
||||
let key = "key";
|
||||
|
||||
indexeddb_test(
|
||||
function upgrade(t, db) {
|
||||
db.createObjectStore('store');
|
||||
},
|
||||
function success(t, db) {
|
||||
const blobAContent = "Blob A content";
|
||||
const blobBContent = "Blob B content";
|
||||
const blobA = new Blob([blobAContent], {"type" : "text/plain"});
|
||||
const blobB = new Blob([blobBContent], {"type" : "text/plain"});
|
||||
value = { a0: blobA, a1: blobA, b0: blobB };
|
||||
|
||||
const tx = db.transaction('store', 'readwrite');
|
||||
var store = tx.objectStore('store');
|
||||
|
||||
store.put(value, key);
|
||||
value = null;
|
||||
|
||||
const trans = db.transaction('store');
|
||||
store = trans.objectStore('store');
|
||||
const request = store.get(key);
|
||||
|
||||
request.onsuccess = t.step_func(function() {
|
||||
const record = request.result;
|
||||
|
||||
trans.oncomplete = t.step_func(function() {
|
||||
const trans = db.transaction('store', 'readwrite');
|
||||
store = trans.objectStore('store');
|
||||
const request = store.delete(key);
|
||||
|
||||
trans.oncomplete = t.step_func(function() {
|
||||
const promise1 = record.a0.text().then(t.step_func(text => { assert_equals(text, blobAContent); },
|
||||
t.unreached_func()));
|
||||
|
||||
const promise2 = record.a1.text().then(t.step_func(text => { assert_equals(text, blobAContent); },
|
||||
t.unreached_func()));
|
||||
|
||||
const promise3 = record.b0.text().then(t.step_func(text => { assert_equals(text, blobBContent); },
|
||||
t.unreached_func()));
|
||||
|
||||
Promise.all([promise1, promise2, promise3]).then(function() {
|
||||
// The test passes if it successfully completes.
|
||||
t.done();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
},
|
||||
"Blobs stay alive after their records are deleted.");
|
|
@ -0,0 +1,41 @@
|
|||
// META: title=Blob Valid Before Commit
|
||||
// META: script=support.js
|
||||
|
||||
let key = "key";
|
||||
|
||||
indexeddb_test(
|
||||
function upgrade(t, db) {
|
||||
db.createObjectStore('store');
|
||||
},
|
||||
function success(t, db) {
|
||||
const blobAContent = "Blob A content";
|
||||
const blobBContent = "Blob B content";
|
||||
const blobA = new Blob([blobAContent], {"type" : "text/plain"});
|
||||
const blobB = new Blob([blobBContent], {"type" : "text/plain"});
|
||||
const value = { a0: blobA, a1: blobA, b0: blobB };
|
||||
|
||||
const tx = db.transaction('store', 'readwrite');
|
||||
const store = tx.objectStore('store');
|
||||
|
||||
store.put(value, key);
|
||||
const request = store.get(key);
|
||||
|
||||
request.onsuccess = t.step_func(function() {
|
||||
const record = request.result;
|
||||
|
||||
const promise1 = record.a0.text().then(t.step_func(text => { assert_equals(text, blobAContent); },
|
||||
t.unreached_func()));
|
||||
|
||||
const promise2 = record.a1.text().then(t.step_func(text => { assert_equals(text, blobAContent); },
|
||||
t.unreached_func()));
|
||||
|
||||
const promise3 = record.b0.text().then(t.step_func(text => { assert_equals(text, blobBContent); },
|
||||
t.unreached_func()));
|
||||
|
||||
Promise.all([promise1, promise2, promise3]).then(function() {
|
||||
// The test passes if it successfully completes.
|
||||
t.done();
|
||||
});
|
||||
});
|
||||
},
|
||||
"Blobs can be read back before their records are committed.");
|
|
@ -288,5 +288,5 @@ promise_test(async testCase => {
|
|||
assert_equals(getRequest1.result.title, 'title1');
|
||||
assert_equals(getRequest2.result.title, 'title2');
|
||||
db.close();
|
||||
}, 'Transactions that handle all errors properly should be behave as ' +
|
||||
}, 'Transactions that handle all errors properly should behave as ' +
|
||||
'expected when an explicit commit is called in an onerror handler.');
|
||||
|
|
|
@ -288,8 +288,6 @@ cloneObjectTest(
|
|||
assert_equals(orig.type, clone.type);
|
||||
assert_equals(orig.name, clone.name);
|
||||
assert_equals(orig.lastModified, clone.lastModified);
|
||||
assert_equals(String(orig.lastModifiedDate),
|
||||
String(clone.lastModifiedDate));
|
||||
assert_equals(await orig.text(), await clone.text());
|
||||
});
|
||||
|
||||
|
|
|
@ -0,0 +1,62 @@
|
|||
// META: global=worker
|
||||
|
||||
'use strict';
|
||||
|
||||
const badChunks = [
|
||||
{
|
||||
name: 'undefined',
|
||||
value: undefined
|
||||
},
|
||||
{
|
||||
name: 'null',
|
||||
value: null
|
||||
},
|
||||
{
|
||||
name: 'numeric',
|
||||
value: 3.14
|
||||
},
|
||||
{
|
||||
name: 'object, not BufferSource',
|
||||
value: {}
|
||||
},
|
||||
{
|
||||
name: 'array',
|
||||
value: [65]
|
||||
},
|
||||
{
|
||||
name: 'SharedArrayBuffer',
|
||||
// Use a getter to postpone construction so that all tests don't fail where
|
||||
// SharedArrayBuffer is not yet implemented.
|
||||
get value() {
|
||||
return new SharedArrayBuffer();
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'shared Uint8Array',
|
||||
get value() {
|
||||
return new Uint8Array(new SharedArrayBuffer())
|
||||
}
|
||||
},
|
||||
];
|
||||
|
||||
for (const chunk of badChunks) {
|
||||
promise_test(async t => {
|
||||
const cs = new CompressionStream('gzip');
|
||||
const reader = cs.readable.getReader();
|
||||
const writer = cs.writable.getWriter();
|
||||
const writePromise = writer.write(chunk.value);
|
||||
const readPromise = reader.read();
|
||||
await promise_rejects(t, new TypeError(), writePromise, 'write should reject');
|
||||
await promise_rejects(t, new TypeError(), readPromise, 'read should reject');
|
||||
}, `chunk of type ${chunk.name} should error the stream for gzip`);
|
||||
|
||||
promise_test(async t => {
|
||||
const cs = new CompressionStream('deflate');
|
||||
const reader = cs.readable.getReader();
|
||||
const writer = cs.writable.getWriter();
|
||||
const writePromise = writer.write(chunk.value);
|
||||
const readPromise = reader.read();
|
||||
await promise_rejects(t, new TypeError(), writePromise, 'write should reject');
|
||||
await promise_rejects(t, new TypeError(), readPromise, 'read should reject');
|
||||
}, `chunk of type ${chunk.name} should error the stream for deflate`);
|
||||
}
|
|
@ -0,0 +1,57 @@
|
|||
// META: global=worker
|
||||
// META: script=pako/pako_inflate.min.js
|
||||
// META: timeout=long
|
||||
|
||||
'use strict';
|
||||
|
||||
// This test asserts that compressing '' doesn't affect the compressed data.
|
||||
// Example: compressing ['Hello', '', 'Hello'] results in 'HelloHello'
|
||||
|
||||
async function compressChunkList(chunkList, format) {
|
||||
const cs = new CompressionStream(format);
|
||||
const writer = cs.writable.getWriter();
|
||||
for (const chunk of chunkList) {
|
||||
const chunkByte = new TextEncoder().encode(chunk);
|
||||
writer.write(chunkByte);
|
||||
}
|
||||
const closePromise = writer.close();
|
||||
const out = [];
|
||||
const reader = cs.readable.getReader();
|
||||
let totalSize = 0;
|
||||
while (true) {
|
||||
const { value, done } = await reader.read();
|
||||
if (done)
|
||||
break;
|
||||
out.push(value);
|
||||
totalSize += value.byteLength;
|
||||
}
|
||||
await closePromise;
|
||||
const concatenated = new Uint8Array(totalSize);
|
||||
let offset = 0;
|
||||
for (const array of out) {
|
||||
concatenated.set(array, offset);
|
||||
offset += array.byteLength;
|
||||
}
|
||||
return concatenated;
|
||||
}
|
||||
|
||||
const chunkLists = [
|
||||
['', 'Hello', 'Hello'],
|
||||
['Hello', '', 'Hello'],
|
||||
['Hello', 'Hello', '']
|
||||
];
|
||||
const expectedValue = new TextEncoder().encode('HelloHello');
|
||||
|
||||
for (const chunkList of chunkLists) {
|
||||
promise_test(async t => {
|
||||
const compressedData = await compressChunkList(chunkList, 'deflate');
|
||||
// decompress with pako, and check that we got the same result as our original string
|
||||
assert_array_equals(expectedValue, pako.inflate(compressedData), 'value should match');
|
||||
}, `the result of compressing [${chunkList}] with deflate should be 'HelloHello'`);
|
||||
|
||||
promise_test(async t => {
|
||||
const compressedData = await compressChunkList(chunkList, 'gzip');
|
||||
// decompress with pako, and check that we got the same result as our original string
|
||||
assert_array_equals(expectedValue, pako.inflate(compressedData), 'value should match');
|
||||
}, `the result of compressing [${chunkList}] with gzip should be 'HelloHello'`);
|
||||
}
|
|
@ -0,0 +1,60 @@
|
|||
// META: global=worker
|
||||
// META: script=pako/pako_inflate.min.js
|
||||
// META: timeout=long
|
||||
|
||||
'use strict';
|
||||
|
||||
// This test asserts that compressing multiple chunks should work.
|
||||
|
||||
// Example: ('Hello', 3) => TextEncoder().encode('HelloHelloHello')
|
||||
function makeExpectedChunk(input, numberOfChunks) {
|
||||
const expectedChunk = input.repeat(numberOfChunks);
|
||||
return new TextEncoder().encode(expectedChunk);
|
||||
}
|
||||
|
||||
// Example: ('Hello', 3, 'deflate') => compress ['Hello', 'Hello', Hello']
|
||||
async function compressMultipleChunks(input, numberOfChunks, format) {
|
||||
const cs = new CompressionStream(format);
|
||||
const writer = cs.writable.getWriter();
|
||||
const chunk = new TextEncoder().encode(input);
|
||||
for (let i = 0; i < numberOfChunks; ++i) {
|
||||
writer.write(chunk);
|
||||
}
|
||||
const closePromise = writer.close();
|
||||
const out = [];
|
||||
const reader = cs.readable.getReader();
|
||||
let totalSize = 0;
|
||||
while (true) {
|
||||
const { value, done } = await reader.read();
|
||||
if (done)
|
||||
break;
|
||||
out.push(value);
|
||||
totalSize += value.byteLength;
|
||||
}
|
||||
await closePromise;
|
||||
const concatenated = new Uint8Array(totalSize);
|
||||
let offset = 0;
|
||||
for (const array of out) {
|
||||
concatenated.set(array, offset);
|
||||
offset += array.byteLength;
|
||||
}
|
||||
return concatenated;
|
||||
}
|
||||
|
||||
const hello = 'Hello';
|
||||
|
||||
for (let numberOfChunks = 2; numberOfChunks <= 16; ++numberOfChunks) {
|
||||
promise_test(async t => {
|
||||
const compressedData = await compressMultipleChunks(hello, numberOfChunks, 'deflate');
|
||||
const expectedValue = makeExpectedChunk(hello, numberOfChunks);
|
||||
// decompress with pako, and check that we got the same result as our original string
|
||||
assert_array_equals(expectedValue, pako.inflate(compressedData), 'value should match');
|
||||
}, `compressing ${numberOfChunks} chunks with deflate should work`);
|
||||
|
||||
promise_test(async t => {
|
||||
const compressedData = await compressMultipleChunks(hello, numberOfChunks, 'gzip');
|
||||
const expectedValue = makeExpectedChunk(hello, numberOfChunks);
|
||||
// decompress with pako, and check that we got the same result as our original string
|
||||
assert_array_equals(expectedValue, pako.inflate(compressedData), 'value should match');
|
||||
}, `compressing ${numberOfChunks} chunks with gzip should work`);
|
||||
}
|
|
@ -0,0 +1,54 @@
|
|||
// META: global=worker
|
||||
|
||||
'use strict';
|
||||
|
||||
// This test asserts that compressed data length is shorter than the original
|
||||
// data length. If the input is extremely small, the compressed data may be
|
||||
// larger than the original data.
|
||||
|
||||
const LARGE_FILE = '/media/test-av-384k-44100Hz-1ch-320x240-30fps-10kfr.webm';
|
||||
|
||||
async function compressArrayBuffer(input, format) {
|
||||
const cs = new CompressionStream(format);
|
||||
const writer = cs.writable.getWriter();
|
||||
writer.write(input);
|
||||
const closePromise = writer.close();
|
||||
const out = [];
|
||||
const reader = cs.readable.getReader();
|
||||
let totalSize = 0;
|
||||
while (true) {
|
||||
const { value, done } = await reader.read();
|
||||
if (done)
|
||||
break;
|
||||
out.push(value);
|
||||
totalSize += value.byteLength;
|
||||
}
|
||||
await closePromise;
|
||||
const concatenated = new Uint8Array(totalSize);
|
||||
let offset = 0;
|
||||
for (const array of out) {
|
||||
concatenated.set(array, offset);
|
||||
offset += array.byteLength;
|
||||
}
|
||||
return concatenated;
|
||||
}
|
||||
|
||||
promise_test(async () => {
|
||||
const response = await fetch(LARGE_FILE);
|
||||
const buffer = await response.arrayBuffer();
|
||||
const bufferView = new Uint8Array(buffer);
|
||||
const originalLength = bufferView.length;
|
||||
const compressedData = await compressArrayBuffer(bufferView, 'deflate');
|
||||
const compressedLength = compressedData.length;
|
||||
assert_less_than(compressedLength, originalLength, 'output should be smaller');
|
||||
}, 'the length of deflated data should be shorter than that of the original data');
|
||||
|
||||
promise_test(async () => {
|
||||
const response = await fetch(LARGE_FILE);
|
||||
const buffer = await response.arrayBuffer();
|
||||
const bufferView = new Uint8Array(buffer);
|
||||
const originalLength = bufferView.length;
|
||||
const compressedData = await compressArrayBuffer(bufferView, 'gzip');
|
||||
const compressedLength = compressedData.length;
|
||||
assert_less_than(compressedLength, originalLength, 'output should be smaller');
|
||||
}, 'the length of gzipped data should be shorter than that of the original data');
|
|
@ -0,0 +1,29 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS Containment Test: Size containment scrollbars</title>
|
||||
<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-contain-1/#containment-size">
|
||||
<link rel="match" href="reference/contain-size-scrollbars-004-ref.html">
|
||||
<meta name=assert content="This test checks that contain:size element's content and padding are considered for scrollbars.">
|
||||
<style>
|
||||
#scroller {
|
||||
contain: size;
|
||||
background: lightgreen;
|
||||
overflow: scroll;
|
||||
padding-bottom: 50px;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
}
|
||||
#content {
|
||||
background: lightblue;
|
||||
width: 50px;
|
||||
height: 130px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id=scroller>
|
||||
<div id=content>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p>This test passes if it has the same output as the reference.</p>
|
|
@ -0,0 +1,25 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS Containment Test: Reference file</title>
|
||||
<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
|
||||
<style>
|
||||
#scroller {
|
||||
background: lightgreen;
|
||||
overflow: scroll;
|
||||
padding-bottom: 50px;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
}
|
||||
#content {
|
||||
background: lightblue;
|
||||
width: 50px;
|
||||
height: 130px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id=scroller>
|
||||
<div id=content>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p>This test passes if it has the same output as the reference.</p>
|
|
@ -7,4 +7,4 @@
|
|||
padding: 0;
|
||||
}
|
||||
</style>
|
||||
<p>Ա. Filler Text
|
||||
<p>Ա. Filler Text<span style="display: inline-block; width: 1px; height: 50px;"></span>
|
||||
|
|
|
@ -14,5 +14,5 @@ ol {
|
|||
</style>
|
||||
|
||||
<ol>
|
||||
<li>Filler Text</li>
|
||||
<li>Filler Text<span style="display: inline-block; width: 1px; height: 50px;"></span></li>
|
||||
</ol>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<!DOCTYPE html>
|
||||
<title>CSS Multi-column Layout Test: extremely tall multicolumn container with extremely tall inline-block inside</title>
|
||||
<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org">
|
||||
<link rel="help" href="http://www.w3.org/TR/css3-multicol/" title="CSS Multi-column Layout Module Level 1">
|
||||
<link rel="help" href="https://www.w3.org/TR/css-multicol-1/#the-multi-column-model" title="CSS Multi-column Layout Module Level 1">
|
||||
<meta name="assert" content="This tests that we get no crash if we put an extremely tall inline-block inside an extremely tall multicol container. Engines typically have some maximum limit for how large values they can represent. If the value is large enough to become 'infinity', the engine should still not crash">
|
||||
<!-- Explanation for the CSS values specified below: This test was written for
|
||||
the Chromium Blink engine, which uses a fixed-point 32 bit integer. In this
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<!DOCTYPE html>
|
||||
<title>Taking the sole box after a spanner out of flow, then remove it</title>
|
||||
<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org">
|
||||
<link rel="help" href="http://www.w3.org/TR/css3-multicol/" title="CSS Multi-column Layout Module Level 1">
|
||||
<link rel="help" href="https://www.w3.org/TR/css-multicol-1/#the-multi-column-model">
|
||||
<meta name="assert" content="An absolutely positioned box is still contained by the multicol container if its containing block is inside the multicol container">
|
||||
<div id="multicol" style="columns:3;">
|
||||
<div style="position:relative;">
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
<!DOCTYPE html>
|
||||
<link rel="author" title="Philip Rogers" href="mailto:pdr@chromium.org">
|
||||
<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1011699">
|
||||
<span id="target" style="outline: 1px solid black; will-change: opacity; opacity: 0.7;">test</span>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script>
|
||||
test(()=> {
|
||||
target.style.background = "lightblue";
|
||||
}, "no crash");
|
||||
</script>
|
|
@ -0,0 +1,17 @@
|
|||
<!doctype html>
|
||||
<title>CSS Overflow Test: overscroll-behavior doesn't stop overflow from being propagated from the body</title>
|
||||
<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
|
||||
<link rel="author" title="Mozilla" href="https://mozilla.org">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-overflow/#overflow-propagation">
|
||||
<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1586600">
|
||||
<link rel="match" href="reference/overflow-body-propagation-ref.html">
|
||||
<style>
|
||||
:root {
|
||||
overscroll-behavior-y: contain;
|
||||
}
|
||||
body {
|
||||
overflow: scroll;
|
||||
margin-top: 100px;
|
||||
}
|
||||
</style>
|
||||
<body>The viewport should have scrollbars, not the body.</body>
|
|
@ -0,0 +1,17 @@
|
|||
<!doctype html>
|
||||
<title>CSS Overflow Test: scroll-snap-type doesn't stop overflow from being propagated from the body</title>
|
||||
<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
|
||||
<link rel="author" title="Mozilla" href="https://mozilla.org">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-overflow/#overflow-propagation">
|
||||
<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1586600">
|
||||
<link rel="match" href="reference/overflow-body-propagation-ref.html">
|
||||
<style>
|
||||
:root {
|
||||
scroll-snap-type: both mandatory;
|
||||
}
|
||||
body {
|
||||
overflow: scroll;
|
||||
margin-top: 100px;
|
||||
}
|
||||
</style>
|
||||
<body>The viewport should have scrollbars, not the body.</body>
|
|
@ -1,6 +1,6 @@
|
|||
<!DOCTYPE html>
|
||||
<title>Should not crash when inserting an element inside a :first-line pseudo.</title>
|
||||
<link rel="help" href="https://drafts.csswg.org/css-pseudo-4/">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-pseudo-4/#first-line-pseudo">
|
||||
<style>
|
||||
p:first-line, p:first-letter {
|
||||
font-family: serif;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<!doctype html>
|
||||
<title>CSS Pseudo Element API IDL tests</title>
|
||||
<link rel="help" href="https://drafts.csswg.org/css-pseudo-4/">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-pseudo-4/#cssom">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/resources/WebIDLParser.js"></script>
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
<!DOCTYPE html>
|
||||
<title>CSS Shadow Parts IDL tests</title>
|
||||
<link rel="help" href="https://drafts.csswg.org/css-shadow-parts/#idl">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/resources/WebIDLParser.js"></script>
|
||||
<script src="/resources/idlharness.js"></script>
|
||||
<script>
|
||||
idl_test(
|
||||
['css-shadow-parts'],
|
||||
['dom'],
|
||||
idl_array => {
|
||||
self.element = document.createElementNS('ns', 'e');
|
||||
self.htmlElement = document.createElement('html');
|
||||
self.svgElement = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
|
||||
idl_array.add_objects({
|
||||
Element: ['element', 'htmlElement', 'svgElement'],
|
||||
});
|
||||
}
|
||||
);
|
||||
</script>
|
|
@ -0,0 +1,30 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>CSS Shadow Parts - Simple Important Important</title>
|
||||
<meta href="mailto:fergal@chromium.org" rel="author" title="Fergal Daly">
|
||||
<link href="http://www.google.com/" rel="author" title="Google">
|
||||
<link href="https://drafts.csswg.org/css-shadow-parts/" rel="help">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="support/shadow-helper.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<style>#c-e::part(partp) { color: green !important; }</style>
|
||||
<script>installCustomElement("custom-element", "custom-element-template");</script>
|
||||
<template id="custom-element-template">
|
||||
<style>span { color: red !important; }</style>
|
||||
<span id="part" part="partp">This text</span>
|
||||
</template>
|
||||
The following text should be green:
|
||||
<custom-element id="c-e"></custom-element>
|
||||
<script>
|
||||
"use strict";
|
||||
const colorRed = "rgb(255, 0, 0)";
|
||||
test(function() {
|
||||
const el = getElementByShadowIds(document, ["c-e", "part"]);
|
||||
assert_equals(window.getComputedStyle(el).color, colorRed);
|
||||
}, "Part in selected host is styled");
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,29 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>CSS Shadow Parts - Simple Important Inline</title>
|
||||
<meta href="mailto:fergal@chromium.org" rel="author" title="Fergal Daly">
|
||||
<link href="http://www.google.com/" rel="author" title="Google">
|
||||
<link href="https://drafts.csswg.org/css-shadow-parts/" rel="help">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="support/shadow-helper.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<style>#c-e::part(partp) { color: red; }</style>
|
||||
<script>installCustomElement("custom-element", "custom-element-template");</script>
|
||||
<template id="custom-element-template">
|
||||
<span id="part" part="partp" style="color: green !important">This text</span>
|
||||
</template>
|
||||
The following text should be red:
|
||||
<custom-element id="c-e"></custom-element>
|
||||
<script>
|
||||
"use strict";
|
||||
const colorGreen = "rgb(0, 128, 0)";
|
||||
test(function() {
|
||||
const el = getElementByShadowIds(document, ["c-e", "part"]);
|
||||
assert_equals(window.getComputedStyle(el).color, colorGreen);
|
||||
}, "Part in selected host is not styled");
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,30 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>CSS Shadow Parts - Simple Important</title>
|
||||
<meta href="mailto:fergal@chromium.org" rel="author" title="Fergal Daly">
|
||||
<link href="http://www.google.com/" rel="author" title="Google">
|
||||
<link href="https://drafts.csswg.org/css-shadow-parts/" rel="help">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="support/shadow-helper.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<style>#c-e::part(partp) { color: red; }</style>
|
||||
<script>installCustomElement("custom-element", "custom-element-template");</script>
|
||||
<template id="custom-element-template">
|
||||
<style>span { color: green !important; }</style>
|
||||
<span id="part" part="partp">This text</span>
|
||||
</template>
|
||||
The following text should be green:
|
||||
<custom-element id="c-e"></custom-element>
|
||||
<script>
|
||||
"use strict";
|
||||
const colorGreen = "rgb(0, 128, 0)";
|
||||
test(function() {
|
||||
const el = getElementByShadowIds(document, ["c-e", "part"]);
|
||||
assert_equals(window.getComputedStyle(el).color, colorGreen);
|
||||
}, "Part in selected host is styled");
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,29 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>CSS Shadow Parts - Simple Inline</title>
|
||||
<meta href="mailto:fergal@chromium.org" rel="author" title="Fergal Daly">
|
||||
<link href="http://www.google.com/" rel="author" title="Google">
|
||||
<link href="https://drafts.csswg.org/css-shadow-parts/" rel="help">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="support/shadow-helper.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<style>#c-e::part(partp) { color: green; }</style>
|
||||
<script>installCustomElement("custom-element", "custom-element-template");</script>
|
||||
<template id="custom-element-template">
|
||||
<span id="part" part="partp" style="color: red">This text</span>
|
||||
</template>
|
||||
The following text should be green:
|
||||
<custom-element id="c-e"></custom-element>
|
||||
<script>
|
||||
"use strict";
|
||||
const colorGreen = "rgb(0, 128, 0)";
|
||||
test(function() {
|
||||
const el = getElementByShadowIds(document, ["c-e", "part"]);
|
||||
assert_equals(window.getComputedStyle(el).color, colorGreen);
|
||||
}, "Part in selected host is styled");
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -19,16 +19,16 @@
|
|||
// font relative units: em, ex, ch, rem
|
||||
var units = ['em', 'ex', 'ch', 'rem'];
|
||||
var resolveds = {};
|
||||
ParsingUtils.setupFonts(function () {
|
||||
var div = document.createElement('div');
|
||||
document.body.appendChild(div);
|
||||
units.forEach(function(unit) {
|
||||
div.style.width = '10' + unit;
|
||||
var s = getComputedStyle(div);
|
||||
resolveds[unit] = parseFloat(s.width);
|
||||
});
|
||||
document.body.removeChild(div);
|
||||
})();
|
||||
ParsingUtils.setupFonts();
|
||||
|
||||
var div = document.createElement('div');
|
||||
document.body.appendChild(div);
|
||||
units.forEach(function(unit) {
|
||||
div.style.width = '10' + unit;
|
||||
var s = getComputedStyle(div);
|
||||
resolveds[unit] = parseFloat(s.width);
|
||||
});
|
||||
document.body.removeChild(div);
|
||||
|
||||
function fillArray(string, length) {
|
||||
return Array.apply(null, new Array(length)).map(String.prototype.valueOf, string);
|
||||
|
@ -49,6 +49,8 @@
|
|||
});
|
||||
|
||||
generate_tests(testUnit, tests);
|
||||
|
||||
ParsingUtils.restoreFonts();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -0,0 +1,41 @@
|
|||
<!DOCTYPE html>
|
||||
<title>Collapsed borders and box-shadow</title>
|
||||
<link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-tables-3/#in-collapsed-borders-mode">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-backgrounds-3/#box-shadow">
|
||||
<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
|
||||
<link rel="bookmark" href="https://crbug.com/1006241" />
|
||||
<meta name="flags" content="" />
|
||||
<meta name="assert" content="box-shadow size and location on a cell with collapsed borders are calculated correctly" />
|
||||
|
||||
<style>
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
/* Make the green box-shadow start at the inner edge of the border to cover up all the red.
|
||||
Chrome's bug made the box-shadow start further toward the center. */
|
||||
td {
|
||||
border: 20px solid green;
|
||||
box-shadow: inset 60px 0px green;
|
||||
/* The properties after the blank line aren't the focus of the test. */
|
||||
|
||||
background: red;
|
||||
line-height: 0px;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
td > span {
|
||||
display: inline-block; /* chrome only hits this bug when the td children are inline */
|
||||
|
||||
height: 60px;
|
||||
width: 60px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
|
||||
<table>
|
||||
<tr>
|
||||
<td><span></span></td>
|
||||
</tr>
|
||||
</table>
|
|
@ -2,7 +2,7 @@
|
|||
<meta charset="utf-8">
|
||||
<title>CSS Text level 3 Test: break-space tabs don't hang</title>
|
||||
<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-3">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2">
|
||||
<link rel="match" href="reference/break-spaces-tab-005-ref.html">
|
||||
<meta name="assert" content="a sequence of break-spaces tabs at the end of a line does not hang.">
|
||||
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<meta charset="utf-8">
|
||||
<title>CSS Text level 3 Test: break-spaces tabs and spaces don't hang</title>
|
||||
<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-3">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2">
|
||||
<link rel="match" href="reference/break-spaces-tab-005-ref.html">
|
||||
<meta name="assert" content="a sequence of break-spaces tabs and spaces at the end of a line does not hang, and can wrap after each tab or space.">
|
||||
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
|
||||
|
|
|
@ -0,0 +1,44 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS Text level 3 Test: collapsible white space at end-of-line and bidi</title>
|
||||
<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2">
|
||||
<link rel="match" href="reference/eol-spaces-bidi-001-ref.html">
|
||||
<meta name="assert" content="Collapsible space at the end of the line prior to bidi reordering are removed.">
|
||||
<style>
|
||||
div {
|
||||
font-family: monospace;
|
||||
border: solid blue;
|
||||
font-size: 1.5em;
|
||||
margin-bottom:1em;
|
||||
display: inline-block;
|
||||
}
|
||||
.ref {
|
||||
white-space: pre;
|
||||
border-color: orange;
|
||||
}
|
||||
.w5 { width: 5ch; }
|
||||
.w6 { width: 6ch; }
|
||||
.w7 { width: 7ch; }
|
||||
.w8 { width: 8ch; }
|
||||
|
||||
.blue { background: #aaaaff; }
|
||||
.red { background: #ffaaaa; }
|
||||
.green { background: #aaffaa; }
|
||||
.pink { background: #ffaaff; }
|
||||
.yellow { background: #ffffaa; }
|
||||
|
||||
</style>
|
||||
<p>Test passes if the content of each blue box (on the left) is laid out identically to the content of the orange box to its right.
|
||||
|
||||
<div class=w5><span class=pink> </span>A<span class=blue> </span>B<span class=red> </span>ا<span class=green> </span>ب<span class=yellow> </span></div>
|
||||
<div class="ref w5">A<span class=blue> </span>B<span class=red> </span>ا<br>ب</div>
|
||||
<br>
|
||||
<div class=w6><span class=pink> </span>A<span class=blue> </span>B<span class=red> </span>ا<span class=green> </span>ب<span class=yellow> </span></div>
|
||||
<div class="ref w6">A<span class=blue> </span>B<span class=red> </span>ا<br>ب</div>
|
||||
<br>
|
||||
<div class=w7><span class=pink> </span>A<span class=blue> </span>B<span class=red> </span>ا<span class=green> </span>ب<span class=yellow> </span></div>
|
||||
<div class="ref w7">A<span class=blue> </span>B<span class=red> </span>ا<span class=green> </span>ب</div>
|
||||
<br>
|
||||
<div class=w8><span class=pink> </span>A<span class=blue> </span>B<span class=red> </span>ا<span class=green> </span>ب<span class=yellow> </span></div>
|
||||
<div class="ref w8">A<span class=blue> </span>B<span class=red> </span>ا<span class=green> </span>ب</div>
|
|
@ -2,7 +2,7 @@
|
|||
<meta charset="utf-8">
|
||||
<title>CSS Text level 3 Test: pre-wrap tabs hang</title>
|
||||
<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-3">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2">
|
||||
<link rel="match" href="reference/pre-wrap-001-ref.html">
|
||||
<meta name="assert" content="a sequence of pre-wrap tabs at the end of a line hangs.">
|
||||
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<meta charset="utf-8">
|
||||
<title>CSS Text level 3 Test: pre-wrap tabs and spaces hang</title>
|
||||
<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-3">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2">
|
||||
<link rel="match" href="reference/pre-wrap-001-ref.html">
|
||||
<meta name="assert" content="a sequence of pre-wrap tabs and spaces at the end of a line hangs.">
|
||||
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
|
||||
|
|
|
@ -0,0 +1,39 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS test reference</title>
|
||||
<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/">
|
||||
<style>
|
||||
div {
|
||||
font-family: monospace;
|
||||
border: solid blue;
|
||||
font-size: 1.5em;
|
||||
margin-bottom:1em;
|
||||
display: inline-block;
|
||||
white-space: pre;
|
||||
}
|
||||
.ref {
|
||||
border-color: orange;
|
||||
}
|
||||
.w5 { width: 5ch; }
|
||||
.w6 { width: 6ch; }
|
||||
.w7 { width: 7ch; }
|
||||
.w8 { width: 8ch; }
|
||||
|
||||
.blue { background: #aaaaff; }
|
||||
.red { background: #ffaaaa; }
|
||||
.green { background: #aaffaa; }
|
||||
|
||||
</style>
|
||||
<p>Test passes if the content of each blue box (on the left) is laid out identically to the content of the orange box to its right.
|
||||
|
||||
<div class="w5">A<span class=blue> </span>B<span class=red> </span>ا<br>ب</div>
|
||||
<div class="ref w5">A<span class=blue> </span>B<span class=red> </span>ا<br>ب</div>
|
||||
<br>
|
||||
<div class="w6">A<span class=blue> </span>B<span class=red> </span>ا<br>ب</div>
|
||||
<div class="ref w6">A<span class=blue> </span>B<span class=red> </span>ا<br>ب</div>
|
||||
<br>
|
||||
<div class="w7">A<span class=blue> </span>B<span class=red> </span>ا<span class=green> </span>ب</div>
|
||||
<div class="ref w7">A<span class=blue> </span>B<span class=red> </span>ا<span class=green> </span>ب</div>
|
||||
<br>
|
||||
<div class="w8">A<span class=blue> </span>B<span class=red> </span>ا<span class=green> </span>ب</div>
|
||||
<div class="ref w8">A<span class=blue> </span>B<span class=red> </span>ا<span class=green> </span>ب</div>
|
|
@ -1,6 +1,6 @@
|
|||
<!DOCTYPE html>
|
||||
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
|
||||
<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/">
|
||||
<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#dimension-mapping">
|
||||
<link rel="help" href="https://www.w3.org/TR/CSS22/box.html#propdef-padding-top">
|
||||
<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=966795">
|
||||
<link rel="match" href="../reference/nothing.html">
|
||||
|
|
|
@ -13,18 +13,17 @@ body {
|
|||
writing-mode: vertical-rl;
|
||||
width: 0; height: 0;
|
||||
}
|
||||
html::before {
|
||||
content: "This text must be vertical.";
|
||||
/* This is inline content of the root,
|
||||
and should therefore be vertical,
|
||||
as the root's used value is vertical */
|
||||
}
|
||||
html::after {
|
||||
content: "This text must be horizontal.";
|
||||
display: block;
|
||||
/* This is a block level element,
|
||||
with it's own writing mode inherited from the root,
|
||||
horizontal since the root's computed value should be horizontal*/
|
||||
/* The writing mode inherited from the root must be horizontal
|
||||
since the root's computed value should be horizontal */
|
||||
|
||||
}
|
||||
</style>
|
||||
<body></body>
|
||||
<script>
|
||||
document.documentElement.append("This text must be vertical");
|
||||
/* This is direct content of the root,
|
||||
and should therefore be vertical,
|
||||
as the root's used value is vertical */
|
||||
</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