Update web-platform-tests to revision 026cb8c5c7f63871853f21b053f49940be780146

This commit is contained in:
WPT Sync Bot 2021-01-26 08:21:44 +00:00
parent 1ba6f598cb
commit 353491d14a
100 changed files with 900 additions and 265 deletions

View file

@ -0,0 +1,2 @@
[trailing-other-space-separators-break-spaces-008.html]
expected: FAIL

View file

@ -2,3 +2,6 @@
[Hit test intersecting scaled box]
expected: FAIL
[Hit test within unscaled box]
expected: FAIL

View file

@ -8,6 +8,3 @@
[throws if handleEvent is thruthy and not callable]
expected: FAIL
[looks up handleEvent method on every event dispatch]
expected: FAIL

View file

@ -0,0 +1,4 @@
[elementFromPoint-001.html]
[CSSOM View - 5 - extensions to the Document interface]
expected: FAIL

View file

@ -0,0 +1,9 @@
[gb18030-decoder.any.worker.html]
[gb18030 decoder: two bytes 0xFE 0xFF]
expected: FAIL
[gb18030-decoder.any.html]
[gb18030 decoder: two bytes 0xFE 0xFF]
expected: FAIL

View file

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

View file

@ -53,9 +53,6 @@
[combined text/javascript ]
expected: FAIL
[separate text/javascript;charset=windows-1252 error text/javascript]
expected: FAIL
[separate text/javascript;charset=windows-1252 text/javascript]
[separate text/javascript x/x]
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,7 +1,8 @@
[embedded-opener-remove-frame.html]
expected: TIMEOUT
[opener of discarded nested browsing context]
expected: FAIL
[opener of discarded auxiliary browsing context]
expected: FAIL
expected: TIMEOUT

View file

@ -0,0 +1,4 @@
[2d.reset.basic.html]
[reset clears to transparent black]
expected: FAIL

View file

@ -1,4 +1,5 @@
[supported-elements.html]
expected: TIMEOUT
[Contenteditable element should support autofocus]
expected: FAIL
@ -9,7 +10,7 @@
expected: FAIL
[Area element should support autofocus]
expected: FAIL
expected: TIMEOUT
[Host element with delegatesFocus should support autofocus]
expected: FAIL

View file

@ -1,5 +1,5 @@
[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]
expected: TIMEOUT

View file

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

View file

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

View file

@ -0,0 +1,4 @@
[form-double-submit-2.html]
[preventDefault should allow onclick submit() to succeed]
expected: FAIL

View file

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

View file

@ -2,36 +2,18 @@
[input type url: setRangeText() a second time (must not fire select)]
expected: FAIL
[input type text: selectionStart a second time (must not fire select)]
expected: FAIL
[input type url: selectionStart out of range a second time (must not fire select)]
expected: FAIL
[input type search: setSelectionRange out of range a second time (must not fire select)]
expected: FAIL
[input type url: setSelectionRange out of range a second time (must not fire select)]
expected: FAIL
[textarea: selectionDirection a second time (must not fire select)]
expected: FAIL
[input type text: selectionEnd out of range a second time (must not fire select)]
expected: FAIL
[input type search: selectionEnd a second time (must not fire select)]
expected: FAIL
[input type search: selectionStart a second time (must not fire select)]
expected: FAIL
[input type url: selectionEnd out of range a second time (must not fire select)]
expected: FAIL
[textarea: selectionStart a second time (must not fire select)]
expected: FAIL
[input type tel: setSelectionRange() a second time (must not fire select)]
expected: FAIL
@ -41,15 +23,48 @@
[input type password: select() a second time (must not fire select)]
expected: FAIL
[input type tel: selectionEnd out of range a second time (must not fire select)]
expected: FAIL
[input type password: setSelectionRange() a second time (must not fire select)]
expected: FAIL
[input type password: selectionDirection a second time (must not fire select)]
expected: FAIL
[input type search: setRangeText() a second time (must not fire select)]
expected: FAIL
[textarea: selectionEnd a second time (must not fire select)]
expected: FAIL
[input type password: setSelectionRange out of range a second time (must not fire select)]
expected: FAIL
[input type text: selectionEnd a second time (must not fire select)]
expected: FAIL
[input type tel: setRangeText() a second time (must not fire select)]
expected: FAIL
[textarea: setSelectionRange() a second time (must not fire select)]
expected: FAIL
[input type text: setSelectionRange() a second time (must not fire select)]
expected: FAIL
[input type text: setSelectionRange out of range a second time (must not fire select)]
expected: FAIL
[input type tel: setSelectionRange out of range a second time (must not fire select)]
expected: FAIL
[input type password: selectionEnd a second time (must not fire select)]
expected: FAIL
[input type text: selectionDirection a second time (must not fire select)]
expected: FAIL
[textarea: selectionStart out of range a second time (must not fire select)]
expected: FAIL
[textarea: setSelectionRange out of range a second time (must not fire select)]
expected: FAIL
[textarea: selectionEnd out of range a second time (must not fire select)]
expected: FAIL

View file

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

View file

@ -1,5 +1,4 @@
[realtimeanalyser-fft-scaling.html]
expected: TIMEOUT
[X 2048-point FFT peak position is not equal to 64. Got 0.]
expected: FAIL

View file

@ -575,3 +575,9 @@
[X SNR (-586.1883985880588 dB) is not greater than or equal to 65.737. Got -586.1883985880588.]
expected: FAIL
[X SNR (-669.4373973002105 dB) is not greater than or equal to 65.737. Got -669.4373973002105.]
expected: FAIL
[X Stitched sine-wave buffers at sample rate 43800 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.0038986,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[28243\]\t-4.4012309895459656e+35\t-9.6925276517868042e-1\t4.4012309895459656e+35\t4.5408495571685106e+35\t3.8985999999999999e-3\n\t[28244\]\t-8.2011562585830688e-1\t-9.5193320512771606e-1\t1.3181757926940918e-1\t1.3847355944656209e-1\t3.8985999999999999e-3\n\tMax AbsError of 4.4012309895459656e+35 at index of 28243.\n\tMax RelError of 4.5408495571685106e+35 at index of 28243.\n]
expected: FAIL

View file

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

View file

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

View file

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

View file

