mirror of
https://github.com/servo/servo.git
synced 2025-08-05 21:50:18 +01:00
Update web-platform-tests to revision 84e71a84b79199bc307866bbe0edcbcc7c4752ce
This commit is contained in:
parent
6d9b2eef29
commit
ea69dac266
93 changed files with 1056 additions and 202 deletions
|
@ -1,4 +0,0 @@
|
||||||
[hit-test-floats-002.html]
|
|
||||||
[Hit test float]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[hit-test-floats-004.html]
|
||||||
|
[Miss float below something else]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[traverse_the_history_1.html]
|
||||||
|
[Multiple history traversals from the same task]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
[input-image-inline-alt.html]
|
||||||
|
expected: FAIL
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[077.html]
|
||||||
|
[ adding several types of scripts through the DOM and removing some of them confuses scheduler ]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
[audioworkletprocessor-process-frozen-array.https.html]
|
||||||
|
[Executing "transfer-frozen-array"]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Executing "check-frozen-array"]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
[017.html]
|
||||||
|
expected: TIMEOUT
|
||||||
|
[origin of the script that invoked the method, about:blank]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
[018.html]
|
||||||
|
expected: TIMEOUT
|
||||||
|
[origin of the script that invoked the method, javascript:]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
[017.html]
|
||||||
|
expected: TIMEOUT
|
||||||
|
[origin of the script that invoked the method, about:blank]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
[Worker-constructor.html]
|
||||||
|
expected: ERROR
|
|
@ -1,4 +1,5 @@
|
||||||
[003.html]
|
[003.html]
|
||||||
|
expected: ERROR
|
||||||
[shared]
|
[shared]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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",
|
||||||
[
|
[
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[hit-test-floats-002.html]
|
|
||||||
[Hit test float]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[hit-test-floats-004.html]
|
||||||
|
[Miss float below something else]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[traverse_the_history_1.html]
|
||||||
|
[Multiple history traversals from the same task]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
[input-image-inline-alt.html]
|
||||||
|
expected: FAIL
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[form-double-submit.html]
|
|
||||||
[default submit action should supersede onclick submit()]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[077.html]
|
||||||
|
[ adding several types of scripts through the DOM and removing some of them confuses scheduler ]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
[audioworkletprocessor-process-frozen-array.https.html]
|
||||||
|
[Executing "transfer-frozen-array"]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Executing "check-frozen-array"]
|
||||||
|
expected: FAIL
|
||||||
|
|
5
tests/wpt/metadata/webmessaging/with-ports/017.html.ini
Normal file
5
tests/wpt/metadata/webmessaging/with-ports/017.html.ini
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
[017.html]
|
||||||
|
expected: TIMEOUT
|
||||||
|
[origin of the script that invoked the method, about:blank]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
5
tests/wpt/metadata/webmessaging/with-ports/018.html.ini
Normal file
5
tests/wpt/metadata/webmessaging/with-ports/018.html.ini
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
[018.html]
|
||||||
|
expected: TIMEOUT
|
||||||
|
[origin of the script that invoked the method, javascript:]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
[017.html]
|
||||||
|
expected: TIMEOUT
|
||||||
|
[origin of the script that invoked the method, about:blank]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
[Worker-constructor.html]
|
||||||
|
expected: ERROR
|
|
@ -1,5 +1,6 @@
|
||||||
[003.html]
|
[003.html]
|
||||||
type: testharness
|
type: testharness
|
||||||
|
expected: ERROR
|
||||||
[shared]
|
[shared]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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>
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"name": "fail"
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
Content-Type: application/manifest+json; charset=utf-8
|
|
@ -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>
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"name": "pass"
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
Content-Type: application/manifest+json; charset=utf-8
|
|
@ -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>
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"short_name": "pass"
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
Content-Type: application/manifest+json; charset=utf-8
|
|
@ -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>
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"theme_color": "red"
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
Content-Type: application/manifest+json; charset=utf-8
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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'
|
||||||
});
|
});
|
||||||
|
|
|
@ -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");
|
||||||
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -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].
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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() {
|
||||||
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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;}'
|
||||||
|
|
|
@ -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 }")
|
||||||
|
|
|
@ -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 }'
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
<iframe id=i></iframe>
|
||||||
|
<script>
|
||||||
|
var doc = i.contentDocument.cloneNode();
|
||||||
|
i.remove();
|
||||||
|
doc.appendChild(document.createElement("audio"));
|
||||||
|
</script>
|
|
@ -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"])
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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")
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
spec: https://w3c.github.io/manifest/
|
|
||||||
suggested_reviewers:
|
|
||||||
- marcoscaceres
|
|
||||||
- mgiuca
|
|
||||||
- kenchris
|
|
|
@ -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 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 XXÉX</mn>
|
||||||
|
<mrow style="background: lightyellow; margin-inline-start: -3em"><mn style="visibility: hidden">p 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 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 XXÉX</mn>
|
||||||
|
<mn style="color: yellow; margin-inline-start: -3em">p X</mn>
|
||||||
|
</mrow>
|
||||||
|
</math>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -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 XXÉ</mn>
|
||||||
|
<mn style="color: red">X</mn>
|
||||||
|
<mn style="color: yellow; background: lightyellow; margin-inline-start: -3em">p X</mn>
|
||||||
|
</mrow>
|
||||||
|
</math>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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"]})
|
||||||
|
|
|
@ -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>
|
|
@ -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);
|
|
@ -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>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue