Auto merge of #28118 - servo-wpt-sync:wpt_update_30-01-2021, r=servo-wpt-sync

Sync WPT with upstream (30-01-2021)

Automated downstream sync of changes from upstream as of 30-01-2021.
[no-wpt-sync]
r? @servo-wpt-sync
This commit is contained in:
bors-servo 2021-01-30 05:42:19 -05:00 committed by GitHub
commit a955ff280d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
86 changed files with 735 additions and 451 deletions

View file

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

View file

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

View file

@ -0,0 +1,4 @@
[hit-test-floats-005.html]
[Miss clipped float]
expected: FAIL

View file

@ -0,0 +1,4 @@
[CaretPosition-001.html]
[Element at (400, 100)]
expected: FAIL

View file

@ -1,4 +0,0 @@
[elementsFromPoint-invalid-cases.html]
[The root element is the last element returned for otherwise empty queries within the viewport]
expected: FAIL

View file

@ -452,3 +452,9 @@
[CSS namespace: typeof is "object"]
expected: FAIL
[CSS namespace: has no name property]
expected: FAIL
[CSS namespace: has no length property]
expected: FAIL

View file

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

View file

@ -56,6 +56,3 @@
[separate text/javascript x/x]
expected: FAIL
[separate text/javascript ]
expected: FAIL

View file

@ -5,15 +5,3 @@
[Test javascript URL string return values in direct and indirect (target) frame contexts. 9]
expected: FAIL
[Test javascript URL string return values in direct and indirect (target) frame contexts. 7]
expected: FAIL
[Test javascript URL string return values in direct and indirect (target) frame contexts. 6]
expected: FAIL
[Test javascript URL string return values in direct and indirect (target) frame contexts. 5]
expected: FAIL
[Test javascript URL string return values in direct and indirect (target) frame contexts. 8]
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 +0,0 @@
[traverse_the_history_4.html]
[Multiple history traversals, last would be aborted]
expected: FAIL

View file

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

View file

@ -0,0 +1,2 @@
[cross-origin-objects-on-new-window.html]
expected: TIMEOUT

View file

@ -1,4 +1,5 @@
[embedded-opener-remove-frame.html]
expected: CRASH
[opener of discarded nested browsing context]
expected: FAIL

View file

@ -0,0 +1,4 @@
[2d.transformation.setTransform.3d.html]
[setTransform() with 4x4 matrix keeps all parameters]
expected: FAIL

View file

@ -0,0 +1,4 @@
[marquee-events-historical.html]
[Event handler IDL attributes must not be implemented]
expected: FAIL

View file

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

View file

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

View file

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

View file

@ -1,4 +0,0 @@
[form-double-submit-3.html]
[<button> should have the same double-submit protection as <input type=submit>]
expected: FAIL

View file

