mirror of
https://github.com/servo/servo.git
synced 2025-08-06 14:10:11 +01:00
Update web-platform-tests to revision 026cb8c5c7f63871853f21b053f49940be780146
This commit is contained in:
parent
1ba6f598cb
commit
353491d14a
100 changed files with 900 additions and 265 deletions
|
@ -0,0 +1,2 @@
|
|||
[trailing-other-space-separators-break-spaces-008.html]
|
||||
expected: FAIL
|
|
@ -2,3 +2,6 @@
|
|||
[Hit test intersecting scaled box]
|
||||
expected: FAIL
|
||||
|
||||
[Hit test within unscaled box]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -8,6 +8,3 @@
|
|||
[throws if handleEvent is thruthy and not callable]
|
||||
expected: FAIL
|
||||
|
||||
[looks up handleEvent method on every event dispatch]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[elementFromPoint-001.html]
|
||||
[CSSOM View - 5 - extensions to the Document interface]
|
||||
expected: FAIL
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[traverse_the_history_1.html]
|
||||
[Multiple history traversals from the same task]
|
||||
expected: FAIL
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[2d.reset.basic.html]
|
||||
[reset clears to transparent black]
|
||||
expected: FAIL
|
||||
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[form-double-submit-2.html]
|
||||
[preventDefault should allow onclick submit() to succeed]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
[form-double-submit.html]
|
||||
[default submit action should supersede onclick submit()]
|
||||
expected: FAIL
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
[017.html]
|
||||
expected: TIMEOUT
|
||||
[origin of the script that invoked the method, about:blank]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
[018.html]
|
||||
expected: TIMEOUT
|
||||
[origin of the script that invoked the method, javascript:]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
[018.html]
|
||||
expected: TIMEOUT
|
||||
[origin of the script that invoked the method, javascript:]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -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": {
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
[trailing-other-space-separators-break-spaces-008.html]
|
||||
expected: FAIL
|
|
@ -2,3 +2,6 @@
|
|||
[Hit test intersecting scaled box]
|
||||
expected: FAIL
|
||||
|
||||
[Hit test within unscaled box]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -8,6 +8,3 @@
|
|||
[throws if handleEvent is thruthy and not callable]
|
||||
expected: FAIL
|
||||
|
||||
[looks up handleEvent method on every event dispatch]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[elementFromPoint-001.html]
|
||||
[CSSOM View - 5 - extensions to the Document interface]
|
||||
expected: FAIL
|
||||
|
|
@ -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
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
[gb18030-decoder.html]
|
||||
[gb18030 decoder: two bytes 0xFE 0xFF]
|
||||
expected: FAIL
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[traverse_the_history_1.html]
|
||||
[Multiple history traversals from the same task]
|
||||
expected: FAIL
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[2d.reset.basic.html]
|
||||
[reset clears to transparent black]
|
||||
expected: FAIL
|
||||
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[form-double-submit-2.html]
|
||||
[preventDefault should allow onclick submit() to succeed]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
[form-double-submit.html]
|
||||
[default submit action should supersede onclick submit()]
|
||||
expected: FAIL
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
[017.html]
|
||||
expected: TIMEOUT
|
||||
[origin of the script that invoked the method, about:blank]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
[018.html]
|
||||
expected: TIMEOUT
|
||||
[origin of the script that invoked the method, javascript:]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
[018.html]
|
||||
expected: TIMEOUT
|
||||
[origin of the script that invoked the method, javascript:]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
||||
|
|
|
@ -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++,
|
||||
);
|
||||
}
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
||||
|
|
@ -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"
|
||||
|
|
|
@ -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();
|
|
@ -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>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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');
|
|
@ -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>
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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")
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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"},
|
||||
|
|
|
@ -42,6 +42,7 @@ def test_server_start_config(product):
|
|||
with environment.TestEnvironment(test_paths,
|
||||
1,
|
||||
False,
|
||||
False,
|
||||
None,
|
||||
env_options,
|
||||
{"type": "none"},
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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/ \
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
const out_of_scope_script_result = 'loaded from webbundle';
|
|
@ -0,0 +1 @@
|
|||
const resources_script_result = 'loaded from webbundle';
|
|
@ -0,0 +1,3 @@
|
|||
#resources_style_imported_from_file_target {
|
||||
color: blue;
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
#resources_style_imported_from_tag_target {
|
||||
color: blue;
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
@import 'style-imported-from-file.css';
|
||||
|
||||
#resources_style_target {
|
||||
color: blue;
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
const scopes_script_result = 'loaded from webbundle';
|
|
@ -0,0 +1,3 @@
|
|||
#scopes_style_imported_from_file_target {
|
||||
color: blue;
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
#scopes_style_imported_from_tag_target {
|
||||
color: blue;
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
@import 'style-imported-from-file.css';
|
||||
|
||||
#scopes_style_target {
|
||||
color: blue;
|
||||
}
|
Binary file not shown.
|
@ -0,0 +1 @@
|
|||
const out_of_scope_script_result = 'loaded from network';
|
|
@ -0,0 +1 @@
|
|||
const resources_script_result = 'loaded from network';
|
|
@ -0,0 +1,3 @@
|
|||
#resources_style_imported_from_file_target {
|
||||
color: red;
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
#resources_style_imported_from_tag_target {
|
||||
color: red;
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
@import 'style-imported-from-file.css';
|
||||
|
||||
#resources_style_target {
|
||||
color: red;
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
const scopes_script_result = 'loaded from network';
|
|
@ -0,0 +1,3 @@
|
|||
#scopes_style_imported_from_file_target {
|
||||
color: red;
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
#scopes_style_imported_from_tag_target {
|
||||
color: red;
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
@import 'style-imported-from-file.css';
|
||||
|
||||
#scopes_style_target {
|
||||
color: red;
|
||||
}
|
|
@ -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>
|
|
@ -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>
|
Loading…
Add table
Add a link
Reference in a new issue