@ -151144,6 +151144,19 @@
{}
]
],
"rem-in-monospace.html": [
"0358d811b403e6443ca5d861257a70a19093e5ce",
[
null,
[
[
"/css/css-fonts/rem-in-monospace-ref.html",
"=="
]
],
{}
]
],
"standard-font-family-10.html": [
"5dde6348d3985307999572b342433cfc8f800d9c",
[
@ -154709,7 +154722,7 @@
]
],
"grid-auto-margin-and-replaced-item-001.html": [
"f6c0afb6ae3cb654367001439c1569b13e2f33e2",
"ccf87024bc699d58c9cb4d5e1c610646dc86adc2",
[
null,
[
@ -307646,6 +307659,10 @@
"70e2d50cd83f61017f0f22da14065c7afa76e1d1",
[]
],
"rem-in-monospace-ref.html": [
"5acb0522019e342eff9a955ae6b15b8d4c235000",
[]
],
"resources": {
"markA.ttf": [
"353e7ac3328297b91844430dbd6d93ad9d25779f",
@ -342082,7 +342099,7 @@
[]
],
"name2dir.yaml": [
"43385459f398ed505fa78b1f08215e6a0f7edeea",
"485c070fb06d1f636a14867b06967fced9b86497",
[]
],
"spec.yaml": [
@ -342139,6 +342156,10 @@
"59d3053fc8ae80c36d22f52dd98c10a119b95ae8",
[]
],
"reset.yaml": [
"bd9479c8cf17b00c81b78d03133cc1c8b02e0b04",
[]
],
"scroll.yaml": [
"4c1ec563de7939da331b5ba61bbba67dc094303d",
[]
@ -353473,7 +353494,7 @@
]
},
"lint.ignore": [
"aa5c7394651dc25085578a6f71900c7d7c23e9cb",
"0c12d66c04586cf2a807da9b25100fd925e01fa4",
[]
],
"loading": {
@ -358983,7 +359004,7 @@
[]
],
"conftest.py": [
"de0d29794d9f7e1c6e206852a51149ada98974b3",
"e46f93bc00f13f0be4605e0db9820444e0814e02",
[]
],
"harness.html": [
@ -359156,6 +359177,14 @@
"4ea32a2bc8ee64b5841596f240291ec7fa514274",
[]
],
"setup-function-worker.js": [
"82c1456aa6447267361d8cc89e28840fc4913b46",
[]
],
"setup-worker-service.html": [
"b7a387f47f95d8351572bf74e8f0bc9f1655f4d0",
[]
],
"single-page-test-fail.html": [
"9169a5a54e211042d2d46bdcc1b8d68ec9699e03",
[]
@ -359430,7 +359459,7 @@
[]
],
"testharness.js": [
"e2e364102e43891001e2e97a3f4bd11871fc6bb3",
"fea1f2f52e9f50c53e4689854927698eb57a30fb",
[]
],
"testharness.js.headers": [
@ -371571,7 +371600,7 @@
[]
],
"run.py": [
"561b8e85aa73f156854fe2ba292164a285e928ec",
"3d380eab5cbdb00ffc612dedc595310f7d0e60a1",
[]
],
"testfiles.py": [
@ -371925,7 +371954,7 @@
[]
],
"firefox.py": [
"e4841bb57935acf11cb0da1e3020ccc25703d2e0",
"83a883b98b5e1a8e639ab25168ebed5dfbefc108",
[]
],
"firefox_android.py": [
@ -371980,7 +372009,7 @@
[]
],
"environment.py": [
"d98e1203930cab51ab7468037a0665b85126e1e5",
"b68fce0557a83aac2c9f4359252e80d06812ebee",
[]
],
"executors": {
@ -371993,7 +372022,7 @@
[]
],
"base.py": [
"539c791fbd9c9d1db4598246ff460742e514974a",
"1b75421941d2f570f9098713d6ca7b5f32cf295a",
[]
],
"executorchrome.py": [
@ -372013,7 +372042,7 @@
[]
],
"executormarionette.py": [
"e5d7683facd7880d13a7d30451230b23833c3cee",
"8301ba1073c3431f1fd919100c8fd115d57a247e",
[]
],
"executoropera.py": [
@ -372049,7 +372078,7 @@
[]
],
"protocol.py": [
"8bdc8b0cbc01cb0ab86396e50e7232368bd08c2b",
"e48add9334b68a07827be9f428b6ff81db86a7f4",
[]
],
"pytestrunner": {
@ -372176,15 +372205,15 @@
[]
],
"testharnessreport-servo.js": [
"a10b69df5504fab875147af26d925ebcce51ec00",
"4a27dc27ef6f26b4f359d5a013bce4a21af51738",
[]
],
"testharnessreport-servodriver.js": [
"c88841360470f8dd3aec22244929dda49fadaf32",
"7819538dbb8f4a807d5db2649c2540854996c865",
[]
],
"testharnessreport.js": [
"9cd680e14aed3b6f7b8ee23aa5d2a5624cbe1fd2",
"d385692445c5086d0ad4815926b7b2c2a93dd493",
[]
],
"testloader.py": [
@ -372214,7 +372243,7 @@
[]
],
"test_webkitgtk.py": [
"c073d03e70ecc5e2b783cec4a79ac475609467db",
"98c2988deea068dbd47add17faa846a7cd04e114",
[]
]
},
@ -372235,7 +372264,7 @@
[]
],
"test_products.py": [
"5d2bcf075d0f572e8972eba5fdb4a5bd36b5db75",
"75794d481313c4684d1094c7078af9edd2258cbd",
[]
],
"test_stability.py": [
@ -372294,7 +372323,7 @@
[]
],
"wptcommandline.py": [
"bfd6491b2d66693e225d91b84846b5c0a38e1aba",
"60c74ef408e1839a2bcd733ac9ef4fda6dc0e72b",
[]
],
"wptlogging.py": [
@ -372364,7 +372393,7 @@
}
},
"wptrunner.py": [
"3fc9e397a92a0927ac2c85ca27453754f78e0771",
"7182510a29d30f07a3cf1edc59d302804206fb12",
[]
],
"wpttest.py": [
@ -373763,7 +373792,7 @@
]
},
"generate-test-wbns.sh": [
"0caef325d1f03846792094e2535c84daf8bf4516",
"5a205c9d5ceb4b5d041d4db82134088bf9ba0880",
[]
],
"location": {
@ -373820,6 +373849,50 @@
]
}
},
"static-element": {
"out-of-scope": {
"script.js": [
"0f3e0d27c07f0f800158e72ad176420c510bac2d",
[]
]
},
"resources": {
"script.js": [
"f5327df7ae2c40ee508648792e1079e438cc4b57",
[]
],
"style-imported-from-file.css": [
"6b79f6dd8cbb2dedeb29f2e36fd04c6f7bc2f13c",
[]
],
"style-imported-from-tag.css": [
"38e9fe31338c1bd3d61f14e11f04d6ac1a9d959e",
[]
],
"style.css": [
"7f98b85eb6dd67a43208c2de3f104e3b8b415534",
[]
]
},
"scopes": {
"script.js": [
"140698cb5c8bf6edfc9a791876a6a904398608ed",
[]
],
"style-imported-from-file.css": [
"01628886441193183310bf09683f8f71036cf53a",
[]
],
"style-imported-from-tag.css": [
"7055c86ee952e7c0f1a90a475d6effb76f73bab4",
[]
],
"style.css": [
"f2af82dfd799e8885d834a1eccaa369ae772a702",
[]
]
}
},
"subresource": {
"root.js": [
"2c2a465472b9a879a6298a969e2baf717d651535",
@ -373905,6 +373978,54 @@
"e861469e122afd141bcec8d394a0d4504898208c",
[]
],
"static-element": {
"out-of-scope": {
"script.js": [
"e7617294833eb20738ceda4736c6720ad64e3fcb",
[]
]
},
"resources": {
"script.js": [
"08c4d9a2ee2de278ae821f55b1f80fb4eafe8084",
[]
],
"style-imported-from-file.css": [
"33f0f375da0d0ed686ef370ef364270f9c7eb785",
[]
],
"style-imported-from-tag.css": [
"85dbf84db3d42ed02986d211587f9e2e930a2105",
[]
],
"style.css": [
"41886f41d93172c39bb2c974ea13123615eedafb",
[]
]
},
"scopes": {
"script.js": [
"060d8c50a8cf49a0ea38e31517388e1f8c3f6f93",
[]
],
"style-imported-from-file.css": [
"d865cebd12f735a6bb47acb9d0235742f9cfb128",
[]
],
"style-imported-from-tag.css": [
"ad70df9b396378f821b12cbb00466615756d5f2d",
[]
],
"style.css": [
"233ecd7113949f03f250b9a360f97d25de584a35",
[]
]
}
},
"static-element.wbn": [
"112f4f363f48d4985a449b3e9b245b03bd9d7573",
[]
],
"subresource.wbn": [
"eabd994ff8bceaf4ef52b329b4faa158c292af12",
[]
@ -442454,11 +442575,29 @@
},
"legacy-mb-schinese": {
"gb18030": {
"gb18030-decoder.html": [
"b8fb0d04c44ee7e1f868ec5fe1faf59fd2c3b556",
"gb18030-decoder.any.js": [
"99a0253ba6b680e387e13d1bc97c1d94459bc97f",
[
null,
{}
"encoding/legacy-mb-schinese/gb18030/gb18030-decoder.any.html",
{
"script_metadata": [
[
"script",
"./resources/ranges.js"
]
]
}
],
[
"encoding/legacy-mb-schinese/gb18030/gb18030-decoder.any.worker.html",
{
"script_metadata": [
[
"script",
"./resources/ranges.js"
]
]
}
]
],
"gb18030-encoder.html": [
@ -442470,10 +442609,14 @@
]
},
"gbk": {
"gbk-decoder.html": [
"8c45683180070ef80e6797a4d61fffb32aeaef6e",
"gbk-decoder.any.js": [
"c0221480da156dde0068454edd635e92458da6cb",
[
null,
"encoding/legacy-mb-schinese/gbk/gbk-decoder.any.html",
{}
],
[
"encoding/legacy-mb-schinese/gbk/gbk-decoder.any.worker.html",
{}
]
],
@ -468144,6 +468287,15 @@
]
]
},
"reset": {
"2d.reset.basic.html": [
"092db9794c1001260733d9c2cef051d9ce5718ce",
[
null,
{}
]
]
},
"scroll": {
"2d.scrollPathIntoView.basic.html": [
"8263eb7b8080e4c2b2d6530739fc8056dcdbc338",
@ -484336,7 +484488,7 @@
]
],
"video-aspect-ratio.html": [
"2b4937046d2f20e0dafddf07b1470adec5e7b050",
"c81b70dbf4ea6484643f534fecfccaf023f828ec",
[
null,
{}
@ -549904,6 +550056,20 @@
null,
{}
]
],
"subresource-loading-static-element-with-base.tentative.html": [
"338782697d20f9663b4a11189ea8ff68a3617b21",
[
null,
{}
]
],
"subresource-loading-static-element.tentative.html": [
"d8d60a93081a96fbd2a6c63f2751be1d966f09bf",
[
null,
{}
]
]
},
"wbn-from-network": {

View file

@ -0,0 +1,2 @@
[trailing-other-space-separators-break-spaces-008.html]
expected: FAIL

View file

@ -2,3 +2,6 @@
[Hit test intersecting scaled box]
expected: FAIL
[Hit test within unscaled box]
expected: FAIL

View file

@ -8,6 +8,3 @@
[throws if handleEvent is thruthy and not callable]
expected: FAIL
[looks up handleEvent method on every event dispatch]
expected: FAIL

View file

@ -0,0 +1,4 @@
[elementFromPoint-001.html]
[CSSOM View - 5 - extensions to the Document interface]
expected: FAIL

View file

@ -0,0 +1,9 @@
[gb18030-decoder.any.worker.html]
[gb18030 decoder: two bytes 0xFE 0xFF]
expected: FAIL
[gb18030-decoder.any.html]
[gb18030 decoder: two bytes 0xFE 0xFF]
expected: FAIL

View file

@ -1,4 +0,0 @@
[gb18030-decoder.html]
[gb18030 decoder: two bytes 0xFE 0xFF]
expected: FAIL

View file

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

View file

@ -53,9 +53,6 @@
[combined text/javascript ]
expected: FAIL
[separate text/javascript;charset=windows-1252 error text/javascript]
expected: FAIL
[separate text/javascript;charset=windows-1252 text/javascript]
[separate text/javascript x/x]
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,5 @@
[embedded-opener-remove-frame.html]
expected: TIMEOUT
[opener and "removed" embedded documents]
expected: FAIL
@ -6,5 +7,5 @@
expected: FAIL
[opener of discarded auxiliary browsing context]
expected: FAIL
expected: TIMEOUT

View file

@ -0,0 +1,4 @@
[2d.reset.basic.html]
[reset clears to transparent black]
expected: FAIL

View file

@ -1,4 +1,5 @@
[supported-elements.html]
expected: TIMEOUT
[Contenteditable element should support autofocus]
expected: FAIL
@ -9,7 +10,7 @@
expected: FAIL
[Area element should support autofocus]
expected: FAIL
expected: TIMEOUT
[Host element with delegatesFocus should support autofocus]
expected: FAIL

View file

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

View file

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

View file

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

View file

@ -0,0 +1,4 @@
[form-double-submit-2.html]
[preventDefault should allow onclick submit() to succeed]
expected: FAIL

View file

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

View file

@ -2,36 +2,18 @@
[input type url: setRangeText() a second time (must not fire select)]
expected: FAIL
[input type text: selectionStart a second time (must not fire select)]
expected: FAIL
[input type url: selectionStart out of range a second time (must not fire select)]
expected: FAIL
[input type search: setSelectionRange out of range a second time (must not fire select)]
expected: FAIL
[input type url: setSelectionRange out of range a second time (must not fire select)]
expected: FAIL
[textarea: selectionDirection a second time (must not fire select)]
expected: FAIL
[input type text: selectionEnd out of range a second time (must not fire select)]
expected: FAIL
[input type search: selectionEnd a second time (must not fire select)]
expected: FAIL
[input type search: selectionStart a second time (must not fire select)]
expected: FAIL
[input type url: selectionEnd out of range a second time (must not fire select)]
expected: FAIL
[textarea: selectionStart a second time (must not fire select)]
expected: FAIL
[input type tel: setSelectionRange() a second time (must not fire select)]
expected: FAIL
@ -41,15 +23,48 @@
[input type password: select() a second time (must not fire select)]
expected: FAIL
[input type tel: selectionEnd out of range a second time (must not fire select)]
expected: FAIL
[input type password: setSelectionRange() a second time (must not fire select)]
expected: FAIL
[input type password: selectionDirection a second time (must not fire select)]
expected: FAIL
[input type search: setRangeText() a second time (must not fire select)]
expected: FAIL
[textarea: selectionEnd a second time (must not fire select)]
expected: FAIL
[input type password: setSelectionRange out of range a second time (must not fire select)]
expected: FAIL
[input type text: selectionEnd a second time (must not fire select)]
expected: FAIL
[input type tel: setRangeText() a second time (must not fire select)]
expected: FAIL
[textarea: setSelectionRange() a second time (must not fire select)]
expected: FAIL
[input type text: setSelectionRange() a second time (must not fire select)]
expected: FAIL
[input type text: setSelectionRange out of range a second time (must not fire select)]
expected: FAIL
[input type tel: setSelectionRange out of range a second time (must not fire select)]
expected: FAIL
[input type password: selectionEnd a second time (must not fire select)]
expected: FAIL
[input type text: selectionDirection a second time (must not fire select)]
expected: FAIL
[textarea: selectionStart out of range a second time (must not fire select)]
expected: FAIL
[textarea: setSelectionRange out of range a second time (must not fire select)]
expected: FAIL
[textarea: selectionEnd out of range a second time (must not fire select)]
expected: FAIL

View file

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

View file

@ -1,5 +1,4 @@
[realtimeanalyser-fft-scaling.html]
expected: TIMEOUT
[X 2048-point FFT peak position is not equal to 64. Got 0.]
expected: FAIL

View file

@ -803,3 +803,9 @@
[X SNR (-586.1883985880588 dB) is not greater than or equal to 65.737. Got -586.1883985880588.]
expected: FAIL
[X SNR (-669.4373973002105 dB) is not greater than or equal to 65.737. Got -669.4373973002105.]
expected: FAIL
[X Stitched sine-wave buffers at sample rate 43800 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.0038986,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[28243\]\t-4.4012309895459656e+35\t-9.6925276517868042e-1\t4.4012309895459656e+35\t4.5408495571685106e+35\t3.8985999999999999e-3\n\t[28244\]\t-8.2011562585830688e-1\t-9.5193320512771606e-1\t1.3181757926940918e-1\t1.3847355944656209e-1\t3.8985999999999999e-3\n\tMax AbsError of 4.4012309895459656e+35 at index of 28243.\n\tMax RelError of 4.5408495571685106e+35 at index of 28243.\n]
expected: FAIL

View file

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

View file

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

View file

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

View file

@ -1,5 +1,2 @@
[sequence-hole.html]
prefs: [dom.testbinding.enabled:true]
[Sequences with holes and a getter on the prototype are correctly handled]
expected: FAIL

View file

@ -1,6 +1,3 @@
[sequence-hole.html]
type: testharness
prefs: [dom.testbinding.enabled:true]
[Sequences with holes and a getter on the prototype are correctly handled]
expected: FAIL

View file

@ -0,0 +1,10 @@
<!DOCTYPE html>
<p>The following two lines should look exactly the same.</p>
<div style="font-family: sans-serif; font-size: 1rem">
Text.
</div>
<div style="font-family: sans-serif; font-size: 1rem">
Text.
</div>

View file

@ -0,0 +1,17 @@
<!DOCTYPE html>
<link rel=help href="https://drafts.csswg.org/css-fonts-4/#font-size-prop">
<link rel=help href="https://bugs.chromium.org/p/chromium/issues/detail?id=623842">
<link rel=author href="mailto:xiaochengh@chromium.org">
<link rel=match href="./rem-in-monospace-ref.html">
<p>The following two lines should look exactly the same.</p>
<div style="font-family: monospace; font-size: 1.5em">
<div style="font-family: sans-serif; font-size: 1rem">
Text.
</div>
</div>
<div style="font-family: sans-serif; font-size: 1rem">
Text.
</div>

View file

@ -41,7 +41,7 @@
<script>
function loadImage() {
var replaced = document.getElementById("replaced");
replaced.src = "./support/100x100-green.png";
// Use svg for a 100x100 green square so we don't have to wait for replaced.onload.
replaced.src = "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100' width='100' height='100'%3E%3Crect width='100%25' height='100%25' fill='green'/%3E%3C/svg%3E";
}
</script>

View file

@ -0,0 +1,63 @@
// META: script=./resources/ranges.js
const decode = (input, output, desc) => {
test(function () {
for (const encoding of ["gb18030", "gbk"]) {
assert_equals(
new TextDecoder(encoding).decode(new Uint8Array(input)),
output,
);
}
}, "gb18030 decoder: " + desc);
};
decode([115], "s", "ASCII");
decode([0x80], "\u20AC", "euro");
decode([0xFF], "\uFFFD", "initial byte out of accepted ranges");
decode([0x81], "\uFFFD", "end of queue, gb18030 first not 0");
decode([0x81, 0x28], "\ufffd(", "two bytes 0x81 0x28");
decode([0x81, 0x40], "\u4E02", "two bytes 0x81 0x40");
decode([0x81, 0x7E], "\u4E8A", "two bytes 0x81 0x7e");
decode([0x81, 0x7F], "\ufffd\u007f", "two bytes 0x81 0x7f");
decode([0x81, 0x80], "\u4E90", "two bytes 0x81 0x80");
decode([0x81, 0xFE], "\u4FA2", "two bytes 0x81 0xFE");
decode([0x81, 0xFF], "\ufffd", "two bytes 0x81 0xFF");
decode([0xFE, 0x40], "\uFA0C", "two bytes 0xFE 0x40");
decode([0xFE, 0xFE], "\uE4C5", "two bytes 0xFE 0xFE");
decode([0xFE, 0xFF], "\ufffd", "two bytes 0xFE 0xFF");
decode([0x81, 0x30], "\ufffd", "two bytes 0x81 0x30");
decode([0x81, 0x30, 0xFE], "\ufffd", "three bytes 0x81 0x30 0xFE");
decode([0x81, 0x30, 0xFF], "\ufffd0\ufffd", "three bytes 0x81 0x30 0xFF");
decode(
[0x81, 0x30, 0xFE, 0x29],
"\ufffd0\ufffd)",
"four bytes 0x81 0x30 0xFE 0x29",
);
decode([0xFE, 0x39, 0xFE, 0x39], "\ufffd", "four bytes 0xFE 0x39 0xFE 0x39");
decode([0x81, 0x35, 0xF4, 0x36], "\u1E3E", "pointer 7458");
decode([0x81, 0x35, 0xF4, 0x37], "\ue7c7", "pointer 7457");
decode([0x81, 0x35, 0xF4, 0x38], "\u1E40", "pointer 7459");
decode([0x84, 0x31, 0xA4, 0x39], "\uffff", "pointer 39419");
decode([0x84, 0x31, 0xA5, 0x30], "\ufffd", "pointer 39420");
decode([0x8F, 0x39, 0xFE, 0x39], "\ufffd", "pointer 189999");
decode([0x90, 0x30, 0x81, 0x30], "\u{10000}", "pointer 189000");
decode([0xE3, 0x32, 0x9A, 0x35], "\u{10FFFF}", "pointer 1237575");
decode([0xE3, 0x32, 0x9A, 0x36], "\ufffd", "pointer 1237576");
decode([0x83, 0x36, 0xC8, 0x30], "\uE7C8", "legacy ICU special case 1");
decode([0xA1, 0xAD], "\u2026", "legacy ICU special case 2");
decode([0xA1, 0xAB], "\uFF5E", "legacy ICU special case 3");
let i = 0;
for (const range of ranges) {
const pointer = range[0];
decode(
[
Math.floor(pointer / 12600) + 0x81,
Math.floor((pointer % 12600) / 1260) + 0x30,
Math.floor((pointer % 1260) / 10) + 0x81,
pointer % 10 + 0x30,
],
range[1],
"range " + i++,
);
}

View file

@ -1,55 +0,0 @@
<!doctype html>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src=resources/ranges.js></script>
<script>
const decode = (input, output, desc) => {
test(function() {
for (encoding of ["gb18030", "gbk"])
assert_equals(new TextDecoder(encoding).decode(new Uint8Array(input)), output)
}, "gb18030 decoder: " + desc)
}
decode([115], "s", "ASCII");
decode([0x80], "\u20AC", "euro");
decode([0xFF], "\uFFFD", "initial byte out of accepted ranges");
decode([0x81], "\uFFFD", "end of queue, gb18030 first not 0");
decode([0x81, 0x28], "\ufffd(", "two bytes 0x81 0x28");
decode([0x81, 0x40], "\u4E02", "two bytes 0x81 0x40");
decode([0x81, 0x7E], "\u4E8A", "two bytes 0x81 0x7e");
decode([0x81, 0x7F], "\ufffd\u007f", "two bytes 0x81 0x7f");
decode([0x81, 0x80], "\u4E90", "two bytes 0x81 0x80");
decode([0x81, 0xFE], "\u4FA2", "two bytes 0x81 0xFE");
decode([0x81, 0xFF], "\ufffd", "two bytes 0x81 0xFF");
decode([0xFE, 0x40], "\uFA0C", "two bytes 0xFE 0x40");
decode([0xFE, 0xFE], "\uE4C5", "two bytes 0xFE 0xFE");
decode([0xFE, 0xFF], "\ufffd", "two bytes 0xFE 0xFF");
decode([0x81, 0x30], "\ufffd", "two bytes 0x81 0x30");
decode([0x81, 0x30, 0xFE], "\ufffd", "three bytes 0x81 0x30 0xFE");
decode([0x81, 0x30, 0xFF], "\ufffd0\ufffd", "three bytes 0x81 0x30 0xFF");
decode([0x81, 0x30, 0xFE, 0x29], "\ufffd0\ufffd)", "four bytes 0x81 0x30 0xFE 0x29");
decode([0xFE, 0x39, 0xFE, 0x39], "\ufffd", "four bytes 0xFE 0x39 0xFE 0x39");
decode([0x81, 0x35, 0xF4, 0x36], "\u1E3E", "pointer 7458");
decode([0x81, 0x35, 0xF4, 0x37], "\ue7c7", "pointer 7457");
decode([0x81, 0x35, 0xF4, 0x38], "\u1E40", "pointer 7459");
decode([0x84, 0x31, 0xA4, 0x39], "\uffff", "pointer 39419");
decode([0x84, 0x31, 0xA5, 0x30], "\ufffd", "pointer 39420");
decode([0x8F, 0x39, 0xFE, 0x39], "\ufffd", "pointer 189999");
decode([0x90, 0x30, 0x81, 0x30], "\u{10000}", "pointer 189000");
decode([0xE3, 0x32, 0x9A, 0x35], "\u{10FFFF}", "pointer 1237575");
decode([0xE3, 0x32, 0x9A, 0x36], "\ufffd", "pointer 1237576");
decode([0x83, 0x36, 0xC8, 0x30], "\uE7C8", "legacy ICU special case 1");
decode([0xA1, 0xAD], "\u2026", "legacy ICU special case 2");
decode([0xA1, 0xAB], "\uFF5E", "legacy ICU special case 3");
let i = 0;
for (const range of ranges) {
const pointer = range[0];
decode([
Math.floor(pointer / 12600) + 0x81,
Math.floor((pointer % 12600) / 1260) + 0x30,
Math.floor((pointer % 1260) / 10) + 0x81,
pointer % 10 + 0x30
], range[1], "range " + i++);
}
</script>

View file

@ -1,7 +1,3 @@
<!doctype html>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script>
const gbkPointers = [
6432, 7533, 7536, 7672, 7673, 7674, 7675, 7676, 7677, 7678, 7679, 7680, 7681, 7682, 7683, 7684,
23766, 23770, 23771, 23772, 23773, 23774, 23776, 23777, 23778, 23779, 23780, 23781, 23782, 23784, 23785, 23786,
@ -30,4 +26,3 @@ for (let i = 0; i < gbkPointers.length; i++) {
assert_equals(decoded, codePoints[i]);
}, "gbk pointer: " + pointer)
}
</script>

View file

@ -0,0 +1,35 @@
<!DOCTYPE html>
<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
<title>Canvas test: 2d.reset.basic</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/html/canvas/resources/canvas-tests.js"></script>
<link rel="stylesheet" href="/html/canvas/resources/canvas-tests.css">
<body class="show_output">
<h1>2d.reset.basic</h1>
<p class="desc">reset clears to transparent black</p>
<p class="output">Actual output:</p>
<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas>
<ul id="d"></ul>
<script>
var t = async_test("reset clears to transparent black");
_addTest(function(canvas, ctx) {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height);
ctx.reset();
_assertPixel(canvas, 0,0, 0,0,0,0, "0,0", "0,0,0,0");
_assertPixel(canvas, 50,25, 0,0,0,0, "50,25", "0,0,0,0");
_assertPixel(canvas, 25,50, 0,0,0,0, "25,50", "0,0,0,0");
_assertPixel(canvas, 100,50, 0,0,0,0, "100,50", "0,0,0,0");
_assertPixel(canvas, 0,50, 0,0,0,0, "0,50", "0,0,0,0");
_assertPixel(canvas, 100,0, 0,0,0,0, "100,0", "0,0,0,0");
t.done();
});
</script>

