Auto merge of #26954 - servo-wpt-sync:wpt_update_17-06-2020, r=servo-wpt-sync

Sync WPT with upstream (17-06-2020)

Automated downstream sync of changes from upstream as of 17-06-2020.
[no-wpt-sync]
r? @servo-wpt-sync
This commit is contained in:
bors-servo 2020-06-17 19:30:33 -04:00 committed by GitHub
commit f93c87fb5d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
93 changed files with 1056 additions and 202 deletions

View file

@ -1,4 +0,0 @@
[hit-test-floats-002.html]
[Hit test float]
expected: FAIL

View file

@ -0,0 +1,4 @@
[hit-test-floats-004.html]
[Miss float below something else]
expected: FAIL

View file

@ -11,3 +11,18 @@
[e.style['text-decoration'\] = "overline dotted green" should not set unrelated longhands] [e.style['text-decoration'\] = "overline dotted green" should not set unrelated longhands]
expected: FAIL expected: FAIL
[e.style['text-decoration'\] = "overline from-font dotted green" should set text-decoration-style]
expected: FAIL
[e.style['text-decoration'\] = "overline from-font dotted green" should set text-decoration-line]
expected: FAIL
[e.style['text-decoration'\] = "overline from-font dotted green" should set text-decoration-color]
expected: FAIL
[e.style['text-decoration'\] = "overline from-font dotted green" should not set unrelated longhands]
expected: FAIL
[e.style['text-decoration'\] = "overline from-font dotted green" should set text-decoration-thickness]
expected: FAIL

View file