@ -1,40 +1,13 @@
[select-event.html]
[textarea: selectionDirection a second time (must not fire select)]
expected: FAIL
[input type search: setRangeText() a second time (must not fire select)]
expected: FAIL
[textarea: setSelectionRange() a second time (must not fire select)]
expected: FAIL
[input type url: setSelectionRange() a second time (must not fire select)]
expected: FAIL
[input type search: setSelectionRange() a second time (must not fire select)]
expected: FAIL
[input type tel: selectionDirection a second time (must not fire select)]
expected: FAIL
[input type search: selectionDirection a second time (must not fire select)]
expected: FAIL
[input type text: selectionStart out of range a second time (must not fire select)]
expected: FAIL
[input type tel: select() a second time (must not fire select)]
expected: FAIL
[input type url: selectionStart 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: selectionDirection a second time (must not fire select)]
expected: FAIL
[textarea: setSelectionRange out of range a second time (must not fire select)]
expected: FAIL
@ -44,21 +17,12 @@
[input type tel: setRangeText() 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
[input type url: selectionEnd 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 text: setSelectionRange out of range a second time (must not fire select)]
expected: FAIL
[input type url: select() a second time (must not fire select)]
expected: FAIL
[input type password: setRangeText() a second time (must not fire select)]
expected: FAIL
@ -71,12 +35,36 @@
[input type url: setRangeText() a second time (must not fire select)]
expected: FAIL
[textarea: selectionEnd out of range a second time (must not fire select)]
[textarea: selectionEnd a second time (must not fire select)]
expected: FAIL
[input type tel: selectionStart a second time (must not fire select)]
[input type password: select() a second time (must not fire select)]
expected: FAIL
[input type search: selectionStart a second time (must not fire select)]
[input type password: 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 tel: selectionStart out of range 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: selectionEnd out of range a second time (must not fire select)]
expected: FAIL
[input type text: selectionStart a second time (must not fire select)]
expected: FAIL
[input type password: selectionDirection 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

View file

@ -1,4 +0,0 @@
[DOMContentLoaded-defer.html]
[The end: DOMContentLoaded and defer scripts]
expected: FAIL

View file

@ -0,0 +1,7 @@
[tasks.window.html]
[document.open() and tasks (canvas.toBlob())]
expected: FAIL
[tasks without document.open() (canvas.toBlob())]
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: FAIL

View file

@ -0,0 +1,2 @@
[TAO-null-opaque-origin.html]
expected: ERROR

View file

@ -1,7 +1,6 @@
[entry.html]
expected: TIMEOUT
[Start function]
expected: TIMEOUT
expected: FAIL
[Sanity check: this all works as expected synchronously]
expected: FAIL

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

@ -1,4 +1,5 @@
[audiocontext-not-fully-active.html]
expected: TIMEOUT
[frame in navigated remote-site frame]
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 @@
[017.html]
expected: TIMEOUT
[origin of the script that invoked the method, about:blank]
expected: TIMEOUT

View file

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

View file

@ -22182,13 +22182,6 @@
null,
{}
]
],
"single-touch-manual.html": [
"1b47a64c157ac64f5760ebc0ad2fd114773cdea3",
[
null,
{}
]
]
},
"uievents": {
@ -173949,6 +173942,19 @@
{}
]
],
"first-letter-digraph.html": [
"b9bc10016d71a6b74803278c227787bdee6cda48",
[
null,
[
[
"/css/css-pseudo/reference/first-letter-digraph-ref.html",
"=="
]
],
{}
]
],
"first-letter-exclude-block-child-marker.html": [
"ecd0fd5b4622d9257658fc1e50ce43221da5bdfb",
[
@ -319176,6 +319182,10 @@
"17d69f306d77411f2ef0a7dab682b119c5b59e50",
[]
],
"first-letter-digraph-ref.html": [
"7dbefc9dbdbd32ea8b05a8d3ec87f24e7d4edcc1",
[]
],
"first-line-with-inline-block-ref.html": [
"31717d4171bad4c98b272e4ce70ee6578780b10b",
[]
@ -342539,7 +342549,7 @@
[]
],
"transformations.yaml": [
"eca6b16b089b322792c0c0cab5ff48febe9ffcd8",
"ffb1e85ec041d5516d133a04edfa597710ff57ef",
[]
],
"video.yaml": [
@ -358778,7 +358788,7 @@
[]
],
"TAOResponse.py": [
"908b68861ae8262a18e083b026d14591d1e0206e",
"c25ccc03cb36a3d24409a4b3e6364d38f3a49305",
[]
],
"all_resource_types.htm": [
@ -359191,7 +359201,7 @@
]
},
"idlharness.js": [
"994a0d82ef444bf4566dc27a81487e70d9e284ea",
"5a97b273f2bed196d6ddd85c5596decff1bf87ae",
[]
],
"idlharness.js.headers": [
@ -359328,11 +359338,11 @@
},
"IdlNamespace": {
"test_attribute.html": [
"ca5edf4723d5b5c2055c2f024d951e98124c8cd9",
"9a08dd400c1d2a29e60e3af626fe883347218503",
[]
],
"test_operation.html": [
"60d7d47c9eea64a81d539afa6fd3acd72581c00b",
"814e8428c36245142bed162103f4b90644e24bcc",
[]
],
"test_partial_namespace.html": [
@ -412214,6 +412224,20 @@
{}
]
],
"grid-auto-repeat-min-size-003.html": [
"ffaaab33aef998f35a543392b2f3fa99e473b9ed",
[
null,
{}
]
],
"grid-auto-repeat-min-size-004.html": [
"8d2eda79023adab581e70dd4ef3bdd80ccca9e12",
[
null,
{}
]
],
"grid-change-auto-repeat-tracks.html": [
"c2d17ec615f0f092e54c0c4792ca4a03bc1cfe8a",
[
@ -429326,7 +429350,7 @@
]
],
"DOMMatrix2DInit-validate-fixup.html": [
"480d67a481d30965a734cdf76c60646a464823b8",
"a7257aa2882cf1d88fa4a15314efe071b30a8f4e",
[
null,
{}
@ -469434,6 +469458,13 @@
{}
]
],
"2d.transformation.setTransform.3d.html": [
"bcafbd15990880b00a5e93f07dba4b07108edbf6",
[
null,
{}
]
],
"2d.transformation.setTransform.multiple.html": [
"7e90537113eea070fa5213554e101870aa6f5541",
[
@ -484502,8 +484533,8 @@
]
},
"the-marquee-element-0": {
"marquee-events.html": [
"0d20c5102f17148ff3e5d1115e9a3fcfc7770bb3",
"marquee-events-historical.html": [
"5780b90f04869ce4d14be864bda6ec93a2902ab5",
[
null,
{}
@ -498710,7 +498741,7 @@
]
],
"tasks.window.js": [
"1588f2f889227f68acba9fb1f02494ba0f80a4bd",
"887adcb7393ee3bf3acfcba1a6a7d820f0ebb6ff",
[
"html/webappapis/dynamic-markup-insertion/opening-the-input-stream/tasks.window.html",
{}
@ -502767,6 +502798,13 @@
{}
]
],
"opacity-nonzero-to-zero.html": [
"a5f3d213a2dd6d2f7639440dadd55dcc724f0075",
[
null,
{}
]
],
"opacity-zero-layout-and-visible.html": [
"af81ff2a625908a2686e6987e1a86409ff7eba07",
[
@ -502913,6 +502951,13 @@
{}
]
],
"transform-above-perspective-dynamic.html": [
"fea65ca56ad6bbca11c5eece6fa7a059668ecb31",
[
null,
{}
]
],
"transform-change.html": [
"fd9657a71455629f856e53b8fa20aec1a3008e73",
[
@ -502947,6 +502992,13 @@
null,
{}
]
],
"visible-to-hidden.html": [
"e30231f7fe8e7af505a88d97ccad0b2e35ef3e90",
[
null,
{}
]
]
},
"lifecycle": {
@ -527705,8 +527757,8 @@
{}
]
],
"TAO-null-opaque-origin.sub.html": [
"0a457637c5165481bf7a3bd1cbf023e9c07be751",
"TAO-null-opaque-origin.html": [
"6548a7b9ad437407eaded2c6efc4974dec242ecd",
[
null,
{}
@ -528738,6 +528790,20 @@
{}
]
],
"isExtended.tentative.https.window.js": [
"3c814ae3d91d519500f7b44ab8fe4faa8a861d88",
[
"screen_enumeration/isExtended.tentative.https.window.html",
{
"script_metadata": [
[
"global",
"window"
]
]
}
]
],
"isMultiScreen.tentative.https.window.js": [
"ac32dd05169e0a9cebeab0ff05a32fe36167362e",
[
@ -542866,6 +542932,15 @@
}
]
],
"single-touch.html": [
"a067bc13801928caf1bfc873a80208db4b9b0bbd",
[
null,
{
"testdriver": true
}
]
],
"touch-globaleventhandler-interface.html": [
"cb640444fa0b752c90d10fc73d32892facfb7dcf",
[

View file

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

View file

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

View file

@ -0,0 +1,4 @@
[hit-test-floats-005.html]
[Miss clipped float]
expected: FAIL

View file

@ -0,0 +1,4 @@
[CaretPosition-001.html]
[Element at (400, 100)]
expected: FAIL

View file

@ -1,4 +0,0 @@
[elementsFromPoint-invalid-cases.html]
[The root element is the last element returned for otherwise empty queries within the viewport]
expected: FAIL

View file

@ -497,3 +497,9 @@
[CSS namespace: typeof is "object"]
expected: FAIL
[CSS namespace: has no name property]
expected: FAIL
[CSS namespace: has no length property]
expected: FAIL

View file

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

View file

@ -56,6 +56,3 @@
[separate text/javascript x/x]
expected: FAIL
[separate text/javascript ]
expected: FAIL

View file

@ -5,15 +5,3 @@
[Test javascript URL string return values in direct and indirect (target) frame contexts. 9]
expected: FAIL
[Test javascript URL string return values in direct and indirect (target) frame contexts. 7]
expected: FAIL
[Test javascript URL string return values in direct and indirect (target) frame contexts. 6]
expected: FAIL
[Test javascript URL string return values in direct and indirect (target) frame contexts. 5]
expected: FAIL
[Test javascript URL string return values in direct and indirect (target) frame contexts. 8]
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 +0,0 @@
[traverse_the_history_4.html]
[Multiple history traversals, last would be aborted]
expected: FAIL

View file

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

View file

@ -0,0 +1,2 @@
[cross-origin-objects-on-new-window.html]
expected: TIMEOUT

View file

@ -1,4 +1,5 @@
[embedded-opener-remove-frame.html]
expected: CRASH
[opener and "removed" embedded documents]
expected: FAIL

View file

@ -0,0 +1,4 @@
[2d.transformation.setTransform.3d.html]
[setTransform() with 4x4 matrix keeps all parameters]
expected: FAIL

View file

@ -0,0 +1,4 @@
[marquee-events-historical.html]
[Event handler IDL attributes must not be implemented]
expected: FAIL

View file

@ -1,15 +0,0 @@
[marquee-events.html]
type: testharness
expected: TIMEOUT
[marquee_events_start]
expected: NOTRUN
[marquee_events_finish]
expected: NOTRUN
[marquee_events_bounce]
expected: NOTRUN
[marquee_events_bounce2]
expected: NOTRUN

View file

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

View file

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

View file

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

View file

@ -1,4 +0,0 @@
[form-double-submit-3.html]
[<button> should have the same double-submit protection as <input type=submit>]
expected: FAIL

View file

@ -1,40 +1,13 @@
[select-event.html]
[textarea: selectionDirection a second time (must not fire select)]
expected: FAIL
[input type search: setRangeText() a second time (must not fire select)]
expected: FAIL
[textarea: setSelectionRange() a second time (must not fire select)]
expected: FAIL
[input type url: setSelectionRange() a second time (must not fire select)]
expected: FAIL
[input type search: setSelectionRange() a second time (must not fire select)]
expected: FAIL
[input type tel: selectionDirection a second time (must not fire select)]
expected: FAIL
[input type search: selectionDirection a second time (must not fire select)]
expected: FAIL
[input type text: selectionStart out of range a second time (must not fire select)]
expected: FAIL
[input type tel: select() a second time (must not fire select)]
expected: FAIL
[input type url: selectionStart 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: selectionDirection a second time (must not fire select)]
expected: FAIL
[textarea: setSelectionRange out of range a second time (must not fire select)]
expected: FAIL
@ -44,21 +17,12 @@
[input type tel: setRangeText() 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
[input type url: selectionEnd 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 text: setSelectionRange out of range a second time (must not fire select)]
expected: FAIL
[input type url: select() a second time (must not fire select)]
expected: FAIL
[input type password: setRangeText() a second time (must not fire select)]
expected: FAIL
@ -71,12 +35,36 @@
[input type url: setRangeText() a second time (must not fire select)]
expected: FAIL
[textarea: selectionEnd out of range a second time (must not fire select)]
[textarea: selectionEnd a second time (must not fire select)]
expected: FAIL
[input type tel: selectionStart a second time (must not fire select)]
[input type password: select() a second time (must not fire select)]
expected: FAIL
[input type search: selectionStart a second time (must not fire select)]
[input type password: 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 tel: selectionStart out of range 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: selectionEnd out of range a second time (must not fire select)]
expected: FAIL
[input type text: selectionStart a second time (must not fire select)]
expected: FAIL
[input type password: selectionDirection 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

View file

@ -1,4 +0,0 @@
[DOMContentLoaded-defer.html]
[The end: DOMContentLoaded and defer scripts]
expected: FAIL

View file

@ -1,5 +1,4 @@
[tasks.window.html]
expected: TIMEOUT
[document.open() and tasks (canvas.toBlob())]
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: FAIL

View file

@ -0,0 +1,2 @@
[TAO-null-opaque-origin.html]
expected: ERROR

View file

@ -1,5 +0,0 @@
[TAO-null-opaque-origin.sub.html]
expected: TIMEOUT
[Test null TAO value with opaque origins]
expected: NOTRUN

View file

@ -1,7 +1,6 @@
[entry.html]
expected: TIMEOUT
[Start function]
expected: TIMEOUT
expected: FAIL
[Sanity check: this all works as expected synchronously]
expected: FAIL

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

@ -1,4 +1,5 @@
[audiocontext-not-fully-active.html]
expected: TIMEOUT
[frame in navigated remote-site frame]
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 @@
[017.html]
expected: TIMEOUT
[origin of the script that invoked the method, about:blank]
expected: TIMEOUT

View file

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

View file

@ -0,0 +1,44 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Grid Layout Test: Auto repeat tracks and percentage min sizes with percentage track sizes</title>
<link rel="author" title="Jacques Newman" href="mailto:janewman@microsoft.com">
<link rel="help" href="https://drafts.csswg.org/css-grid-1/#auto-repeat">
<meta name="assert"
content="This test checks that auto repeat tracks can use percentage track
size when only a min size is available to compute the number of tracks.">
<link rel="stylesheet" href="/css/support/grid.css">
<style>
.grid {
position: relative;
display: inline-grid;
grid-template-columns: repeat(auto-fill, 25%);
grid-auto-rows: 100px;
min-width: 50%;
float: left;
}
.wrapper {
width: 600px;
}
#cell {
background: lime;
}
</style>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/check-layout-th.js"></script>
<body onload="checkLayout('.grid');">
<div id="log"></div>
<div class="wrapper">
<div class="grid" data-expected-width="300" data-expected-height="200">
<div id="cell" data-expected-width="75">Cell 1</div>
<div id="cell" data-expected-width="75">Cell 2</div>
<div id="cell" data-expected-width="75">Cell 3</div>
<div id="cell" data-expected-width="75">Cell 4</div>
<div id="cell" data-expected-width="75">Cell 5</div>
</div>
</div>

View file

@ -0,0 +1,42 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Grid Layout Test: Auto repeat tracks and percentage min sizes with percentage track sizes</title>
<link rel="author" title="Jacques Newman" href="mailto:janewman@microsoft.com">
<link rel="help" href="https://drafts.csswg.org/css-grid-1/#auto-repeat">
<meta name="assert"
content="This test checks that auto repeat tracks can use percentage track
size when only a min size is available to compute the number of tracks.">
<link rel="stylesheet" href="/css/support/grid.css">
<style>
.grid {
position: relative;
display: inline-grid;
grid-template-rows: repeat(auto-fill, 20%);
grid-auto-columns: 100px;
min-height: 50%;
float: left;
}
.wrapper {
height: 1000px;
}
#cell {
background-color: lime;
}
</style>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/check-layout-th.js"></script>
<body onload="checkLayout('.grid');">
<div id="log"></div>
<div class="wrapper">
<div class="grid" data-expected-width="100" data-expected-height="500">
<div id="cell" data-expected-width="100" data-expected-height="100">Cell 1</div>
<div id="cell" data-expected-width="100" data-expected-height="100">Cell 2</div>
<div id="cell" data-expected-width="100" data-expected-height="100">Cell 3</div>
<div id="cell" data-expected-width="100" data-expected-height="100">Cell 4</div>
<div id="cell" data-expected-width="100" data-expected-height="100">Cell 5</div>
</div>
</div>

View file

@ -0,0 +1,43 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Test: ::first-letter digraph recognition</title>
<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
<link rel="match" href="reference/first-letter-digraph-ref.html">
<link rel="help" href="https://drafts.csswg.org/selectors-3/#first-letter">
<meta name="assert" content="Test checks that ::first-letter respects the Dutch 'ij' digraph.">
<style>
div {
font-size: 32px;
}
div p {
margin: 0;
color: lightgray;
}
div p::first-letter {
color: green;
}
</style>
</head>
<body>
<p>Test passes if both "I" and "J" are green in these examples:</p>
<div lang="nl">
<p>IJsselmeer</p>
<p>ijsselmeer</p>
<p>“IJsselmeer”</p>
<p>Ijsselmeer</p> <!-- mixed case within the digraph is unlikely in practice -->
</div>
<div lang="en">
<p lang="nl-NL">IJsselmeer</p> <!-- lang tag with country code should also work -->
<p lang="nl-SR">IJsselmeer</p>
</div>
<p>But only "I" should be green in these examples:</p>
<div lang="en">
<p>IJsselmeer</p>
<p>ijsselmeer</p>
<p>“IJsselmeer”</p>
<p>Ijsselmeer</p>
</div>
</body>
</html>

View file

@ -0,0 +1,40 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Reference: ::first-letter digraph recognition</title>
<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
<style>
div {
font-size: 32px;
}
div p {
margin: 0;
color: lightgray;
}
div p span {
color: green;
}
</style>
</head>
<body>
<p>Test passes if both "I" and "J" are green in these examples:</p>
<div lang="nl">
<p><span>IJ</span>sselmeer</p>
<p><span>ij</span>sselmeer</p>
<p><span>“IJ</span>sselmeer”</p>
<p><span>Ij</span>sselmeer</p>
</div>
<div lang="en">
<p lang="nl-NL"><span>IJ</span>sselmeer</p>
<p lang="nl-SR"><span>IJ</span>sselmeer</p>
</div>
<p>But only "I" should be green in these examples:</p>
<div lang="en">
<p><span>I</span>Jsselmeer</p>
<p><span>i</span>jsselmeer</p>
<p><span>“I</span>Jsselmeer”</p>
<p><span>I</span>jsselmeer</p>
</div>
</body>
</html>

View file

@ -74,20 +74,6 @@ test(() => {
}, `addPath (Sanity check without second parameter)`);
[
// Input dict that would throw if ignore3D was false
[{m13: 1, is2D: true}, matrix2D({})],
[{m14: 1, is2D: true}, matrix2D({})],
[{m23: 1, is2D: true}, matrix2D({})],
[{m24: 1, is2D: true}, matrix2D({})],
[{m31: 1, is2D: true}, matrix2D({})],
[{m32: 1, is2D: true}, matrix2D({})],
[{m33: 0, is2D: true}, matrix2D({})],
[{m33: -0, is2D: true}, matrix2D({})],
[{m33: -1, is2D: true}, matrix2D({})],
[{m34: 1, is2D: true}, matrix2D({})],
[{m43: 1, is2D: true}, matrix2D({})],
[{m44: 0, is2D: true}, matrix2D({})],
// Input dict that are 2D
[{}, matrix2D({})],
[{is2D: undefined}, matrix2D({})],
@ -142,32 +128,6 @@ test(() => {
[{m43: -0, is2D: true}, matrix2D({})],
[{m44: 1, is2D: true}, matrix2D({})],
[{is2D: true}, matrix2D({})],
// Input dict that are 3D, but 3D members are ignored
[{m13: 1, is2D: false}, matrix2D({})],
[{m14: 1, is2D: false}, matrix2D({})],
[{m23: 1, is2D: false}, matrix2D({})],
[{m24: 1, is2D: false}, matrix2D({})],
[{m31: 1, is2D: false}, matrix2D({})],
[{m32: 1, is2D: false}, matrix2D({})],
[{m33: 0, is2D: false}, matrix2D({})],
[{m33: -0, is2D: false}, matrix2D({})],
[{m33: -1, is2D: false}, matrix2D({})],
[{m34: 1, is2D: false}, matrix2D({})],
[{m43: 1, is2D: false}, matrix2D({})],
[{m44: 0, is2D: false}, matrix2D({})],
[{m13: 1}, matrix2D({})],
[{m14: 1}, matrix2D({})],
[{m23: 1}, matrix2D({})],
[{m24: 1}, matrix2D({})],
[{m31: 1}, matrix2D({})],
[{m32: 1}, matrix2D({})],
[{m33: 0}, matrix2D({})],
[{m34: 1}, matrix2D({})],
[{m43: 1}, matrix2D({})],
[{m44: 0}, matrix2D({})],
[{is2D: false}, matrix2D({})],
[{is2D: null}, matrix2D({})],
].forEach(([dict, expected]) => {
test(() => {
ctx.resetTransform();

View file

@ -0,0 +1,30 @@
<!DOCTYPE html>
<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
<title>Canvas test: 2d.transformation.setTransform.3d</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.transformation.setTransform.3d</h1>
<p class="desc">setTransform() with 4x4 matrix keeps all parameters</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("setTransform() with 4x4 matrix keeps all parameters");
_addTest(function(canvas, ctx) {
const transform = new DOMMatrix([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]);
ctx.setTransform(transform);
const canvasTransform = ctx.getTransform();
_assert(transform.toLocaleString() == canvasTransform.toLocaleString(), "transform.toLocaleString() == canvasTransform.toLocaleString()");
});
</script>

View file

@ -334,7 +334,6 @@
@assert pixel 50,25 == 0,255,0,255;
expected: green
- name: 2d.transformation.setTransform.skewed
testing:
- 2d.transformation.setTransform
@ -402,4 +401,14 @@
@assert pixel 50,25 == 0,255,0,255;
expected: green
- name: 2d.transformation.setTransform.3d
desc: setTransform() with 4x4 matrix keeps all parameters
testing:
- 2d.transformation.setTransform.3d
code: |
const transform = new DOMMatrix([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]);
ctx.setTransform(transform);
const canvasTransform = ctx.getTransform();
@assert transform.toLocaleString() == canvasTransform.toLocaleString();

View file

@ -0,0 +1,32 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>Marquee events must not be implemented</title>
<link rel="help" href="https://html.spec.whatwg.org/multipage/multipage/obsolete.html#the-marquee-element">
<link rel="help" href="https://github.com/whatwg/html/pull/6343">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<marquee width="1" behavior="alternate">&nbsp;</marquee>
<marquee width="1">&nbsp;</marquee>
<marquee width="1" loop="2" behavior="alternate">&nbsp;</marquee>
<marquee width="1" loop="2">&nbsp;</marquee>
<script>
test(() => {
assert_false("onstart" in HTMLMarqueeElement.prototype, "onstart");
assert_false("onfinish" in HTMLMarqueeElement.prototype, "onfinish");
assert_false("onbounce" in HTMLMarqueeElement.prototype, "onbounce");
}, "Event handler IDL attributes must not be implemented");
// Because we use width="1" they will bounce and finish really fast
async_test(t => {
for (const m of document.querySelectorAll("marquee")) {
m.addEventListener("start", t.unreached_func(`start: ${m.outerHTML}`));
m.addEventListener("finish", t.unreached_func(`finish: ${m.outerHTML}`));
m.addEventListener("bounce", t.unreached_func(`bounce: ${m.outerHTML}`));
}
t.step_timeout(() => t.done(), 100);
}, "No events must be fired, at least during the first 100 ms");
</script>

View file

@ -1,71 +0,0 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>HTML Test: marquee-events</title>
<link rel="author" title="Intel" href="http://www.intel.com/">
<link rel="help" href="https://html.spec.whatwg.org/multipage/multipage/obsolete.html#the-marquee-element">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<marquee id="test1" loop="2" width="1" behavior="alternate">&nbsp;</marquee>
<marquee id="test2" loop="2" width="1">&nbsp;</marquee>
<script>
var mq;
var t_start = async_test("marquee_events_start");
var t_finish = async_test("marquee_events_finish");
var t_bounce = async_test("marquee_events_bounce");
var t_bounce2 = async_test("marquee_events_bounce2");
var timeStamp = [];
var bounced = false;
setup(function() {
mq = document.getElementById("test1");
mq2 = document.getElementById("test2");
});
mq.addEventListener("start", function(evt) {
t_start.step(function() {
timeStamp.push(evt.timeStamp);
assert_true(evt.isTrusted, "The onstart event is created by UA, it must be trusted.");
assert_equals(timeStamp.length, 1, "The onstart event should be fired firstly.");
assert_false(evt.bubbles, "The bubbles property of onstart event should be false.");
assert_false(evt.cancelable, "The cancelable property of onstart event should be false.");
assert_true(evt instanceof Event, "The onstart event must be the instance of Event interface.");
});
t_start.done();
});
mq.addEventListener("finish", function(evt) {
t_finish.step(function() {
timeStamp.push(evt.timeStamp);
assert_true(evt.isTrusted, "The onfinish event is created by UA, it must be trusted.");
assert_equals(timeStamp.length, 3, "The onfinish event should be fired lastly.");
assert_false(evt.bubbles, "The bubbles property of onfinish event should be false.");
assert_false(evt.cancelable, "The cancelable property of onfinish event should be false.");
assert_true(evt instanceof Event, "The onfinish event must be the instance of Event interface.");
});
t_finish.done();
});
mq.addEventListener("bounce", function(evt) {
t_bounce.step(function() {
timeStamp.push(evt.timeStamp);
assert_true(evt.isTrusted, "The onbounce event is created by UA, it must be trusted.");
assert_equals(timeStamp.length, 2, "The onbounce event should be fired secondly.");
assert_false(evt.bubbles, "The bubbles property of onbounce event should be false.");
assert_false(evt.cancelable, "The cancelable property of onbounce event should be false.");
assert_true(evt instanceof Event, "The onbounce event must be the instance of Event interface.");
});
t_bounce.done();
});
mq2.addEventListener("bounce", function(evt) {
bounced = true;
});
mq2.addEventListener("finish", function(evt) {
t_bounce2.step(function () {
assert_false(bounced, "The onbounce event should not be fired.");
});
t_bounce2.done();
});
</script>

View file

@ -104,10 +104,3 @@ taskTest("Promise rejection", (t, frame, open) => {
frame.contentWindow.onunhandledrejection = listener;
window.onunhandledrejection = listener;
});
taskTest("marquee start", (t, frame, open) => {
const doc = frame.contentDocument;
const marquee = doc.body.appendChild(doc.createElement("marquee"));
open(frame.contentDocument);
marquee.addEventListener("start", t.step_func_done());
});

View file

@ -0,0 +1,25 @@
<!DOCTYPE html>
<title>Layout Instability: opacity:0</title>
<link rel="help" href="https://wicg.github.io/layout-instability/" />
<div id="target" style="position: absolute; top: 0; width: 400px; height: 400px;">
</div>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/util.js"></script>
<script>
promise_test(async () => {
const watcher = new ScoreWatcher;
// Wait for the initial render to complete.
await waitForAnimationFrames(2);
// Shift target, for which no shift should be reported because it's not visible.
target.style.top = '200px';
target.style.opacity = 0;
await waitForAnimationFrames(2);
assert_equals(watcher.score, 0);
}, 'opacity non-zero to zero');
</script>

View file

@ -0,0 +1,24 @@
<!DOCTYPE html>
<title>Layout Instability: addition of transform above perspective</title>
<link rel="help" href="https://wicg.github.io/layout-instability/" />
<div id=target2>
<div id=perspective style="perspective: 1000px;">
<div id=target>Test</div>
</div>
</div>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/util.js"></script>
<script>
promise_test(async () => {
const watcher = new ScoreWatcher;
// Wait for the initial render to complete.
await waitForAnimationFrames(2);
target2.style.transform = 'translateX(0px)';
await waitForAnimationFrames(1);
assert_equals(watcher.score, 0);
}, 'addition of transform above perspective');
</script>

View file

@ -0,0 +1,25 @@
<!DOCTYPE html>
<title>Layout Instability: visibility:hidden</title>
<link rel="help" href="https://wicg.github.io/layout-instability/" />
<div id="target" style="position: absolute; top: 0; width: 400px; height: 400px;"></div>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/util.js"></script>
<script>
promise_test(async () => {
const watcher = new ScoreWatcher;
// Wait for the initial render to complete.
await waitForAnimationFrames(2);
// Shift target and make hidden at the same time. Should not be reported!
document.querySelector("#target").style.top = '200px';
document.querySelector("#target").style.visibility = 'hidden';
await waitForAnimationFrames(2);
// No shift should be reported.
assert_equals(watcher.score, 0);
}, 'visible to hidden');
</script>

View file

@ -0,0 +1,55 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Resource Timing TAO - "null" and opaque origin</title>
<link rel="author" title="Google" href="http://www.google.com/" />
<link rel="help" href="https://www.w3.org/TR/resource-timing-2/#timing-allow-origin"/>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/get-host-info.sub.js"></script>
</head>
<body>
<h1>Description</h1>
<p>This test validates that, for a cross origin resource, the timing allow
check algorithm will succeed when the value of Timing-Allow-Origin is null and
the origin is an opaque origin.</p>
<div id="log"></div>
<iframe id="frameContext"></iframe>
<script>
const origin = get_host_info()["ORIGIN"];
const frame_content = `data:text/html;utf8,<body>
<script src="${origin}/resources/testharness.js"></` + `script>
<script>
const url = "${origin}/resource-timing/resources/TAOResponse.py?tao=null";
promise_test(() => { return new Promise((resolve, reject) => {
const run_test = entryList => {
const entry = entryList.getEntries()[0];
const sum = entry.redirectStart + entry.redirectEnd +
entry.domainLookupStart + entry.domainLookupEnd +
entry.connectStart + entry.connectEnd +
entry.secureConnectionStart + entry.requestStart +
entry.responseStart + entry.transferSize +
entry.encodedBodySize + entry.decodedBodySize;
assert_not_equals(sum, 0, "Timings must be non-zero");
};
const observer = new PerformanceObserver(list => {
try {
run_test(list);
resolve();
} catch(e) {
reject(e);
}
});
observer.observe({ entryTypes: ["resource"] });
fetch(url);
})}, "An opaque origin should be authorized to see resource timings when" +
" the TAO header is the string 'null'");
</` + `script></body>`;
frameContext.style = "display:none"
frameContext.src = frame_content;
fetch_tests_from_window(frameContext.contentWindow);
</script>
</body>
</html>

View file

@ -1,42 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Resource Timing TAO - "null" and opaque origin</title>
<link rel="author" title="Google" href="http://www.google.com/" />
<link rel="help" href="https://www.w3.org/TR/resource-timing-2/#timing-allow-origin"/>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
const t = async_test("Test null TAO value with opaque origins");
window.addEventListener("message", t.step_func_done(e=>{
assert_equals(e.data, "PASS");
}));
</script>
</head>
<body>
<h1>Description</h1>
<p>This test validates that for a cross origin resource, the timing allow check algorithm will succeed when the value of Timing-Allow-Origin is null and the origin is an opaque origin.</p>
<div id="log"></div>
<iframe id="frameContext"></iframe>
<script>
let frame_content = "data:text/html;utf8,<body>" +
"<script>" +
"const url = '{{location[scheme]}}://{{host}}:{{ports[http][1]}}/resource-timing/resources/TAOResponse.py?tao=null';" +
"const observe = (list, observer) => {" +
" const entry = list.getEntries()[0];" +
" const sum = entry.redirectStart + entry.redirectEnd + entry.domainLookupStart + entry.domainLookupEnd + entry.connectStart +" +
" entry.connectEnd + entry.secureConnectionStart + entry.requestStart + entry.responseStart + entry.transferSize +" +
" entry.encodedBodySize + entry.decodedBodySize;" +
" const result = sum != 0 ? 'PASS' : 'FAIL';" +
" window.parent.postMessage(result, '*');" +
"};" +
"let observer = new PerformanceObserver(observe);" +
"observer.observe({ entryTypes: ['resource'] });" +
"fetch(url).then(r => r.text());" +
"</" + "script></body>";
document.getElementById("frameContext").src = frame_content;
</script>
</body>
</html>

View file

@ -14,7 +14,7 @@ def main(request, response):
# null, fail unless it's an opaque origin
response.headers.set(b'Timing-Allow-Origin', b'null')
elif tao == b'Null':
# case-insentive null, fail
# case-insensitive null, fail
response.headers.set(b'Timing-Allow-Origin', b'Null')
elif tao == b'origin':
# case-sensitive match for origin, pass

View file

@ -3483,6 +3483,22 @@ IdlNamespace.prototype.test_self = function ()
subsetTestByKey(this.name, test, () => {
assert_equals(typeof namespaceObject, "object");
}, `${this.name} namespace: typeof is "object"`);
subsetTestByKey(this.name, test, () => {
assert_equals(
Object.getOwnPropertyDescriptor(namespaceObject, "length"),
undefined,
"length property must be undefined"
);
}, `${this.name} namespace: has no length property`);
subsetTestByKey(this.name, test, () => {
assert_equals(
Object.getOwnPropertyDescriptor(namespaceObject, "name"),
undefined,
"name property must be undefined"
);
}, `${this.name} namespace: has no name property`);
};
IdlNamespace.prototype.test = function ()

View file

@ -71,6 +71,18 @@ idlArray.test();
"properties": {},
"message": null
},
{
"name": "foo namespace: has no length property",
"status_string": "PASS",
"properties": {},
"message": null
},
{
"name": "foo namespace: has no name property",
"status_string": "PASS",
"properties": {},
"message": null
},
{
"name": "foo namespace: attribute truth",
"status_string": "PASS",

View file

@ -110,6 +110,18 @@ idlArray.test();
"properties": {},
"message": null
},
{
"name": "foo namespace: has no length property",
"status_string": "PASS",
"properties": {},
"message": null
},
{
"name": "foo namespace: has no name property",
"status_string": "PASS",
"properties": {},
"message": null
},
{
"name": "foo namespace: operation Truth()",
"status_string": "PASS",
@ -122,7 +134,6 @@ idlArray.test();
"properties": {},
"message": "assert_own_property: namespace object missing operation \"Lies\" expected property \"Lies\" missing"
},
{
"name": "bar namespace: extended attributes",
"status_string": "PASS",
@ -153,6 +164,18 @@ idlArray.test();
"properties": {},
"message": null
},
{
"name": "bar namespace: has no length property",
"status_string": "PASS",
"properties": {},
"message": null
},
{
"name": "bar namespace: has no name property",
"status_string": "PASS",
"properties": {},
"message": null
},
{
"name": "bar namespace: operation Truth()",
"status_string": "PASS",
@ -190,6 +213,18 @@ idlArray.test();
"properties": {},
"message": null
},
{
"name": "baz namespace: has no length property",
"status_string": "PASS",
"properties": {},
"message": null
},
{
"name": "baz namespace: has no name property",
"status_string": "PASS",
"properties": {},
"message": null
},
{
"name": "baz namespace: operation LongStory(any, DOMString...)",
"status_string": "PASS",

View file

@ -0,0 +1,11 @@
// META: global=window
'use strict';
promise_test(async t => {
assert_equals(typeof self.screen.isExtended, 'boolean');
}, 'screen.isExtended is present');
promise_test(async t => {
let iframe = document.body.appendChild(document.createElement('iframe'));
assert_equals(typeof iframe.contentWindow.screen.isExtended, 'boolean');
}, 'screen.isExtended is present for attached iframes');

View file

@ -16,15 +16,19 @@
<meta name="viewport" content="width=device-width">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-actions.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script>
setup({explicit_done: true});
// Check a Touch object's atttributes for existence and correct type
// TA: 1.1.2, 1.1.3
function check_Touch_object (t) {
function check_Touch_object (t, element) {
test(function() {
assert_equals(Object.prototype.toString.call(t), "[object Touch]", name + " attribute of type TouchList");
}, "touch point is a Touch object");
}, element + "'s touch point is a Touch object");
[
["long", "identifier"],
["EventTarget", "target"],
@ -41,20 +45,20 @@
// existence check
test(function() {
assert_true(name in t, name + " attribute in Touch object");
}, "Touch." + name + " attribute exists");
}, element + ".Touch." + name + " attribute exists check_Touch_object");
// type check
switch(type) {
case "long":
test(function() {
assert_equals(typeof t[name], "number", name + " attribute of type long");
}, "Touch." + name + " attribute is of type number (long)");
}, element + ".Touch." + name + " attribute is of type number (long)");
break;
case "EventTarget":
// An event target is some type of Element
test(function() {
assert_true(t[name] instanceof Element, "EventTarget must be an Element.");
}, "Touch." + name + " attribute is of type Element");
}, element + ".Touch." + name + " attribute is of type Element");
break;
default:
break;
@ -65,10 +69,10 @@
// Check a TouchList object's attributes and methods for existence and proper type
// Also make sure all of the members of the list are Touch objects
// TA: 1.2.1, 1.2.2, 1.2.5
function check_TouchList_object (tl) {
function check_TouchList_object (tl, element) {
test(function() {
assert_equals(Object.prototype.toString.call(tl), "[object TouchList]", name + " attribute of type TouchList");
}, "touch list is a TouchList object");
}, element + "'s touch list is a TouchList object");
[
["unsigned long", "length"],
["function", "item"],
@ -79,19 +83,19 @@
// existence check
test(function() {
assert_true(name in tl, name + " attribute in TouchList");
}, "TouchList." + name + " attribute exists");
}, element + ".TouchList." + name + " attribute exists check_TouchList_object");
// type check
switch(type) {
case "unsigned long":
test(function() {
assert_equals(typeof tl[name], "number", name + " attribute of type long");
}, "TouchList." + name + " attribute is of type number (unsigned long)");
}, element + ".TouchList." + name + " attribute is of type number (unsigned long)");
break;
case "function":
test(function() {
assert_equals(typeof tl[name], "function", name + " attribute of type function");
}, "TouchList." + name + " attribute is of type function");
}, element + ".TouchList." + name + " attribute is of type function");
break;
default:
break;
@ -99,7 +103,7 @@
});
// Each member of tl should be a proper Touch object
for (var i=0; i < tl.length; i++) {
check_Touch_object(tl.item(i));
check_Touch_object(tl.item(i), element + "[" + i + "]");
}
}
@ -125,7 +129,7 @@
// existence check
test(function() {
assert_true(name in ev, name + " attribute in " + ev.type + " event");
}, ev.type + "." + name + " attribute exists");
}, ev.type + "." + name + " attribute exists check_TouchEvent");
// type check
switch(type) {
@ -139,7 +143,7 @@
assert_equals(Object.prototype.toString.call(ev[name]), "[object TouchList]", name + " attribute of type TouchList");
}, ev.type + "." + name + " attribute is of type TouchList");
// Now check the validity of the TouchList
check_TouchList_object(ev[name]);
check_TouchList_object(ev[name], ev.type + "." + name);
break;
default:
break;
@ -181,6 +185,7 @@
var touchend_received = false;
var invalid_touchmove_received = false;
var touchstart_identifier;
var actions_promise;
on_event(target0, "touchstart", function onTouchStart(ev) {
ev.preventDefault();
@ -349,6 +354,15 @@
done();
}
});
actions_promise = new test_driver.Actions()
.addPointer("touchPointer1", "touch")
.pointerMove(0, 0, {origin: target0, sourceName: "touchPointer1"})
.pointerDown({sourceName: "touchPointer1"})
.pointerMove(0, 10, {origin: target0, sourceName: "touchPointer1"})
.pointerMove(0, 0, {origin: target1, sourceName: "touchPointer1"})
.pointerUp({sourceName: "touchPointer1"})
.send();
}
</script>
<style>