View file

@ -19,6 +19,7 @@
2d.line: "line-styles"
2d.path: "path-objects"
2d.imageData: "pixel-manipulation"
2d.reset: "reset"
2d.shadow: "shadows"
2d.text.align: "text-styles"
2d.text.baseline: "text-styles"

View file

@ -0,0 +1,13 @@
- name: 2d.reset.basic
desc: reset clears to transparent black
code: |
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height);
ctx.reset();
@assert pixel 0,0 == 0,0,0,0;
@assert pixel 50,25 == 0,0,0,0;
@assert pixel 25,50 == 0,0,0,0;
@assert pixel 100,50 == 0,0,0,0;
@assert pixel 0,50 == 0,0,0,0;
@assert pixel 100,0 == 0,0,0,0;
t.done();

View file

@ -11,17 +11,25 @@
}
</style>
<body>
<video width="250" height="100" id="contained" style="contain: size;"></video>
<script>
let t = async_test("Video width and height attributes are not used to infer aspect-ratio");
function assert_ratio(img, expected) {
let epsilon = 0.001;
assert_approx_equals(parseInt(getComputedStyle(img).width, 10) / parseInt(getComputedStyle(img).height, 10), expected, epsilon);
}
t.step(function() {
var video = document.getElementById("contained");
video.src = getVideoURI('/media/2x2-green');
assert_ratio(video, 2.5);
}, "contain:size aspect ratio");
// Create and append a new video and immediately check the ratio.
// This is not racy because the spec requires the user agent to queue a task:
// https://html.spec.whatwg.org/multipage/media.html#concept-media-load-algorithm
t.step(function() {
var video = document.createElement("video");
video = document.createElement("video");
video.setAttribute("width", "250");
video.setAttribute("height", "100");
video.src = getVideoURI('/media/2x2-green');
@ -35,5 +43,5 @@ t.step(function() {
// When loaded this video is square.
assert_ratio(video, 1);
});
});
}, "aspect ratio for regular video");
</script>

