mirror of
https://github.com/servo/servo.git
synced 2025-06-23 16:44:33 +01:00
Update web-platform-tests to revision b'94be51cc50986018ab25e8a952bf234862ef3e5f'
This commit is contained in:
parent
fbc2ac00fb
commit
48c9556bb6
84 changed files with 1318 additions and 367 deletions
|
@ -1,4 +0,0 @@
|
|||
[url-charset.window.html]
|
||||
expected: TIMEOUT
|
||||
[Blob charset should override any auto-detected charset.]
|
||||
expected: TIMEOUT
|
|
@ -140010,6 +140010,19 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"single-line-column-flex-fragmentation-059.html": [
|
||||
"ff91f373ec756ac8c101629a7199d75a600d8a96",
|
||||
[
|
||||
null,
|
||||
[
|
||||
[
|
||||
"/css/reference/ref-filled-green-100px-square.xht",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"single-line-row-flex-fragmentation-001.html": [
|
||||
"379327a4aff584192f076d3f9d8f3ead232c0f5c",
|
||||
[
|
||||
|
@ -176569,7 +176582,7 @@
|
|||
]
|
||||
],
|
||||
"font-synthesis-style-first-letter.html": [
|
||||
"32f037bdb721dc3315787d37dce5c66b7cf1e37c",
|
||||
"1296baf05f9c430cda6c52e5a63e813c79862b9a",
|
||||
[
|
||||
null,
|
||||
[
|
||||
|
@ -176621,7 +176634,7 @@
|
|||
]
|
||||
],
|
||||
"font-synthesis-weight-first-letter.html": [
|
||||
"52865540a791189e0adf89fb17f8b43fb830334b",
|
||||
"3d60b2a22847e1b99f1ee53d27c231a41bbc60da",
|
||||
[
|
||||
null,
|
||||
[
|
||||
|
@ -206862,6 +206875,19 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"nest-containing-forgiving.html": [
|
||||
"d399142f7efb998db7ff8dffae0770c5bcea0cc2",
|
||||
[
|
||||
null,
|
||||
[
|
||||
[
|
||||
"/css/css-nesting/nest-containing-forgiving-ref.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"nesting-basic.html": [
|
||||
"6bc727a73195122f6f2abca1a07a289c99376f5c",
|
||||
[
|
||||
|
@ -371061,7 +371087,7 @@
|
|||
[]
|
||||
],
|
||||
"font-synthesis-style-first-letter-ref.html": [
|
||||
"f1abcb7bb3f4681ecfc2b135dc5ca6dd6b6b9896",
|
||||
"c4f9b175de79052ad0f29df3be07a33c1072f245",
|
||||
[]
|
||||
],
|
||||
"font-synthesis-style-first-line-ref.html": [
|
||||
|
@ -371077,7 +371103,7 @@
|
|||
[]
|
||||
],
|
||||
"font-synthesis-weight-first-letter-ref.html": [
|
||||
"7ec42f07b7c2bfbd329534bc8401acb5ee33d5f2",
|
||||
"fd29f4134d67d22b6e344dcc7ec8315a32dac2e5",
|
||||
[]
|
||||
],
|
||||
"font-synthesis-weight-first-line-ref.html": [
|
||||
|
@ -383166,6 +383192,10 @@
|
|||
"006216b60e71d2d1af9c3d6c9fc81ea4c53f1d1d",
|
||||
[]
|
||||
],
|
||||
"nest-containing-forgiving-ref.html": [
|
||||
"36b07c92b6fdcbb9bca66a4292bd871af7e7d696",
|
||||
[]
|
||||
],
|
||||
"nesting-basic-ref.html": [
|
||||
"c2f7c669497d363e868cb96d2c2bb1ee315fff49",
|
||||
[]
|
||||
|
@ -395425,7 +395455,7 @@
|
|||
[]
|
||||
],
|
||||
"content-visibility-auto-shared-element-ref.html": [
|
||||
"5c3fb1616d6e01276eced88d3a97b784ba1deb59",
|
||||
"f4a34967ec066c67b5f8b486b7079411a9adb884",
|
||||
[]
|
||||
],
|
||||
"content-with-clip-max-texture-size-ref.html": [
|
||||
|
@ -402031,7 +402061,7 @@
|
|||
[]
|
||||
],
|
||||
"delete.js": [
|
||||
"c1f48a74b2010bd44ff71a33f9f9f4b4cbb5caac",
|
||||
"94611e65767647353f4864f65c7ee0ece93f375d",
|
||||
[]
|
||||
],
|
||||
"fontname.js": [
|
||||
|
@ -402051,7 +402081,7 @@
|
|||
[]
|
||||
],
|
||||
"forwarddelete.js": [
|
||||
"832ba608a04587feeb85308f23f6b530b3e65b79",
|
||||
"524d43274e51f0ec2b870c4bf9b4bc64334ec104",
|
||||
[]
|
||||
],
|
||||
"hilitecolor.js": [
|
||||
|
@ -402123,7 +402153,7 @@
|
|||
[]
|
||||
],
|
||||
"multitest.js": [
|
||||
"89f5eebdb666c896e0c549bf0683894d0b64e8f8",
|
||||
"118ae4b3a41f753433b76fabaa17e22a28ae6059",
|
||||
[]
|
||||
],
|
||||
"outdent.js": [
|
||||
|
@ -410306,11 +410336,11 @@
|
|||
[]
|
||||
],
|
||||
"gentestutils.py": [
|
||||
"2517568a5a83c9e8539a7c93e69aaf8a085504f4",
|
||||
"59fa9e73e51bc19c5c1bcc827684e078ee132058",
|
||||
[]
|
||||
],
|
||||
"gentestutilsunion.py": [
|
||||
"4c65d688c25f27d6d29f4732f1f250323385a945",
|
||||
"3afb54de477e6fbfff4bf5790376153128b79741",
|
||||
[]
|
||||
],
|
||||
"name2dir-canvas.yaml": [
|
||||
|
@ -424162,11 +424192,11 @@
|
|||
[]
|
||||
],
|
||||
"early-hints-helpers.sub.js": [
|
||||
"3991e8fe9da479dd0f5b4cea537542ba948a8540",
|
||||
"faf6119cf1edd5454aaabd643ffe40d33c589463",
|
||||
[]
|
||||
],
|
||||
"early-hints-test-loader.h2.py": [
|
||||
"aa9188c6dbc3920055095421bc880ec5595b0bbb",
|
||||
"bb987209c50f41f260cc7e5d43901c8777ee8779",
|
||||
[]
|
||||
],
|
||||
"empty-corp-absent.js": [
|
||||
|
@ -424185,6 +424215,14 @@
|
|||
"1738466bcb3225df2ec2dc7f58459784ce426a84",
|
||||
[]
|
||||
],
|
||||
"empty.json": [
|
||||
"0967ef424bce6791893e9a57bb952f80fd536e93",
|
||||
[]
|
||||
],
|
||||
"empty.json.headers": [
|
||||
"1738466bcb3225df2ec2dc7f58459784ce426a84",
|
||||
[]
|
||||
],
|
||||
"example.pdf": [
|
||||
"7bad251ba7e08efc9c383d88518367a6f204cdd6",
|
||||
[]
|
||||
|
@ -424245,6 +424283,10 @@
|
|||
"daea33160ae4e7b7bd074fb1849f1ba40ce8e715",
|
||||
[]
|
||||
],
|
||||
"preload-fetch.html": [
|
||||
"2e90f76af143fce7f05eb77bb71f00e0d880ff88",
|
||||
[]
|
||||
],
|
||||
"preload-finished-before-final-response.h2.py": [
|
||||
"d0b12408d9cff01352380cec5727145dbed6dded",
|
||||
[]
|
||||
|
@ -444734,7 +444776,7 @@
|
|||
[]
|
||||
],
|
||||
"webtransport_h3_server.py": [
|
||||
"d3031b4c0c2f531f97720249a0596f04c8c63d75",
|
||||
"4b49c90d816adf577147c7263e90c2cc05170160",
|
||||
[]
|
||||
]
|
||||
},
|
||||
|
@ -445868,7 +445910,11 @@
|
|||
"tentative": {
|
||||
"resources": {
|
||||
"requestStorageAccessForOrigin-iframe.html": [
|
||||
"3e2f6d5b6288993714f3ee56ae89631e03d563b9",
|
||||
"43d16705c8515b48685420c8d14925af90afb62a",
|
||||
[]
|
||||
],
|
||||
"requestStorageAccessForOrigin-iframe.https.html": [
|
||||
"db03b25e14d7883a89cac79746c11b280ec24dae",
|
||||
[]
|
||||
]
|
||||
}
|
||||
|
@ -490959,7 +491005,7 @@
|
|||
]
|
||||
],
|
||||
"color-computed-color-function.html": [
|
||||
"e610754c644a4e9f32a7adceffd49690c23157e7",
|
||||
"530a605bc9292f061dca5a053eb61f77349534ee",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
|
@ -491036,7 +491082,7 @@
|
|||
]
|
||||
],
|
||||
"color-invalid-color-function.html": [
|
||||
"75d9ff7c21764bb1e011e0f93bfbf46d4b08e5c5",
|
||||
"51f393747c19a257045b2d9f7537ef6c8ff85b11",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
|
@ -491113,7 +491159,7 @@
|
|||
]
|
||||
],
|
||||
"color-valid-color-function.html": [
|
||||
"79e0bde059013de349faf36852f15f7177c67a29",
|
||||
"1eb7c744b2aceea1234801706babdba155e35c9f",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
|
@ -503216,6 +503262,13 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"custom-property-animation-list-type-mismatch.html": [
|
||||
"95757445ae79121893e02d3f37153e197ac4fbd3",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"custom-property-animation-non-inherited-used-by-standard-property.html": [
|
||||
"11d3f6740d950b8f86536515242869e468e1a1c3",
|
||||
[
|
||||
|
@ -529303,6 +529356,23 @@
|
|||
}
|
||||
]
|
||||
],
|
||||
"typing-around-link-element-after-joining-paragraphs.html": [
|
||||
"4934530c9b842dfe9e1259c0d7541427279eb2f2",
|
||||
[
|
||||
"editing/other/typing-around-link-element-after-joining-paragraphs.html?action=Backspace",
|
||||
{
|
||||
"testdriver": true,
|
||||
"timeout": "long"
|
||||
}
|
||||
],
|
||||
[
|
||||
"editing/other/typing-around-link-element-after-joining-paragraphs.html?action=Delete",
|
||||
{
|
||||
"testdriver": true,
|
||||
"timeout": "long"
|
||||
}
|
||||
]
|
||||
],
|
||||
"typing-around-link-element-at-collapsed-selection.tentative.html": [
|
||||
"2b2e304aba47e4b1ffb4679209afb32debcf94cc",
|
||||
[
|
||||
|
@ -616364,6 +616434,20 @@
|
|||
}
|
||||
]
|
||||
],
|
||||
"preload-fetch.h2.window.js": [
|
||||
"121913ed3175d552acf83ba3cb4b19e54b51d75a",
|
||||
[
|
||||
"loading/early-hints/preload-fetch.h2.window.html",
|
||||
{
|
||||
"script_metadata": [
|
||||
[
|
||||
"script",
|
||||
"resources/early-hints-helpers.sub.js"
|
||||
]
|
||||
]
|
||||
}
|
||||
]
|
||||
],
|
||||
"preload-finished-before-final-response.h2.window.js": [
|
||||
"c63239be1f59426b35760c26ef47453c9248c59b",
|
||||
[
|
||||
|
@ -622704,6 +622788,20 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"same-url-replace-cross-document.html": [
|
||||
"0a976cd51fdcb3205d2a71cc9dc1a9853e417eee",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"same-url-replace-same-document.html": [
|
||||
"839c687934238d594013ec6ca009532df440d269",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"signal-abort-detach-in-onnavigate.html": [
|
||||
"467ea88899323bbf47e9a12fd3a03ee577963a43",
|
||||
[
|
||||
|
@ -647141,6 +647239,13 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"scroll-timeline-with-percent-delay.tentative.html": [
|
||||
"4f2e1761de29d80c8377926f734e0cfbfe831a8c",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"timeline-range-name-offset-in-keyframes.tentative.html": [
|
||||
"993046c5f2b8d3eb62dcda1adb33ad7a82137524",
|
||||
[
|
||||
|
@ -647252,6 +647357,13 @@
|
|||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"view-timeline-with-delay-and-range.tentative.html": [
|
||||
"40548bf5cd4548c105872d1066a05e5848c4bfce",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
]
|
||||
},
|
||||
"scroll-timelines": {
|
||||
|
@ -664572,10 +664684,32 @@
|
|||
},
|
||||
"top-level-storage-access-api": {
|
||||
"tentative": {
|
||||
"requestStorageAccessForOrigin.sub.window.js": [
|
||||
"requestStorageAccessForOrigin-insecure.sub.window.js": [
|
||||
"b4bcb2cd34074a6d6d182fef470df88590bb7ca6",
|
||||
[
|
||||
"top-level-storage-access-api/tentative/requestStorageAccessForOrigin-insecure.sub.window.html",
|
||||
{
|
||||
"script_metadata": [
|
||||
[
|
||||
"script",
|
||||
"/storage-access-api/helpers.js"
|
||||
],
|
||||
[
|
||||
"script",
|
||||
"/resources/testdriver.js"
|
||||
],
|
||||
[
|
||||
"script",
|
||||
"/resources/testdriver-vendor.js"
|
||||
]
|
||||
]
|
||||
}
|
||||
]
|
||||
],
|
||||
"requestStorageAccessForOrigin.sub.https.window.js": [
|
||||
"f7dd478a7078673643d91fece6f64bf0148c7ec6",
|
||||
[
|
||||
"top-level-storage-access-api/tentative/requestStorageAccessForOrigin.sub.window.html",
|
||||
"top-level-storage-access-api/tentative/requestStorageAccessForOrigin.sub.https.window.html",
|
||||
{
|
||||
"script_metadata": [
|
||||
[
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
[hit-test-floats-004.html]
|
||||
[hit-test-floats-003.html]
|
||||
[Miss float below something else]
|
||||
expected: FAIL
|
|
@ -1,6 +1,3 @@
|
|||
[block-in-inline-hittest-002.html]
|
||||
[elementsFromPoint]
|
||||
expected: FAIL
|
||||
|
||||
[elementFromPoint]
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
[block-in-inline-hittest-float-002.html]
|
||||
[block-in-inline-hittest-float-002]
|
||||
expected: FAIL
|
|
@ -1,3 +1,6 @@
|
|||
[block-in-inline-hittest-relpos-zindex.html]
|
||||
[position: relative; z-index: -1;]
|
||||
expected: FAIL
|
||||
|
||||
[block-in-inline-hittest-relpos-zindex]
|
||||
expected: FAIL
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
[opacity-animation-ending-correctly-001.html]
|
||||
expected: TIMEOUT
|
|
@ -194,9 +194,6 @@
|
|||
[Matching font-style: 'oblique -21deg' should prefer 'oblique -10deg' over 'italic']
|
||||
expected: FAIL
|
||||
|
||||
[Matching font-style: 'oblique -21deg' should prefer 'oblique 30deg 60deg' over 'oblique 40deg 50deg']
|
||||
expected: FAIL
|
||||
|
||||
[Matching font-style: 'oblique 21deg' should prefer 'oblique -50deg -20deg' over 'oblique -40deg -30deg']
|
||||
expected: FAIL
|
||||
|
||||
|
@ -206,9 +203,6 @@
|
|||
[Matching font-style: 'oblique -21deg' should prefer 'italic' over 'oblique 0deg']
|
||||
expected: FAIL
|
||||
|
||||
[Matching font-style: 'oblique 10deg' should prefer 'oblique 40deg 50deg' over 'italic']
|
||||
expected: FAIL
|
||||
|
||||
[Matching font-style: 'italic' should prefer 'italic' over 'oblique 20deg']
|
||||
expected: FAIL
|
||||
|
||||
|
@ -272,9 +266,6 @@
|
|||
[Matching font-weight: '500' should prefer '500' over '450 460']
|
||||
expected: FAIL
|
||||
|
||||
[Matching font-style: 'oblique 20deg' should prefer 'oblique 0deg' over 'oblique -50deg -20deg']
|
||||
expected: FAIL
|
||||
|
||||
[Matching font-style: 'oblique 0deg' should prefer 'oblique 0deg' over 'oblique 5deg']
|
||||
expected: FAIL
|
||||
|
||||
|
@ -311,17 +302,20 @@
|
|||
[Matching font-stretch: '90%' should prefer '60% 70%' over '110% 140%']
|
||||
expected: FAIL
|
||||
|
||||
[Matching font-style: 'oblique -21deg' should prefer 'oblique -60deg -40deg' over 'oblique -10deg']
|
||||
expected: FAIL
|
||||
|
||||
[Matching font-style: 'oblique 21deg' should prefer 'oblique 30deg 60deg' over 'oblique 40deg 50deg']
|
||||
expected: FAIL
|
||||
|
||||
[Matching font-style: 'oblique 21deg' should prefer 'oblique 40deg 50deg' over 'oblique 20deg']
|
||||
expected: FAIL
|
||||
|
||||
[Matching font-style: 'oblique 10deg' should prefer 'oblique 15deg 20deg' over 'oblique 30deg 60deg']
|
||||
expected: FAIL
|
||||
|
||||
[Matching font-style: 'oblique -21deg' should prefer 'oblique 0deg' over 'oblique 30deg 60deg']
|
||||
expected: FAIL
|
||||
|
||||
[Matching font-style: 'normal' should prefer 'oblique 20deg 30deg' over 'oblique -50deg -20deg']
|
||||
expected: FAIL
|
||||
|
||||
[Matching font-style: 'oblique -10deg' should prefer 'oblique -60deg -30deg' over 'oblique -50deg -40deg']
|
||||
expected: FAIL
|
||||
|
||||
[Matching font-style: 'oblique -20deg' should prefer 'oblique 0deg' over 'oblique 30deg 60deg']
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,2 +0,0 @@
|
|||
[trailing-other-space-separators-break-spaces-005.html]
|
||||
expected: FAIL
|
|
@ -1,2 +0,0 @@
|
|||
[trailing-other-space-separators-break-spaces-007.html]
|
||||
expected: FAIL
|
|
@ -53,158 +53,152 @@
|
|||
[background-position length(px) / events]
|
||||
expected: FAIL
|
||||
|
||||
[padding-bottom length(ex) / values]
|
||||
expected: FAIL
|
||||
|
||||
[padding-bottom length(mm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[padding-bottom length(cm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[padding-bottom length(in) / values]
|
||||
expected: FAIL
|
||||
|
||||
[padding-left length(pt) / values]
|
||||
expected: FAIL
|
||||
|
||||
[padding-left length(pc) / values]
|
||||
expected: FAIL
|
||||
|
||||
[padding-left length(px) / values]
|
||||
expected: FAIL
|
||||
|
||||
[padding-left length(em) / values]
|
||||
expected: FAIL
|
||||
|
||||
[padding-left length(ex) / values]
|
||||
expected: FAIL
|
||||
|
||||
[padding-left length(mm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[padding-left length(cm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[padding-left length(in) / values]
|
||||
expected: FAIL
|
||||
|
||||
[padding-right length(pt) / values]
|
||||
expected: FAIL
|
||||
|
||||
[padding-right length(pc) / values]
|
||||
expected: FAIL
|
||||
|
||||
[padding-right length(px) / values]
|
||||
expected: FAIL
|
||||
|
||||
[padding-right length(em) / values]
|
||||
expected: FAIL
|
||||
|
||||
[padding-right length(ex) / values]
|
||||
expected: FAIL
|
||||
|
||||
[padding-right length(mm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[padding-right length(cm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[padding-right length(in) / values]
|
||||
expected: FAIL
|
||||
|
||||
[padding-top length(pt) / values]
|
||||
expected: FAIL
|
||||
|
||||
[padding-top length(pc) / values]
|
||||
expected: FAIL
|
||||
|
||||
[padding-top length(px) / values]
|
||||
expected: FAIL
|
||||
|
||||
[padding-top length(em) / values]
|
||||
expected: FAIL
|
||||
|
||||
[padding-top length(ex) / values]
|
||||
expected: FAIL
|
||||
|
||||
[padding-top length(mm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[padding-top length(cm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[padding-top length(in) / values]
|
||||
expected: FAIL
|
||||
|
||||
[margin-bottom length(pt) / values]
|
||||
expected: FAIL
|
||||
|
||||
[margin-bottom length(pc) / values]
|
||||
expected: FAIL
|
||||
|
||||
[margin-bottom length(px) / values]
|
||||
expected: FAIL
|
||||
|
||||
[margin-bottom length(em) / values]
|
||||
expected: FAIL
|
||||
|
||||
[margin-bottom length(ex) / values]
|
||||
expected: FAIL
|
||||
|
||||
[margin-bottom length(mm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[margin-bottom length(cm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[margin-bottom length(in) / values]
|
||||
expected: FAIL
|
||||
|
||||
[margin-left length(pt) / values]
|
||||
expected: FAIL
|
||||
|
||||
[margin-left length(pc) / values]
|
||||
expected: FAIL
|
||||
|
||||
[margin-left length(px) / values]
|
||||
expected: FAIL
|
||||
|
||||
[margin-left length(em) / values]
|
||||
expected: FAIL
|
||||
|
||||
[margin-left length(ex) / values]
|
||||
expected: FAIL
|
||||
|
||||
[margin-left length(mm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[margin-left length(cm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[margin-left length(in) / values]
|
||||
expected: FAIL
|
||||
|
||||
[margin-right length(pt) / values]
|
||||
expected: FAIL
|
||||
|
||||
[margin-right length(pc) / values]
|
||||
expected: FAIL
|
||||
|
||||
[margin-right length(px) / values]
|
||||
expected: FAIL
|
||||
|
||||
[margin-right length(em) / values]
|
||||
expected: FAIL
|
||||
|
||||
[margin-right length(ex) / values]
|
||||
expected: FAIL
|
||||
|
||||
[margin-right length(mm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[color color(rgba) / values]
|
||||
expected: FAIL
|
||||
|
||||
[text-shadow shadow(shadow) / values]
|
||||
expected: FAIL
|
||||
|
||||
[font-size length(pt) / values]
|
||||
expected: FAIL
|
||||
|
||||
[font-size length(pc) / values]
|
||||
expected: FAIL
|
||||
|
||||
[font-size length(px) / values]
|
||||
expected: FAIL
|
||||
|
||||
[font-size length(em) / values]
|
||||
expected: FAIL
|
||||
|
||||
[font-size length(ex) / values]
|
||||
expected: FAIL
|
||||
|
||||
[font-size length(mm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[font-size length(cm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[font-size length(in) / values]
|
||||
expected: FAIL
|
||||
|
||||
[font-size percentage(%) / values]
|
||||
expected: FAIL
|
||||
|
||||
[font-weight font-weight(keyword) / values]
|
||||
expected: FAIL
|
||||
|
||||
[font-weight font-weight(numeric) / values]
|
||||
expected: FAIL
|
||||
|
||||
[line-height number(integer) / values]
|
||||
expected: FAIL
|
||||
|
||||
[line-height number(decimal) / values]
|
||||
expected: FAIL
|
||||
|
||||
[line-height length(pt) / values]
|
||||
expected: FAIL
|
||||
|
||||
[line-height length(pc) / values]
|
||||
expected: FAIL
|
||||
|
||||
[line-height length(px) / values]
|
||||
expected: FAIL
|
||||
|
||||
[line-height length(em) / values]
|
||||
expected: FAIL
|
||||
|
||||
[line-height length(ex) / values]
|
||||
expected: FAIL
|
||||
|
||||
[line-height length(mm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[line-height length(cm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[line-height length(in) / values]
|
||||
expected: FAIL
|
||||
|
||||
[line-height percentage(%) / values]
|
||||
expected: FAIL
|
||||
|
||||
[letter-spacing length(pt) / values]
|
||||
expected: FAIL
|
||||
|
||||
[letter-spacing length(pc) / values]
|
||||
expected: FAIL
|
||||
|
||||
[letter-spacing length(px) / values]
|
||||
expected: FAIL
|
||||
|
||||
[letter-spacing length(em) / values]
|
||||
expected: FAIL
|
||||
|
||||
[letter-spacing length(ex) / values]
|
||||
expected: FAIL
|
||||
|
||||
[letter-spacing length(mm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[letter-spacing length(cm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[letter-spacing length(in) / values]
|
||||
expected: FAIL
|
||||
|
||||
[word-spacing length(pt) / values]
|
||||
expected: FAIL
|
||||
|
||||
[word-spacing length(pc) / values]
|
||||
expected: FAIL
|
||||
|
||||
[word-spacing length(px) / values]
|
||||
expected: FAIL
|
||||
|
||||
[word-spacing length(em) / values]
|
||||
expected: FAIL
|
||||
|
||||
[word-spacing length(ex) / values]
|
||||
expected: FAIL
|
||||
|
||||
[word-spacing length(mm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[word-spacing length(cm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[word-spacing length(in) / values]
|
||||
expected: FAIL
|
||||
|
||||
[word-spacing percentage(%) / values]
|
||||
expected: FAIL
|
||||
|
||||
[text-indent length(pt) / values]
|
||||
expected: FAIL
|
||||
|
||||
[text-indent length(pc) / values]
|
||||
expected: FAIL
|
||||
|
||||
[text-indent length(px) / values]
|
||||
expected: FAIL
|
||||
|
||||
[text-indent length(em) / values]
|
||||
expected: FAIL
|
||||
|
||||
[text-indent length(ex) / values]
|
||||
expected: FAIL
|
||||
|
||||
[text-indent length(mm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[text-indent length(cm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[text-indent length(in) / values]
|
||||
expected: FAIL
|
||||
|
||||
[text-indent percentage(%) / values]
|
||||
expected: FAIL
|
||||
|
|
|
@ -356,125 +356,152 @@
|
|||
[margin-right length(mm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[background-color color(rgba) / events]
|
||||
[color color(rgba) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-top-width length(pt) / events]
|
||||
[font-size length(pt) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-top-width length(pc) / events]
|
||||
[font-size length(pc) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-top-width length(px) / events]
|
||||
[font-size length(px) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-top-width length(em) / events]
|
||||
[font-size length(em) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-top-width length(ex) / events]
|
||||
[font-size length(ex) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-top-width length(mm) / events]
|
||||
[font-size length(mm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-top-width length(cm) / events]
|
||||
[font-size length(cm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-top-width length(in) / events]
|
||||
[font-size length(in) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-right-width length(pt) / events]
|
||||
[font-size percentage(%) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-right-width length(pc) / events]
|
||||
[font-weight font-weight(keyword) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-right-width length(px) / events]
|
||||
[font-weight font-weight(numeric) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-right-width length(em) / events]
|
||||
[line-height number(integer) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-right-width length(ex) / events]
|
||||
[line-height number(decimal) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-right-width length(mm) / events]
|
||||
[line-height length(pt) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-right-width length(cm) / events]
|
||||
[line-height length(pc) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-right-width length(in) / events]
|
||||
[line-height length(px) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-bottom-width length(pt) / events]
|
||||
[line-height length(em) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-bottom-width length(pc) / events]
|
||||
[line-height length(ex) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-bottom-width length(px) / events]
|
||||
[line-height length(mm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-bottom-width length(em) / events]
|
||||
[line-height length(cm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-bottom-width length(ex) / events]
|
||||
[line-height length(in) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-bottom-width length(mm) / events]
|
||||
[line-height percentage(%) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-bottom-width length(cm) / events]
|
||||
[letter-spacing length(pt) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-bottom-width length(in) / events]
|
||||
[letter-spacing length(pc) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-left-width length(pt) / events]
|
||||
[letter-spacing length(px) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-left-width length(pc) / events]
|
||||
[letter-spacing length(em) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-left-width length(px) / events]
|
||||
[letter-spacing length(ex) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-left-width length(em) / events]
|
||||
[letter-spacing length(mm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-left-width length(ex) / events]
|
||||
[letter-spacing length(cm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-left-width length(mm) / events]
|
||||
[letter-spacing length(in) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-left-width length(cm) / events]
|
||||
[word-spacing length(pt) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-left-width length(in) / events]
|
||||
[word-spacing length(pc) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-top-color color(rgba) / events]
|
||||
[word-spacing length(px) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-right-color color(rgba) / events]
|
||||
[word-spacing length(em) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-bottom-color color(rgba) / events]
|
||||
[word-spacing length(ex) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-left-color color(rgba) / events]
|
||||
[word-spacing length(mm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[padding-bottom length(pt) / events]
|
||||
[word-spacing length(cm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[padding-bottom length(pc) / events]
|
||||
[word-spacing length(in) / events]
|
||||
expected: FAIL
|
||||
|
||||
[padding-bottom length(px) / events]
|
||||
[word-spacing percentage(%) / events]
|
||||
expected: FAIL
|
||||
|
||||
[padding-bottom length(em) / events]
|
||||
[text-indent length(pt) / events]
|
||||
expected: FAIL
|
||||
|
||||
[text-indent length(pc) / events]
|
||||
expected: FAIL
|
||||
|
||||
[text-indent length(px) / events]
|
||||
expected: FAIL
|
||||
|
||||
[text-indent length(em) / events]
|
||||
expected: FAIL
|
||||
|
||||
[text-indent length(ex) / events]
|
||||
expected: FAIL
|
||||
|
||||
[text-indent length(mm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[text-indent length(cm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[text-indent length(in) / events]
|
||||
expected: FAIL
|
||||
|
||||
[text-indent percentage(%) / events]
|
||||
expected: FAIL
|
||||
|
||||
[text-shadow shadow(shadow) / events]
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
[CaretPosition-001.html]
|
||||
[Element at (400, 100)]
|
||||
expected: FAIL
|
|
@ -0,0 +1,3 @@
|
|||
[MediaQueryListEvent.html]
|
||||
[argument of onchange]
|
||||
expected: FAIL
|
|
@ -0,0 +1,3 @@
|
|||
[elementFromPoint-001.html]
|
||||
[CSSOM View - 5 - extensions to the Document interface]
|
||||
expected: FAIL
|
|
@ -0,0 +1,3 @@
|
|||
[elementFromPoint-dynamic-anon-box.html]
|
||||
[Link should be clickable after hiding a scrollbox with an anonymous table inside]
|
||||
expected: FAIL
|
|
@ -0,0 +1,3 @@
|
|||
[elementFromPoint-ellipsis-in-inline-box.html]
|
||||
[elementFromPoint-ellipsis-in-inline-box]
|
||||
expected: FAIL
|
|
@ -0,0 +1,3 @@
|
|||
[elementFromPoint-float-in-table.html]
|
||||
[float-in-div]
|
||||
expected: FAIL
|
|
@ -16,3 +16,6 @@
|
|||
|
||||
[<li>Image Inside 2</li>]
|
||||
expected: FAIL
|
||||
|
||||
[<li>Image Inside 1</li>]
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
[elementFromPoint-visibility-hidden-resizer.html]
|
||||
[elementFromPoint on resizer area of an element with visibility:hidden]
|
||||
expected: FAIL
|
|
@ -17,6 +17,3 @@
|
|||
|
||||
[test some point of the element: bottom right corner]
|
||||
expected: FAIL
|
||||
|
||||
[test the top of layer]
|
||||
expected: FAIL
|
||||
|
|
|
@ -77,5 +77,5 @@
|
|||
[Input: "Content-Length: ". Expected: 42.]
|
||||
expected: FAIL
|
||||
|
||||
[Input: "Content-Length: 30". Expected: 30.]
|
||||
[Input: "Content-Length: 42,42". Expected: 42.]
|
||||
expected: FAIL
|
||||
|
|
|
@ -8,11 +8,5 @@
|
|||
[X-Content-Type-Options%3A%20nosniff%0C]
|
||||
expected: FAIL
|
||||
|
||||
[X-Content-Type-Options%3A%0D%0AX-Content-Type-Options%3A%20nosniff]
|
||||
expected: FAIL
|
||||
|
||||
[X-Content-Type-Options%3A%20%2Cnosniff]
|
||||
expected: FAIL
|
||||
|
||||
[X-Content-Type-Options%3A%20%22nosniFF%22]
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
[iframe-src-aboutblank-navigate-immediately.html]
|
||||
expected: TIMEOUT
|
||||
[Navigating to a different document with window.open]
|
||||
expected: FAIL
|
||||
|
||||
[Navigating to a different document with form submission]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[Navigating to a different document with link click]
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
[javascript-url-load-as-html.xhtml]
|
||||
expected: TIMEOUT
|
||||
[javascript: URL navigation to a string must create a HTML document using the correct properties]
|
||||
expected: TIMEOUT
|
|
@ -13,9 +13,3 @@
|
|||
|
||||
[0080 00FF 0100 set in href="" targeting a frame and clicked]
|
||||
expected: FAIL
|
||||
|
||||
[D83D DE0D set in href="" targeting a frame and clicked]
|
||||
expected: FAIL
|
||||
|
||||
[DE0D 0041 set in href="" targeting a frame and clicked]
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
[navigate-to-unparseable-url.html]
|
||||
[location.href setter throws a SyntaxError DOMException for unparseable URLs]
|
||||
expected: FAIL
|
||||
|
||||
[<a> tag navigate fails for unparseable URLs]
|
||||
expected: FAIL
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
[a-click.html]
|
||||
[aElement.click() before the load event must NOT replace]
|
||||
expected: FAIL
|
|
@ -1,4 +1,3 @@
|
|||
[form-submit-button-click.html]
|
||||
expected: TIMEOUT
|
||||
[Replace before load, triggered by submitButton.click()]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
[traverse_the_history_1.html]
|
||||
[Multiple history traversals from the same task]
|
||||
expected: FAIL
|
|
@ -0,0 +1,3 @@
|
|||
[traverse_the_history_5.html]
|
||||
[Multiple history traversals, last would be aborted]
|
||||
expected: FAIL
|
|
@ -1,3 +0,0 @@
|
|||
[navigate-to-about-blank-while-initial-load-pending.html]
|
||||
[Navigating to about:blank while window.open initial load pending.]
|
||||
expected: FAIL
|
|
@ -1,4 +0,0 @@
|
|||
[opener-setter.html]
|
||||
expected: TIMEOUT
|
||||
[Auxiliary browsing context created via `window.open` and setting `window.opener` to `test` should report `test`]
|
||||
expected: TIMEOUT
|
|
@ -1,2 +1,2 @@
|
|||
[canvas.2d.disconnected.html]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
[autofocus-dialog.html]
|
||||
expected: TIMEOUT
|
||||
[<dialog> can contain autofocus, without stopping page autofocus content from working]
|
||||
expected: FAIL
|
||||
|
||||
[<dialog>-contained autofocus element gets focused when the dialog is shown]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
[supported-elements.html]
|
||||
expected: TIMEOUT
|
||||
[Contenteditable element should support autofocus]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -10,7 +9,7 @@
|
|||
expected: FAIL
|
||||
|
||||
[Area element should support autofocus]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[Host element with delegatesFocus should support autofocus]
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
[update-the-rendering.html]
|
||||
expected: TIMEOUT
|
||||
["Flush autofocus candidates" should be happen after the first animation frame callbacks, and before a resize event in the next iteration of window event loop.]
|
||||
expected: TIMEOUT
|
||||
|
||||
["Flush autofocus candidates" should be happen before a scroll event and animation frame callbacks]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[iframe_sandbox_popups_escaping-1.html]
|
||||
type: testharness
|
||||
expected: CRASH
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
||||
expected: TIMEOUT
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
[iframe_sandbox_popups_escaping-3.html]
|
||||
type: testharness
|
||||
expected: CRASH
|
||||
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
[iframe_sandbox_popups_nonescaping-3.html]
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||
expected: FAIL
|
||||
expected: NOTRUN
|
||||
|
|
|
@ -175,3 +175,6 @@
|
|||
|
||||
[multipart/form-data: 0x00 in value (normal form)]
|
||||
expected: FAIL
|
||||
|
||||
[multipart/form-data: Basic test (formdata event)]
|
||||
expected: FAIL
|
||||
|
|
|
@ -5,9 +5,6 @@
|
|||
[text/plain: Basic File test (normal form)]
|
||||
expected: FAIL
|
||||
|
||||
[text/plain: Basic File test (formdata event)]
|
||||
expected: FAIL
|
||||
|
||||
[text/plain: 0x00 in name (normal form)]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -11,3 +11,6 @@
|
|||
|
||||
[Check that rel=noopener with target=_parent does a normal load]
|
||||
expected: FAIL
|
||||
|
||||
[Check that rel=noopener with target=_self does a normal load]
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
[promise-job-entry.html]
|
||||
expected: TIMEOUT
|
||||
[Fulfillment handler on fulfilled promise]
|
||||
expected: FAIL
|
||||
|
||||
[Rejection handler on pending-then-rejected promise]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[Sanity check: this all works as expected with no promises involved]
|
||||
expected: FAIL
|
||||
|
@ -15,4 +16,4 @@
|
|||
expected: FAIL
|
||||
|
||||
[Fulfillment handler on pending-then-fulfilled promise]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
[promise-rejection-events.html]
|
||||
expected: TIMEOUT
|
||||
[delayed handling: delaying handling rejected promise created from createImageBitmap will cause both events to fire]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[unhandledrejection: from createImageBitmap which is UA triggered]
|
||||
expected: FAIL
|
||||
|
|
|
@ -40,10 +40,10 @@
|
|||
expected: FAIL
|
||||
|
||||
[content-type 13 : text/plain,*/*;charset=gbk]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[content-type 14 : text/html,*/*;charset=gbk]
|
||||
expected: TIMEOUT
|
||||
expected: NOTRUN
|
||||
|
||||
[content-type 15 : text/html;x=",text/plain]
|
||||
expected: NOTRUN
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
[audiocontext-not-fully-active.html]
|
||||
expected: TIMEOUT
|
||||
[frame in navigated remote-site frame]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[cross-partition.https.tentative.html]
|
||||
expected: CRASH
|
||||
expected: TIMEOUT
|
||||
[BroadcastChannel messages aren't received from a cross-partition iframe]
|
||||
expected: FAIL
|
||||
|
||||
|
|
4
tests/wpt/metadata/webmessaging/with-ports/017.html.ini
Normal file
4
tests/wpt/metadata/webmessaging/with-ports/017.html.ini
Normal file
|
@ -0,0 +1,4 @@
|
|||
[017.html]
|
||||
expected: TIMEOUT
|
||||
[origin of the script that invoked the method, about:blank]
|
||||
expected: TIMEOUT
|
|
@ -1,4 +0,0 @@
|
|||
[localstorage-about-blank-3P-iframe-opens-3P-window.partitioned.tentative.html]
|
||||
expected: TIMEOUT
|
||||
[StorageKey: test 3P about:blank window opened from a 3P iframe]
|
||||
expected: TIMEOUT
|
|
@ -0,0 +1,15 @@
|
|||
<!DOCTYPE html>
|
||||
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
|
||||
<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1410949">
|
||||
<link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
|
||||
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
|
||||
<div style="columns:2; column-fill:auto; gap:0; width:100px; height:100px; background:red;">
|
||||
<div>
|
||||
<div style="display:flex; flex-flow:column; height:100%;">
|
||||
<div style="overflow:clip; background:green;">
|
||||
<div style="height:10px;"></div>
|
||||
<div style="break-inside:avoid; height:100px;"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -31,12 +31,6 @@ for (const colorSpace of [ "srgb", "srgb-linear", "a98-rgb", "rec2020", "prophot
|
|||
test_computed_value("color", `color(${colorSpace} 0 0 0 / -10%)`, `color(${colorSpace} 0 0 0 / 0)`);
|
||||
test_computed_value("color", `color(${colorSpace} 0 0 0 / 110%)`, `color(${colorSpace} 0 0 0)`);
|
||||
test_computed_value("color", `color(${colorSpace} 0 0 0 / 300%)`, `color(${colorSpace} 0 0 0)`);
|
||||
test_computed_value("color", `color(${colorSpace} 50% -200)`, `color(${colorSpace} 0.5 -200 0)`);
|
||||
test_computed_value("color", `color(${colorSpace} 50%)`, `color(${colorSpace} 0.5 0 0)`);
|
||||
test_computed_value("color", `color(${colorSpace})`, `color(${colorSpace} 0 0 0)`);
|
||||
test_computed_value("color", `color(${colorSpace} 50% -200 / 0.5)`, `color(${colorSpace} 0.5 -200 0 / 0.5)`);
|
||||
test_computed_value("color", `color(${colorSpace} 50% / 0.5)`, `color(${colorSpace} 0.5 0 0 / 0.5)`);
|
||||
test_computed_value("color", `color(${colorSpace} / 0.5)`, `color(${colorSpace} 0 0 0 / 0.5)`);
|
||||
test_computed_value("color", `color(${colorSpace} 200 200 200)`, `color(${colorSpace} 200 200 200)`);
|
||||
test_computed_value("color", `color(${colorSpace} 200 200 200 / 200)`, `color(${colorSpace} 200 200 200)`);
|
||||
test_computed_value("color", `color(${colorSpace} -200 -200 -200)`, `color(${colorSpace} -200 -200 -200)`);
|
||||
|
@ -71,12 +65,6 @@ for (const colorSpace of [ "xyz", "xyz-d50", "xyz-d65" ]) {
|
|||
test_computed_value("color", `color(${colorSpace} 0 0 0 / -10%)`, `color(${resultColorSpace} 0 0 0 / 0)`);
|
||||
test_computed_value("color", `color(${colorSpace} 0 0 0 / 110%)`, `color(${resultColorSpace} 0 0 0)`);
|
||||
test_computed_value("color", `color(${colorSpace} 0 0 0 / 300%)`, `color(${resultColorSpace} 0 0 0)`);
|
||||
test_computed_value("color", `color(${colorSpace} 1 1)`, `color(${resultColorSpace} 1 1 0)`);
|
||||
test_computed_value("color", `color(${colorSpace} 1)`, `color(${resultColorSpace} 1 0 0)`);
|
||||
test_computed_value("color", `color(${colorSpace})`, `color(${resultColorSpace} 0 0 0)`);
|
||||
test_computed_value("color", `color(${colorSpace} 1 1 / .5)`, `color(${resultColorSpace} 1 1 0 / 0.5)`);
|
||||
test_computed_value("color", `color(${colorSpace} 1 / 0.5)`, `color(${resultColorSpace} 1 0 0 / 0.5)`);
|
||||
test_computed_value("color", `color(${colorSpace} / 50%)`, `color(${resultColorSpace} 0 0 0 / 0.5)`);
|
||||
test_computed_value("color", `color(${colorSpace} calc(0.5 + 1) calc(0.5 - 1) calc(0.5) / calc(-0.5 + 1))`, `color(${resultColorSpace} 1.5 -0.5 0.5 / 0.5)`);
|
||||
|
||||
test_computed_value("color", `color(${colorSpace} none none none / none)`, `color(${resultColorSpace} none none none / none)`);
|
||||
|
@ -276,9 +264,6 @@ test_computed_value("color", "color(srgb 1 1 1 / 0.5)", "color(srgb 1 1 1 / 0.5)
|
|||
test_computed_value("color", "color(srgb 1 1 1 / 0)", "color(srgb 1 1 1 / 0)", "[sRGB white with 0 alpha]");
|
||||
test_computed_value("color", "color(srgb 1 1 1 / 50%)", "color(srgb 1 1 1 / 0.5)", "[sRGB white with 50% alpha]");
|
||||
test_computed_value("color", "color(srgb 1 1 1 / 0%)", "color(srgb 1 1 1 / 0)", "[sRGB white with 0% alpha]");
|
||||
test_computed_value("color", "color(srgb 1 1)", "color(srgb 1 1 0)", "[One missing component is 0]");
|
||||
test_computed_value("color", "color(srgb 1)", "color(srgb 1 0 0)", "[Two missing components are 0]");
|
||||
test_computed_value("color", "color(srgb)", "color(srgb 0 0 0)", "[All components missing]");
|
||||
test_computed_value("color", "color(display-p3 0.6 0.7 0.8)", "color(display-p3 0.6 0.7 0.8)", "[Display P3 color]");
|
||||
test_computed_value("color", "color(dIspLaY-P3 0.6 0.7 0.8)", "color(display-p3 0.6 0.7 0.8)", "[Different case for Display P3]");
|
||||
|
||||
|
|
|
@ -20,6 +20,13 @@ for (const colorSpace of [ "srgb", "srgb-linear", "a98-rgb", "rec2020", "prophot
|
|||
test_invalid_value("color", `color(${colorSpace} 0% 0 0deg)`);
|
||||
test_invalid_value("color", `color(${colorSpace} 0% 0% 0deg)`);
|
||||
test_invalid_value("color", `color(${colorSpace} 40% 0 0deg)`);
|
||||
// Missing parameters should not parse
|
||||
test_invalid_value("color", `color(${colorSpace} 50% -200)`);
|
||||
test_invalid_value("color", `color(${colorSpace} 50%)`);
|
||||
test_invalid_value("color", `color(${colorSpace})`);
|
||||
test_invalid_value("color", `color(${colorSpace} 50% -200 / 0.5)`);
|
||||
test_invalid_value("color", `color(${colorSpace} 50% / 0.5)`);
|
||||
test_invalid_value("color", `color(${colorSpace} / 0.5)`);
|
||||
}
|
||||
|
||||
for (const colorSpace of [ "xyz", "xyz-d50", "xyz-d65" ]) {
|
||||
|
@ -30,6 +37,13 @@ for (const colorSpace of [ "xyz", "xyz-d50", "xyz-d65" ]) {
|
|||
test_invalid_value("color", `color(${colorSpace} 0% 0 0deg)`);
|
||||
test_invalid_value("color", `color(${colorSpace} 0% 0% 0deg)`);
|
||||
test_invalid_value("color", `color(${colorSpace} 40% 0 0deg)`);
|
||||
// Missing parameters should not parse
|
||||
test_invalid_value("color", `color(${colorSpace} 1 1)`);
|
||||
test_invalid_value("color", `color(${colorSpace} 1)`);
|
||||
test_invalid_value("color", `color(${colorSpace})`);
|
||||
test_invalid_value("color", `color(${colorSpace} 1 1 / .5)`);
|
||||
test_invalid_value("color", `color(${colorSpace} 1 / 0.5)`);
|
||||
test_invalid_value("color", `color(${colorSpace} / 50%)`);
|
||||
}
|
||||
|
||||
test_invalid_value("color", "color()"); // Empty
|
||||
|
|
|
@ -26,12 +26,6 @@ for (const colorSpace of [ "srgb", "srgb-linear", "a98-rgb", "rec2020", "prophot
|
|||
test_valid_value("color", `color(${colorSpace} 0 0 0 / -10%)`, `color(${colorSpace} 0 0 0 / 0)`);
|
||||
test_valid_value("color", `color(${colorSpace} 0 0 0 / 110%)`, `color(${colorSpace} 0 0 0)`);
|
||||
test_valid_value("color", `color(${colorSpace} 0 0 0 / 300%)`, `color(${colorSpace} 0 0 0)`);
|
||||
test_valid_value("color", `color(${colorSpace} 50% -200)`, `color(${colorSpace} 0.5 -200 0)`);
|
||||
test_valid_value("color", `color(${colorSpace} 50%)`, `color(${colorSpace} 0.5 0 0)`);
|
||||
test_valid_value("color", `color(${colorSpace})`, `color(${colorSpace} 0 0 0)`);
|
||||
test_valid_value("color", `color(${colorSpace} 50% -200 / 0.5)`, `color(${colorSpace} 0.5 -200 0 / 0.5)`);
|
||||
test_valid_value("color", `color(${colorSpace} 50% / 0.5)`, `color(${colorSpace} 0.5 0 0 / 0.5)`);
|
||||
test_valid_value("color", `color(${colorSpace} / 0.5)`, `color(${colorSpace} 0 0 0 / 0.5)`);
|
||||
test_valid_value("color", `color(${colorSpace} 200 200 200)`, `color(${colorSpace} 200 200 200)`);
|
||||
test_valid_value("color", `color(${colorSpace} 200 200 200 / 200)`, `color(${colorSpace} 200 200 200)`);
|
||||
test_valid_value("color", `color(${colorSpace} -200 -200 -200)`, `color(${colorSpace} -200 -200 -200)`);
|
||||
|
@ -66,12 +60,6 @@ for (const colorSpace of [ "xyz", "xyz-d50", "xyz-d65" ]) {
|
|||
test_valid_value("color", `color(${colorSpace} 0 0 0 / -10%)`, `color(${resultColorSpace} 0 0 0 / 0)`);
|
||||
test_valid_value("color", `color(${colorSpace} 0 0 0 / 110%)`, `color(${resultColorSpace} 0 0 0)`);
|
||||
test_valid_value("color", `color(${colorSpace} 0 0 0 / 300%)`, `color(${resultColorSpace} 0 0 0)`);
|
||||
test_valid_value("color", `color(${colorSpace} 1 1)`, `color(${resultColorSpace} 1 1 0)`);
|
||||
test_valid_value("color", `color(${colorSpace} 1)`, `color(${resultColorSpace} 1 0 0)`);
|
||||
test_valid_value("color", `color(${colorSpace})`, `color(${resultColorSpace} 0 0 0)`);
|
||||
test_valid_value("color", `color(${colorSpace} 1 1 / .5)`, `color(${resultColorSpace} 1 1 0 / 0.5)`);
|
||||
test_valid_value("color", `color(${colorSpace} 1 / 0.5)`, `color(${resultColorSpace} 1 0 0 / 0.5)`);
|
||||
test_valid_value("color", `color(${colorSpace} / 50%)`, `color(${resultColorSpace} 0 0 0 / 0.5)`);
|
||||
test_valid_value("color", `color(${colorSpace} calc(0.5 + 1) calc(0.5 - 1) calc(0.5) / calc(-0.5 + 1))`, `color(${resultColorSpace} 1.5 -0.5 0.5 / 0.5)`);
|
||||
|
||||
test_valid_value("color", `color(${colorSpace} none none none / none)`, `color(${resultColorSpace} none none none / none)`);
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
.test {
|
||||
font-family: "Lato-Medium";
|
||||
font-size: 3em;
|
||||
font-kerning: none;
|
||||
}
|
||||
</style>
|
||||
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
.test {
|
||||
font-family: "Lato-Medium";
|
||||
font-size: 3em;
|
||||
font-kerning: none;
|
||||
}
|
||||
p.nosynth::first-letter {
|
||||
font-style: italic;
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
.test {
|
||||
font-family: "Lato-Medium";
|
||||
font-size: 3em;
|
||||
font-kerning: none;
|
||||
}
|
||||
</style>
|
||||
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
.test {
|
||||
font-family: "Lato-Medium";
|
||||
font-size: 3em;
|
||||
font-kerning: none;
|
||||
}
|
||||
p.nosynth::first-letter {
|
||||
font-weight: bold;
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
<!DOCTYPE html>
|
||||
<title>Nest-containing in forgiving parsing</title>
|
||||
<style>
|
||||
.test {
|
||||
background-color: green;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
display: grid;
|
||||
}
|
||||
|
||||
body * + * {
|
||||
margin-top: 8px;
|
||||
}
|
||||
</style>
|
||||
<body>
|
||||
<p>Tests pass if <strong>block is green</strong></p>
|
||||
<div class="test"></div>
|
||||
</body>
|
|
@ -0,0 +1,27 @@
|
|||
<!DOCTYPE html>
|
||||
<title>Nest-containing in forgiving parsing</title>
|
||||
<link rel="author" title="Steinar H. Gunderson" href="mailto:sesse@chromium.org">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-nesting-1/">
|
||||
<link rel="match" href="nest-containing-forgiving-ref.html">
|
||||
<style>
|
||||
.test {
|
||||
background-color: red;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
display: grid;
|
||||
}
|
||||
|
||||
.does-not-exist {
|
||||
:is(.test-1, !&) {
|
||||
background-color: green;
|
||||
}
|
||||
}
|
||||
|
||||
body * + * {
|
||||
margin-top: 8px;
|
||||
}
|
||||
</style>
|
||||
<body>
|
||||
<p>Tests pass if <strong>block is green</strong></p>
|
||||
<div class="test test-1"></div>
|
||||
</body>
|
|
@ -0,0 +1,18 @@
|
|||
<!DOCTYPE html>
|
||||
<link rel="help" href="https://drafts.css-houdini.org/css-properties-values-api-1">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="../resources/utils.js"></script>
|
||||
<div id="target"></div>
|
||||
<script>
|
||||
|
||||
animation_test({
|
||||
syntax: "<number>+ | <transform-list>",
|
||||
inherits: false,
|
||||
initialValue: "translateX(100px)"
|
||||
}, {
|
||||
keyframes: ["200"],
|
||||
expected: "200"
|
||||
}, 'Animating a custom property allowing multiple list types with two mismatching types');
|
||||
|
||||
</script>
|
|
@ -19,13 +19,16 @@ body { background: pink }
|
|||
border: 1px solid black;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.hidden {
|
||||
.vis-hidden {
|
||||
visibility: hidden;
|
||||
}
|
||||
.cv-hidden {
|
||||
content-visibility: hidden;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class=flex>
|
||||
<div class="box hidden">ancestor c-v</div>
|
||||
<div class=box>self c-v</div>
|
||||
<div class=box>descendant c-v</div>
|
||||
<div class="box vis-hidden">ancestor c-v</div>
|
||||
<div class="box cv-hidden">self c-v</div>
|
||||
<div class="box cv-hidden">descendant c-v</div>
|
||||
</div>
|
||||
|
|
|
@ -2868,4 +2868,47 @@ var browserTests = [
|
|||
"<p><font face=\"monospace\">foo[]</font><font face=\"sans-serif\">bar</font></p>",
|
||||
[true,true,true],
|
||||
{"fontName":[false,false,"sans-serif",false,false,"monospace"]}],
|
||||
|
||||
// After joining blocks, caret should be end of the deepest left block end for
|
||||
// making the following input will be styled with the style there.
|
||||
["<p><span style=\"color:rgb(0, 0, 255)\">foo</span></p><p><span style=\"color:rgb(255, 0, 0)\">[]bar</span></p>",
|
||||
[["styleWithCSS","false"],["delete",""]],
|
||||
"<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
|
||||
[true,true],
|
||||
{"foreColor":[false,false,"rgb(255, 0, 0)",false,false,"rgb(0, 0, 255)"]}],
|
||||
["<p><span style=\"color:rgb(0, 0, 255)\">foo</span><br></p><p><span style=\"color:rgb(255, 0, 0)\">[]bar</span></p>",
|
||||
[["styleWithCSS","false"],["delete",""]],
|
||||
"<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
|
||||
[true,true],
|
||||
{"foreColor":[false,false,"rgb(255, 0, 0)",false,false,"rgb(0, 0, 255)"]}],
|
||||
["<p><span style=\"color:rgb(0, 0, 255)\">foo<br></span></p><p><span style=\"color:rgb(255, 0, 0)\">[]bar</span></p>",
|
||||
[["styleWithCSS","false"],["delete",""]],
|
||||
"<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
|
||||
[true,true],
|
||||
{"foreColor":[false,false,"rgb(255, 0, 0)",false,false,"rgb(0, 0, 255)"]}],
|
||||
["<p><span style=\"color:rgb(0, 0, 255)\">foo</span></p><span style=\"color:rgb(255, 0, 0)\">[]bar</span>",
|
||||
[["styleWithCSS","false"],["delete",""]],
|
||||
"<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
|
||||
[true,true],
|
||||
{"foreColor":[false,false,"rgb(255, 0, 0)",false,false,"rgb(0, 0, 255)"]}],
|
||||
["<p><span style=\"color:rgb(0, 0, 255)\">foo</span><br></p><span style=\"color:rgb(255, 0, 0)\">[]bar</span>",
|
||||
[["styleWithCSS","false"],["delete",""]],
|
||||
"<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
|
||||
[true,true],
|
||||
{"foreColor":[false,false,"rgb(255, 0, 0)",false,false,"rgb(0, 0, 255)"]}],
|
||||
["<p><span style=\"color:rgb(0, 0, 255)\">foo<br></span></p><span style=\"color:rgb(255, 0, 0)\">[]bar</span>",
|
||||
[["styleWithCSS","false"],["delete",""]],
|
||||
"<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
|
||||
[true,true],
|
||||
{"foreColor":[false,false,"rgb(255, 0, 0)",false,false,"rgb(0, 0, 255)"]}],
|
||||
["<span style=\"color:rgb(0, 0, 255)\">foo</span><br><p><span style=\"color:rgb(255, 0, 0)\">[]bar</span></p>",
|
||||
[["styleWithCSS","false"],["delete",""]],
|
||||
"<span style=\"color:rgb(0, 0, 255)\">foo[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span>",
|
||||
[true,true],
|
||||
{"foreColor":[false,false,"rgb(255, 0, 0)",false,false,"rgb(0, 0, 255)"]}],
|
||||
["<span style=\"color:rgb(0, 0, 255)\">foo<br></span><p><span style=\"color:rgb(255, 0, 0)\">[]bar</span></p>",
|
||||
[["styleWithCSS","false"],["delete",""]],
|
||||
"<span style=\"color:rgb(0, 0, 255)\">foo[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span>",
|
||||
[true,true],
|
||||
{"foreColor":[false,false,"rgb(255, 0, 0)",false,false,"rgb(0, 0, 255)"]}],
|
||||
]
|
||||
|
|
|
@ -2748,4 +2748,47 @@ var browserTests = [
|
|||
"<p><font face=\"monospace\">foo[]</font><font face=\"sans-serif\">bar</font></p>",
|
||||
[true,true,true],
|
||||
{"fontName":[false,false,"monospace",false,false,"monospace"]}],
|
||||
|
||||
// After joining blocks, caret should be end of the deepest left block end for
|
||||
// making the following input will be styled with the style there.
|
||||
["<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span></p><p><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
|
||||
[["styleWithCSS","false"],["forwarddelete",""]],
|
||||
"<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
|
||||
[true,true],
|
||||
{"foreColor":[false,false,"rgb(0, 0, 255)",false,false,"rgb(0, 0, 255)"]}],
|
||||
["<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span><br></p><p><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
|
||||
[["styleWithCSS","false"],["forwarddelete",""]],
|
||||
"<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
|
||||
[true,true],
|
||||
{"foreColor":[false,false,"rgb(0, 0, 255)",false,false,"rgb(0, 0, 255)"]}],
|
||||
["<p><span style=\"color:rgb(0, 0, 255)\">foo[]<br></span></p><p><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
|
||||
[["styleWithCSS","false"],["forwarddelete",""]],
|
||||
"<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
|
||||
[true,true],
|
||||
{"foreColor":[false,false,"rgb(0, 0, 255)",false,false,"rgb(0, 0, 255)"]}],
|
||||
["<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span></p><span style=\"color:rgb(255, 0, 0)\">bar</span>",
|
||||
[["styleWithCSS","false"],["forwarddelete",""]],
|
||||
"<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
|
||||
[true,true],
|
||||
{"foreColor":[false,false,"rgb(0, 0, 255)",false,false,"rgb(0, 0, 255)"]}],
|
||||
["<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span><br></p><span style=\"color:rgb(255, 0, 0)\">bar</span>",
|
||||
[["styleWithCSS","false"],["forwarddelete",""]],
|
||||
"<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
|
||||
[true,true],
|
||||
{"foreColor":[false,false,"rgb(0, 0, 255)",false,false,"rgb(0, 0, 255)"]}],
|
||||
["<p><span style=\"color:rgb(0, 0, 255)\">foo[]<br></span></p><span style=\"color:rgb(255, 0, 0)\">bar</span>",
|
||||
[["styleWithCSS","false"],["forwarddelete",""]],
|
||||
"<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
|
||||
[true,true],
|
||||
{"foreColor":[false,false,"rgb(0, 0, 255)",false,false,"rgb(0, 0, 255)"]}],
|
||||
["<span style=\"color:rgb(0, 0, 255)\">foo[]</span><br><p><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
|
||||
[["styleWithCSS","false"],["forwarddelete",""]],
|
||||
"<span style=\"color:rgb(0, 0, 255)\">foo[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span>",
|
||||
[true,true],
|
||||
{"foreColor":[false,false,"rgb(0, 0, 255)",false,false,"rgb(0, 0, 255)"]}],
|
||||
["<span style=\"color:rgb(0, 0, 255)\">foo[]<br></span><p><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
|
||||
[["styleWithCSS","false"],["forwarddelete",""]],
|
||||
"<span style=\"color:rgb(0, 0, 255)\">foo[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span>",
|
||||
[true,true],
|
||||
{"foreColor":[false,false,"rgb(0, 0, 255)",false,false,"rgb(0, 0, 255)"]}],
|
||||
]
|
||||
|
|
|
@ -2934,4 +2934,87 @@ var browserTests = [
|
|||
"abc<font style=\"background-color:rgb(0, 221, 221)\" size=\"7\" face=\"monospace\" color=\"#ff0000\">[d]</font>ef"],
|
||||
[true,true,true,true,true,true],
|
||||
{}],
|
||||
|
||||
// Typed text after joining paragraphs should be inserted into the previous text node.
|
||||
["<p><span style=\"color:rgb(0, 0, 255)\">foo</span></p><p><span style=\"color:rgb(255, 0, 0)\">[]bar</span></p>",
|
||||
[["styleWithCSS","false"],["delete",""],["insertText","A"]],
|
||||
"<p><span style=\"color:rgb(0, 0, 255)\">fooA[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
|
||||
[true,true,true],
|
||||
{}],
|
||||
["<p><span style=\"color:rgb(0, 0, 255)\">foo</span><br></p><p><span style=\"color:rgb(255, 0, 0)\">[]bar</span></p>",
|
||||
[["styleWithCSS","false"],["delete",""],["insertText","A"]],
|
||||
"<p><span style=\"color:rgb(0, 0, 255)\">fooA[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
|
||||
[true,true,true],
|
||||
{}],
|
||||
["<p><span style=\"color:rgb(0, 0, 255)\">foo<br></span></p><p><span style=\"color:rgb(255, 0, 0)\">[]bar</span></p>",
|
||||
[["styleWithCSS","false"],["delete",""],["insertText","A"]],
|
||||
"<p><span style=\"color:rgb(0, 0, 255)\">fooA[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
|
||||
[true,true,true],
|
||||
{}],
|
||||
["<p><span style=\"color:rgb(0, 0, 255)\">foo</span></p><span style=\"color:rgb(255, 0, 0)\">[]bar</span>",
|
||||
[["styleWithCSS","false"],["delete",""],["insertText","A"]],
|
||||
"<p><span style=\"color:rgb(0, 0, 255)\">fooA[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
|
||||
[true,true,true],
|
||||
{}],
|
||||
["<p><span style=\"color:rgb(0, 0, 255)\">foo</span><br></p><span style=\"color:rgb(255, 0, 0)\">[]bar</span>",
|
||||
[["styleWithCSS","false"],["delete",""],["insertText","A"]],
|
||||
"<p><span style=\"color:rgb(0, 0, 255)\">fooA[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
|
||||
[true,true,true],
|
||||
{}],
|
||||
["<p><span style=\"color:rgb(0, 0, 255)\">foo<br></span></p><span style=\"color:rgb(255, 0, 0)\">[]bar</span>",
|
||||
[["styleWithCSS","false"],["delete",""],["insertText","A"]],
|
||||
"<p><span style=\"color:rgb(0, 0, 255)\">fooA[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
|
||||
[true,true,true],
|
||||
{}],
|
||||
["<span style=\"color:rgb(0, 0, 255)\">foo</span><br><p><span style=\"color:rgb(255, 0, 0)\">[]bar</span></p>",
|
||||
[["styleWithCSS","false"],["delete",""],["insertText","A"]],
|
||||
"<span style=\"color:rgb(0, 0, 255)\">fooA[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span>",
|
||||
[true,true,true],
|
||||
{}],
|
||||
["<span style=\"color:rgb(0, 0, 255)\">foo<br></span><p><span style=\"color:rgb(255, 0, 0)\">[]bar</span></p>",
|
||||
[["styleWithCSS","false"],["delete",""],["insertText","A"]],
|
||||
"<span style=\"color:rgb(0, 0, 255)\">fooA[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span>",
|
||||
[true,true,true],
|
||||
{}],
|
||||
|
||||
["<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span></p><p><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
|
||||
[["styleWithCSS","false"],["forwarddelete",""],["insertText","A"]],
|
||||
"<p><span style=\"color:rgb(0, 0, 255)\">fooA[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
|
||||
[true,true,true],
|
||||
{}],
|
||||
["<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span><br></p><p><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
|
||||
[["styleWithCSS","false"],["forwarddelete",""],["insertText","A"]],
|
||||
"<p><span style=\"color:rgb(0, 0, 255)\">fooA[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
|
||||
[true,true,true],
|
||||
{}],
|
||||
["<p><span style=\"color:rgb(0, 0, 255)\">foo[]<br></span></p><p><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
|
||||
[["styleWithCSS","false"],["forwarddelete",""],["insertText","A"]],
|
||||
"<p><span style=\"color:rgb(0, 0, 255)\">fooA[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
|
||||
[true,true,true],
|
||||
{}],
|
||||
["<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span></p><span style=\"color:rgb(255, 0, 0)\">bar</span>",
|
||||
[["styleWithCSS","false"],["forwarddelete",""],["insertText","A"]],
|
||||
"<p><span style=\"color:rgb(0, 0, 255)\">fooA[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
|
||||
[true,true,true],
|
||||
{}],
|
||||
["<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span><br></p><span style=\"color:rgb(255, 0, 0)\">bar</span>",
|
||||
[["styleWithCSS","false"],["forwarddelete",""],["insertText","A"]],
|
||||
"<p><span style=\"color:rgb(0, 0, 255)\">fooA[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
|
||||
[true,true,true],
|
||||
{}],
|
||||
["<p><span style=\"color:rgb(0, 0, 255)\">foo[]<br></span></p><span style=\"color:rgb(255, 0, 0)\">bar</span>",
|
||||
[["styleWithCSS","false"],["forwarddelete",""],["insertText","A"]],
|
||||
"<p><span style=\"color:rgb(0, 0, 255)\">fooA[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
|
||||
[true,true,true],
|
||||
{}],
|
||||
["<span style=\"color:rgb(0, 0, 255)\">foo[]</span><br><p><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
|
||||
[["styleWithCSS","false"],["forwarddelete",""],["insertText","A"]],
|
||||
"<span style=\"color:rgb(0, 0, 255)\">fooA[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span>",
|
||||
[true,true,true],
|
||||
{}],
|
||||
["<span style=\"color:rgb(0, 0, 255)\">foo[]<br></span><p><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
|
||||
[["styleWithCSS","false"],["forwarddelete",""],["insertText","A"]],
|
||||
"<span style=\"color:rgb(0, 0, 255)\">fooA[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span>",
|
||||
[true,true,true],
|
||||
{}],
|
||||
]
|
||||
|
|
|
@ -0,0 +1,194 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="timeout" content="long">
|
||||
<meta name="variant" content="?action=Backspace">
|
||||
<meta name="variant" content="?action=Delete">
|
||||
<title>Typing after joining paragraph shouldn't be inserted into the link</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/resources/testdriver.js"></script>
|
||||
<script src="/resources/testdriver-vendor.js"></script>
|
||||
<script src="/resources/testdriver-actions.js"></script>
|
||||
<script src="../include/editor-test-utils.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div contenteditable></div>
|
||||
<script>
|
||||
"use strict";
|
||||
|
||||
const params = new URLSearchParams(location.search.substring(1));
|
||||
const backspace = params.get("action") == "Backspace";
|
||||
const bracketsForBackspace = backspace ? "[]" : "";
|
||||
const bracketsForDelete = backspace ? "" : "[]";
|
||||
|
||||
const editingHost = document.querySelector("div[contenteditable]");
|
||||
const utils = new EditorTestUtils(editingHost);
|
||||
|
||||
function addPromiseTest(aTest) {
|
||||
promise_test(async () => {
|
||||
editingHost.focus();
|
||||
utils.setupEditingHost(aTest.innerHTML);
|
||||
await (backspace ? utils.sendBackspaceKey() : utils.sendDeleteKey());
|
||||
await utils.sendKey("X", utils.kShiftKey);
|
||||
await utils.sendKey("Y", utils.kShiftKey);
|
||||
utils.normalizeStyleAttributeValues();
|
||||
if (Array.isArray(aTest.expectedResult)) {
|
||||
assert_in_array(editingHost.innerHTML, aTest.expectedResult);
|
||||
} else {
|
||||
assert_equals(editingHost.innerHTML, aTest.expectedResult);
|
||||
}
|
||||
}, `${backspace ? "Backspace" : "Delete"} in "${aTest.innerHTML}"`);
|
||||
}
|
||||
|
||||
addPromiseTest({
|
||||
innerHTML: `<p><a href="about:blank" style="color:rgb(0, 0, 255)">foo${
|
||||
bracketsForDelete
|
||||
}</a></p><p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span></p>`,
|
||||
expectedResult: `<p><a href="about:blank" style="color:rgb(0, 0, 255)">foo</a>XY<span style="color:rgb(255, 0, 0)">bar</span></p>`
|
||||
});
|
||||
addPromiseTest({
|
||||
innerHTML: `<p><a href="about:blank" style="color:rgb(0, 0, 255)">foo${
|
||||
bracketsForDelete
|
||||
}</a><br></p><p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span></p>`,
|
||||
expectedResult: `<p><a href="about:blank" style="color:rgb(0, 0, 255)">foo</a>XY<span style="color:rgb(255, 0, 0)">bar</span></p>`
|
||||
});
|
||||
addPromiseTest({
|
||||
innerHTML: `<p><a href="about:blank" style="color:rgb(0, 0, 255)">foo${
|
||||
bracketsForDelete
|
||||
}<br></a></p><p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span></p>`,
|
||||
expectedResult: `<p><a href="about:blank" style="color:rgb(0, 0, 255)">foo</a>XY<span style="color:rgb(255, 0, 0)">bar</span></p>`
|
||||
});
|
||||
addPromiseTest({
|
||||
innerHTML: `<p><a href="about:blank" style="color:rgb(0, 0, 255)">foo${
|
||||
bracketsForDelete
|
||||
}</a></p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span>`,
|
||||
expectedResult: `<p><a href="about:blank" style="color:rgb(0, 0, 255)">foo</a>XY<span style="color:rgb(255, 0, 0)">bar</span></p>`
|
||||
});
|
||||
addPromiseTest({
|
||||
innerHTML: `<p><a href="about:blank" style="color:rgb(0, 0, 255)">foo${
|
||||
bracketsForDelete
|
||||
}</a><br></p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span>`,
|
||||
expectedResult: `<p><a href="about:blank" style="color:rgb(0, 0, 255)">foo</a>XY<span style="color:rgb(255, 0, 0)">bar</span></p>`
|
||||
});
|
||||
addPromiseTest({
|
||||
innerHTML: `<p><a href="about:blank" style="color:rgb(0, 0, 255)">foo${
|
||||
bracketsForDelete
|
||||
}<br></a></p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span>`,
|
||||
expectedResult: `<p><a href="about:blank" style="color:rgb(0, 0, 255)">foo</a>XY<span style="color:rgb(255, 0, 0)">bar</span></p>`
|
||||
});
|
||||
addPromiseTest({
|
||||
innerHTML: `<a href="about:blank" style="color:rgb(0, 0, 255)">foo${
|
||||
bracketsForDelete
|
||||
}</a><br><p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span></p>`,
|
||||
expectedResult: `<a href="about:blank" style="color:rgb(0, 0, 255)">foo</a>XY<span style="color:rgb(255, 0, 0)">bar</span>`,
|
||||
});
|
||||
addPromiseTest({
|
||||
innerHTML: `<a href="about:blank" style="color:rgb(0, 0, 255)">foo${
|
||||
bracketsForDelete
|
||||
}<br></a><p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span></p>`,
|
||||
expectedResult: `<a href="about:blank" style="color:rgb(0, 0, 255)">foo</a>XY<span style="color:rgb(255, 0, 0)">bar</span>`,
|
||||
});
|
||||
|
||||
// Should clear only the link style.
|
||||
addPromiseTest({
|
||||
innerHTML: `<p><a href="about:blank" style="color:rgb(0, 0, 255)"><b>foo${
|
||||
bracketsForDelete
|
||||
}</b></a></p><p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span></p>`,
|
||||
expectedResult: `<p><a href="about:blank" style="color:rgb(0, 0, 255)"><b>foo</b></a><b>XY</b><span style="color:rgb(255, 0, 0)">bar</span></p>`,
|
||||
});
|
||||
addPromiseTest({
|
||||
innerHTML: `<p><a href="about:blank" style="color:rgb(0, 0, 255)"><b>foo${
|
||||
bracketsForDelete
|
||||
}</b></a><br></p><p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span></p>`,
|
||||
expectedResult: `<p><a href="about:blank" style="color:rgb(0, 0, 255)"><b>foo</b></a><b>XY</b><span style="color:rgb(255, 0, 0)">bar</span></p>`,
|
||||
});
|
||||
addPromiseTest({
|
||||
innerHTML: `<p><a href="about:blank" style="color:rgb(0, 0, 255)"><b>foo${
|
||||
bracketsForDelete
|
||||
}</b><br></a></p><p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span></p>`,
|
||||
expectedResult: `<p><a href="about:blank" style="color:rgb(0, 0, 255)"><b>foo</b></a><b>XY</b><span style="color:rgb(255, 0, 0)">bar</span></p>`,
|
||||
});
|
||||
addPromiseTest({
|
||||
innerHTML: `<p><a href="about:blank" style="color:rgb(0, 0, 255)"><b>foo${
|
||||
bracketsForDelete
|
||||
}</b></a></p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span>`,
|
||||
expectedResult: `<p><a href="about:blank" style="color:rgb(0, 0, 255)"><b>foo</b></a><b>XY</b><span style="color:rgb(255, 0, 0)">bar</span></p>`,
|
||||
});
|
||||
addPromiseTest({
|
||||
innerHTML: `<p><a href="about:blank" style="color:rgb(0, 0, 255)"><b>foo${
|
||||
bracketsForDelete
|
||||
}</b></a><br></p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span>`,
|
||||
expectedResult: `<p><a href="about:blank" style="color:rgb(0, 0, 255)"><b>foo</b></a><b>XY</b><span style="color:rgb(255, 0, 0)">bar</span></p>`,
|
||||
});
|
||||
addPromiseTest({
|
||||
innerHTML: `<p><a href="about:blank" style="color:rgb(0, 0, 255)"><b>foo${
|
||||
bracketsForDelete
|
||||
}</b><br></a></p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span>`,
|
||||
expectedResult: `<p><a href="about:blank" style="color:rgb(0, 0, 255)"><b>foo</b></a><b>XY</b><span style="color:rgb(255, 0, 0)">bar</span></p>`,
|
||||
});
|
||||
addPromiseTest({
|
||||
innerHTML: `<a href="about:blank" style="color:rgb(0, 0, 255)"><b>foo${
|
||||
bracketsForDelete
|
||||
}</b></a><br><p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span></p>`,
|
||||
expectedResult: `<a href="about:blank" style="color:rgb(0, 0, 255)"><b>foo</b></a><b>XY</b><span style="color:rgb(255, 0, 0)">bar</span>`,
|
||||
});
|
||||
addPromiseTest({
|
||||
innerHTML: `<a href="about:blank" style="color:rgb(0, 0, 255)"><b>foo${
|
||||
bracketsForDelete
|
||||
}</b><br></a><p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span></p>`,
|
||||
expectedResult: `<a href="about:blank" style="color:rgb(0, 0, 255)"><b>foo</b></a><b>XY</b><span style="color:rgb(255, 0, 0)">bar</span>`,
|
||||
});
|
||||
|
||||
addPromiseTest({
|
||||
innerHTML: `<p><b><a href="about:blank" style="color:rgb(0, 0, 255)">foo${
|
||||
bracketsForDelete
|
||||
}</a></b></p><p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span></p>`,
|
||||
expectedResult: `<p><b><a href="about:blank" style="color:rgb(0, 0, 255)">foo</a>XY</b><span style="color:rgb(255, 0, 0)">bar</span></p>`,
|
||||
});
|
||||
addPromiseTest({
|
||||
innerHTML: `<p><b><a href="about:blank" style="color:rgb(0, 0, 255)">foo${
|
||||
bracketsForDelete
|
||||
}</a></b><br></p><p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span></p>`,
|
||||
expectedResult: `<p><b><a href="about:blank" style="color:rgb(0, 0, 255)">foo</a>XY</b><span style="color:rgb(255, 0, 0)">bar</span></p>`,
|
||||
});
|
||||
addPromiseTest({
|
||||
innerHTML: `<p><b><a href="about:blank" style="color:rgb(0, 0, 255)">foo${
|
||||
bracketsForDelete
|
||||
}<br></a></b></p><p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span></p>`,
|
||||
expectedResult: `<p><b><a href="about:blank" style="color:rgb(0, 0, 255)">foo</a>XY</b><span style="color:rgb(255, 0, 0)">bar</span></p>`,
|
||||
});
|
||||
addPromiseTest({
|
||||
innerHTML: `<p><b><a href="about:blank" style="color:rgb(0, 0, 255)">foo${
|
||||
bracketsForDelete
|
||||
}</a></b></p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span>`,
|
||||
expectedResult: `<p><b><a href="about:blank" style="color:rgb(0, 0, 255)">foo</a>XY</b><span style="color:rgb(255, 0, 0)">bar</span></p>`,
|
||||
});
|
||||
addPromiseTest({
|
||||
innerHTML: `<p><b><a href="about:blank" style="color:rgb(0, 0, 255)">foo${
|
||||
bracketsForDelete
|
||||
}</a></b><br></p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span>`,
|
||||
expectedResult: `<p><b><a href="about:blank" style="color:rgb(0, 0, 255)">foo</a>XY</b><span style="color:rgb(255, 0, 0)">bar</span></p>`,
|
||||
});
|
||||
addPromiseTest({
|
||||
innerHTML: `<p><b><a href="about:blank" style="color:rgb(0, 0, 255)">foo${
|
||||
bracketsForDelete
|
||||
}<br></a></b></p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span>`,
|
||||
expectedResult: `<p><b><a href="about:blank" style="color:rgb(0, 0, 255)">foo</a>XY</b><span style="color:rgb(255, 0, 0)">bar</span></p>`,
|
||||
});
|
||||
addPromiseTest({
|
||||
innerHTML: `<b><a href="about:blank" style="color:rgb(0, 0, 255)">foo${
|
||||
bracketsForDelete
|
||||
}</a></b><br><p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span></p>`,
|
||||
expectedResult: `<b><a href="about:blank" style="color:rgb(0, 0, 255)">foo</a>XY</b><span style="color:rgb(255, 0, 0)">bar</span>`,
|
||||
});
|
||||
addPromiseTest({
|
||||
innerHTML: `<b><a href="about:blank" style="color:rgb(0, 0, 255)">foo${
|
||||
bracketsForDelete
|
||||
}<br></a></b><p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span></p>`,
|
||||
expectedResult: `<b><a href="about:blank" style="color:rgb(0, 0, 255)">foo</a>XY</b><span style="color:rgb(255, 0, 0)">bar</span>`,
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -31,9 +31,9 @@
|
|||
from typing import List, Mapping
|
||||
|
||||
import re
|
||||
import codecs
|
||||
import importlib
|
||||
import os
|
||||
import pathlib
|
||||
import sys
|
||||
|
||||
try:
|
||||
|
@ -287,16 +287,16 @@ def _generate_test(test: Mapping[str, str], templates: Mapping[str, str],
|
|||
test_path += '-manual'
|
||||
|
||||
if is_offscreen_canvas:
|
||||
f = codecs.open(f'{test_path}.html', 'w', 'utf-8')
|
||||
f.write(templates['w3coffscreencanvas'] % template_params)
|
||||
pathlib.Path(f'{test_path}.html').write_text(
|
||||
templates['w3coffscreencanvas'] % template_params, 'utf-8')
|
||||
timeout = ('// META: timeout=%s\n' %
|
||||
test['timeout'] if 'timeout' in test else '')
|
||||
template_params['timeout'] = timeout
|
||||
f = codecs.open(f'{test_path}.worker.js', 'w', 'utf-8')
|
||||
f.write(templates['w3cworker'] % template_params)
|
||||
pathlib.Path(f'{test_path}.worker.js').write_text(
|
||||
templates['w3cworker'] % template_params, 'utf-8')
|
||||
else:
|
||||
f = codecs.open(f'{test_path}.html', 'w', 'utf-8')
|
||||
f.write(templates['w3ccanvas'] % template_params)
|
||||
pathlib.Path(f'{test_path}.html').write_text(
|
||||
templates['w3ccanvas'] % template_params, 'utf-8')
|
||||
|
||||
|
||||
def genTestUtils(TESTOUTPUTDIR: str, IMAGEOUTPUTDIR: str, TEMPLATEFILE: str,
|
||||
|
@ -307,8 +307,8 @@ def genTestUtils(TESTOUTPUTDIR: str, IMAGEOUTPUTDIR: str, TEMPLATEFILE: str,
|
|||
doctest.testmod()
|
||||
sys.exit()
|
||||
|
||||
templates = yaml.safe_load(open(TEMPLATEFILE, 'r').read())
|
||||
name_to_sub_dir = yaml.safe_load(open(NAME2DIRFILE, 'r').read())
|
||||
templates = yaml.safe_load(pathlib.Path(TEMPLATEFILE).read_text())
|
||||
name_to_sub_dir = yaml.safe_load(pathlib.Path(NAME2DIRFILE).read_text())
|
||||
|
||||
tests = []
|
||||
test_yaml_directory = 'yaml/element'
|
||||
|
@ -318,8 +318,8 @@ def genTestUtils(TESTOUTPUTDIR: str, IMAGEOUTPUTDIR: str, TEMPLATEFILE: str,
|
|||
os.path.join(test_yaml_directory, f)
|
||||
for f in os.listdir(test_yaml_directory) if f.endswith('.yaml')
|
||||
]
|
||||
for t in sum([yaml.safe_load(open(f, 'r').read()) for f in TESTSFILES],
|
||||
[]):
|
||||
for t in sum(
|
||||
[yaml.safe_load(pathlib.Path(f).read_text()) for f in TESTSFILES], []):
|
||||
if 'DISABLED' in t:
|
||||
continue
|
||||
if 'meta' in t:
|
||||
|
|
|
@ -31,12 +31,12 @@
|
|||
from typing import List, Mapping
|
||||
|
||||
import re
|
||||
import codecs
|
||||
import collections
|
||||
import dataclasses
|
||||
import enum
|
||||
import importlib
|
||||
import os
|
||||
import pathlib
|
||||
import sys
|
||||
|
||||
try:
|
||||
|
@ -317,26 +317,28 @@ def _generate_test(test: Mapping[str, str], templates: Mapping[str, str],
|
|||
|
||||
# Create test cases for canvas and offscreencanvas.
|
||||
if html_canvas_cfg.enabled:
|
||||
f = codecs.open(f'{canvas_path}.html', 'w', 'utf-8')
|
||||
f.write(templates['w3ccanvas'] % template_params)
|
||||
pathlib.Path(f'{canvas_path}.html').write_text(
|
||||
templates['w3ccanvas'] % template_params, 'utf-8')
|
||||
if offscreen_canvas_cfg.enabled:
|
||||
f_html = codecs.open(f'{offscreen_path}.html', 'w', 'utf-8')
|
||||
f_worker = codecs.open(f'{offscreen_path}.worker.js', 'w', 'utf-8')
|
||||
if ('then(t_pass, t_fail);' in code_canvas):
|
||||
temp_offscreen = templates['w3coffscreencanvas'].replace(
|
||||
't.done();\n', '')
|
||||
temp_worker = templates['w3cworker'].replace('t.done();\n', '')
|
||||
f_html.write(temp_offscreen % template_params)
|
||||
pathlib.Path(f'{offscreen_path}.html').write_text(
|
||||
temp_offscreen % template_params, 'utf-8')
|
||||
timeout = ('// META: timeout=%s\n' %
|
||||
test['timeout'] if 'timeout' in test else '')
|
||||
template_params['timeout'] = timeout
|
||||
f_worker.write(temp_worker % template_params)
|
||||
pathlib.Path(f'{offscreen_path}.worker.js').write_text(
|
||||
temp_worker % template_params, 'utf-8')
|
||||
else:
|
||||
f_html.write(templates['w3coffscreencanvas'] % template_params)
|
||||
pathlib.Path(f'{offscreen_path}.html').write_text(
|
||||
templates['w3coffscreencanvas'] % template_params, 'utf-8')
|
||||
timeout = ('// META: timeout=%s\n' %
|
||||
test['timeout'] if 'timeout' in test else '')
|
||||
template_params['timeout'] = timeout
|
||||
f_worker.write(templates['w3cworker'] % template_params)
|
||||
pathlib.Path(f'{offscreen_path}.worker.js').write_text(
|
||||
templates['w3cworker'] % template_params, 'utf-8')
|
||||
|
||||
|
||||
def genTestUtils_union(TEMPLATEFILE: str, NAME2DIRFILE: str) -> None:
|
||||
|
@ -351,8 +353,8 @@ def genTestUtils_union(TEMPLATEFILE: str, NAME2DIRFILE: str) -> None:
|
|||
doctest.testmod()
|
||||
sys.exit()
|
||||
|
||||
templates = yaml.safe_load(open(TEMPLATEFILE, 'r').read())
|
||||
name_to_sub_dir = yaml.safe_load(open(NAME2DIRFILE, 'r').read())
|
||||
templates = yaml.safe_load(pathlib.Path(TEMPLATEFILE).read_text())
|
||||
name_to_sub_dir = yaml.safe_load(pathlib.Path(NAME2DIRFILE).read_text())
|
||||
|
||||
tests = []
|
||||
test_yaml_directory = 'yaml-new'
|
||||
|
@ -360,8 +362,8 @@ def genTestUtils_union(TEMPLATEFILE: str, NAME2DIRFILE: str) -> None:
|
|||
os.path.join(test_yaml_directory, f)
|
||||
for f in os.listdir(test_yaml_directory) if f.endswith('.yaml')
|
||||
]
|
||||
for t in sum([yaml.safe_load(open(f, 'r').read()) for f in TESTSFILES],
|
||||
[]):
|
||||
for t in sum(
|
||||
[yaml.safe_load(pathlib.Path(f).read_text()) for f in TESTSFILES], []):
|
||||
if 'DISABLED' in t:
|
||||
continue
|
||||
if 'meta' in t:
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
// META: script=resources/early-hints-helpers.sub.js
|
||||
|
||||
test(() => {
|
||||
const preloads = [{
|
||||
"url": "empty.json?" + Date.now(),
|
||||
"as_attr": "fetch",
|
||||
"crossorigin_attr": "",
|
||||
}];
|
||||
navigateToTestWithEarlyHints("resources/preload-fetch.html", preloads);
|
||||
});
|
|
@ -14,6 +14,8 @@ const CROSS_ORIGIN_RESOURCES_URL = CROSS_ORIGIN + RESOURCES_PATH;
|
|||
* @property {string} url - A URL to preload. Note: This is relative to the
|
||||
* `test_url` parameter of `navigateToTestWithEarlyHints()`.
|
||||
* @property {string} as_attr - `as` attribute of this preload.
|
||||
* @property {string} [crossorigin_attr] - `crossorigin` attribute of this
|
||||
* preload.
|
||||
*
|
||||
* @param {string} test_url - URL of a test after the Early Hints response.
|
||||
* @param {Array<Preload>} preloads - Preloads included in the Early Hints response.
|
||||
|
|
|
@ -18,6 +18,12 @@ def handle_headers(frame, request, response):
|
|||
for encoded_preload in request.GET.get_list(b"preloads"):
|
||||
preload = json.loads(encoded_preload.decode("utf-8"))
|
||||
header = "<{}>; rel=preload; as={}".format(preload["url"], preload["as_attr"])
|
||||
if "crossorigin_attr" in preload:
|
||||
crossorigin = preload["crossorigin_attr"]
|
||||
if crossorigin:
|
||||
header += "; crossorigin={}".format(crossorigin)
|
||||
else:
|
||||
header += "; crossorigin"
|
||||
preload_headers.append(header.encode())
|
||||
|
||||
# Send a 103 response.
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
{}
|
|
@ -0,0 +1,4 @@
|
|||
cache-control: max-age=600
|
||||
access-control-allow-origin: *
|
||||
timing-allow-origin: *
|
||||
cross-origin-resource-policy: cross-origin
|
|
@ -0,0 +1,18 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset=utf-8>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="early-hints-helpers.sub.js"></script>
|
||||
<body>
|
||||
<script>
|
||||
promise_test(async (t) => {
|
||||
const preloads = getPreloadsFromSearchParams();
|
||||
assert_equals(preloads.length, 1);
|
||||
const preload = preloads[0];
|
||||
|
||||
await fetch(preload.url).then((response) => response.json());
|
||||
const name = new URL(preload.url, window.location);
|
||||
assert_true(isPreloadedByEarlyHints(name));
|
||||
}, "Ensure early hints preload works for fetch()");
|
||||
</script>
|
||||
</body>
|
|
@ -0,0 +1,23 @@
|
|||
<!doctype html>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="resources/helpers.js"></script>
|
||||
|
||||
<script>
|
||||
promise_test(async t => {
|
||||
// Wait for after the load event so that we are definitely testing the
|
||||
// same URL as the cause of the rejections.
|
||||
await new Promise(resolve => window.onload = () => t.step_timeout(resolve, 0));
|
||||
assert_equals(navigation.entries().length, 1);
|
||||
|
||||
navigation.onnavigate = t.step_func(e => {
|
||||
e.intercept();
|
||||
assert_equals(e.navigationType, "replace");
|
||||
});
|
||||
navigation.onnavigateerror = t.unreached_func("onnavigateerror should not be called");
|
||||
|
||||
await navigation.navigate(location.href).finished;
|
||||
assert_equals(navigation.entries().length, 1);
|
||||
assert_equals(navigation.currentEntry.index, 0);
|
||||
}, "navigate() to the current URL cross document should replace");
|
||||
</script>
|
|
@ -0,0 +1,23 @@
|
|||
<!doctype html>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="resources/helpers.js"></script>
|
||||
|
||||
<script>
|
||||
promise_test(async t => {
|
||||
// Wait for after the load event so that we are definitely testing the
|
||||
// same URL as the cause of the rejections.
|
||||
await new Promise(resolve => window.onload = () => t.step_timeout(resolve, 0));
|
||||
assert_equals(navigation.entries().length, 1);
|
||||
await navigation.navigate("#").finished;
|
||||
assert_equals(navigation.entries().length, 2);
|
||||
assert_equals(navigation.currentEntry.index, 1);
|
||||
|
||||
navigation.onnavigate = t.step_func(e => {
|
||||
assert_equals(e.navigationType, "replace");
|
||||
});
|
||||
await navigation.navigate(location.href).finished;
|
||||
assert_equals(navigation.entries().length, 2);
|
||||
assert_equals(navigation.currentEntry.index, 1);
|
||||
}, "navigate() to the current URL same document should replace");
|
||||
</script>
|
|
@ -0,0 +1,91 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<link rel="help" src="https://drafts.csswg.org/scroll-animations-1/#named-timeline-range">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/web-animations/testcommon.js"></script>
|
||||
<script src="support/testcommon.js"></script>
|
||||
<title>Animation range and delay</title>
|
||||
</head>
|
||||
<style type="text/css">
|
||||
@keyframes anim {
|
||||
from { opacity: 0 }
|
||||
to { opacity: 1 }
|
||||
}
|
||||
#scroller {
|
||||
border: 10px solid lightgray;
|
||||
overflow-y: scroll;
|
||||
width: 300px;
|
||||
height: 200px;
|
||||
}
|
||||
#target {
|
||||
margin: 800px 0px;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
z-index: -1;
|
||||
background-color: green;
|
||||
animation: anim auto linear;
|
||||
animation-timeline: scroll();
|
||||
/* Sentinel value when in before or after phase of the animation. */
|
||||
opacity: 0.96875;
|
||||
}
|
||||
</style>
|
||||
<body>
|
||||
<div id=scroller>
|
||||
<div id=target></div>
|
||||
</div>
|
||||
</body>
|
||||
<script type="text/javascript">
|
||||
async function runTest() {
|
||||
|
||||
function assert_opacity_equals(expected, errorMessage) {
|
||||
assert_approx_equals(
|
||||
parseFloat(getComputedStyle(target).opacity), expected, 1e-6,
|
||||
errorMessage);
|
||||
}
|
||||
|
||||
promise_test(async t => {
|
||||
await waitForNextFrame();
|
||||
const anim = document.getAnimations()[0];
|
||||
await anim.ready;
|
||||
|
||||
await waitForNextFrame();
|
||||
scroller.scrollTop =
|
||||
(scroller.scrollHeight - scroller.clientHeight) / 2;
|
||||
await waitForNextFrame();
|
||||
|
||||
const baseOpacity = 0.96875;
|
||||
// Delays are percentages.
|
||||
const testData = [
|
||||
{ delay: 0, endDelay: 0, opacity: 0.5 },
|
||||
{ delay: 20, endDelay: 0, opacity: 0.375 },
|
||||
{ delay: 0, endDelay: 20, opacity: 0.625 },
|
||||
{ delay: 20, endDelay: 20, opacity: 0.5 },
|
||||
// // Negative delays.
|
||||
{ delay: -25, endDelay: 0, opacity: 0.6 },
|
||||
{ delay: 0, endDelay: -25, opacity: 0.4 },
|
||||
{ delay: -25, endDelay: -25, opacity: 0.5 },
|
||||
// Stress tests with >= 100% total delay. Verify effect is inactive.
|
||||
{ delay: 100, endDelay: 0, opacity: baseOpacity },
|
||||
{ delay: 0, endDelay: 100, opacity: baseOpacity },
|
||||
{ delay: 100, endDelay: 100, opacity: baseOpacity }
|
||||
];
|
||||
|
||||
testData.forEach(test => {
|
||||
anim.effect.updateTiming({
|
||||
delay: CSS.percent(test.delay),
|
||||
endDelay: CSS.percent(test.endDelay)
|
||||
});
|
||||
assert_opacity_equals(
|
||||
test.opacity,
|
||||
`Opacity when delay=${test.delay} and endDelay=${test.endDelay}`);
|
||||
});
|
||||
}, 'ScrollTimeline with animation delays as percentages');
|
||||
}
|
||||
|
||||
window.onload = runTest;
|
||||
|
||||
</script>
|
||||
</html>
|
|
@ -0,0 +1,93 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<link rel="help" src="https://drafts.csswg.org/scroll-animations-1/#named-timeline-range">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/web-animations/testcommon.js"></script>
|
||||
<script src="support/testcommon.js"></script>
|
||||
<title>Animation range and delay</title>
|
||||
</head>
|
||||
<style type="text/css">
|
||||
@keyframes anim {
|
||||
from { opacity: 0 }
|
||||
to { opacity: 1 }
|
||||
}
|
||||
#scroller {
|
||||
border: 10px solid lightgray;
|
||||
overflow-y: scroll;
|
||||
width: 300px;
|
||||
height: 200px;
|
||||
}
|
||||
#target {
|
||||
margin: 800px 0px;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
z-index: -1;
|
||||
background-color: green;
|
||||
animation: anim auto linear;
|
||||
animation-timeline: t1;
|
||||
view-timeline: t1 block;
|
||||
animation-range-start: enter 0%;
|
||||
animation-range-end: enter 100%;
|
||||
/* Sentinel value when in before or after phase of the animation. */
|
||||
opacity: 0.96875;
|
||||
}
|
||||
</style>
|
||||
<body>
|
||||
<div id=scroller>
|
||||
<div id=target></div>
|
||||
</div>
|
||||
</body>
|
||||
<script type="text/javascript">
|
||||
async function runTest() {
|
||||
|
||||
function assert_opacity_equals(expected, errorMessage) {
|
||||
assert_approx_equals(
|
||||
parseFloat(getComputedStyle(target).opacity), expected, 1e-6,
|
||||
errorMessage);
|
||||
}
|
||||
|
||||
promise_test(async t => {
|
||||
await waitForNextFrame();
|
||||
const anim = document.getAnimations()[0];
|
||||
await anim.ready;
|
||||
|
||||
await waitForNextFrame();
|
||||
scroller.scrollTop = 650;
|
||||
await waitForNextFrame();
|
||||
|
||||
const baseOpacity = 0.96875;
|
||||
// Delays are percentages.
|
||||
const testData = [
|
||||
{ delay: 0, endDelay: 0, opacity: 0.5 },
|
||||
{ delay: 20, endDelay: 0, opacity: 0.375 },
|
||||
{ delay: 0, endDelay: 20, opacity: 0.625 },
|
||||
{ delay: 20, endDelay: 20, opacity: 0.5 },
|
||||
// Negative delays.
|
||||
{ delay: -25, endDelay: 0, opacity: 0.6 },
|
||||
{ delay: 0, endDelay: -25, opacity: 0.4 },
|
||||
{ delay: -25, endDelay: -25, opacity: 0.5 },
|
||||
// Stress tests with >= 100% total delay. Verify effect is inactive.
|
||||
{ delay: 100, endDelay: 0, opacity: baseOpacity },
|
||||
{ delay: 0, endDelay: 100, opacity: baseOpacity },
|
||||
{ delay: 100, endDelay: 100, opacity: baseOpacity }
|
||||
];
|
||||
|
||||
testData.forEach(test => {
|
||||
anim.effect.updateTiming({
|
||||
delay: CSS.percent(test.delay),
|
||||
endDelay: CSS.percent(test.endDelay)
|
||||
});
|
||||
assert_opacity_equals(
|
||||
test.opacity,
|
||||
`Opacity when delay=${test.delay} and endDelay=${test.endDelay}`);
|
||||
});
|
||||
}, 'ViewTimeline with animation delays and range');
|
||||
}
|
||||
|
||||
window.onload = runTest;
|
||||
|
||||
</script>
|
||||
</html>
|
|
@ -186,8 +186,8 @@ class WebTransportH3Protocol(QuicConnectionProtocol):
|
|||
|
||||
def _send_error_response(self, stream_id: int, status_code: int) -> None:
|
||||
assert self._http is not None
|
||||
headers = [(b"server", SERVER_NAME.encode()),
|
||||
(b":status", str(status_code).encode())]
|
||||
headers = [(b":status", str(status_code).encode()),
|
||||
(b"server", SERVER_NAME.encode())]
|
||||
self._http.send_headers(stream_id=stream_id,
|
||||
headers=headers,
|
||||
end_stream=True)
|
||||
|
@ -221,9 +221,11 @@ class WebTransportH3Protocol(QuicConnectionProtocol):
|
|||
for name, value in response_headers:
|
||||
if name == b":status":
|
||||
status_code = value
|
||||
response_headers.remove((b":status", status_code))
|
||||
response_headers.insert(0, (b":status", status_code))
|
||||
break
|
||||
if not status_code:
|
||||
response_headers.append((b":status", b"200"))
|
||||
response_headers.insert(0, (b":status", b"200"))
|
||||
self._http.send_headers(stream_id=event.stream_id,
|
||||
headers=response_headers)
|
||||
|
||||
|
|
|
@ -0,0 +1,109 @@
|
|||
// META: script=/storage-access-api/helpers.js
|
||||
// META: script=/resources/testdriver.js
|
||||
// META: script=/resources/testdriver-vendor.js
|
||||
'use strict';
|
||||
|
||||
// Note that this file follows the pattern in:
|
||||
// storage-access-api/requestStorageAccess.sub.window.js
|
||||
//
|
||||
// Some tests are run at the top-level, and an iframe is added to validate API
|
||||
// behavior in that context.
|
||||
|
||||
// Prefix each test case with an indicator so we know what context they are run
|
||||
// in if they are used in multiple iframes.
|
||||
let testPrefix = 'insecure-context';
|
||||
|
||||
// Keep track of if we run these tests in a nested context, we don't want to
|
||||
// recurse forever.
|
||||
let topLevelDocument = true;
|
||||
|
||||
// The query string allows derivation of test conditions, like whether the tests
|
||||
// are running in a top-level context.
|
||||
const queryParams = window.location.search.substring(1).split('&');
|
||||
queryParams.forEach((param) => {
|
||||
if (param.toLowerCase() == 'rootdocument=false') {
|
||||
topLevelDocument = false;
|
||||
} else if (param.split('=')[0].toLowerCase() == 'testcase') {
|
||||
testPrefix = param.split('=')[1];
|
||||
}
|
||||
});
|
||||
|
||||
// TODO(crbug.com/1410556): when/if requestStorageAccessForOrigin is standardized,
|
||||
// we should consider upstreaming these helpers.
|
||||
function RunRequestStorageAccessForOriginInDetachedFrame(site) {
|
||||
const nestedFrame = document.createElement('iframe');
|
||||
document.body.append(nestedFrame);
|
||||
const inner_doc = nestedFrame.contentDocument;
|
||||
nestedFrame.remove();
|
||||
return inner_doc.requestStorageAccessForOrigin(site);
|
||||
}
|
||||
|
||||
function RunRequestStorageAccessForOriginViaDomParser(site) {
|
||||
const parser = new DOMParser();
|
||||
const doc = parser.parseFromString('<html></html>', 'text/html');
|
||||
return doc.requestStorageAccessForOrigin(site);
|
||||
}
|
||||
|
||||
// Common tests to run in all frames.
|
||||
test(
|
||||
() => {
|
||||
assert_not_equals(document.requestStorageAccessForOrigin, undefined);
|
||||
},
|
||||
'[' + testPrefix +
|
||||
'] document.requestStorageAccessForOrigin() should be supported on the document interface');
|
||||
|
||||
if (topLevelDocument) {
|
||||
promise_test(
|
||||
t => {
|
||||
return promise_rejects_dom(t, 'NotAllowedError',
|
||||
document.requestStorageAccessForOrigin('https://test.com'),
|
||||
'document.requestStorageAccessForOrigin() call without user gesture');
|
||||
},
|
||||
'[' + testPrefix +
|
||||
'] document.requestStorageAccessForOrigin() should be rejected by default with no user gesture');
|
||||
|
||||
promise_test(async t => {
|
||||
const description =
|
||||
'document.requestStorageAccessForOrigin() call in a detached frame';
|
||||
// Can't use promise_rejects_dom here because the exception is from the wrong global.
|
||||
return RunRequestStorageAccessForOriginInDetachedFrame('https://foo.com')
|
||||
.then(t.unreached_func('Should have rejected: ' + description))
|
||||
.catch((e) => {
|
||||
assert_equals(e.name, 'InvalidStateError', description);
|
||||
});
|
||||
}, '[non-fully-active] document.requestStorageAccessForOrigin() should not resolve when run in a detached frame');
|
||||
|
||||
promise_test(async t => {
|
||||
const description =
|
||||
'document.requestStorageAccessForOrigin() in a detached DOMParser result';
|
||||
return RunRequestStorageAccessForOriginViaDomParser('https://foo.com')
|
||||
.then(t.unreached_func('Should have rejected: ' + description))
|
||||
.catch((e) => {
|
||||
assert_equals(e.name, 'InvalidStateError', description);
|
||||
});
|
||||
}, '[non-fully-active] document.requestStorageAccessForOrigin() should not resolve when run in a detached DOMParser document');
|
||||
|
||||
// Create a test with a single-child same-origin iframe.
|
||||
// This will validate that calls to requestStorageAccessForOrigin are rejected
|
||||
// in non-top-level contexts.
|
||||
RunTestsInIFrame(
|
||||
'./resources/requestStorageAccessForOrigin-iframe.https.html?testCase=secure-frame-on-insecure-page&rootdocument=false');
|
||||
|
||||
promise_test(
|
||||
async t => {
|
||||
await RunCallbackWithGesture(
|
||||
() => promise_rejects_dom(t, 'NotAllowedError', document.requestStorageAccessForOrigin(document.location.origin), 'document.requestStorageAccessForOrigin() call in insecure context'));
|
||||
},
|
||||
'[' + testPrefix +
|
||||
'] document.requestStorageAccessForOrigin() should be rejected when called in an insecure context');
|
||||
|
||||
} else {
|
||||
promise_test(
|
||||
async t => {
|
||||
await RunCallbackWithGesture(
|
||||
() => promise_rejects_dom(t, 'NotAllowedError', document.requestStorageAccessForOrigin(document.location.origin),
|
||||
'document.requestStorageAccessForOrigin() call in a non-top-level context'));
|
||||
},
|
||||
'[' + testPrefix +
|
||||
'] document.requestStorageAccessForOrigin() should be rejected when called in an iframe');
|
||||
}
|
|
@ -6,4 +6,4 @@
|
|||
<script src="/resources/testdriver.js"></script>
|
||||
<script src="/resources/testdriver-vendor.js"></script>
|
||||
<div id=log></div>
|
||||
<script src="../requestStorageAccessForOrigin.sub.window.js"></script>
|
||||
<script src="../requestStorageAccessForOrigin-insecure.sub.window.js"></script>
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
<!doctype html>
|
||||
<meta charset=utf-8>
|
||||
|
||||
<script src="/storage-access-api/helpers.js"></script>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testdriver.js"></script>
|
||||
<script src="/resources/testdriver-vendor.js"></script>
|
||||
<div id=log></div>
|
||||
<script src="../requestStorageAccessForOrigin.sub.https.window.js"></script>
|
Loading…
Add table
Add a link
Reference in a new issue