@ -312,27 +312,21 @@
[Response: combined response Content-Type: text/html;" \\" text/plain ";charset=GBK] [Response: combined response Content-Type: text/html;" \\" text/plain ";charset=GBK]
expected: NOTRUN expected: NOTRUN
[<iframe>: separate response Content-Type: text/html;" text/plain]
expected: FAIL
[<iframe>: combined response Content-Type: */* text/html]
expected: FAIL
[<iframe>: separate response Content-Type: text/html */*]
expected: FAIL
[<iframe>: separate response Content-Type: text/plain */*] [<iframe>: separate response Content-Type: text/plain */*]
expected: FAIL expected: FAIL
[<iframe>: combined response Content-Type: text/html */*;charset=gbk]
expected: FAIL
[<iframe>: separate response Content-Type: text/html;x=" text/plain] [<iframe>: separate response Content-Type: text/html;x=" text/plain]
expected: FAIL expected: FAIL
[<iframe>: combined response Content-Type: text/html;" \\" text/plain]
expected: FAIL
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk] [<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
expected: FAIL expected: FAIL
[<iframe>: combined response Content-Type: text/html;" text/plain]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;x=" text/plain]
expected: FAIL

View file

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

View file

@ -11,6 +11,9 @@
[X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!] [X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!]
expected: FAIL expected: FAIL
[X-Content-Type-Options%3A%0D%0AX-Content-Type-Options%3A%20nosniff] [X-Content-Type-Options%3A%20%22nosniFF%22]
expected: FAIL
[Content-Type-Options%3A%20nosniff]
expected: FAIL expected: FAIL

View file

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

View file

@ -1,4 +1,4 @@
[traverse_the_history_4.html] [traverse_the_history_3.html]
[Multiple history traversals, last would be aborted] [Multiple history traversals, last would be aborted]
expected: FAIL expected: FAIL

View file

@ -1,5 +1,5 @@
[iframe_sandbox_popups_escaping-1.html] [iframe_sandbox_popups_escaping-1.html]
expected: CRASH expected: TIMEOUT
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used] [Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
expected: TIMEOUT expected: TIMEOUT

View file

@ -1,5 +1,4 @@
[iframe_sandbox_popups_nonescaping-1.html] [iframe_sandbox_popups_nonescaping-1.html]
expected: TIMEOUT
[Check that popups from a sandboxed iframe do not escape the sandbox] [Check that popups from a sandboxed iframe do not escape the sandbox]
expected: NOTRUN expected: FAIL

View file

@ -1,5 +1,5 @@
[iframe_sandbox_popups_nonescaping-2.html] [iframe_sandbox_popups_nonescaping-2.html]
expected: CRASH expected: TIMEOUT
[Check that popups from a sandboxed iframe do not escape the sandbox] [Check that popups from a sandboxed iframe do not escape the sandbox]
expected: FAIL expected: NOTRUN

View file

@ -0,0 +1,4 @@
[077.html]
[ adding several types of scripts through the DOM and removing some of them confuses scheduler ]
expected: FAIL

View file

@ -0,0 +1,4 @@
[load-event-after-location-set-during-write.window.html]
[Setting location from document.write() call should not trigger load event until that load completes]
expected: FAIL

View file

@ -3,6 +3,3 @@
[The incumbent settings object while executing the compiled callback via Web IDL's invoke must be that of the node document] [The incumbent settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
expected: TIMEOUT expected: TIMEOUT
[The entry settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
expected: FAIL

View file

@ -0,0 +1,7 @@
[audioworkletprocessor-process-frozen-array.https.html]
[Executing "transfer-frozen-array"]
expected: FAIL
[Executing "check-frozen-array"]
expected: FAIL

View file

@ -0,0 +1,5 @@
[017.html]
expected: TIMEOUT
[origin of the script that invoked the method, about:blank]
expected: TIMEOUT

View file

@ -0,0 +1,5 @@
[018.html]
expected: TIMEOUT
[origin of the script that invoked the method, javascript:]
expected: TIMEOUT

View file

@ -0,0 +1,5 @@
[017.html]
expected: TIMEOUT
[origin of the script that invoked the method, about:blank]
expected: TIMEOUT

View file

@ -0,0 +1,2 @@
[Worker-constructor.html]
expected: ERROR

View file

@ -1,4 +1,5 @@
[003.html] [003.html]
expected: ERROR
[shared] [shared]
expected: FAIL expected: FAIL

View file

@ -1,7 +1,8 @@
[shared-worker-in-data-url-context.window.html] [shared-worker-in-data-url-context.window.html]
expected: TIMEOUT
[Create a shared worker in a data url frame] [Create a shared worker in a data url frame]
expected: FAIL expected: TIMEOUT
[Create a data url shared worker in a data url frame] [Create a data url shared worker in a data url frame]
expected: FAIL expected: NOTRUN

View file

@ -586,6 +586,13 @@
"semantics": { "semantics": {
"embedded-content": { "embedded-content": {
"the-audio-element": { "the-audio-element": {
"audio-appendChild-to-inactive-document-crash.html": [
"33d52ca89946298d02349877164e5439626232df",
[
null,
{}
]
],
"audio-play-in-inactive-document-crash.html": [ "audio-play-in-inactive-document-crash.html": [
"ade40797b97ec4661e82a62fc601c3b27ad44d2d", "ade40797b97ec4661e82a62fc601c3b27ad44d2d",
[ [
@ -2183,6 +2190,44 @@
] ]
] ]
}, },
"appmanifest": {
"link-relationship": {
"link-tree-order-manual.html": [
"a8bf882fbd1c264bd6f68ff5e84d67c37d716789",
[
null,
{}
]
]
},
"name-member": {
"name-member-manual.html": [
"8ba4110bd07a82e3a19e3c82d76ba543832a0cf1",
[
null,
{}
]
]
},
"short_name-member": {
"short_name-member-manual.html": [
"7d959ad78fa08d91993db13c3819e4d3a6d916ac",
[
null,
{}
]
]
},
"theme_color-member": {
"theme_color-member-red-manual.html": [
"07c6dfee3e3118fa7d824d5e0961ae8dbad87c36",
[
null,
{}
]
]
}
},
"audio-output": { "audio-output": {
"setSinkId-manual.https.html": [ "setSinkId-manual.https.html": [
"a083cdf09232110039d3bb825e207c678b336114", "a083cdf09232110039d3bb825e207c678b336114",
@ -180888,6 +180933,19 @@
{} {}
] ]
], ],
"backface-visibility-001.html": [
"c5ee9cc0f12f6012c105758cc14afbc6f2feb9dc",
[
null,
[
[
"/css/css-transforms/backface-visibility-001.ref.html",
"=="
]
],
{}
]
],
"backface-visibility-hidden-001.html": [ "backface-visibility-hidden-001.html": [
"e9a463fc0b0b7e893d3c801c6a78aa5368ef3e60", "e9a463fc0b0b7e893d3c801c6a78aa5368ef3e60",
[ [
@ -233973,6 +234031,19 @@
{} {}
] ]
], ],
"input-image-inline-alt.html": [
"e05ad84191373836d5fd8b64a45ce69bab197fb2",
[
null,
[
[
"/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/input-image-inline-alt-ref.html",
"=="
]
],
{}
]
],
"input-type-change-from-image-1.html": [ "input-type-change-from-image-1.html": [
"00747a5fbf69f64802a4a05680186d1bc0d9f894", "00747a5fbf69f64802a4a05680186d1bc0d9f894",
[ [
@ -237307,6 +237378,19 @@
], ],
{} {}
] ]
],
"mrow-painting-order.html": [
"b221ec8ffda0b53a4fdf8af9db82e8aa7e1c4c9e",
[
null,
[
[
"/mathml/presentation-markup/mrow/mrow-painting-order-ref.html",
"=="
]
],
{}
]
] ]
}, },
"operators": { "operators": {
@ -247305,9 +247389,47 @@
}, },
"appmanifest": { "appmanifest": {
"META.yml": [ "META.yml": [
"0b9c714df2a45545212397d7e391655f3e1091cf", "bef14c3c795aa5a8befd4d95aeb8573f4af07ad7",
[] []
] ],
"name-member": {
"name-member-fail.webmanifest": [
"2fbf8809696490911cfe7eff8d83f620bc218a7a",
[]
],
"name-member-fail.webmanifest.headers": [
"23f36ea27ced7bba400a60e8e618757e5701cd88",
[]
],
"name-member.webmanifest": [
"c51d155a24cfb94322640e761803bb06ad19c9d4",
[]
],
"name-member.webmanifest.headers": [
"23f36ea27ced7bba400a60e8e618757e5701cd88",
[]
]
},
"short_name-member": {
"short_name-member.webmanifest": [
"66f357e294cb810a90e6b39f9d87a7a45ab8029d",
[]
],
"short_name-member.webmanifest.headers": [
"23f36ea27ced7bba400a60e8e618757e5701cd88",
[]
]
},
"theme_color-member": {
"theme_color-member-red.webmanifest": [
"87324a70f3b34bddeee7b2d57e8125444ece4ad3",
[]
],
"theme_color-member-red.webmanifest.headers": [
"2bab061d43ab9e533b0160ca506231939886cd89",
[]
]
}
}, },
"audio-output": { "audio-output": {
"META.yml": [ "META.yml": [
@ -318622,7 +318744,7 @@
[] []
], ],
"general-guidelines.md": [ "general-guidelines.md": [
"45e8769ae1edf1f327047ca4c094c772bd661966", "b8b8e49af510652f26848408361e3023ce031d3f",
[] []
], ],
"github-intro.md": [ "github-intro.md": [
@ -318642,7 +318764,7 @@
[] []
], ],
"lint-tool.md": [ "lint-tool.md": [
"551a9c1b605f51e2adbf00ef2f33d80e0d7db25b", "ba11169e020c8c74a2a4dab04c316d3e391321a1",
[] []
], ],
"making-a-testing-plan.md": [ "making-a-testing-plan.md": [
@ -330971,6 +331093,10 @@
"55f06ef96bbdf287f84f90abd4eafc90afaa4304", "55f06ef96bbdf287f84f90abd4eafc90afaa4304",
[] []
], ],
"input-image-inline-alt-ref.html": [
"b3fdc14ef1707fcaad2b584b98e5c8f6d0be1e17",
[]
],
"input-type-change-from-image-1-ref.html": [ "input-type-change-from-image-1-ref.html": [
"7768379e9153b02bb90859cfa0583296df78e9dd", "7768379e9153b02bb90859cfa0583296df78e9dd",
[] []
@ -331132,7 +331258,7 @@
"document-metadata": { "document-metadata": {
"interactions-of-styling-and-scripting": { "interactions-of-styling-and-scripting": {
"stylesheet.py": [ "stylesheet.py": [
"9befce9e60cbaea39cd279eeeeec87dabb2dade5", "d5ae5b9ccad74cfe9233c9d296f991e637749268",
[] []
] ]
}, },
@ -331193,7 +331319,7 @@
[] []
], ],
"css.py": [ "css.py": [
"eb981373a3e2b1694a295d58b4d5baf4c3c5a034", "1a11c1d5b35a80b4efb29c93ffb3060d896af0b8",
[] []
], ],
"empty-href.css": [ "empty-href.css": [
@ -331250,7 +331376,7 @@
[] []
], ],
"stylesheet.py": [ "stylesheet.py": [
"a312e9e87cac22c19c6a24e083060ac616cf4681", "1a4dec2724438e1df66aa8fb286e74979847df02",
[] []
] ]
}, },
@ -331275,7 +331401,7 @@
[] []
], ],
"refresh.py": [ "refresh.py": [
"f68e274c901700a00c743c54385e8212633d1f5f", "797c7b9412d3425a38a0b1714a98953fd7e420a1",
[] []
], ],
"refresh.sub.html": [ "refresh.sub.html": [
@ -331364,7 +331490,7 @@
"loading-the-media-resource": { "loading-the-media-resource": {
"resources": { "resources": {
"delayed-broken-video.py": [ "delayed-broken-video.py": [
"88e5027947cf3cde1a9b3d2b5bfc1dfa177d0b10", "4eae3261f765cc36ae60f99e25a6c52dbed62d86",
[] []
] ]
} }
@ -332002,7 +332128,7 @@
[] []
], ],
"stash.py": [ "stash.py": [
"0b8693a901152cc7a7f21de1fbdd191dce6078c3", "231eeb492fcfdd7f4c4ba8ed8a91924bf780b1b6",
[] []
], ],
"support": { "support": {
@ -332015,7 +332141,7 @@
[] []
], ],
"download_stash.py": [ "download_stash.py": [
"24e1dfd58f760e1fa99846e0fac063a32a258e58", "95256a2457aeb40dea30f5d43e713bca09f45c1f",
[] []
], ],
"iframe-that-checks-contentDocument.html": [ "iframe-that-checks-contentDocument.html": [
@ -332291,7 +332417,7 @@
[] []
], ],
"referrer-checker-img.py": [ "referrer-checker-img.py": [
"0597268d8391b339c80d3274a52265db168e676a", "bb2071cb9769e7d2358344fe1782295b8a63e023",
[] []
] ]
}, },
@ -336383,12 +336509,6 @@
[] []
] ]
}, },
"manifest": {
"META.yml": [
"013fc58a29fa7f83e5e6a034d3a343bc87ab629d",
[]
]
},
"mathml": { "mathml": {
"META.yml": [ "META.yml": [
"5aea9088d744bfa835ca91217c9a6d9f60253e3e", "5aea9088d744bfa835ca91217c9a6d9f60253e3e",
@ -336545,6 +336665,10 @@
"legacy-mrow-like-elements-002-ref.html": [ "legacy-mrow-like-elements-002-ref.html": [
"0c26780c10f06cde8f7815a84f5fe22217907dfd", "0c26780c10f06cde8f7815a84f5fe22217907dfd",
[] []
],
"mrow-painting-order-ref.html": [
"72694959a86f1917cbd3db13b7f1a8b71714b711",
[]
] ]
}, },
"operators": { "operators": {
@ -352901,11 +353025,11 @@
[] []
], ],
"testloader.py": [ "testloader.py": [
"3a26efc554211a5248a790909d99893afe9ff674", "0340294dcaa9c07d9c58bf609fb4f572d1dd1055",
[] []
], ],
"testrunner.py": [ "testrunner.py": [
"49a3525e883d15a059022a54911eecf531d836ff", "4c9468a0eba4b3c38821446aba65dec58137b229",
[] []
], ],
"tests": { "tests": {
@ -353007,7 +353131,7 @@
[] []
], ],
"wptcommandline.py": [ "wptcommandline.py": [
"96227bb46905e168d691e350946dbfba68098271", "8087947670456b5e72c467222df9000e54f75b56",
[] []
], ],
"wptlogging.py": [ "wptlogging.py": [
@ -353077,7 +353201,7 @@
} }
}, },
"wptrunner.py": [ "wptrunner.py": [
"d0cc19481dbdedc45edfee9608d82deb4a196571", "86cc36d3af53ad4c7b04ef25d23eb38caa3601ab",
[] []
], ],
"wpttest.py": [ "wpttest.py": [
@ -354589,6 +354713,10 @@
"d05056bd8491d8b5f290b28910fcb657c6ac4e83", "d05056bd8491d8b5f290b28910fcb657c6ac4e83",
[] []
], ],
"array-check-processor.js": [
"d6eeff3d15515e7ad534be90c25c1a13b3be927f",
[]
],
"channel-count-processor.js": [ "channel-count-processor.js": [
"556459f46b3074f03578c53ba7b967387bab071b", "556459f46b3074f03578c53ba7b967387bab071b",
[] []
@ -371738,6 +371866,17 @@
] ]
] ]
}, },
"appmanifest": {
"link-relationship": {
"link-rel-manifest.html": [
"8eb39703a082daedc921b156287b014eaf836665",
[
null,
{}
]
]
}
},
"audio-output": { "audio-output": {
"idlharness.https.window.js": [ "idlharness.https.window.js": [
"c13b167296d8059b96bfa4704714051e341ee987", "c13b167296d8059b96bfa4704714051e341ee987",
@ -394845,7 +394984,7 @@
] ]
], ],
"line-spacing.html": [ "line-spacing.html": [
"b3874ab42022984006696588bc7f81eb27e41bb4", "9d3c6f23e7df297804470f048955e546feab67e7",
[ [
null, null,
{} {}
@ -400274,7 +400413,7 @@
] ]
], ],
"text-decoration-computed.html": [ "text-decoration-computed.html": [
"af577b17416596d630e982b47dfca42ad5669893", "5371c42249c77c52da09e01ae75c1414da52db83",
[ [
null, null,
{} {}
@ -400309,7 +400448,7 @@
] ]
], ],
"text-decoration-shorthand.html": [ "text-decoration-shorthand.html": [
"904313f0528de50541d88b3db89902bdbf721cfe", "40d881690076c171e0529536eb05ab76527b49d9",
[ [
null, null,
{} {}
@ -400358,7 +400497,7 @@
] ]
], ],
"text-decoration-valid.html": [ "text-decoration-valid.html": [
"fd12ab4dc31d5de8e1212f26fa18adb0d0e7166c", "ad82dd203cdfafc5ee5960837a23bf14cd661cf3",
[ [
null, null,
{} {}
@ -454749,7 +454888,7 @@
] ]
], ],
"img-no-alt-replaced.html": [ "img-no-alt-replaced.html": [
"896c7363113ca8872208059bbac51f7616b05f3f", "5f3503ae3b2ebefdd5d4a13a24cbc58a6f59ead4",
[ [
null, null,
{} {}
@ -454762,6 +454901,13 @@
{} {}
] ]
], ],
"img-title-only-w-sizing.html": [
"c290d9d6b127509277130de017f5ee73740f7c6e",
[
null,
{}
]
],
"video-aspect-ratio.html": [ "video-aspect-ratio.html": [
"2b4937046d2f20e0dafddf07b1470adec5e7b050", "2b4937046d2f20e0dafddf07b1470adec5e7b050",
[ [
@ -471373,15 +471519,6 @@
] ]
] ]
}, },
"manifest": {
"link-rel-manifest.html": [
"8eb39703a082daedc921b156287b014eaf836665",
[
null,
{}
]
]
},
"mathml": { "mathml": {
"presentation-markup": { "presentation-markup": {
"direction": { "direction": {
@ -514832,6 +514969,13 @@
{} {}
] ]
], ],
"audioworkletprocessor-process-frozen-array.https.html": [
"33627204a6f538eba77bd8346952404814e4affa",
[
null,
{}
]
],
"audioworkletprocessor-promises.https.html": [ "audioworkletprocessor-promises.https.html": [
"8f83aac4baa1f40ff5a1cc3982855776d4a5b119", "8f83aac4baa1f40ff5a1cc3982855776d4a5b119",
[ [
@ -515237,7 +515381,7 @@
] ]
], ],
"no-dezippering.html": [ "no-dezippering.html": [
"7857cf16aa0574bf1974186d327fd7dd9fb99403", "3f8360417dd9818ffa77b4da286b5d32694b27d2",
[ [
null, null,
{} {}
@ -551321,6 +551465,13 @@
] ]
}, },
"css-transforms": { "css-transforms": {
"backface-visibility-001.ref.html": [
"c4660f1cd0c0275604e61617a62e6263c30259d2",
[
null,
{}
]
],
"css-transform-inherit-rotate.html": [ "css-transform-inherit-rotate.html": [
"20267434f68d10cd14a9fb9590ab4f772578dfa3", "20267434f68d10cd14a9fb9590ab4f772578dfa3",
[ [

View file

@ -1,4 +0,0 @@
[hit-test-floats-002.html]
[Hit test float]
expected: FAIL

View file

@ -0,0 +1,4 @@
[hit-test-floats-004.html]
[Miss float below something else]
expected: FAIL

View file

@ -11,3 +11,18 @@
[e.style['text-decoration'\] = "overline dotted green" should not set unrelated longhands] [e.style['text-decoration'\] = "overline dotted green" should not set unrelated longhands]
expected: FAIL expected: FAIL
[e.style['text-decoration'\] = "overline from-font dotted green" should set text-decoration-style]
expected: FAIL
[e.style['text-decoration'\] = "overline from-font dotted green" should set text-decoration-line]
expected: FAIL
[e.style['text-decoration'\] = "overline from-font dotted green" should set text-decoration-color]
expected: FAIL
[e.style['text-decoration'\] = "overline from-font dotted green" should not set unrelated longhands]
expected: FAIL
[e.style['text-decoration'\] = "overline from-font dotted green" should set text-decoration-thickness]
expected: FAIL

View file

@ -312,27 +312,21 @@
[fetch(): separate response Content-Type: text/plain ] [fetch(): separate response Content-Type: text/plain ]
expected: NOTRUN expected: NOTRUN
[<iframe>: separate response Content-Type: text/html;" text/plain]
expected: FAIL
[<iframe>: combined response Content-Type: */* text/html]
expected: FAIL
[<iframe>: separate response Content-Type: text/html */*]
expected: FAIL
[<iframe>: separate response Content-Type: text/plain */*] [<iframe>: separate response Content-Type: text/plain */*]
expected: FAIL expected: FAIL
[<iframe>: combined response Content-Type: text/html */*;charset=gbk]
expected: FAIL
[<iframe>: separate response Content-Type: text/html;x=" text/plain] [<iframe>: separate response Content-Type: text/html;x=" text/plain]
expected: FAIL expected: FAIL
[<iframe>: combined response Content-Type: text/html;" \\" text/plain]
expected: FAIL
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk] [<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
expected: FAIL expected: FAIL
[<iframe>: combined response Content-Type: text/html;" text/plain]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;x=" text/plain]
expected: FAIL

View file

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

View file

@ -11,6 +11,9 @@
[X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!] [X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!]
expected: FAIL expected: FAIL
[X-Content-Type-Options%3A%0D%0AX-Content-Type-Options%3A%20nosniff] [X-Content-Type-Options%3A%20%22nosniFF%22]
expected: FAIL
[Content-Type-Options%3A%20nosniff]
expected: FAIL expected: FAIL

View file

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

View file

@ -1,4 +1,4 @@
[traverse_the_history_4.html] [traverse_the_history_3.html]
[Multiple history traversals, last would be aborted] [Multiple history traversals, last would be aborted]
expected: FAIL expected: FAIL

View file

@ -0,0 +1,2 @@
[input-image-inline-alt.html]
expected: FAIL

View file

@ -1,6 +1,6 @@
[iframe_sandbox_popups_escaping-1.html] [iframe_sandbox_popups_escaping-1.html]
type: testharness 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] [Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
expected: TIMEOUT expected: TIMEOUT

View file

@ -1,6 +1,5 @@
[iframe_sandbox_popups_nonescaping-1.html] [iframe_sandbox_popups_nonescaping-1.html]
type: testharness type: testharness
expected: TIMEOUT
[Check that popups from a sandboxed iframe do not escape the sandbox] [Check that popups from a sandboxed iframe do not escape the sandbox]
expected: NOTRUN expected: FAIL

View file

@ -1,6 +1,6 @@
[iframe_sandbox_popups_nonescaping-2.html] [iframe_sandbox_popups_nonescaping-2.html]
type: testharness type: testharness
expected: CRASH expected: TIMEOUT
[Check that popups from a sandboxed iframe do not escape the sandbox] [Check that popups from a sandboxed iframe do not escape the sandbox]
expected: FAIL expected: NOTRUN

View file

@ -1,4 +0,0 @@
[form-double-submit.html]
[default submit action should supersede onclick submit()]
expected: FAIL

View file

@ -0,0 +1,4 @@
[077.html]
[ adding several types of scripts through the DOM and removing some of them confuses scheduler ]
expected: FAIL

View file

@ -0,0 +1,4 @@
[load-event-after-location-set-during-write.window.html]
[Setting location from document.write() call should not trigger load event until that load completes]
expected: FAIL

View file

@ -4,6 +4,3 @@
[The incumbent settings object while executing the compiled callback via Web IDL's invoke must be that of the node document] [The incumbent settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
expected: TIMEOUT expected: TIMEOUT
[The entry settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
expected: FAIL

View file

@ -0,0 +1,7 @@
[audioworkletprocessor-process-frozen-array.https.html]
[Executing "transfer-frozen-array"]
expected: FAIL
[Executing "check-frozen-array"]
expected: FAIL

View file

@ -0,0 +1,5 @@
[017.html]
expected: TIMEOUT
[origin of the script that invoked the method, about:blank]
expected: TIMEOUT

View file

@ -0,0 +1,5 @@
[018.html]
expected: TIMEOUT
[origin of the script that invoked the method, javascript:]
expected: TIMEOUT

View file

@ -0,0 +1,5 @@
[017.html]
expected: TIMEOUT
[origin of the script that invoked the method, about:blank]
expected: TIMEOUT

View file

@ -0,0 +1,2 @@
[Worker-constructor.html]
expected: ERROR

View file

@ -1,5 +1,6 @@
[003.html] [003.html]
type: testharness type: testharness
expected: ERROR
[shared] [shared]
expected: FAIL expected: FAIL

View file

@ -1,7 +1,8 @@
[shared-worker-in-data-url-context.window.html] [shared-worker-in-data-url-context.window.html]
expected: TIMEOUT
[Create a shared worker in a data url frame] [Create a shared worker in a data url frame]
expected: FAIL expected: TIMEOUT
[Create a data url shared worker in a data url frame] [Create a data url shared worker in a data url frame]
expected: FAIL expected: NOTRUN

View file

@ -1,19 +1,4 @@
[promise.html] [promise.html]
[Resolve callback gets argument]
expected: FAIL
[Native promise from async callback can be resolved] [Native promise from async callback can be resolved]
expected: FAIL expected: FAIL
[Native reject callback gets argument]
expected: FAIL
[Native code rejects with exception]
expected: FAIL
[Reject callback gets argument]
expected: FAIL
[Native resolve callback gets argument]
expected: FAIL

View file

@ -1,3 +1,6 @@
[promise.html] [promise.html]
type: testharness type: testharness
prefs: [dom.testbinding.enabled:true] prefs: [dom.testbinding.enabled:true]
[Native promise from async callback can be resolved]
expected: FAIL

View file

@ -1,7 +1,6 @@
spec: https://w3c.github.io/manifest/ spec: https://w3c.github.io/manifest/
suggested_reviewers: suggested_reviewers:
- anssiko
- kenchris - kenchris
- marcoscaceres - marcoscaceres
- mgiuca - mgiuca
- mounirlamouri - christianliebel

View file

@ -0,0 +1,13 @@
<!DOCTYPE html>
<title>Test that name member is supported</title>
<link rel="help" href="https://w3c.github.io/manifest" />
<link rel="manifesto" href="../name-member/name-member-fail.webmanifest" />
<link
rel="hello manifest another-relationship"
href="../name-member/name-member.webmanifest"
/>
<link rel="manifest" href="../name-member/name-member-fail.webmanifest" />
<link rel="hello manifest" href="../name-member/name-member-fail.webmanifest" />
<p>
If when installing the name is "pass" then the test has passed.
</p>

View file

@ -0,0 +1,3 @@
{
"name": "fail"
}

View file

@ -0,0 +1 @@
Content-Type: application/manifest+json; charset=utf-8

View file

@ -0,0 +1,8 @@
<!DOCTYPE html>
<title>Test that name member is supported</title>
<link rel="help" href="https://w3c.github.io/manifest" />
<link rel="manifest" href="name-member.webmanifest" />
<h1>Testing support for name member</h1>
<p>
To pass, the application name must be "pass".
</p>

View file

@ -0,0 +1,3 @@
{
"name": "pass"
}

View file

@ -0,0 +1 @@
Content-Type: application/manifest+json; charset=utf-8

View file

@ -0,0 +1,8 @@
<!DOCTYPE html>
<title>Test that short_name member is supported</title>
<link rel="help" href="https://w3c.github.io/manifest" />
<link rel="manifest" href="short_name-member.webmanifest" />
<h1>Testing support for short_name member</h1>
<p>
To pass, the application name must be "pass".
</p>

View file

@ -0,0 +1,3 @@
{
"short_name": "pass"
}

View file

@ -0,0 +1 @@
Content-Type: application/manifest+json; charset=utf-8

View file

@ -0,0 +1,8 @@
<!DOCTYPE html>
<title>Test that theme_color member is supported</title>
<link rel="help" href="https://w3c.github.io/manifest#theme_color-member" />
<link rel="manifest" href="theme_color-member-red.webmanifest" />
<h1>Testing support for theme_name member</h1>
<p>
To pass, the theme_color should be red.
</p>

View file

@ -0,0 +1,3 @@
{
"theme_color": "red"
}

View file

@ -0,0 +1 @@
Content-Type: application/manifest+json; charset=utf-8

View file

@ -5,9 +5,24 @@
body { body {
font: 16px/1 Ahem; font: 16px/1 Ahem;
} }
body > div { body > div {
border: 1px solid lime; border: 1px solid lime;
} }
.over_emp {
-webkit-text-emphasis: 'x';
-webkit-text-emphasis-position: over left;
text-emphasis: 'x';
text-emphasis-position: over left;
}
.under_emp {
-webkit-text-emphasis: 'x';
-webkit-text-emphasis-position: under left;
text-emphasis: 'x';
text-emphasis-position: under left;
}
</style> </style>
<body> <body>
<script src="/resources/testharness.js"></script> <script src="/resources/testharness.js"></script>
@ -61,6 +76,15 @@ test(() => {
assert_true(rt.bottom > ruby.bottom); assert_true(rt.bottom > ruby.bottom);
}, 'Under ruby + vertical-align doesn\'t overflow the block'); }, 'Under ruby + vertical-align doesn\'t overflow the block');
test(() => {
const {container, ruby, rt} = renderRuby(
'<div><ruby style="ruby-position:under">base<rt>annotation</rt></ruby>' +
'<div>n</div></div>');
const nextBlockBox = container.querySelector('div').getBoundingClientRect();
const rtBox = rt.getBoundingClientRect();
assert_greater_than_equal(nextBlockBox.top, rtBox.bottom);
}, 'Under ruby doesn\'t overwrap with the next block');
test(() => { test(() => {
const {container, ruby, rt} = renderRuby( const {container, ruby, rt} = renderRuby(
'<div><span>before</span><br><ruby>base<rt style="font-size:16px"' + '<div><span>before</span><br><ruby>base<rt style="font-size:16px"' +
@ -68,5 +92,62 @@ test(() => {
const firstLine = container.querySelector('span').getBoundingClientRect(); const firstLine = container.querySelector('span').getBoundingClientRect();
assert_true(ruby.getBoundingClientRect().top - firstLine.bottom > 1); assert_true(ruby.getBoundingClientRect().top - firstLine.bottom > 1);
}, 'Expand inter-lines spacing'); }, 'Expand inter-lines spacing');
test(() => {
const {container, ruby, rt} = renderRuby(
'<div style="line-height:1.5;">' +
'<span>First line</span><br>' +
'<span>Second line</span><br>' +
'<ruby>base<rt style="font-size:50%">' +
'annotation</rt></ruby></div>');
const firstLine = container.querySelector('span').getBoundingClientRect();
const secondLine = container.querySelectorAll('span')[1].getBoundingClientRect();
const rubyLine = ruby.getBoundingClientRect();
assert_approx_equals(secondLine.top - firstLine.top, rubyLine.top - secondLine.top, 1);
}, 'Consume half-leading of the previous line');
test(() => {
const {container, ruby, rt} = renderRuby(
'<div style="line-height:1.5;">' +
'<span>First line</span><br>' +
'<span class="under_emp">Second line</span><br>' +
'<ruby>base<rt style="font-size:50%">' +
'annotation</rt></ruby></div>');
const firstLine = container.querySelector('span').getBoundingClientRect();
const secondLine = container.querySelectorAll('span')[1].getBoundingClientRect();
const rubyLine = ruby.getBoundingClientRect();
const RUBY_EMPHASIS_SIZE = 8;
assert_greater_than_equal(rubyLine.top - secondLine.top,
secondLine.top - firstLine.top + RUBY_EMPHASIS_SIZE);
}, 'Don\'t Consume half-leading of the previous line with text-emphasis');
test(() => {
const {container, ruby, rt} = renderRuby(
'<div style="line-height:1.5;">' +
'<span>First line</span><br>' +
'<ruby style="ruby-position:under">base<rt style="font-size:50%">' +
'annotation</rt></ruby><br>' +
'<span>Third line</span></div>');
const firstLine = container.querySelector('span').getBoundingClientRect();
const rubyLine = ruby.getBoundingClientRect();
const thirdLine = container.querySelectorAll('span')[1].getBoundingClientRect();
assert_approx_equals(rubyLine.top - firstLine.top, thirdLine.top - rubyLine.top, 1);
}, 'Consume half-leading of the next line');
test(() => {
const {container, ruby, rt} = renderRuby(
'<div style="line-height:1.5;">' +
'<span>First line</span><br>' +
'<ruby style="ruby-position:under">base<rt style="font-size:50%">' +
'annotation</rt></ruby><br>' +
'<span class="over_emp">Third line</span>' +
'</div>');
const firstLine = container.querySelector('span').getBoundingClientRect();
const rubyLine = ruby.getBoundingClientRect();
const thirdLine = container.querySelectorAll('span')[1].getBoundingClientRect();
const RUBY_EMPHASIS_SIZE = 8;
assert_greater_than_equal(thirdLine.top - rubyLine.top,
rubyLine.top - firstLine.top + RUBY_EMPHASIS_SIZE);
}, 'Don\'t Consume half-leading of the next line with text-emphasis');
</script> </script>
</body> </body>

View file

@ -32,7 +32,7 @@ test_computed_value("text-decoration", "underline dashed rgb(0, 255, 0)");
// Add text-decoration-thickness in [css-text-decor-4]. // Add text-decoration-thickness in [css-text-decor-4].
test_computed_value("text-decoration", "auto", currentColor); test_computed_value("text-decoration", "auto", currentColor);
test_computed_value("text-decoration", "from-font", currentColor + " from-font"); test_computed_value("text-decoration", "from-font", "from-font " + currentColor);
test_computed_value("text-decoration", "10px", currentColor + " 10px"); test_computed_value("text-decoration", "10px", "10px " + currentColor);
test_computed_value("text-decoration", "underline red from-font", "underline rgb(255, 0, 0) from-font"); test_computed_value("text-decoration", "underline red from-font", "underline from-font rgb(255, 0, 0)");
</script> </script>

View file

@ -11,8 +11,9 @@
</head> </head>
<body> <body>
<script> <script>
test_shorthand_value('text-decoration', 'overline dotted green', { test_shorthand_value('text-decoration', 'overline from-font dotted green', {
'text-decoration-line': 'overline', 'text-decoration-line': 'overline',
'text-decoration-thickness': 'from-font',
'text-decoration-style': 'dotted', 'text-decoration-style': 'dotted',
'text-decoration-color': 'green' 'text-decoration-color': 'green'
}); });

View file

@ -2,7 +2,8 @@
<meta charset="utf-8"> <meta charset="utf-8">
<title>CSS Text Decoration Test: Parsing text-decoration with valid values</title> <title>CSS Text Decoration Test: Parsing text-decoration with valid values</title>
<link rel="help" href="https://drafts.csswg.org/css-text-decor-3/#propdef-text-decoration"> <link rel="help" href="https://drafts.csswg.org/css-text-decor-3/#propdef-text-decoration">
<meta name="assert" content="text-decoration supports the full grammar '<text-decoration-line> || <text-decoration-style> || <text-decoration-color>'."> <meta name="assert" content="text-decoration supports the full grammar '<text-decoration-line> ||
<'text-decoration-thickness'> || <text-decoration-style> || <text-decoration-color>'.">
<script src="/resources/testharness.js"></script> <script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script> <script src="/resources/testharnessreport.js"></script>
<script src="/css/support/parsing-testcommon.js"></script> <script src="/css/support/parsing-testcommon.js"></script>
@ -18,7 +19,7 @@ test_valid_value("text-decoration", "10px");
test_valid_value("text-decoration", "double overline underline", "underline overline double"); test_valid_value("text-decoration", "double overline underline", "underline overline double");
test_valid_value("text-decoration", "underline overline line-through red"); test_valid_value("text-decoration", "underline overline line-through red");
test_valid_value("text-decoration", "rgba(10, 20, 30, 0.4) dotted", "dotted rgba(10, 20, 30, 0.4)"); test_valid_value("text-decoration", "rgba(10, 20, 30, 0.4) dotted", "dotted rgba(10, 20, 30, 0.4)");
test_valid_value("text-decoration", "overline green from-font"); test_valid_value("text-decoration", "overline green from-font", "overline from-font green");
test_valid_value("text-decoration", "underline dashed green"); test_valid_value("text-decoration", "underline dashed green");
test_valid_value("text-decoration", "underline auto", "underline"); test_valid_value("text-decoration", "underline auto", "underline");
test_valid_value("text-decoration", "line-through 20px"); test_valid_value("text-decoration", "line-through 20px");

View file

@ -0,0 +1,17 @@
<!DOCTYPE HTML>
<link rel="author" title="Chris Harrelson" href="mailto:chrishtr@google.com">
<link rel="help" href="http://www.w3.org/TR/css-transforms-1/#transform-property">
<link rel="help" href="http://www.w3.org/TR/css-transforms-2/#propdef-backface-visibility">
<link rel="match" href="backface-visibility-001.ref.html">
<meta name="assert" content="backface-visibility should have no effect when no transforms are present">
<style>
.box {
border: 1px solid black;
width: 200px;
height: 200px;
backface-visibility: hidden;
}
</style>
<div class="box">
This text should be visible
</div>

View file

@ -0,0 +1,15 @@
<!DOCTYPE HTML>
<link rel="author" title="Chris Harrelson" href="mailto:chrishtr@google.com">
<link rel="help" href="http://www.w3.org/TR/css-transforms-1/#transform-property">
<link rel="help" href="http://www.w3.org/TR/css-transforms-2/#propdef-backface-visibility">
<meta name="assert" content="backface-visibility should have no effect when no transforms are present">
<style>
.box {
border: 1px solid black;
width: 200px;
height: 200px;
}
</style>
<div class="box">
This text should be visible
</div>

View file

@ -175,7 +175,7 @@ see the [lint-tool documentation][lint-tool].
But in the unusual case of error reports for things essential to a certain But in the unusual case of error reports for things essential to a certain
test or that for other exceptional reasons shouldn't prevent a merge of a test or that for other exceptional reasons shouldn't prevent a merge of a
test, update and commit the `lint.ignorelist` file in the web-platform-tests test, update and commit the `lint.ignore` file in the web-platform-tests
root directory to suppress the error reports. For details on doing that, root directory to suppress the error reports. For details on doing that,
see the [lint-tool documentation][lint-tool]. see the [lint-tool documentation][lint-tool].

View file

@ -11,14 +11,14 @@ web-platform-tests working directory like this:
The lint tool is also run automatically for every submitted pull request, The lint tool is also run automatically for every submitted pull request,
and reviewers will not merge branches with tests that have lint errors, so and reviewers will not merge branches with tests that have lint errors, so
you must either [fix all lint errors](#fixing-lint-errors), or you must you must either [fix all lint errors](#fixing-lint-errors), or you must
[add an exception](#updating-the-ignorelist) to suppress the errors. [add an exception](#updating-the-ignored-files) to suppress the errors.
## Fixing lint errors ## Fixing lint errors
You must fix any errors the lint tool reports, unless an error is for something You must fix any errors the lint tool reports, unless an error is for something
essential to a certain test or that for some other exceptional reason shouldn't essential to a certain test or that for some other exceptional reason shouldn't
prevent the test from being merged; in those cases you can [add an prevent the test from being merged; in those cases you can [add an
exception](#updating-the-ignorelist) to suppress the errors. In all other exception](#updating-the-ignored-files) to suppress the errors. In all other
cases, follow the instructions below to fix all errors reported. cases, follow the instructions below to fix all errors reported.
<!-- <!--
@ -30,12 +30,12 @@ cases, follow the instructions below to fix all errors reported.
.. wpt-lint-rules:: tools.lint.rules .. wpt-lint-rules:: tools.lint.rules
``` ```
## Updating the ignorelist ## Updating the ignored files
Normally you must [fix all lint errors](#fixing-lint-errors). But in the Normally you must [fix all lint errors](#fixing-lint-errors). But in the
unusual case of error reports for things essential to certain tests or that unusual case of error reports for things essential to certain tests or that
for other exceptional reasons shouldn't prevent a merge of a test, you can for other exceptional reasons shouldn't prevent a merge of a test, you can
update and commit the `lint.ignorelist` file in the web-platform-tests root update and commit the `lint.ignore` file in the web-platform-tests root
directory to suppress errors the lint tool would report for a test file. directory to suppress errors the lint tool would report for a test file.
To add a test file or directory to the list, use the following format: To add a test file or directory to the list, use the following format:
@ -45,7 +45,7 @@ ERROR TYPE:file/name/pattern
``` ```
For example, to ignore all `TRAILING WHITESPACE` errors in the file For example, to ignore all `TRAILING WHITESPACE` errors in the file
`example/file.html`, add the following line to the `lint.ignorelist` file: `example/file.html`, add the following line to the `lint.ignore` file:
``` ```
TRAILING WHITESPACE:example/file.html TRAILING WHITESPACE:example/file.html
@ -53,7 +53,7 @@ TRAILING WHITESPACE:example/file.html
To ignore errors for an entire directory rather than just one file, use the `*` To ignore errors for an entire directory rather than just one file, use the `*`
wildcard. For example, to ignore all `TRAILING WHITESPACE` errors in the wildcard. For example, to ignore all `TRAILING WHITESPACE` errors in the
`example` directory, add the following line to the `lint.ignorelist` file: `example` directory, add the following line to the `lint.ignore` file:
``` ```
TRAILING WHITESPACE:example/* TRAILING WHITESPACE:example/*
@ -71,7 +71,7 @@ ERROR TYPE:file/name/pattern:line_number
``` ```
For example, to ignore the `TRAILING WHITESPACE` error for just line 128 of the For example, to ignore the `TRAILING WHITESPACE` error for just line 128 of the
file `example/file.html`, add the following to the `lint.ignorelist` file: file `example/file.html`, add the following to the `lint.ignore` file:
``` ```
TRAILING WHITESPACE:example/file.html:128 TRAILING WHITESPACE:example/file.html:128

View file

@ -3,8 +3,11 @@
<script src="/resources/testharness.js"></script> <script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script> <script src="/resources/testharnessreport.js"></script>
<link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez"> <link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez">
<link rel="author" href="mailto:yuzhehan@chromium.org" title="Yu Han">
<link rel="author" href="https://mozilla.org" title="Mozilla"> <link rel="author" href="https://mozilla.org" title="Mozilla">
<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1196668"> <link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1196668">
<link rel="help" href="https://crbug.com/753868">
<link ref="help" href="https://html.spec.whatwg.org/multipage/rendering.html#images-3">
<style> <style>
img { img {
width: 100px; width: 100px;
@ -14,6 +17,8 @@
<img> <img>
<img src="broken"> <img src="broken">
<img alt=""> <img alt="">
<img alt>
<img src="broken" alt="">
<script> <script>
const t = async_test("Images without alt attribute or with an empty alt attribute render as replaced elements regardless of src"); const t = async_test("Images without alt attribute or with an empty alt attribute render as replaced elements regardless of src");
onload = t.step_func_done(function() { onload = t.step_func_done(function() {

View file

@ -0,0 +1,25 @@
<!doctype html>
<title>Images with only title should be treated as a replaced element</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<link rel="author" href="mailto:yuzhehan@chromium.org" title="Yu Han">
<link rel="help" href="https://crbug.com/958250">
<link ref="help" href="https://html.spec.whatwg.org/multipage/rendering.html#images-3">
<style>
.title-only {
width: 100px;
height: 150px;
}
</style>
<img class="title-only" title="title">
<img width="100" height="150px" title="title">
<script>
async_test(t => {
onload = t.step_func_done(function() {
for (const img of document.querySelectorAll("img")) {
assert_equals(img.offsetWidth, 100, `width: ${img.outerHTML}`);
assert_equals(img.offsetHeight, 150, `height: ${img.outerHTML}`);
}
});
});
</script>

View file

@ -0,0 +1,18 @@
<!DOCTYPE html>
<title>Input image type fallback content should respect display property.</title>
<meta name="author" title="Yu Han" href="mailto:yuzhehan@chromium.org">
<style>
div {
border:1px dashed blue;
line-height: 1em;
height: 100px;
width: 150px;
}
input {
font: 1em monospace;
line-height: 1em;
}
</style>
<div>
<input alt="This is a long ALT text which takes up few lines to display. And additional text to be inlined." type="image">
</div>

View file

@ -0,0 +1,23 @@
<!DOCTYPE html>
<title>Input image type fallback content should respect display property.</title>
<meta name="author" title="Yu Han" href="mailto:yuzhehan@chromium.org">
<link rel="match" href="input-image-inline-alt-ref.html">
<link ref="help" href="https://html.spec.whatwg.org/multipage/rendering.html#images-3:represents-5">
<style>
div {
border:1px dashed blue;
font: 1em monospace;
line-height: 1em;
height: 100px;
width: 150px;
}
input {
display: inline;
font: 1em monospace;
line-height: 1em;
}
</style>
<div>
<input alt="This is a long ALT text which takes up few lines to display." type="image">
And additional text to be inlined.
</div>

View file

@ -1,10 +1,10 @@
from time import sleep from time import sleep
def main(request, response): def main(request, response):
if "delay" in request.GET: if b"delay" in request.GET:
delay = int(request.GET["delay"]) delay = int(request.GET[b"delay"])
sleep(delay) sleep(delay)
if "stylesNotMatchingEnvironment" in request.GET: if b"stylesNotMatchingEnvironment" in request.GET:
return 'h1 {color: brown;}' return u'h1 {color: brown;}'
else: else:
return 'h1 {color: purple;}' return u'h1 {color: purple;}'

View file

@ -1,7 +1,7 @@
def main(request, response): def main(request, response):
response.add_required_headers = False response.add_required_headers = False
if "content_type" in request.GET: if b"content_type" in request.GET:
response.writer.write_header("Content-Type", request.GET.first("content_type")) response.writer.write_header(b"Content-Type", request.GET.first(b"content_type"))
if "nosniff" in request.GET: if b"nosniff" in request.GET:
response.writer.write_header("x-content-type-options", "nosniff") response.writer.write_header(b"x-content-type-options", b"nosniff")
response.writer.write_content("body { background:red }") response.writer.write_content(u"body { background:red }")

View file

@ -1,9 +1,9 @@
def main(request, response): def main(request, response):
try: try:
count = int(request.server.stash.take(request.GET["id"])) count = int(request.server.stash.take(request.GET[b"id"]))
except: except:
count = 0 count = 0
if "count" in request.GET: if b"count" in request.GET:
return str(count) return str(count)
request.server.stash.put(request.GET["id"], str(count + 1)) request.server.stash.put(request.GET[b"id"], str(count + 1))
return 'body { color: red }' return u'body { color: red }'

View file

@ -1,4 +1,4 @@
def main(request, response): def main(request, response):
response.headers.set("Content-Type", "text/html") response.headers.set(b"Content-Type", b"text/html")
response.headers.set("Refresh", request.GET.first("input")) response.headers.set(b"Refresh", request.GET.first(b"input"))
response.content = "<!doctype html>refresh.py\n" response.content = u"<!doctype html>refresh.py\n"

View file

@ -2,4 +2,4 @@ import time
def main(request, response): def main(request, response):
time.sleep(0.1) time.sleep(0.1)
return [("Content-Type", "text/plain")], "FAIL" return [(b"Content-Type", b"text/plain")], u"FAIL"

View file

@ -0,0 +1,6 @@
<iframe id=i></iframe>
<script>
var doc = i.contentDocument.cloneNode();
i.remove();
doc.appendChild(document.createElement("audio"));
</script>

View file

@ -4,7 +4,7 @@
def main(request, response): def main(request, response):
if request.method == 'POST': if request.method == u'POST':
request.server.stash.put(request.GET["id"], request.body) request.server.stash.put(request.GET[b"id"], request.body)
return '' return u''
return request.server.stash.take(request.GET["id"]) return request.server.stash.take(request.GET[b"id"])

View file

@ -1,28 +1,28 @@
import time import time
def main(request, response): def main(request, response):
token = request.GET["token"] token = request.GET[b"token"]
response.status = 200 response.status = 200
response.headers.append("Content-Type", "text/html") response.headers.append(b"Content-Type", b"text/html")
if "verify-token" in request.GET: if b"verify-token" in request.GET:
if request.server.stash.take(token): if request.server.stash.take(token):
return 'TOKEN_SET' return u'TOKEN_SET'
return 'TOKEN_NOT_SET' return u'TOKEN_NOT_SET'
if "finish-delay" not in request.GET: if b"finish-delay" not in request.GET:
# <a download> # <a download>
request.server.stash.put(token, True) request.server.stash.put(token, True)
return return
# navigation to download # navigation to download
response.headers.append("Content-Disposition", "attachment") response.headers.append(b"Content-Disposition", b"attachment")
response.write_status_headers() response.write_status_headers()
finish_delay = float(request.GET["finish-delay"]) / 1E3 finish_delay = float(request.GET[b"finish-delay"]) / 1E3
count = 10 count = 10
single_delay = finish_delay / count single_delay = finish_delay / count
for i in range(count): # pylint: disable=unused-variable for i in range(count): # pylint: disable=unused-variable
time.sleep(single_delay) time.sleep(single_delay)
response.writer.write_content("\n") response.writer.write_content(u"\n")
if not response.writer.flush(): if not response.writer.flush():
return return
request.server.stash.put(token, True) request.server.stash.put(token, True)

View file

@ -1,12 +1,14 @@
import os import os
from wptserve.utils import isomorphic_decode
# Returns a valid image response when request's |referrer| matches # Returns a valid image response when request's |referrer| matches
# |expected_referrer|. # |expected_referrer|.
def main(request, response): def main(request, response):
referrer = request.headers.get("referer", "") referrer = request.headers.get(b"referer", b"")
expected_referrer = request.GET.first("expected_referrer", "") expected_referrer = request.GET.first(b"expected_referrer", b"")
response_headers = [("Content-Type", "image/png")] response_headers = [(b"Content-Type", b"image/png")]
if referrer == expected_referrer: if referrer == expected_referrer:
image_path = os.path.join(os.path.dirname(__file__), "image.png") image_path = os.path.join(os.path.dirname(isomorphic_decode(__file__)), u"image.png")
return (200, response_headers, open(image_path, mode='rb').read()) return (200, response_headers, open(image_path, mode='rb').read())
return (404, response_headers, "Not found") return (404, response_headers, u"Not found")

View file

@ -1,5 +0,0 @@
spec: https://w3c.github.io/manifest/
suggested_reviewers:
- marcoscaceres
- mgiuca
- kenchris

View file

@ -0,0 +1,83 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>mrow painting order (reference)</title>
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
.container {
position: absolute;
left: 2em;
top: 10em;
}
math {
font: 50px/1 Ahem;
}
.hidden {
visibility: hidden;
}
</style>
</head>
<body>
<p>This test passes if there is no red and content is stacked such that</p>
<ul>
<li>foreground (dark colors) is above background (light colors)</li>
<li>yellow foreground is above green foreground which is itself above blue foreground</li>
<li>yellow background is above green background which is itself above blue background</li>
</ul>
<!-- Paint lightblue background -->
<div class="container">
<math>
<mrow>
<mrow style="background: lightblue"><mn class="hidden">XXÉ</mn></mrow>
</mrow>
</math>
</div>
<!-- Paint lightgreen background -->
<div class="container">
<math>
<mrow>
<mn class="hidden">XXÉX</mn>
<mrow style="background: lightgreen; margin-inline-start: -3em"><mn style="visibility: hidden">p&#xA0;XXÉ</mn></mrow>
</mrow>
</math>
</div>
<!-- Paint lightyellow background -->
<div class="container">
<math>
<mrow>
<mn class="hidden">XXÉX</mn>
<mn class="hidden" style="margin-inline-start: -3em">p&#xA0;XXÉX</mn>
<mrow style="background: lightyellow; margin-inline-start: -3em"><mn style="visibility: hidden">p&#xA0;X</mn></mrow>
</mrow>
</math>
</div>
<!-- Paint blue foreground -->
<div class="container">
<math>
<mrow>
<mn style="color: blue;">XXÉ</mn>
</mrow>
</math>
</div>
<!-- Paint green foreground -->
<div class="container">
<math>
<mrow>
<mn class="hidden">XXÉX</mn>
<mn style="color: green; margin-inline-start: -3em">p&#xA0;XXÉ</mn>
</mrow>
</math>
</div>
<!-- Paint yellow foreground -->
<div class="container">
<math>
<mrow>
<mn class="hidden">XXÉX</mn>
<mn class="hidden" style="margin-inline-start: -3em">p&#xA0;XXÉX</mn>
<mn style="color: yellow; margin-inline-start: -3em">p&#xA0;X</mn>
</mrow>
</math>
</div>
</body>
</html>

View file

@ -0,0 +1,42 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>mrow painting order</title>
<link rel="help" href="https://www.w3.org/TR/MathML3/chapter3.html#presm.mfenced">
<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#stacking-contexts">
<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#horizontally-group-sub-expressions-mrow">
<meta name="assert" content="Verify in which order the children paint">
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<link rel="match" href="mrow-painting-order-ref.html">
<style>
.container {
position: absolute;
left: 2em;
top: 10em;
}
math {
font: 50px/1 Ahem;
}
</style>
</head>
<body>
<p>This test passes if there is no red and content is stacked such that</p>
<ul>
<li>foreground (dark colors) is above background (light colors)</li>
<li>yellow foreground is above green foreground which is itself above blue foreground</li>
<li>yellow background is above green background which is itself above blue background</li>
</ul>
<div class="container">
<math>
<mrow>
<mn style="color: blue; background: lightblue">XXÉ</mn>
<mn style="color: red">X</mn>
<mn style="color: green; background: lightgreen; margin-inline-start: -3em">p&#xA0;XXÉ</mn>
<mn style="color: red">X</mn>
<mn style="color: yellow; background: lightyellow; margin-inline-start: -3em">p&#xA0;X</mn>
</mrow>
</math>
</div>
</body>
</html>

View file

@ -1,4 +1,5 @@
import hashlib import hashlib
import json
import os import os
from six.moves.urllib.parse import urlsplit from six.moves.urllib.parse import urlsplit
from abc import ABCMeta, abstractmethod from abc import ABCMeta, abstractmethod
@ -26,6 +27,45 @@ def do_delayed_imports():
from manifest.download import download_from_github from manifest.download import download_from_github
class TestGroupsFile(object):
"""
Mapping object representing {group name: [test ids]}
"""
def __init__(self, logger, path):
try:
with open(path) as f:
self._data = json.load(f)
except ValueError:
logger.critical("test groups file %s not valid json" % path)
raise
self.group_by_test = {}
for group, test_ids in iteritems(self._data):
for test_id in test_ids:
self.group_by_test[test_id] = group
def __contains__(self, key):
return key in self._data
def __getitem__(self, key):
return self._data[key]
def update_include_for_groups(test_groups, include):
if include is None:
# We're just running everything
return
new_include = []
for item in include:
if item in test_groups:
new_include.extend(test_groups[item])
else:
new_include.append(item)
return new_include
class TestChunker(object): class TestChunker(object):
def __init__(self, total_chunks, chunk_number, **kwargs): def __init__(self, total_chunks, chunk_number, **kwargs):
self.total_chunks = total_chunks self.total_chunks = total_chunks
@ -292,6 +332,23 @@ class TestLoader(object):
return groups return groups
def get_test_src(**kwargs):
test_source_kwargs = {"processes": kwargs["processes"],
"logger": kwargs["logger"]}
chunker_kwargs = {}
if kwargs["run_by_dir"] is not False:
# A value of None indicates infinite depth
test_source_cls = PathGroupedSource
test_source_kwargs["depth"] = kwargs["run_by_dir"]
chunker_kwargs["depth"] = kwargs["run_by_dir"]
elif kwargs["test_groups"]:
test_source_cls = GroupFileTestSource
test_source_kwargs["test_groups"] = kwargs["test_groups"]
else:
test_source_cls = SingleTestSource
return test_source_cls, test_source_kwargs, chunker_kwargs
class TestSource(object): class TestSource(object):
__metaclass__ = ABCMeta __metaclass__ = ABCMeta
@ -397,3 +454,39 @@ class PathGroupedSource(GroupedSource):
@classmethod @classmethod
def group_metadata(cls, state): def group_metadata(cls, state):
return {"scope": "/%s" % "/".join(state["prev_path"])} return {"scope": "/%s" % "/".join(state["prev_path"])}
class GroupFileTestSource(TestSource):
@classmethod
def make_queue(cls, tests, **kwargs):
tests_by_group = cls.tests_by_group(tests, **kwargs)
test_queue = Queue()
for group_name, tests in iteritems(tests_by_group):
group_metadata = {"scope": group_name}
group = deque()
for test in tests:
group.append(test)
test.update_metadata(group_metadata)
test_queue.put((group, group_metadata))
return test_queue
@classmethod
def tests_by_group(cls, tests, **kwargs):
logger = kwargs["logger"]
test_groups = kwargs["test_groups"]
tests_by_group = defaultdict(list)
for test in tests:
try:
group = test_groups.group_by_test[test.id]
except KeyError:
logger.error("%s is missing from test groups file" % test.id)
raise
tests_by_group[group].append(test)
return tests_by_group

View file

@ -700,8 +700,9 @@ class TestRunnerManager(threading.Thread):
test, test_group, group_metadata = self.get_next_test() test, test_group, group_metadata = self.get_next_test()
if test is None: if test is None:
return RunnerManagerState.stop() return RunnerManagerState.stop()
if test_group != self.state.test_group: if test_group is not self.state.test_group:
# We are starting a new group of tests, so force a restart # We are starting a new group of tests, so force a restart
self.logger.info("Restarting browser for new test group")
restart = True restart = True
else: else:
test_group = self.state.test_group test_group = self.state.test_group

View file

@ -135,6 +135,8 @@ scheme host and port.""")
help="URL prefix to exclude") help="URL prefix to exclude")
test_selection_group.add_argument("--include-manifest", type=abs_path, test_selection_group.add_argument("--include-manifest", type=abs_path,
help="Path to manifest listing tests to include") help="Path to manifest listing tests to include")
test_selection_group.add_argument("--test-groups", dest="test_groups_file", type=abs_path,
help="Path to json file containing a mapping {group_name: [test_ids]}")
test_selection_group.add_argument("--skip-timeout", action="store_true", test_selection_group.add_argument("--skip-timeout", action="store_true",
help="Skip tests that are expected to time out") help="Skip tests that are expected to time out")
test_selection_group.add_argument("--skip-implementation-status", test_selection_group.add_argument("--skip-implementation-status",
@ -504,6 +506,14 @@ def check_args(kwargs):
else: else:
kwargs["chunk_type"] = "none" kwargs["chunk_type"] = "none"
if kwargs["test_groups_file"] is not None:
if kwargs["run_by_dir"] is not False:
print("Can't pass --test-groups and --run-by-dir")
sys.exit(1)
if not os.path.exists(kwargs["test_groups_file"]):
print("--test-groups file %s not found" % kwargs["test_groups_file"])
sys.exit(1)
if kwargs["processes"] is None: if kwargs["processes"] is None:
kwargs["processes"] = 1 kwargs["processes"] = 1

View file

@ -45,7 +45,8 @@ def setup_logging(*args, **kwargs):
return logger return logger
def get_loader(test_paths, product, debug=None, run_info_extras=None, chunker_kwargs=None, **kwargs): def get_loader(test_paths, product, debug=None, run_info_extras=None, chunker_kwargs=None,
test_groups=None, **kwargs):
if run_info_extras is None: if run_info_extras is None:
run_info_extras = {} run_info_extras = {}
@ -62,8 +63,12 @@ def get_loader(test_paths, product, debug=None, run_info_extras=None, chunker_kw
manifest_filters = [] manifest_filters = []
if kwargs["include"] or kwargs["exclude"] or kwargs["include_manifest"] or kwargs["default_exclude"]: include = kwargs["include"]
manifest_filters.append(testloader.TestFilter(include=kwargs["include"], if test_groups:
include = testloader.update_include_for_groups(test_groups, include)
if include or kwargs["exclude"] or kwargs["include_manifest"] or kwargs["default_exclude"]:
manifest_filters.append(testloader.TestFilter(include=include,
exclude=kwargs["exclude"], exclude=kwargs["exclude"],
manifest_path=kwargs["include_manifest"], manifest_path=kwargs["include_manifest"],
test_manifests=test_manifests, test_manifests=test_manifests,
@ -166,23 +171,21 @@ def run_tests(config, test_paths, product, **kwargs):
recording.set(["startup", "load_tests"]) recording.set(["startup", "load_tests"])
test_source_kwargs = {"processes": kwargs["processes"]} test_groups = (testloader.TestGroupsFile(logger, kwargs["test_groups_file"])
chunker_kwargs = {} if kwargs["test_groups_file"] else None)
if kwargs["run_by_dir"] is False:
test_source_cls = testloader.SingleTestSource
else:
# A value of None indicates infinite depth
test_source_cls = testloader.PathGroupedSource
test_source_kwargs["depth"] = kwargs["run_by_dir"]
chunker_kwargs["depth"] = kwargs["run_by_dir"]
(test_source_cls,
test_source_kwargs,
chunker_kwargs) = testloader.get_test_src(logger=logger,
test_groups=test_groups,
**kwargs)
run_info, test_loader = get_loader(test_paths, run_info, test_loader = get_loader(test_paths,
product.name, product.name,
run_info_extras=product.run_info_extras(**kwargs), run_info_extras=product.run_info_extras(**kwargs),
chunker_kwargs=chunker_kwargs, chunker_kwargs=chunker_kwargs,
test_groups=test_groups,
**kwargs) **kwargs)
logger.info("Using %i client processes" % kwargs["processes"]) logger.info("Using %i client processes" % kwargs["processes"])
skipped_tests = 0 skipped_tests = 0
@ -203,7 +206,9 @@ def run_tests(config, test_paths, product, **kwargs):
"host_cert_path": kwargs["host_cert_path"], "host_cert_path": kwargs["host_cert_path"],
"ca_cert_path": kwargs["ca_cert_path"]}} "ca_cert_path": kwargs["ca_cert_path"]}}
testharness_timeout_multipler = product.get_timeout_multiplier("testharness", run_info, **kwargs) testharness_timeout_multipler = product.get_timeout_multiplier("testharness",
run_info,
**kwargs)
recording.set(["startup", "start_environment"]) recording.set(["startup", "start_environment"])
with env.TestEnvironment(test_paths, with env.TestEnvironment(test_paths,
@ -241,7 +246,13 @@ def run_tests(config, test_paths, product, **kwargs):
for test_type in test_loader.test_types: for test_type in test_loader.test_types:
tests.extend(test_loader.tests[test_type]) tests.extend(test_loader.tests[test_type])
logger.suite_start(test_source_cls.tests_by_group(tests, **test_source_kwargs), try:
test_groups = test_source_cls.tests_by_group(tests, **test_source_kwargs)
except Exception:
logger.critical("Loading tests failed")
return False
logger.suite_start(test_groups,
name='web-platform-test', name='web-platform-test',
run_info=run_info, run_info=run_info,
extra={"run_by_dir": kwargs["run_by_dir"]}) extra={"run_by_dir": kwargs["run_by_dir"]})

View file

@ -0,0 +1,53 @@
<!doctype html>
<html>
<head>
<title>
Test given arrays within AudioWorkletProcessor.process() method
</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/webaudio/resources/audit.js"></script>
</head>
<body>
<script>
const audit = Audit.createTaskRunner();
const filePath = 'processors/array-check-processor.js';
const context = new AudioContext();
// Test if the incoming arrays are frozen as expected.
audit.define('check-frozen-array', (task, should) => {
context.audioWorklet.addModule(filePath).then(() => {
const workletNode =
new AudioWorkletNode(context, 'array-frozen-processor');
workletNode.port.onmessage = (message) => {
const actual = message.data;
should(actual.isInputFrozen, '|inputs| is frozen').beTrue();
should(actual.isOutputFrozen, '|outputs| is frozen').beTrue();
task.done();
};
});
});
// The incoming arrays should not be transferred, but the associated
// ArrayBuffers can be transferred. See the `array-transfer-processor`
// definition for the details.
audit.define('transfer-frozen-array', (task, should) => {
const sourceNode = new ConstantSourceNode(context);
const workletNode =
new AudioWorkletNode(context, 'array-transfer-processor');
workletNode.port.onmessage = (message) => {
const actual = message.data;
if (actual.type === 'assertion')
should(actual.success, actual.message).beTrue();
if (actual.done)
task.done();
};
sourceNode.connect(workletNode);
sourceNode.start();
});
audit.run();
</script>
</body>
</html>

View file

@ -0,0 +1,94 @@
/**
* @class ArrayFrozenProcessor
* @extends AudioWorkletProcessor
*/
class ArrayFrozenProcessor extends AudioWorkletProcessor {
constructor() {
super();
this._messageSent = false;
}
process(inputs, outputs, parameters) {
const input = inputs[0];
const output = outputs[0];
if (!this._messageSent) {
this.port.postMessage({
inputLength: input.length,
isInputFrozen: Object.isFrozen(inputs) && Object.isFrozen(input),
outputLength: output.length,
isOutputFrozen: Object.isFrozen(outputs) && Object.isFrozen(output)
});
this._messageSent = true;
}
return false;
}
}
/**
* @class ArrayTransferProcessor
* @extends AudioWorkletProcessor
*/
class ArrayTransferProcessor extends AudioWorkletProcessor {
constructor() {
super();
this._messageSent = false;
}
process(inputs, outputs, parameters) {
const input = inputs[0];
const output = outputs[0];
if (!this._messageSent) {
try {
// Transferring Array objects should NOT work.
this.port.postMessage({
inputs, input, inputChannel: input[0],
outputs, output, outputChannel: output[0]
}, [inputs, input, inputs[0], outputs, output, output[0]]);
// Hence, the following must NOT be reached.
this.port.postMessage({
type: 'assertion',
success: false,
message: 'Transferring inputs/outputs, an individual input/output ' +
'array, or a channel Float32Array MUST fail, but succeeded.'
});
} catch (error) {
this.port.postMessage({
type: 'assertion',
success: true,
message: 'Transferring inputs/outputs, an individual input/output ' +
'array, or a channel Float32Array is not allowed as expected.'
});
}
try {
// Transferring ArrayBuffers should work.
this.port.postMessage(
{inputChannel: input[0], outputChannel: output[0]},
[input[0].buffer, output[0].buffer]);
this.port.postMessage({
type: 'assertion',
success: true,
message: 'Transferring ArrayBuffers was successful as expected.'
});
} catch (error) {
// This must NOT be reached.
this.port.postMessage({
type: 'assertion',
success: false,
message: 'Transferring ArrayBuffers unexpectedly failed.'
});
}
this.port.postMessage({done: true});
this._messageSent = true;
}
return false;
}
}
registerProcessor('array-frozen-processor', ArrayFrozenProcessor);
registerProcessor('array-transfer-processor', ArrayTransferProcessor);

View file

@ -93,7 +93,8 @@
audit.define( audit.define(
{label: 'test1', description: 'Test value setter and setValueAtTime'}, {label: 'test1', description: 'Test value setter and setValueAtTime'},
(task, should) => { (task, should) => {
testWithAutomation(should, {prefix: ''}).then(() => task.done()); testWithAutomation(should, {prefix: '', threshold: 5.9605e-8})
.then(() => task.done());
}); });
audit.define( audit.define(
@ -168,7 +169,8 @@
let expected = renderedBuffer.getChannelData(1); let expected = renderedBuffer.getChannelData(1);
let match = should(actual, prefix + '.value setter output') let match = should(actual, prefix + '.value setter output')
.beEqualToArray(expected); .beCloseToArray(
expected, {absoluteThreshold: options.threshold});
should( should(
match, match,
prefix + '.value setter output matches setValueAtTime output') prefix + '.value setter output matches setValueAtTime output')
@ -177,7 +179,6 @@
} }
audit.run(); audit.run();
</script> </script>
</body> </body>
</html> </html>