View file

@ -107,6 +107,7 @@ CONSOLE: console/*
CONSOLE: js/builtins/weakrefs/resources/maybe-garbage-collect.js
CONSOLE: resources/check-layout-th.js
CONSOLE: resources/chromium/*
CONSOLE: resources/testharness.js
CONSOLE: streams/resources/test-utils.js
CONSOLE: service-workers/service-worker/resources/navigation-redirect-other-origin.html
CONSOLE: service-workers/service-worker/navigation-redirect.https.html

View file

@ -222,7 +222,7 @@ class HTMLItem(pytest.Item, pytest.Collector):
# one
for obj in [summarized, self.expected]:
obj["summarized_asserts"].sort(
key=lambda x: (x["test"], x["status"], x["assert_name"], tuple(x["args"])))
key=lambda x: (x["test"] or "", x["status"], x["assert_name"], tuple(x["args"])))
assert summarized == self.expected

View file

@ -0,0 +1,14 @@
importScripts("/resources/testharness.js");
// Regression test for https://github.com/web-platform-tests/wpt/issues/27299,
// where we broke the ability for a setup function in a worker to contain an
// assertion (even a passing one).
setup(function() {
assert_true(true, "True is true");
});
// We must define at least one test for the harness, though it is not what we
// are testing here.
test(function() {
assert_false(false, "False is false");
}, 'Worker test');

View file

@ -0,0 +1,106 @@
<!DOCTYPE HTML>
<html>
<head>
<meta name="variant" content="?keep-promise">
<title>Setup function in a service worker</title>
<script src="../../variants.js"></script>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<h1>Setup function in a service worker</h1>
<p>This test assumes that the browser supports <a href="http://www.w3.org/TR/service-workers/">ServiceWorkers</a>.
<div id="log"></div>
<script>
test(function(t) {
assert_true("serviceWorker" in navigator,
"navigator.serviceWorker exists");
}, "Browser supports ServiceWorker");
promise_test(function() {
// Since the service worker registration could be in an indeterminate
// state (due to, for example, a previous test run failing), we start by
// unregstering our service worker and then registering it again.
var scope = "service-worker-scope";
var worker_url = "setup-function-worker.js";
return navigator.serviceWorker.register(worker_url, {scope: scope})
.then(function(registration) {
return registration.unregister();
}).then(function() {
return navigator.serviceWorker.register(worker_url, {scope: scope});
}).then(function(registration) {
add_completion_callback(function() {
registration.unregister();
});
return new Promise(function(resolve) {
registration.addEventListener("updatefound", function() {
resolve(registration.installing);
});
});
}).then(function(worker) {
fetch_tests_from_worker(worker);
});
}, "Register ServiceWorker");
</script>
<script type="text/json" id="expected">
{
"summarized_status": {
"status_string": "OK",
"message": null
},
"summarized_tests": [
{
"status_string": "PASS",
"name": "Browser supports ServiceWorker",
"properties": {},
"message": null
},
{
"message": null,
"name": "Register ServiceWorker",
"properties": {},
"status_string": "PASS"
},
{
"message": null,
"name": "Worker test",
"properties": {},
"status_string": "PASS"
}
],
"summarized_asserts": [
{
"assert_name": "assert_true",
"test": "Browser supports ServiceWorker",
"args": [
"true",
"\"navigator.serviceWorker exists\""
],
"status": 0
},
{
"assert_name": "assert_true",
"test": null,
"args": [
"true",
"\"True is true\""
],
"status": 0
},
{
"assert_name": "assert_false",
"test": "Worker test",
"args": [
"false",
"\"False is false\""
],
"status": 0
}
],
"type": "complete"
}
</script>
</body>

View file

@ -15,7 +15,6 @@ policies and contribution forms [3].
(function (global_scope)
{
var debug = false;
// default timeout is 10 seconds, test can override if needed
var settings = {
output:true,
@ -24,7 +23,8 @@ policies and contribution forms [3].
"long":60000
},
test_timeout:null,
message_events: ["start", "test_state", "result", "completion"]
message_events: ["start", "test_state", "result", "completion"],
debug: false,
};
var xhtml_ns = "http://www.w3.org/1999/xhtml";
@ -132,11 +132,7 @@ policies and contribution forms [3].
if (has_selector) {
try {
w[selector].apply(undefined, callback_args);
} catch (e) {
if (debug) {
throw e;
}
}
} catch (e) {}
}
}
if (supports_post_message(w) && w !== self) {
@ -1190,7 +1186,10 @@ policies and contribution forms [3].
let status = Test.statuses.TIMEOUT;
let stack = null;
try {
if (settings.output) {
if (settings.debug) {
console.debug("ASSERT", name, tests.current_test.name, args);
}
if (tests.output) {
tests.set_assert(name, ...args);
}
rv = f(...args);
@ -1205,10 +1204,10 @@ policies and contribution forms [3].
}
throw e;
} finally {
if (settings.output && !stack) {
if (tests.output && !stack) {
stack = get_stack();
}
if (settings.output) {
if (tests.output) {
tests.set_assert_status(status, stack);
}
}
@ -2064,6 +2063,9 @@ policies and contribution forms [3].
return;
}
if (settings.debug && this.phase !== this.phases.STARTED) {
console.log("TEST START", this.name);
}
this.phase = this.phases.STARTED;
//If we don't get a result before the harness times out that will be a test timeout
this.set_status(this.TIMEOUT, "Test timed out");
@ -2082,6 +2084,10 @@ policies and contribution forms [3].
this_obj = this;
}
if (settings.debug) {
console.debug("TEST STEP", this.name);
}
try {
return func.apply(this_obj, Array.prototype.slice.call(arguments, 2));
} catch (e) {
@ -2314,6 +2320,12 @@ policies and contribution forms [3].
clearTimeout(this.timeout_id);
}
if (settings.debug) {
console.log("TEST DONE",
this.status,
this.name,)
}
this.cleanup();
};
@ -2629,7 +2641,7 @@ policies and contribution forms [3].
var record = new AssertRecord();
record.assert_name = assert.assert_name;
record.args = assert.args;
record.test = this.tests[assert.test.index];
record.test = assert.test != null ? this.tests[assert.test.index] : null;
record.status = assert.status;
record.stack = assert.stack;
tests.asserts_run.push(record);
@ -2768,6 +2780,7 @@ policies and contribution forms [3].
this.current_test = null;
this.asserts_run = [];
this.output = settings.output;
this.status = new TestsStatus();
@ -2816,6 +2829,8 @@ policies and contribution forms [3].
}
} else if (p == "hide_test_state") {
this.hide_test_state = value;
} else if (p == "output") {
this.output = value;
}
}
}

View file

@ -248,7 +248,7 @@ Consider installing certutil via your OS package manager or directly.""")
channel=kwargs["browser_channel"])
kwargs["prefs_root"] = prefs_root
if kwargs["headless"] is None:
if kwargs["headless"] is None and not kwargs["debug_test"]:
kwargs["headless"] = True
logger.info("Running in headless mode, pass --no-headless to disable")

View file

@ -101,7 +101,7 @@ def browser_kwargs(logger, test_type, run_info_data, config, **kwargs):
"config": config,
"browser_channel": kwargs["browser_channel"],
"headless": kwargs["headless"],
"preload_browser": kwargs["preload_browser"],
"preload_browser": kwargs["preload_browser"] and not kwargs["pause_after_test"] and not kwargs["num_test_groups"] == 1,
"specialpowers_path": kwargs["specialpowers_path"]}
@ -158,6 +158,7 @@ def executor_kwargs(logger, test_type, server_config, cache_manager, run_info_da
executor_kwargs["debug"] = run_info_data["debug"]
executor_kwargs["ccov"] = run_info_data.get("ccov", False)
executor_kwargs["browser_version"] = run_info_data.get("browser_version")
executor_kwargs["debug_test"] = kwargs["debug_test"]
return executor_kwargs

View file

@ -55,7 +55,7 @@ class TestEnvironment(object):
"""Context manager that owns the test environment i.e. the http and
websockets servers"""
def __init__(self, test_paths, testharness_timeout_multipler,
pause_after_test, debug_info, options, ssl_config, env_extras,
pause_after_test, debug_test, debug_info, options, ssl_config, env_extras,
enable_quic=False, mojojs_path=None):
self.test_paths = test_paths
self.server = None
@ -63,6 +63,7 @@ class TestEnvironment(object):
self.config = None
self.testharness_timeout_multipler = testharness_timeout_multipler
self.pause_after_test = pause_after_test
self.debug_test = debug_test
self.test_server_port = options.pop("test_server_port", True)
self.debug_info = debug_info
self.options = options if options is not None else {}
@ -195,7 +196,8 @@ class TestEnvironment(object):
(self.options.get("testharnessreport", "testharnessreport.js"),
{"output": self.pause_after_test,
"timeout_multiplier": self.testharness_timeout_multipler,
"explicit_timeout": "true" if self.debug_info is not None else "false"},
"explicit_timeout": "true" if self.debug_info is not None else "false",
"debug": "true" if self.debug_test else "false"},
"text/javascript;charset=utf8",
"/resources/testharnessreport.js")]:
path = os.path.normpath(os.path.join(here, path))

View file

@ -42,7 +42,7 @@ def executor_kwargs(test_type, server_config, cache_manager, run_info_data,
# want to view the results, however, the executor has to skip that cleanup.
if kwargs["pause_after_test"] or kwargs["pause_on_unexpected"]:
executor_kwargs["cleanup_after_test"] = False
executor_kwargs["debug_test"] = kwargs["debug_test"]
return executor_kwargs

View file

@ -40,7 +40,8 @@ from .protocol import (ActionSequenceProtocolPart,
GenerateTestReportProtocolPart,
VirtualAuthenticatorProtocolPart,
SetPermissionProtocolPart,
PrintProtocolPart)
PrintProtocolPart,
DebugProtocolPart)
from ..webdriver_server import GeckoDriverServer
@ -625,6 +626,30 @@ render('%s').then(result => callback(result))""" % pdf_base64, new_sandbox=False
finally:
_switch_to_window(self.marionette, handle)
class MarionetteDebugProtocolPart(DebugProtocolPart):
def setup(self):
self.marionette = self.parent.marionette
def load_devtools(self):
with self.marionette.using_context(self.marionette.CONTEXT_CHROME):
self.parent.base.execute_script("""
const { require } = ChromeUtils.import("resource://devtools/shared/Loader.jsm");
const { TargetFactory } = require("devtools/client/framework/target");
const { gDevTools } = require("devtools/client/framework/devtools");
const callback = arguments[arguments.length - 1];
async function loadDevTools() {
const target = await TargetFactory.forTab(window.gBrowser.selectedTab);
await gDevTools.showToolbox(target, "webconsole", "window");
}
loadDevTools().catch(() => dump("Devtools failed to load"))
.then(callback);
""", asynchronous=True)
class MarionetteProtocol(Protocol):
implements = [MarionetteBaseProtocolPart,
MarionetteTestharnessProtocolPart,
@ -641,7 +666,8 @@ class MarionetteProtocol(Protocol):
MarionetteGenerateTestReportProtocolPart,
MarionetteVirtualAuthenticatorProtocolPart,
MarionetteSetPermissionProtocolPart,
MarionettePrintProtocolPart]
MarionettePrintProtocolPart,
MarionetteDebugProtocolPart]
def __init__(self, executor, browser, capabilities=None, timeout_multiplier=1, e10s=True, ccov=False):
do_delayed_imports()
@ -770,7 +796,7 @@ class MarionetteTestharnessExecutor(TestharnessExecutor):
def __init__(self, logger, browser, server_config, timeout_multiplier=1,
close_after_done=True, debug_info=None, capabilities=None,
debug=False, ccov=False, **kwargs):
debug=False, ccov=False, debug_test=False, **kwargs):
"""Marionette-based executor for testharness.js tests"""
TestharnessExecutor.__init__(self, logger, browser, server_config,
timeout_multiplier=timeout_multiplier,
@ -786,6 +812,7 @@ class MarionetteTestharnessExecutor(TestharnessExecutor):
self.close_after_done = close_after_done
self.window_id = str(uuid.uuid4())
self.debug = debug
self.debug_test = debug_test
self.install_extensions = browser.extensions
@ -854,6 +881,9 @@ class MarionetteTestharnessExecutor(TestharnessExecutor):
self.protocol.base.set_window(test_window)
protocol.testharness.test_window_loaded()
if self.debug_test:
self.protocol.debug.load_devtools()
handler = CallbackHandler(self.logger, protocol, test_window)
protocol.marionette.navigate(url)
while True:

View file

@ -515,3 +515,15 @@ class PrintProtocolPart(ProtocolPart):
def render_as_pdf(self, width, height):
"""Output document as PDF"""
pass
class DebugProtocolPart(ProtocolPart):
"""Protocol part for debugging test failures."""
__metaclass__ = ABCMeta
name = "debug"
@abstractmethod
def load_devtools(self):
"""Load devtools in the current window"""
pass

View file

@ -1,4 +1,4 @@
var props = {output:%(output)d};
var props = {output:%(output)d, debug: %(debug)s};
var start_loc = document.createElement('a');
start_loc.href = location.href;
setup(props);

View file

@ -1,4 +1,4 @@
setup({output:%(output)d});
setup({output:%(output)d, debug: %(debug)s});
add_completion_callback(function() {
add_completion_callback(function (tests, status) {

View file

@ -73,6 +73,7 @@ window.__wptrunner_process_next_event = function() {
var props = {output: %(output)d,
timeout_multiplier: %(timeout_multiplier)s,
explicit_timeout: %(explicit_timeout)s,
debug: %(debug)s,
message_events: ["completion"]};
add_completion_callback(function(tests, harness_status) {

View file

@ -41,6 +41,7 @@ def test_webkitgtk_certificate_domain_list(product):
kwargs["webdriver_binary"] = None
kwargs["pause_after_test"] = False
kwargs["pause_on_unexpected"] = False
kwargs["debug_test"] = False
with ConfigBuilder(browser_host="example.net",
alternate_hosts={"alt": "example.org"},
subdomains={"a", "b"},

View file

@ -42,6 +42,7 @@ def test_server_start_config(product):
with environment.TestEnvironment(test_paths,
1,
False,
False,
None,
env_options,
{"type": "none"},

View file

@ -170,6 +170,8 @@ scheme host and port.""")
help="Halt the test runner after each test (this happens by default if only a single test is run)")
debugging_group.add_argument('--no-pause-after-test', dest="pause_after_test", action="store_false",
help="Don't halt the test runner irrespective of the number of tests run")
debugging_group.add_argument('--debug-test', dest="debug_test", action="store_true",
help="Run tests with additional debugging features enabled")
debugging_group.add_argument('--pause-on-unexpected', action="store_true",
help="Halt the test runner when an unexpected result is encountered")

View file

@ -141,6 +141,8 @@ def get_pause_after_test(test_loader, **kwargs):
return False
if kwargs["headless"]:
return False
if kwargs["debug_test"]:
return True
tests = test_loader.tests
is_single_testharness = (sum(len(item) for item in itervalues(tests)) == 1 and
len(tests.get("testharness", [])) == 1)
@ -224,6 +226,7 @@ def run_tests(config, test_paths, product, **kwargs):
with env.TestEnvironment(test_paths,
testharness_timeout_multipler,
kwargs["pause_after_test"],
kwargs["debug_test"],
kwargs["debug_info"],
product.env_options,
ssl_config,
@ -284,6 +287,7 @@ def run_tests(config, test_paths, product, **kwargs):
test_type,
run_info,
config=test_environment.config,
num_test_groups=len(test_groups),
**kwargs)
executor_cls = product.executor_classes.get(test_type)

View file

@ -28,6 +28,13 @@ gen-bundle \
-dir subresource/ \
-o wbn/subresource.wbn
gen-bundle \
-version b1 \
-baseURL $wpt_test_http_origin/web-bundle/resources/wbn/static-element/ \
-primaryURL $wpt_test_http_origin/web-bundle/resources/wbn/static-element/resources/style.css \
-dir static-element/ \
-o wbn/static-element.wbn
gen-bundle \
-version b1 \
-baseURL $wpt_test_http_origin/web-bundle/resources/wbn/dynamic/ \

View file

@ -0,0 +1 @@
const out_of_scope_script_result = 'loaded from webbundle';

View file

@ -0,0 +1 @@
const resources_script_result = 'loaded from webbundle';

View file

@ -0,0 +1,3 @@
#resources_style_imported_from_file_target {
color: blue;
}

View file

@ -0,0 +1,3 @@
#resources_style_imported_from_tag_target {
color: blue;
}

View file

@ -0,0 +1,5 @@
@import 'style-imported-from-file.css';
#resources_style_target {
color: blue;
}

View file

@ -0,0 +1 @@
const scopes_script_result = 'loaded from webbundle';

View file

@ -0,0 +1,3 @@
#scopes_style_imported_from_file_target {
color: blue;
}

View file

@ -0,0 +1,3 @@
#scopes_style_imported_from_tag_target {
color: blue;
}

View file

@ -0,0 +1,5 @@
@import 'style-imported-from-file.css';
#scopes_style_target {
color: blue;
}

View file

@ -0,0 +1 @@
const out_of_scope_script_result = 'loaded from network';

View file

@ -0,0 +1 @@
const resources_script_result = 'loaded from network';

View file

@ -0,0 +1,3 @@
#resources_style_imported_from_file_target {
color: red;
}

View file

@ -0,0 +1,3 @@
#resources_style_imported_from_tag_target {
color: red;
}

View file

@ -0,0 +1,5 @@
@import 'style-imported-from-file.css';
#resources_style_target {
color: red;
}

View file

@ -0,0 +1 @@
const scopes_script_result = 'loaded from network';

View file

@ -0,0 +1,3 @@
#scopes_style_imported_from_file_target {
color: red;
}

View file

@ -0,0 +1,3 @@
#scopes_style_imported_from_tag_target {
color: red;
}

View file

@ -0,0 +1,5 @@
@import 'style-imported-from-file.css';
#scopes_style_target {
color: red;
}

View file

@ -0,0 +1,56 @@
<!DOCTYPE html>
<title>WebBundle subresource loading for static elements with a base element</title>
<link
rel="help"
href="https://github.com/WICG/webpackage/blob/master/explainers/subresource-loading.md"
/>
<base href="../resources/wbn/static-element/">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<body>
<link
rel="webbundle"
href="../static-element.wbn"
resources="
http://web-platform.test:8001/web-bundle/resources/wbn/static-element/resources/script.js
http://web-platform.test:8001/web-bundle/resources/wbn/static-element/resources/style.css
http://web-platform.test:8001/web-bundle/resources/wbn/static-element/resources/style-imported-from-file.css
http://web-platform.test:8001/web-bundle/resources/wbn/static-element/resources/style-imported-from-tag.css"
scopes="http://web-platform.test:8001/web-bundle/resources/wbn/static-element/scopes/"
/>
<style type="text/css">
@import 'resources/style-imported-from-tag.css';
@import 'scopes/style-imported-from-tag.css';
</style>
<link href="resources/style.css" rel=stylesheet>
<link href="scopes/style.css" rel=stylesheet>
<script src="resources/script.js"></script>
<script src="scopes/script.js"></script>
<script src="out-of-scope/script.js"></script>
<script>
const onLoadPromise = new Promise((resolve) => {
window.addEventListener('load', resolve, false);
});
promise_test(async () => {
await onLoadPromise;
assert_equals(resources_script_result, 'loaded from webbundle');
assert_equals(scopes_script_result, 'loaded from webbundle');
assert_equals(out_of_scope_script_result, 'loaded from network');
['resources_', 'scopes_'].forEach((type) => {
['style_target',
'style_imported_from_file_target',
'style_imported_from_tag_target'].forEach((target) => {
const element = document.createElement('div');
element.id = type + target;
document.body.appendChild(element);
assert_equals(window.getComputedStyle(element).color,
'rgb(0, 0, 255)',
element.id + ' color must be blue');
});
});
}, "Subresources from static elements should be loaded from web bundle.");
</script>
</body>

View file

@ -0,0 +1,55 @@
<!DOCTYPE html>
<title>WebBundle subresource loading for static elements</title>
<link
rel="help"
href="https://github.com/WICG/webpackage/blob/master/explainers/subresource-loading.md"
/>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<body>
<link
rel="webbundle"
href="../resources/wbn/static-element.wbn"
resources="
http://web-platform.test:8001/web-bundle/resources/wbn/static-element/resources/script.js
http://web-platform.test:8001/web-bundle/resources/wbn/static-element/resources/style.css
http://web-platform.test:8001/web-bundle/resources/wbn/static-element/resources/style-imported-from-file.css
http://web-platform.test:8001/web-bundle/resources/wbn/static-element/resources/style-imported-from-tag.css"
scopes="http://web-platform.test:8001/web-bundle/resources/wbn/static-element/scopes/"
/>
<style type="text/css">
@import '../resources/wbn/static-element/resources/style-imported-from-tag.css';
@import '../resources/wbn/static-element/scopes/style-imported-from-tag.css';
</style>
<link href="../resources/wbn/static-element/resources/style.css" rel=stylesheet>
<link href="../resources/wbn/static-element/scopes/style.css" rel=stylesheet>
<script src="../resources/wbn/static-element/resources/script.js"></script>
<script src="../resources/wbn/static-element/scopes/script.js"></script>
<script src="../resources/wbn/static-element/out-of-scope/script.js"></script>
<script>
const onLoadPromise = new Promise((resolve) => {
window.addEventListener('load', resolve, false);
});
promise_test(async () => {
await onLoadPromise;
assert_equals(resources_script_result, 'loaded from webbundle');
assert_equals(scopes_script_result, 'loaded from webbundle');
assert_equals(out_of_scope_script_result, 'loaded from network');
['resources_', 'scopes_'].forEach((type) => {
['style_target',
'style_imported_from_file_target',
'style_imported_from_tag_target'].forEach((target) => {
const element = document.createElement('div');
element.id = type + target;
document.body.appendChild(element);
assert_equals(window.getComputedStyle(element).color,
'rgb(0, 0, 255)',
element.id + ' color must be blue');
});
});
}, "Subresources from static elements should be loaded from web bundle.");
</script>
</body>