Auto merge of #26322 - servo-wpt-sync:wpt_update_26-04-2020, r=servo-wpt-sync

Sync WPT with upstream (26-04-2020)

Automated downstream sync of changes from upstream as of 26-04-2020.
[no-wpt-sync]
r? @servo-wpt-sync
This commit is contained in:
bors-servo 2020-04-26 10:22:48 -04:00 committed by GitHub
commit cd620f69de
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
53 changed files with 344 additions and 375 deletions

View file

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

View file

@ -1,2 +1,2 @@
[no-transition-from-ua-to-blocking-stylesheet.html] [no-transition-from-ua-to-blocking-stylesheet.html]
expected: TIMEOUT expected: FAIL

View file

@ -44,12 +44,6 @@
[vertical-align length(in) / values] [vertical-align length(in) / values]
expected: FAIL expected: FAIL
[right length(pc) / values]
expected: FAIL
[top length(pt) / values]
expected: FAIL
[max-height percentage(%) / values] [max-height percentage(%) / values]
expected: FAIL expected: FAIL
@ -68,9 +62,6 @@
[border-right-color color(rgba) / values] [border-right-color color(rgba) / values]
expected: FAIL expected: FAIL
[top length(pc) / values]
expected: FAIL
[font-size length(ex) / values] [font-size length(ex) / values]
expected: FAIL expected: FAIL
@ -131,9 +122,6 @@
[border-top-width length(cm) / values] [border-top-width length(cm) / values]
expected: FAIL expected: FAIL
[right length(px) / values]
expected: FAIL
[max-width length(em) / values] [max-width length(em) / values]
expected: FAIL expected: FAIL
@ -146,9 +134,6 @@
[border-right-width length(cm) / values] [border-right-width length(cm) / values]
expected: FAIL expected: FAIL
[top length(px) / values]
expected: FAIL
[outline-offset length(ex) / values] [outline-offset length(ex) / values]
expected: FAIL expected: FAIL
@ -179,9 +164,6 @@
[min-height percentage(%) / values] [min-height percentage(%) / values]
expected: FAIL expected: FAIL
[top percentage(%) / values]
expected: FAIL
[max-height length(pt) / values] [max-height length(pt) / values]
expected: FAIL expected: FAIL
@ -245,9 +227,6 @@
[line-height length(pt) / values] [line-height length(pt) / values]
expected: FAIL expected: FAIL
[top length(em) / values]
expected: FAIL
[border-top-width length(px) / values] [border-top-width length(px) / values]
expected: FAIL expected: FAIL
@ -293,9 +272,6 @@
[background-position length(cm) / values] [background-position length(cm) / values]
expected: FAIL expected: FAIL
[top length(in) / values]
expected: FAIL
[line-height length(em) / values] [line-height length(em) / values]
expected: FAIL expected: FAIL
@ -386,9 +362,6 @@
[min-width length(in) / values] [min-width length(in) / values]
expected: FAIL expected: FAIL
[top length(cm) / values]
expected: FAIL
[outline-width length(cm) / values] [outline-width length(cm) / values]
expected: FAIL expected: FAIL
@ -398,9 +371,6 @@
[max-width length(ex) / values] [max-width length(ex) / values]
expected: FAIL expected: FAIL
[top length(mm) / values]
expected: FAIL
[letter-spacing length(ex) / values] [letter-spacing length(ex) / values]
expected: FAIL expected: FAIL
@ -455,9 +425,6 @@
[max-height length(cm) / values] [max-height length(cm) / values]
expected: FAIL expected: FAIL
[top length(ex) / values]
expected: FAIL
[outline-width length(em) / values] [outline-width length(em) / values]
expected: FAIL expected: FAIL
@ -503,9 +470,6 @@
[line-height length(pc) / values] [line-height length(pc) / values]
expected: FAIL expected: FAIL
[right length(pt) / values]
expected: FAIL
[background-position length(em) / values] [background-position length(em) / values]
expected: FAIL expected: FAIL

View file

@ -2,6 +2,3 @@
[listeners are called when <iframe> is resized] [listeners are called when <iframe> is resized]
expected: FAIL expected: FAIL
[listeners are called correct number of times]
expected: FAIL

View file

@ -17,6 +17,3 @@
[test the top of layer] [test the top of layer]
expected: FAIL expected: FAIL
[test some point of the element: top left corner]
expected: FAIL

View file

@ -2,3 +2,12 @@
[replace / replaceSync on non-constructed stylesheet] [replace / replaceSync on non-constructed stylesheet]
expected: FAIL expected: FAIL
[CSSStyleSheet.replace returns a rejected promise for non-constructed sheets]
expected: FAIL
[CSSStyleSheet.replace returns a rejected promise for non-constructed sheets that have no associated document]
expected: FAIL
[CSSStyleSheet.replaceSync throws NotAllowedError for non-constructed sheets]
expected: FAIL

View file

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

View file

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

View file

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

View file

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

View file

@ -1,10 +1,9 @@
[promise-job-entry.html] [promise-job-entry.html]
expected: TIMEOUT
[Fulfillment handler on fulfilled promise] [Fulfillment handler on fulfilled promise]
expected: FAIL expected: FAIL
[Rejection handler on pending-then-rejected promise] [Rejection handler on pending-then-rejected promise]
expected: TIMEOUT expected: FAIL
[Sanity check: this all works as expected with no promises involved] [Sanity check: this all works as expected with no promises involved]
expected: FAIL expected: FAIL
@ -16,5 +15,5 @@
expected: FAIL expected: FAIL
[Fulfillment handler on pending-then-fulfilled promise] [Fulfillment handler on pending-then-fulfilled promise]
expected: TIMEOUT expected: FAIL

View file

@ -101,3 +101,6 @@
[X Rendered audio for channel 5 does not equal [0,0.0626220703125,0.125030517578125,0.18695068359375,0.24810791015625,0.308319091796875,0.3673095703125,0.42486572265625,0.480743408203125,0.53472900390625,0.58660888671875,0.636199951171875,0.68328857421875,0.727691650390625,0.76922607421875,0.8077392578125...\] with an element-wise tolerance of {"absoluteThreshold":0.000030517578125,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[1\]\t3.6732959747314453e-1\t6.2622070312500000e-2\t3.0470752716064453e-1\t4.8658168859649127e+0\t3.0517578125000000e-5\n\t[2\]\t6.8329977989196777e-1\t1.2503051757812500e-1\t5.5826926231384277e-1\t4.4650639949963384e+0\t3.0517578125000000e-5\n\t[3\]\t9.0373212099075317e-1\t1.8695068359375000e-1\t7.1678143739700317e-1\t3.8340669508039502e+0\t3.0517578125000000e-5\n\t[4\]\t9.9780619144439697e-1\t2.4810791015625000e-1\t7.4969828128814697e-1\t3.0216621502152523e+0\t3.0517578125000000e-5\n\t[5\]\t9.5236867666244507e-1\t3.0831909179687500e-1\t6.4404958486557007e-1\t2.0889059484187866e+0\t3.0517578125000000e-5\n\t...and 40530 more errors.\n\tMax AbsError of 1.9986916780471802e+0 at index of 29020.\n\t[29020\]\t9.9994289875030518e-1\t-9.9874877929687500e-1\t1.9986916780471802e+0\t2.0011956154322119e+0\t3.0517578125000000e-5\n\tMax RelError of Infinity at index of 12348.\n\t[12348\]\t9.5105654001235962e-1\t0.0000000000000000e+0\t9.5105654001235962e-1\tInfinity\t3.0517578125000000e-5\n] [X Rendered audio for channel 5 does not equal [0,0.0626220703125,0.125030517578125,0.18695068359375,0.24810791015625,0.308319091796875,0.3673095703125,0.42486572265625,0.480743408203125,0.53472900390625,0.58660888671875,0.636199951171875,0.68328857421875,0.727691650390625,0.76922607421875,0.8077392578125...\] with an element-wise tolerance of {"absoluteThreshold":0.000030517578125,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[1\]\t3.6732959747314453e-1\t6.2622070312500000e-2\t3.0470752716064453e-1\t4.8658168859649127e+0\t3.0517578125000000e-5\n\t[2\]\t6.8329977989196777e-1\t1.2503051757812500e-1\t5.5826926231384277e-1\t4.4650639949963384e+0\t3.0517578125000000e-5\n\t[3\]\t9.0373212099075317e-1\t1.8695068359375000e-1\t7.1678143739700317e-1\t3.8340669508039502e+0\t3.0517578125000000e-5\n\t[4\]\t9.9780619144439697e-1\t2.4810791015625000e-1\t7.4969828128814697e-1\t3.0216621502152523e+0\t3.0517578125000000e-5\n\t[5\]\t9.5236867666244507e-1\t3.0831909179687500e-1\t6.4404958486557007e-1\t2.0889059484187866e+0\t3.0517578125000000e-5\n\t...and 40530 more errors.\n\tMax AbsError of 1.9986916780471802e+0 at index of 29020.\n\t[29020\]\t9.9994289875030518e-1\t-9.9874877929687500e-1\t1.9986916780471802e+0\t2.0011956154322119e+0\t3.0517578125000000e-5\n\tMax RelError of Infinity at index of 12348.\n\t[12348\]\t9.5105654001235962e-1\t0.0000000000000000e+0\t9.5105654001235962e-1\tInfinity\t3.0517578125000000e-5\n]
expected: FAIL expected: FAIL
[X Rendered audio for channel 5 does not equal [0,0.0626220703125,0.125030517578125,0.18695068359375,0.24810791015625,0.308319091796875,0.3673095703125,0.42486572265625,0.480743408203125,0.53472900390625,0.58660888671875,0.636199951171875,0.68328857421875,0.727691650390625,0.76922607421875,0.8077392578125...\] with an element-wise tolerance of {"absoluteThreshold":0.000030517578125,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[1\]\t3.6732959747314453e-1\t6.2622070312500000e-2\t3.0470752716064453e-1\t4.8658168859649127e+0\t3.0517578125000000e-5\n\t[2\]\t6.8329977989196777e-1\t1.2503051757812500e-1\t5.5826926231384277e-1\t4.4650639949963384e+0\t3.0517578125000000e-5\n\t[3\]\t9.0373212099075317e-1\t1.8695068359375000e-1\t7.1678143739700317e-1\t3.8340669508039502e+0\t3.0517578125000000e-5\n\t[4\]\t9.9780619144439697e-1\t2.4810791015625000e-1\t7.4969828128814697e-1\t3.0216621502152523e+0\t3.0517578125000000e-5\n\t[5\]\t9.5236867666244507e-1\t3.0831909179687500e-1\t6.4404958486557007e-1\t2.0889059484187866e+0\t3.0517578125000000e-5\n\t...and 37006 more errors.\n\tMax AbsError of 1.9999977350234985e+0 at index of 34616.\n\t[34616\]\t9.9999773502349854e-1\t-1.0000000000000000e+0\t1.9999977350234985e+0\t1.9999977350234985e+0\t3.0517578125000000e-5\n\tMax RelError of Infinity at index of 14112.\n\t[14112\]\t-9.5105654001235962e-1\t0.0000000000000000e+0\t9.5105654001235962e-1\tInfinity\t3.0517578125000000e-5\n]
expected: FAIL

View file

@ -0,0 +1,4 @@
[interface.py]
[test_navigator_webdriver_active]
expected: FAIL

View file

@ -0,0 +1,4 @@
[WorkerGlobalScope-close.html]
[Test sending a message after closing.]
expected: FAIL

View file

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

View file

@ -19989,7 +19989,7 @@
] ]
], ],
"pservers-grad-08-b-manual.svg": [ "pservers-grad-08-b-manual.svg": [
"654ec8d409b5a11b86036b428b65def3adbfba26", "ba7413e2c5f9f0c6a587816beddac7985566a9a9",
[ [
null, null,
{} {}
@ -21109,7 +21109,7 @@
] ]
], ],
"text-altglyph-01-b-manual.svg": [ "text-altglyph-01-b-manual.svg": [
"db208cea587322b977eb0c81edc5d38451c3da56", "85a31a18a2957d8c6c5904cb375b53ec490899f5",
[ [
null, null,
{} {}
@ -315174,7 +315174,7 @@
[] []
], ],
"custom.css": [ "custom.css": [
"a5f59ce7721cce73cc79dd69bff68ef8afe14e9a", "58a982579f06c2c7093e4847a64d91c9722dd946",
[] []
], ],
"files-changed.png": [ "files-changed.png": [
@ -315368,7 +315368,7 @@
[] []
], ],
"making-a-testing-plan.md": [ "making-a-testing-plan.md": [
"0f5673016c0502edc11c915ee64b4901ed384c23", "520c5a32e0705e9a692a96f2e6ac998a191acf4b",
[] []
], ],
"manual.md": [ "manual.md": [
@ -333464,7 +333464,7 @@
], ],
"resources": { "resources": {
"orientation-event-helpers.js": [ "orientation-event-helpers.js": [
"528dfa9a7a057324b07cfda37dd454b48c43ff0e", "3168b71c5ec6476f4120ea2e59d00cb371e40596",
[] []
] ]
} }
@ -341083,7 +341083,7 @@
[] []
], ],
"safari-technology-preview.rb": [ "safari-technology-preview.rb": [
"d58664c5b6c67e32c63f1d122625a56211371511", "6afe1c188f9f290699605b66762eaaadd0020011",
[] []
], ],
"system_info.yml": [ "system_info.yml": [
@ -394003,7 +394003,14 @@
{} {}
] ]
] ]
} },
"ruby-position.html": [
"981a40531a983dd8c1dd27b875874f15232df6ba",
[
null,
{}
]
]
}, },
"css-scoping": { "css-scoping": {
"css-scoping-shadow-dynamic-remove-style-detached.html": [ "css-scoping-shadow-dynamic-remove-style-detached.html": [
@ -404604,7 +404611,7 @@
] ]
], ],
"CSSStyleSheet-constructable-replace-on-regular-sheet.html": [ "CSSStyleSheet-constructable-replace-on-regular-sheet.html": [
"d059258d90a64ac7dee02a14d92c677afe3fdb47", "5ce0cbee97a2a1593018089f9252870bdb47587b",
[ [
null, null,
{} {}
@ -469207,7 +469214,7 @@
] ]
], ],
"device-orientation-events-unavailable-on-insecure-origins.html": [ "device-orientation-events-unavailable-on-insecure-origins.html": [
"3af5e9241778694dc36e5bbf70fce1326e6e7adf", "571a388f64495e61b8f0eb846e03b226ce007d9f",
[ [
null, null,
{ {
@ -469240,7 +469247,7 @@
], ],
"motion": { "motion": {
"add-during-dispatch.https.html": [ "add-during-dispatch.https.html": [
"d40b557a2d6f09f2fa04291ddbca859dc4a3d1d1", "3a895b9d0969ab1c8a77509ab29d2bd8071d372e",
[ [
null, null,
{ {
@ -469249,7 +469256,7 @@
] ]
], ],
"add-listener-from-callback.https.html": [ "add-listener-from-callback.https.html": [
"11f2695794c8e1d75f8a30031f2a38c9155252ed", "0803d7cc9bfa8951cbce39dad8c2b63ed713956b",
[ [
null, null,
{ {
@ -469265,7 +469272,7 @@
] ]
], ],
"multiple-event-listeners.https.html": [ "multiple-event-listeners.https.html": [
"ad851eec2919ed04b23c93a43221bcb5acefc023", "207fdd2d9c00b5998601508e33911002697026c0",
[ [
null, null,
{ {
@ -469274,7 +469281,7 @@
] ]
], ],
"null-values.https.html": [ "null-values.https.html": [
"4da64c0c9e85b87505c78b136435b42f546bc995", "a6035543ba457fd701f40f89ccacf32f8a0b503e",
[ [
null, null,
{ {
@ -469292,7 +469299,7 @@
}, },
"orientation": { "orientation": {
"absolute-fallback.https.html": [ "absolute-fallback.https.html": [
"de0770a9f75c0ad92c503f636f4cf9c8105fc465", "835d2441b358a1ba3aa3013838b19c3aac531d1f",
[ [
null, null,
{ {
@ -469301,7 +469308,7 @@
] ]
], ],
"add-listener-from-callback.https.html": [ "add-listener-from-callback.https.html": [
"040e2a2f5d117eec2f9da811b2327ea5fd368b49", "8f8cfa29c4f948cc926829a48d0d89516dbb26e5",
[ [
null, null,
{ {
@ -469310,7 +469317,7 @@
] ]
], ],
"basic-operation-absolute.https.html": [ "basic-operation-absolute.https.html": [
"bc35e1498f45e0fadc41ccb0948abf012414cd27", "05ac82cd35f3e373c3590a71bc2541d4dba4897f",
[ [
null, null,
{ {
@ -469319,7 +469326,7 @@
] ]
], ],
"basic-operation.https.html": [ "basic-operation.https.html": [
"eb57d141b35bb4b9e64b7b3dc2efc6ec32973da4", "3806ee0792aeba94e639dddb06b40a9db76bd2f7",
[ [
null, null,
{ {
@ -469334,15 +469341,8 @@
{} {}
] ]
], ],
"deviceorientationabsoluteevent.https.html": [
"e63783f6cf479f38504bb04bcc947a08ee34c8b3",
[
null,
{}
]
],
"multiple-event-listeners.https.html": [ "multiple-event-listeners.https.html": [
"3a8add23c947cba88fc66a1fabf3e955f5578fd5", "13d05f0c745fa0930b74c707ac9381005d4910ba",
[ [
null, null,
{ {
@ -469360,7 +469360,7 @@
] ]
], ],
"null-values.https.html": [ "null-values.https.html": [
"df18f35c6cacf9fc1e090c8ff071a0fb1175ef07", "55039ea2763bbb182b8aaf3ad68904dfa7a90619",
[ [
null, null,
{ {
@ -469376,7 +469376,7 @@
] ]
], ],
"updates.https.html": [ "updates.https.html": [
"09472e6b419e8a2f772ae9d399b15b3352c2d868", "de203da0a3af07d6b1d82c5550f8224562c623f2",
[ [
null, null,
{ {
@ -545085,6 +545085,15 @@
] ]
] ]
}, },
"interface": {
"interface.py": [
"6a7afcd26358aaad3779a912fd4bc00a66ca9571",
[
null,
{}
]
]
},
"is_element_enabled": { "is_element_enabled": {
"enabled.py": [ "enabled.py": [
"dd56084d8d0eca15b7b6d46491bbd9f0a64cef40", "dd56084d8d0eca15b7b6d46491bbd9f0a64cef40",

View file

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

View file

@ -1,2 +1,2 @@
[no-transition-from-ua-to-blocking-stylesheet.html] [no-transition-from-ua-to-blocking-stylesheet.html]
expected: TIMEOUT expected: FAIL

View file

@ -509,39 +509,3 @@
[border-left-width length(pt) / values] [border-left-width length(pt) / values]
expected: FAIL expected: FAIL
[right length(pc) / values]
expected: FAIL
[top length(pt) / values]
expected: FAIL
[top length(pc) / values]
expected: FAIL
[right length(px) / values]
expected: FAIL
[top length(px) / values]
expected: FAIL
[top percentage(%) / values]
expected: FAIL
[top length(em) / values]
expected: FAIL
[top length(in) / values]
expected: FAIL
[top length(cm) / values]
expected: FAIL
[top length(mm) / values]
expected: FAIL
[top length(ex) / values]
expected: FAIL
[right length(pt) / values]
expected: FAIL

View file

@ -2,6 +2,3 @@
[listeners are called when <iframe> is resized] [listeners are called when <iframe> is resized]
expected: FAIL expected: FAIL
[listeners are called correct number of times]
expected: FAIL

View file

@ -21,6 +21,3 @@
[test the top of layer] [test the top of layer]
expected: FAIL expected: FAIL
[test some point of the element: top left corner]
expected: FAIL

View file

@ -2,3 +2,12 @@
[replace / replaceSync on non-constructed stylesheet] [replace / replaceSync on non-constructed stylesheet]
expected: FAIL expected: FAIL
[CSSStyleSheet.replace returns a rejected promise for non-constructed sheets]
expected: FAIL
[CSSStyleSheet.replace returns a rejected promise for non-constructed sheets that have no associated document]
expected: FAIL
[CSSStyleSheet.replaceSync throws NotAllowedError for non-constructed sheets]
expected: FAIL

View file

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

View file

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

View file

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

View file

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

View file

@ -1,10 +1,9 @@
[promise-job-entry.html] [promise-job-entry.html]
expected: TIMEOUT
[Fulfillment handler on fulfilled promise] [Fulfillment handler on fulfilled promise]
expected: FAIL expected: FAIL
[Rejection handler on pending-then-rejected promise] [Rejection handler on pending-then-rejected promise]
expected: TIMEOUT expected: FAIL
[Sanity check: this all works as expected with no promises involved] [Sanity check: this all works as expected with no promises involved]
expected: FAIL expected: FAIL
@ -16,5 +15,5 @@
expected: FAIL expected: FAIL
[Fulfillment handler on pending-then-fulfilled promise] [Fulfillment handler on pending-then-fulfilled promise]
expected: TIMEOUT expected: FAIL

View file

@ -170,3 +170,6 @@
[X Rendered audio for channel 5 does not equal [0,0.0626220703125,0.125030517578125,0.18695068359375,0.24810791015625,0.308319091796875,0.3673095703125,0.42486572265625,0.480743408203125,0.53472900390625,0.58660888671875,0.636199951171875,0.68328857421875,0.727691650390625,0.76922607421875,0.8077392578125...\] with an element-wise tolerance of {"absoluteThreshold":0.000030517578125,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[1\]\t3.6732959747314453e-1\t6.2622070312500000e-2\t3.0470752716064453e-1\t4.8658168859649127e+0\t3.0517578125000000e-5\n\t[2\]\t6.8329977989196777e-1\t1.2503051757812500e-1\t5.5826926231384277e-1\t4.4650639949963384e+0\t3.0517578125000000e-5\n\t[3\]\t9.0373212099075317e-1\t1.8695068359375000e-1\t7.1678143739700317e-1\t3.8340669508039502e+0\t3.0517578125000000e-5\n\t[4\]\t9.9780619144439697e-1\t2.4810791015625000e-1\t7.4969828128814697e-1\t3.0216621502152523e+0\t3.0517578125000000e-5\n\t[5\]\t9.5236867666244507e-1\t3.0831909179687500e-1\t6.4404958486557007e-1\t2.0889059484187866e+0\t3.0517578125000000e-5\n\t...and 40530 more errors.\n\tMax AbsError of 1.9986916780471802e+0 at index of 29020.\n\t[29020\]\t9.9994289875030518e-1\t-9.9874877929687500e-1\t1.9986916780471802e+0\t2.0011956154322119e+0\t3.0517578125000000e-5\n\tMax RelError of Infinity at index of 12348.\n\t[12348\]\t9.5105654001235962e-1\t0.0000000000000000e+0\t9.5105654001235962e-1\tInfinity\t3.0517578125000000e-5\n] [X Rendered audio for channel 5 does not equal [0,0.0626220703125,0.125030517578125,0.18695068359375,0.24810791015625,0.308319091796875,0.3673095703125,0.42486572265625,0.480743408203125,0.53472900390625,0.58660888671875,0.636199951171875,0.68328857421875,0.727691650390625,0.76922607421875,0.8077392578125...\] with an element-wise tolerance of {"absoluteThreshold":0.000030517578125,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[1\]\t3.6732959747314453e-1\t6.2622070312500000e-2\t3.0470752716064453e-1\t4.8658168859649127e+0\t3.0517578125000000e-5\n\t[2\]\t6.8329977989196777e-1\t1.2503051757812500e-1\t5.5826926231384277e-1\t4.4650639949963384e+0\t3.0517578125000000e-5\n\t[3\]\t9.0373212099075317e-1\t1.8695068359375000e-1\t7.1678143739700317e-1\t3.8340669508039502e+0\t3.0517578125000000e-5\n\t[4\]\t9.9780619144439697e-1\t2.4810791015625000e-1\t7.4969828128814697e-1\t3.0216621502152523e+0\t3.0517578125000000e-5\n\t[5\]\t9.5236867666244507e-1\t3.0831909179687500e-1\t6.4404958486557007e-1\t2.0889059484187866e+0\t3.0517578125000000e-5\n\t...and 40530 more errors.\n\tMax AbsError of 1.9986916780471802e+0 at index of 29020.\n\t[29020\]\t9.9994289875030518e-1\t-9.9874877929687500e-1\t1.9986916780471802e+0\t2.0011956154322119e+0\t3.0517578125000000e-5\n\tMax RelError of Infinity at index of 12348.\n\t[12348\]\t9.5105654001235962e-1\t0.0000000000000000e+0\t9.5105654001235962e-1\tInfinity\t3.0517578125000000e-5\n]
expected: FAIL expected: FAIL
[X Rendered audio for channel 5 does not equal [0,0.0626220703125,0.125030517578125,0.18695068359375,0.24810791015625,0.308319091796875,0.3673095703125,0.42486572265625,0.480743408203125,0.53472900390625,0.58660888671875,0.636199951171875,0.68328857421875,0.727691650390625,0.76922607421875,0.8077392578125...\] with an element-wise tolerance of {"absoluteThreshold":0.000030517578125,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[1\]\t3.6732959747314453e-1\t6.2622070312500000e-2\t3.0470752716064453e-1\t4.8658168859649127e+0\t3.0517578125000000e-5\n\t[2\]\t6.8329977989196777e-1\t1.2503051757812500e-1\t5.5826926231384277e-1\t4.4650639949963384e+0\t3.0517578125000000e-5\n\t[3\]\t9.0373212099075317e-1\t1.8695068359375000e-1\t7.1678143739700317e-1\t3.8340669508039502e+0\t3.0517578125000000e-5\n\t[4\]\t9.9780619144439697e-1\t2.4810791015625000e-1\t7.4969828128814697e-1\t3.0216621502152523e+0\t3.0517578125000000e-5\n\t[5\]\t9.5236867666244507e-1\t3.0831909179687500e-1\t6.4404958486557007e-1\t2.0889059484187866e+0\t3.0517578125000000e-5\n\t...and 37006 more errors.\n\tMax AbsError of 1.9999977350234985e+0 at index of 34616.\n\t[34616\]\t9.9999773502349854e-1\t-1.0000000000000000e+0\t1.9999977350234985e+0\t1.9999977350234985e+0\t3.0517578125000000e-5\n\tMax RelError of Infinity at index of 14112.\n\t[14112\]\t-9.5105654001235962e-1\t0.0000000000000000e+0\t9.5105654001235962e-1\tInfinity\t3.0517578125000000e-5\n]
expected: FAIL

View file

@ -0,0 +1,4 @@
[interface.py]
[test_navigator_webdriver_active]
expected: FAIL

View file

@ -0,0 +1,4 @@
[WorkerGlobalScope-close.html]
[Test sending a message after closing.]
expected: FAIL

View file

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

View file

@ -0,0 +1,34 @@
<!DOCTYPE html>
<link rel="help" href="https://drafts.csswg.org/css-ruby/#rubypos">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<body>
<p><ruby id="o1" style="ruby-position: over">base<rt>annotation</rt></ruby></p>
<p><ruby id="o2" style="ruby-position: under">base<rt style="ruby-position: over">annotation</rt></ruby></p>
<p><ruby id="u1" style="ruby-position: under">base<rt>annotation</rt></ruby></p>
<p><ruby id="u2">base<rt style="ruby-position: under">annotation</rt></ruby></p>
<script>
test(() => {
const o1 = document.querySelector('#o1');
assert_true(o1.querySelector('rt').getBoundingClientRect().top <= o1.getBoundingClientRect().top);
}, 'ruby-position:over on <ruby> works');
test(() => {
const o2 = document.querySelector('#o2');
assert_true(o2.querySelector('rt').getBoundingClientRect().top <= o2.getBoundingClientRect().top);
}, 'ruby-position:over on <rt> works');
test(() => {
const u1 = document.querySelector('#u1');
assert_true(u1.querySelector('rt').getBoundingClientRect().bottom >= u1.getBoundingClientRect().bottom);
}, 'ruby-position:under on <ruby> works');
test(() => {
const u2 = document.querySelector('#u2');
assert_true(u2.querySelector('rt').getBoundingClientRect().bottom >= u2.getBoundingClientRect().bottom);
}, 'ruby-position:under on <rt> works');
</script>
</body>

View file

@ -4,15 +4,29 @@
<link rel="help" href="https://wicg.github.io/construct-stylesheets/"> <link rel="help" href="https://wicg.github.io/construct-stylesheets/">
<script src = '/resources/testharness.js'></script> <script src = '/resources/testharness.js'></script>
<script src = '/resources/testharnessreport.js'></script> <script src = '/resources/testharnessreport.js'></script>
<style>:root { background-color: lime }</style> <style id="style">:root { background-color: lime }</style>
<script> <script>
promise_test(async function(t) {
test(() => {
assert_equals(getComputedStyle(document.documentElement).backgroundColor, "rgb(0, 255, 0)", "precondition") assert_equals(getComputedStyle(document.documentElement).backgroundColor, "rgb(0, 255, 0)", "precondition")
let sheet = document.styleSheets[0]; let sheet = document.styleSheets[0];
assert_throws_dom("NotAllowedError", () => sheet.replaceSync(":root { background-color: red }"), "replaceSync on non-constructed sheet should throw"); assert_throws_dom("NotAllowedError", () => sheet.replaceSync(":root { background-color: red }"), "replaceSync on non-constructed sheet should throw");
assert_equals(getComputedStyle(document.documentElement).backgroundColor, "rgb(0, 255, 0)", "old sheet should still apply after replace"); assert_equals(getComputedStyle(document.documentElement).backgroundColor, "rgb(0, 255, 0)", "old sheet should still apply after replace");
}, "CSSStyleSheet.replaceSync throws NotAllowedError for non-constructed sheets")
promise_test(async function(t) {
assert_equals(getComputedStyle(document.documentElement).backgroundColor, "rgb(0, 255, 0)", "precondition")
let sheet = document.styleSheets[0];
await promise_rejects_dom(t, "NotAllowedError", sheet.replace(":root { background-color: red }"), "replace on non-constructed sheet should return a rejected promise"); await promise_rejects_dom(t, "NotAllowedError", sheet.replace(":root { background-color: red }"), "replace on non-constructed sheet should return a rejected promise");
assert_equals(getComputedStyle(document.documentElement).backgroundColor, "rgb(0, 255, 0)", "old sheet should still apply after replace"); assert_equals(getComputedStyle(document.documentElement).backgroundColor, "rgb(0, 255, 0)", "old sheet should still apply after replace");
}); }, "CSSStyleSheet.replace returns a rejected promise for non-constructed sheets")
promise_test(async function(t) {
assert_equals(getComputedStyle(document.documentElement).backgroundColor, "rgb(0, 255, 0)", "precondition")
let sheet = document.styleSheets[0];
style.remove() // sheet's associated document becomes null.
await promise_rejects_dom(t, "NotAllowedError", sheet.replace(":root { background-color: red }"), "replace on non-constructed sheet should return a rejected promise");
assert_equals(getComputedStyle(document.documentElement).backgroundColor, "rgb(0, 255, 0)", "old sheet should still apply after replace");
}, "CSSStyleSheet.replace returns a rejected promise for non-constructed sheets that have no associated document")
</script> </script>

View file

@ -5,3 +5,7 @@ div.body {
#video-introduction-transcript iframe { #video-introduction-transcript iframe {
max-width: 100%; max-width: 100%;
} }
.table-container {
overflow: auto;
}

View file

@ -482,6 +482,8 @@ use [git](https://git-scm.com) to perform more powerful searches.
The following table lists some common search criteria and examples of how they The following table lists some common search criteria and examples of how they
can be expressed using regular expressions: can be expressed using regular expressions:
<div class="table-container">
```eval_rst ```eval_rst
================================= ================== ========================== ================================= ================== ==========================
Criteria Example match Example regular expression Criteria Example match Example regular expression
@ -494,6 +496,8 @@ CSS property name ``style="foo: 4"`` ``([{;=\"']|\s|^)foo\s+:``
================================= ================== ========================== ================================= ================== ==========================
``` ```
</div>
Bear in mind that searches like this are not necessarily exhaustive. Depending Bear in mind that searches like this are not necessarily exhaustive. Depending
on the feature, it may be difficult (or even impossible) to write a query that on the feature, it may be difficult (or even impossible) to write a query that
correctly identifies all relevant tests. This strategy can give a helpful correctly identifies all relevant tests. This strategy can give a helpful

View file

@ -8,15 +8,6 @@
<script src="resources/orientation-event-helpers.js"></script> <script src="resources/orientation-event-helpers.js"></script>
<script> <script>
function waitForLackOfEvent(t, eventName) {
return new Promise(async (resolve, reject) => {
window.addEventListener(eventName, reject);
await new Promise(r => t.step_timeout(r, 1000));
window.removeEventListener(eventName, reject);
resolve();
});
}
if (window.location.origin != get_host_info().HTTP_ORIGIN) { if (window.location.origin != get_host_info().HTTP_ORIGIN) {
window.location = get_host_info().HTTP_ORIGIN + window.location.pathname; window.location = get_host_info().HTTP_ORIGIN + window.location.pathname;
promise_test(_ => new Promise(_ => {}), "Stall tests on the wrong host."); promise_test(_ => new Promise(_ => {}), "Stall tests on the wrong host.");
@ -36,25 +27,29 @@ if (window.location.origin != get_host_info().HTTP_ORIGIN) {
const FAKE_ACCELERATION_DATA = [1, 2, 3]; const FAKE_ACCELERATION_DATA = [1, 2, 3];
const FAKE_LINEAR_ACCELERATION_DATA = [4, 5, 6]; const FAKE_LINEAR_ACCELERATION_DATA = [4, 5, 6];
const FAKE_GYROSCOPE_DATA = [7, 8, 9]; const FAKE_GYROSCOPE_DATA = [7, 8, 9];
window.ondevicemotion = t.unreached_func("devicemotion event should not be fired.");
setMockSensorDataForType(sensorProvider, 'Accelerometer', FAKE_ACCELERATION_DATA); setMockSensorDataForType(sensorProvider, 'Accelerometer', FAKE_ACCELERATION_DATA);
setMockSensorDataForType(sensorProvider, 'LinearAccelerationSensor', FAKE_LINEAR_ACCELERATION_DATA); setMockSensorDataForType(sensorProvider, 'LinearAccelerationSensor', FAKE_LINEAR_ACCELERATION_DATA);
setMockSensorDataForType(sensorProvider, 'Gyroscope', FAKE_GYROSCOPE_DATA); setMockSensorDataForType(sensorProvider, 'Gyroscope', FAKE_GYROSCOPE_DATA);
return waitForLackOfEvent(t, 'devicemotion'); await new Promise(r => t.step_timeout(r, 1000));
}, 'addEventListener() for `devicemotion` does not crash but the handler never fires.'); }, 'addEventListener() for `devicemotion` does not crash but the handler never fires.');
sensor_test(async (t, sensorProvider) => { sensor_test(async (t, sensorProvider) => {
const FAKE_ORIENTATION_DATA = [1.1, 2.2, 3.3]; const FAKE_ORIENTATION_DATA = [1.1, 2.2, 3.3];
window.ondeviceorientation = t.unreached_func("deviceorientation event should not be fired.");
setMockSensorDataForType(sensorProvider, 'RelativeOrientationEulerAngles', FAKE_ORIENTATION_DATA); setMockSensorDataForType(sensorProvider, 'RelativeOrientationEulerAngles', FAKE_ORIENTATION_DATA);
return waitForLackOfEvent(t, 'deviceorientation'); await new Promise(r => t.step_timeout(r, 1000));
}, 'addEventListener() for `deviceorientation` does not crash but the handler never fires.'); }, 'addEventListener() for `deviceorientation` does not crash but the handler never fires.');
sensor_test(async (t, sensorProvider) => { sensor_test(async (t, sensorProvider) => {
const FAKE_ORIENTATION_DATA = [1.1, 2.2, 3.3]; const FAKE_ORIENTATION_DATA = [1.1, 2.2, 3.3];
window.ondeviceorientationabsolute = t.unreached_func("deviceorientationabsolute event should not be fired.");
setMockSensorDataForType(sensorProvider, 'AbsoluteOrientationEulerAngles', FAKE_ORIENTATION_DATA); setMockSensorDataForType(sensorProvider, 'AbsoluteOrientationEulerAngles', FAKE_ORIENTATION_DATA);
return waitForLackOfEvent(t, 'deviceorientationabsolute'); await new Promise(r => t.step_timeout(r, 1000));
}, 'addEventListener() for `deviceorientationabsolute` does not crash but the handler never fires.'); }, 'addEventListener() for `deviceorientationabsolute` does not crash but the handler never fires.');
} }
</script> </script>

View file

@ -12,11 +12,18 @@ sensor_test(async (t, sensorProvider) => {
4, 5, 6, 4, 5, 6,
7, 8, 9); 7, 8, 9);
setMockMotionData(sensorProvider, motionData); setMockMotionData(sensorProvider, motionData);
waitForMotion(motionData);
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
let result = reject; let result = reject;
window.addEventListener('devicemotion', event => result()); window.addEventListener('devicemotion', event1 => {
// Now we are in event dispatch.
assertEventEquals(event1, getExpectedMotionEvent(motionData));
window.addEventListener('devicemotion', event2 => {
// Not call until the outer function returns.
assertEventEquals(event2, getExpectedMotionEvent(motionData));
result();
});
});
result = resolve; result = resolve;
}); });
}, 'Test no fire listeners added during event dispatch.'); }, 'Test no fire listeners added during event dispatch.');

View file

@ -20,7 +20,7 @@ sensor_test(async (t, sensorProvider) => {
assert_true(event instanceof DeviceMotionEvent, 'event is DeviceMotionEvent'); assert_true(event instanceof DeviceMotionEvent, 'event is DeviceMotionEvent');
assert_equals(event.type, 'devicemotion', 'event.type is devicemotion'); assert_equals(event.type, 'devicemotion', 'event.type is devicemotion');
assert_true(event.target instanceof Window, 'event is fired on the window object'); assert_true(event.target instanceof Window, 'event is fired on the window object');
checkMotion(event, motionData); assertEventEquals(event, getExpectedMotionEvent(motionData));
window.removeEventListener('devicemotion', firstListener); window.removeEventListener('devicemotion', firstListener);
if (++firstEventCount == 1) { if (++firstEventCount == 1) {
window.addEventListener('devicemotion', secondListener); window.addEventListener('devicemotion', secondListener);
@ -32,7 +32,7 @@ sensor_test(async (t, sensorProvider) => {
let secondEventCount = 0; let secondEventCount = 0;
let secondPromise = new Promise(resolve => { let secondPromise = new Promise(resolve => {
secondListener = (event) => { secondListener = (event) => {
checkMotion(event, motionData); assertEventEquals(event, getExpectedMotionEvent(motionData));
window.removeEventListener('devicemotion', secondListener); window.removeEventListener('devicemotion', secondListener);
++secondEventCount; ++secondEventCount;
resolve(event); resolve(event);

View file

@ -19,19 +19,24 @@ sensor_test(async (t, sensorProvider) => {
let firstEventPromise = new Promise(resolve => { let firstEventPromise = new Promise(resolve => {
firstListener = resolve; firstListener = resolve;
}); });
// We directly add the listener instead of using waitForMotion // We directly add the listener instead of using EventWatcher
// because we want the listener to stay active after the first event fires. // because we want to remove listener after the first event fires
// but EventWatcher could only stop watching after test done.
window.addEventListener('devicemotion', firstListener); window.addEventListener('devicemotion', firstListener);
let secondEventPromise = waitForMotion(motionData1);
setMockMotionData(sensorProvider, motionData1);
let firstEvent = await firstEventPromise;
checkMotion(firstEvent, motionData1);
await secondEventPromise;
// At this point only the first event listener is active. const watcher = new EventWatcher(t, window, ['devicemotion']);
setMockMotionData(sensorProvider, motionData2); setMockMotionData(sensorProvider, motionData1);
let firstEvent = await firstEventPromise;
assertEventEquals(firstEvent, getExpectedMotionEvent(motionData1));
let secondEvent = await watcher.wait_for('devicemotion');
assertEventEquals(secondEvent, getExpectedMotionEvent(motionData1));
window.removeEventListener('devicemotion', firstListener); window.removeEventListener('devicemotion', firstListener);
return waitForMotion(motionData2); // At this point only the second event listener is active.
setMockMotionData(sensorProvider, motionData2);
let thirdEvent = await watcher.wait_for('devicemotion');
assertEventEquals(thirdEvent, getExpectedMotionEvent(motionData2));
}, 'Tests using multiple event handlers for the Device Motion API.'); }, 'Tests using multiple event handlers for the Device Motion API.');
</script> </script>

View file

@ -24,16 +24,21 @@ sensor_test(async (t, sensorProvider) => {
null, null, null, null, null, null,
null, null, null); null, null, null);
const watcher = new EventWatcher(t, window, ['devicemotion']);
setMockMotionData(sensorProvider, motionData1); setMockMotionData(sensorProvider, motionData1);
await waitForMotion(motionData1); const firstEvent = await watcher.wait_for('devicemotion');
assertEventEquals(firstEvent, getExpectedMotionEvent(motionData1));
setMockMotionData(sensorProvider, motionData2); setMockMotionData(sensorProvider, motionData2);
await waitForMotion(motionData2); const secondEvent = await watcher.wait_for('devicemotion');
assertEventEquals(secondEvent, getExpectedMotionEvent(motionData2));
setMockMotionData(sensorProvider, motionData3); setMockMotionData(sensorProvider, motionData3);
await waitForMotion(motionData3); const thirdEvent = await watcher.wait_for('devicemotion');
assertEventEquals(thirdEvent, getExpectedMotionEvent(motionData3));
setMockMotionData(sensorProvider, motionData4); setMockMotionData(sensorProvider, motionData4);
return waitForMotion(motionData4); const fourthEvent = await watcher.wait_for('devicemotion');
assertEventEquals(fourthEvent, getExpectedMotionEvent(motionData4));
}, 'Tests using null values for some or all of the event properties.'); }, 'Tests using null values for some or all of the event properties.');
</script> </script>

View file

@ -9,11 +9,13 @@
sensor_test(async (t, sensorProvider) => { sensor_test(async (t, sensorProvider) => {
const orientationData = generateOrientationData(1.1, 2.2, 3.3, true); const orientationData = generateOrientationData(1.1, 2.2, 3.3, true);
const watcher = new EventWatcher(t, window, ['deviceorientation']);
// Make the relative orientation sensor unavailable and set mock data for // Make the relative orientation sensor unavailable and set mock data for
// the absolute one. // the absolute one.
sensorProvider.setGetSensorShouldFail('RelativeOrientationEulerAngles', true); sensorProvider.setGetSensorShouldFail('RelativeOrientationEulerAngles', true);
setMockOrientationData(sensorProvider, orientationData); setMockOrientationData(sensorProvider, orientationData);
return waitForOrientation(orientationData); const event = await watcher.wait_for('deviceorientation');
assertEventEquals(event, getExpectedOrientationEvent(orientationData));
}, 'Tests that deviceorientation falls back to using absolute orientation data if relative is unavailable.'); }, 'Tests that deviceorientation falls back to using absolute orientation data if relative is unavailable.');
</script> </script>

View file

@ -18,7 +18,7 @@ sensor_test(async (t, sensorProvider) => {
assert_true(event instanceof DeviceOrientationEvent, 'event is DeviceOrientationEvent'); assert_true(event instanceof DeviceOrientationEvent, 'event is DeviceOrientationEvent');
assert_equals(event.type, 'deviceorientation', 'event.type is devicemotion'); assert_equals(event.type, 'deviceorientation', 'event.type is devicemotion');
assert_true(event.target instanceof Window, 'event is fired on the window object'); assert_true(event.target instanceof Window, 'event is fired on the window object');
checkOrientation(event, orientationData); assertEventEquals(event, getExpectedOrientationEvent(orientationData));
window.removeEventListener('deviceorientation', firstListener); window.removeEventListener('deviceorientation', firstListener);
if (++firstEventCount == 1) { if (++firstEventCount == 1) {
window.addEventListener('deviceorientation', secondListener); window.addEventListener('deviceorientation', secondListener);
@ -30,7 +30,7 @@ sensor_test(async (t, sensorProvider) => {
let secondEventCount = 0; let secondEventCount = 0;
let secondPromise = new Promise(resolve => { let secondPromise = new Promise(resolve => {
secondListener = (event) => { secondListener = (event) => {
checkOrientation(event, orientationData); assertEventEquals(event, getExpectedOrientationEvent(orientationData));
window.removeEventListener('deviceorientation', secondListener); window.removeEventListener('deviceorientation', secondListener);
++secondEventCount; ++secondEventCount;
resolve(event); resolve(event);

View file

@ -9,8 +9,23 @@
sensor_test(async (t, sensorProvider) => { sensor_test(async (t, sensorProvider) => {
const orientationData = generateOrientationData(1.1, 2.2, 3.3, true); const orientationData = generateOrientationData(1.1, 2.2, 3.3, true);
const watcher = new EventWatcher(t, window, ['deviceorientationabsolute']);
setMockOrientationData(sensorProvider, orientationData); setMockOrientationData(sensorProvider, orientationData);
return waitForAbsoluteOrientation(orientationData); const event = await watcher.wait_for('deviceorientationabsolute');
assertEventEquals(event, getExpectedAbsoluteOrientationEvent(orientationData));
}, 'Tests basic operation of deviceorientationabsolute event using mock data.'); }, 'Tests basic operation of deviceorientationabsolute event using mock data.');
sensor_test(async (t, sensorProvider) => {
const orientationData = generateOrientationData(null, null, null, true);
const watcher = new EventWatcher(t, window, ['deviceorientationabsolute']);
// Make the absolute orientation sensor unavailable
sensorProvider.setGetSensorShouldFail('AbsoluteOrientationEulerAngles', true);
const event = await watcher.wait_for('deviceorientationabsolute');
assert_equals(event.type, 'deviceorientationabsolute', 'type is set to \"deviceorientationabsolute\"');
assert_true(event instanceof DeviceOrientationEvent, 'event is DeviceOrientationEvent');
assertEventEquals(event, getExpectedAbsoluteOrientationEvent(orientationData));
}, 'If UA can never provide absolute information, the event should be fired as a null event.');
</script> </script>

View file

@ -9,8 +9,24 @@
sensor_test(async (t, sensorProvider) => { sensor_test(async (t, sensorProvider) => {
const orientationData = generateOrientationData(1.1, 2.2, 3.3, false); const orientationData = generateOrientationData(1.1, 2.2, 3.3, false);
const watcher = new EventWatcher(t, window, ['deviceorientation']);
setMockOrientationData(sensorProvider, orientationData); setMockOrientationData(sensorProvider, orientationData);
return waitForOrientation(orientationData); const event = await watcher.wait_for('deviceorientation');
assertEventEquals(event, getExpectedOrientationEvent(orientationData));
}, 'Tests basic operation of deviceorientation event using mock data.'); }, 'Tests basic operation of deviceorientation event using mock data.');
sensor_test(async (t, sensorProvider) => {
const orientationData = generateOrientationData(null, null, null, false);
const watcher = new EventWatcher(t, window, ['deviceorientation']);
// Make the orientation sensor unavailable
sensorProvider.setGetSensorShouldFail('AbsoluteOrientationEulerAngles', true);
sensorProvider.setGetSensorShouldFail('RelativeOrientationEulerAngles', true);
const event = await watcher.wait_for('deviceorientation');
assert_equals(event.type, 'deviceorientation', 'type is set to \"deviceorientation\"');
assert_true(event instanceof DeviceOrientationEvent, 'event is DeviceOrientationEvent');
assertEventEquals(event, getExpectedOrientationEvent(orientationData));
}, 'If UA can never provide orientation information, the event should be fired as a null event.');
</script> </script>

View file

@ -1,31 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title>DeviceOrientationEvent attributes should be fired properly</title>
<meta charset='utf-8'>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<p>If an implementation can never provide absolute orientation information, the event should be fired with the alpha, beta and gamma attributes set to null.</p>
<div id="log"></div>
<script>
var t = async_test("deviceorientationabsolute event fires");
var run = false;
window.addEventListener("deviceorientationabsolute", function(e) {
if (!run) {
run = true;
t.step(function () {
assert_true(e instanceof DeviceOrientationEvent);
assert_equals(e.type, "deviceorientationabsolute", "type is set to \"deviceorientationabsolute\"");
assert_equals(e.alpha, null, "alpha is set to null");
assert_equals(e.beta, null, "beta is set to null");
assert_equals(e.gamma, null, "gamma is set to null");
assert_true(e.absolute, "absolute is set to true");
});
t.done();
}
}, false);
</script>
</body>
</html>

View file

@ -15,18 +15,24 @@ sensor_test(async (t, sensorProvider) => {
let firstEventPromise = new Promise(resolve => { let firstEventPromise = new Promise(resolve => {
firstListener = resolve; firstListener = resolve;
}); });
// We directly add the listener instead of using waitForOrientation // We directly add the listener instead of using EventWatcher
// because we want the listener to stay active after the first event fires. // because we want to remove listener after the first event fires
// but EventWatcher could only stop watching after test done.
window.addEventListener('deviceorientation', firstListener); window.addEventListener('deviceorientation', firstListener);
let secondEventPromise = waitForOrientation(orientationData1);
setMockOrientationData(sensorProvider, orientationData1);
let firstEvent = await firstEventPromise;
checkOrientation(firstEvent, orientationData1);
await secondEventPromise;
// At this point only the first listener is still active. const watcher = new EventWatcher(t, window, ['deviceorientation']);
setMockOrientationData(sensorProvider, orientationData2); setMockOrientationData(sensorProvider, orientationData1);
let firstEvent = await firstEventPromise;
assertEventEquals(firstEvent, getExpectedOrientationEvent(orientationData1));
let secondEvent = await watcher.wait_for('deviceorientation');
assertEventEquals(secondEvent, getExpectedOrientationEvent(orientationData1));
window.removeEventListener('deviceorientation', firstListener); window.removeEventListener('deviceorientation', firstListener);
return waitForOrientation(orientationData2); // At this point only the second event listener is still active.
setMockOrientationData(sensorProvider, orientationData2);
let thirdEvent = await watcher.wait_for('deviceorientation');
assertEventEquals(thirdEvent, getExpectedOrientationEvent(orientationData2));
}, 'Tests using multiple event handlers for the Device Orientation API.'); }, 'Tests using multiple event handlers for the Device Orientation API.');
</script> </script>

View file

@ -1,5 +1,4 @@
<!DOCTYPE html> <!DOCTYPE html>
<html>
<script src="/resources/testharness.js"></script> <script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script> <script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script> <script src="/resources/testdriver.js"></script>
@ -16,17 +15,21 @@ sensor_test(async (t, sensorProvider) => {
// will stop updating the sensor when it sees a null event. // will stop updating the sensor when it sees a null event.
const orientationData4 = generateOrientationData(null, null, null, false); const orientationData4 = generateOrientationData(null, null, null, false);
const watcher = new EventWatcher(t, window, ['deviceorientation']);
setMockOrientationData(sensorProvider, orientationData1); setMockOrientationData(sensorProvider, orientationData1);
await waitForOrientation(orientationData1); const firstEvent = await watcher.wait_for('deviceorientation');
assertEventEquals(firstEvent, getExpectedOrientationEvent(orientationData1));
setMockOrientationData(sensorProvider, orientationData2); setMockOrientationData(sensorProvider, orientationData2);
await waitForOrientation(orientationData2); const secondEvent = await watcher.wait_for('deviceorientation');
assertEventEquals(secondEvent, getExpectedOrientationEvent(orientationData2));
setMockOrientationData(sensorProvider, orientationData3); setMockOrientationData(sensorProvider, orientationData3);
await waitForOrientation(orientationData3); const thirdEvent = await watcher.wait_for('deviceorientation');
assertEventEquals(thirdEvent, getExpectedOrientationEvent(orientationData3));
setMockOrientationData(sensorProvider, orientationData4); setMockOrientationData(sensorProvider, orientationData4);
return waitForOrientation(orientationData4); const fourthEvent = await watcher.wait_for('deviceorientation');
assertEventEquals(fourthEvent, getExpectedOrientationEvent(orientationData4));
}, 'Tests using null values for some of the event properties.'); }, 'Tests using null values for some of the event properties.');
</script> </script>
</html>

View file

@ -11,10 +11,13 @@ sensor_test(async (t, sensorProvider) => {
const orientationData1 = generateOrientationData(1.1, 2.2, 3.3, false); const orientationData1 = generateOrientationData(1.1, 2.2, 3.3, false);
const orientationData2 = generateOrientationData(11.1, 22.2, 33.3, false); const orientationData2 = generateOrientationData(11.1, 22.2, 33.3, false);
const watcher = new EventWatcher(t, window, ['deviceorientation']);
setMockOrientationData(sensorProvider, orientationData1); setMockOrientationData(sensorProvider, orientationData1);
await waitForOrientation(orientationData1); const firstEvent = await watcher.wait_for('deviceorientation');
assertEventEquals(firstEvent, getExpectedOrientationEvent(orientationData1));
setMockOrientationData(sensorProvider, orientationData2); setMockOrientationData(sensorProvider, orientationData2);
return waitForOrientation(orientationData2); const secondEvent = await watcher.wait_for('deviceorientation');
assertEventEquals(secondEvent, getExpectedOrientationEvent(orientationData2));
}, 'Tests that updates to the orientation causes new events to fire.'); }, 'Tests that updates to the orientation causes new events to fire.');
</script> </script>

View file

@ -128,120 +128,54 @@ function setMockOrientationData(sensorProvider, orientationData) {
]); ]);
} }
function checkMotion(event, expectedMotionData) { function assertEventEquals(actualEvent, expectedEvent) {
assert_equals(event.acceleration.x, expectedMotionData.accelerationX, "acceleration.x"); for (let key1 of Object.keys(Object.getPrototypeOf(expectedEvent))) {
assert_equals(event.acceleration.y, expectedMotionData.accelerationY, "acceleration.y"); if (typeof expectedEvent[key1] === "object" && expectedEvent[key1] !== null) {
assert_equals(event.acceleration.z, expectedMotionData.accelerationZ, "acceleration.z"); for (let key2 of Object.keys(expectedEvent[key1])) {
assert_equals(actualEvent[key1][key2], expectedEvent[key1][key2],
assert_equals(event.accelerationIncludingGravity.x, expectedMotionData.accelerationIncludingGravityX, "accelerationIncludingGravity.x"); `$[key1].$[key2]`);
assert_equals(event.accelerationIncludingGravity.y, expectedMotionData.accelerationIncludingGravityY, "accelerationIncludingGravity.y"); }
assert_equals(event.accelerationIncludingGravity.z, expectedMotionData.accelerationIncludingGravityZ, "accelerationIncludingGravity.z"); } else {
assert_equals(actualEvent[key1], expectedEvent[key1], key1);
assert_approx_equals(event.rotationRate.alpha, expectedMotionData.rotationRateAlpha, MOTION_ROTATION_EPSILON, "rotationRate.alpha"); }
assert_approx_equals(event.rotationRate.beta, expectedMotionData.rotationRateBeta, MOTION_ROTATION_EPSILON, "rotationRate.beta"); }
assert_approx_equals(event.rotationRate.gamma, expectedMotionData.rotationRateGamma, MOTION_ROTATION_EPSILON, "rotationRate.gamma");
assert_equals(event.interval, expectedMotionData.interval, "interval");
} }
function checkOrientation(event, expectedOrientationData) { function getExpectedOrientationEvent(expectedOrientationData) {
assert_equals(event.alpha, expectedOrientationData.alpha, "alpha"); return new DeviceOrientationEvent('deviceorientation', {
assert_equals(event.beta, expectedOrientationData.beta, "beta"); alpha: expectedOrientationData.alpha,
assert_equals(event.gamma, expectedOrientationData.gamma, "gamma"); beta: expectedOrientationData.beta,
gamma: expectedOrientationData.gamma,
assert_equals(event.absolute, expectedOrientationData.absolute, "absolute"); absolute: expectedOrientationData.absolute,
}
// Returns a promise that will be resolved when an event equal to the given
// event is fired.
function waitForEvent(expectedEvent, targetWindow = window) {
const stringify = (thing, targetWindow) => {
if (thing instanceof targetWindow.Object && thing.constructor !== targetWindow.Object) {
let str = '{';
for (let key of Object.keys(Object.getPrototypeOf(thing))) {
str += JSON.stringify(key) + ': ' + stringify(thing[key], targetWindow) + ', ';
}
return str + '}';
} else if (thing instanceof Number) {
return thing.toFixed(6);
}
return JSON.stringify(thing);
};
return new Promise((resolve, reject) => {
let events = [];
let timeoutId = null;
const expectedEventString = stringify(expectedEvent, window);
function listener(event) {
const eventString = stringify(event, targetWindow);
if (eventString === expectedEventString) {
targetWindow.clearTimeout(timeoutId);
targetWindow.removeEventListener(expectedEvent.type, listener);
resolve();
} else {
events.push(eventString);
}
}
targetWindow.addEventListener(expectedEvent.type, listener);
timeoutId = targetWindow.setTimeout(() => {
targetWindow.removeEventListener(expectedEvent.type, listener);
let errorMessage = 'Timeout waiting for expected event: ' + expectedEventString;
if (events.length == 0) {
errorMessage += ', no events were fired';
} else {
errorMessage += ', received events: '
for (let event of events) {
errorMessage += event + ', ';
}
}
reject(errorMessage);
}, 500);
}); });
} }
function waitForOrientation(expectedOrientationData, targetWindow = window) { function getExpectedAbsoluteOrientationEvent(expectedOrientationData) {
return waitForEvent( return new DeviceOrientationEvent('deviceorientationabsolute', {
new DeviceOrientationEvent('deviceorientation', { alpha: expectedOrientationData.alpha,
alpha: expectedOrientationData.alpha, beta: expectedOrientationData.beta,
beta: expectedOrientationData.beta, gamma: expectedOrientationData.gamma,
gamma: expectedOrientationData.gamma, absolute: expectedOrientationData.absolute,
absolute: expectedOrientationData.absolute, });
}),
targetWindow);
} }
function waitForAbsoluteOrientation(expectedOrientationData, targetWindow = window) { function getExpectedMotionEvent(expectedMotionData) {
return waitForEvent( return new DeviceMotionEvent('devicemotion', {
new DeviceOrientationEvent('deviceorientationabsolute', { acceleration: {
alpha: expectedOrientationData.alpha, x: expectedMotionData.accelerationX,
beta: expectedOrientationData.beta, y: expectedMotionData.accelerationY,
gamma: expectedOrientationData.gamma, z: expectedMotionData.accelerationZ,
absolute: expectedOrientationData.absolute, },
}), accelerationIncludingGravity: {
targetWindow); x: expectedMotionData.accelerationIncludingGravityX,
} y: expectedMotionData.accelerationIncludingGravityY,
z: expectedMotionData.accelerationIncludingGravityZ,
function waitForMotion(expectedMotionData, targetWindow = window) { },
return waitForEvent( rotationRate: {
new DeviceMotionEvent('devicemotion', { alpha: expectedMotionData.rotationRateAlpha,
acceleration: { beta: expectedMotionData.rotationRateBeta,
x: expectedMotionData.accelerationX, gamma: expectedMotionData.rotationRateGamma,
y: expectedMotionData.accelerationY, },
z: expectedMotionData.accelerationZ, interval: expectedMotionData.interval,
}, });
accelerationIncludingGravity: {
x: expectedMotionData.accelerationIncludingGravityX,
y: expectedMotionData.accelerationIncludingGravityY,
z: expectedMotionData.accelerationIncludingGravityZ,
},
rotationRate: {
alpha: expectedMotionData.rotationRateAlpha,
beta: expectedMotionData.rotationRateBeta,
gamma: expectedMotionData.rotationRateGamma,
},
interval: expectedMotionData.interval,
}),
targetWindow);
} }

View file

@ -75,11 +75,11 @@
<!-- ====================================================================== --> <!-- ====================================================================== -->
<!-- Gradient on fill of text ======== --> <!-- Gradient on fill of text ======== -->
<!-- ====================================================================== --> <!-- ====================================================================== -->
<text font-family="Blocky" font-size="68" fill="url(#Gradient)" x="20" y="70">Gradient on fill</text> <text font-family="Blocky, sans-serif" font-size="68" fill="url(#Gradient)" x="20" y="70">Gradient on fill</text>
<!-- ====================================================================== --> <!-- ====================================================================== -->
<!-- Gradient on stroke of text ======== --> <!-- Gradient on stroke of text ======== -->
<!-- ====================================================================== --> <!-- ====================================================================== -->
<text font-family="Blocky" x="20" y="160" font-size="55" fill="none" stroke="url(#Gradient)" stroke-width="3">Gradient on stroke</text> <text font-family="Blocky, sans-serif" x="20" y="160" font-size="55" fill="none" stroke="url(#Gradient)" stroke-width="3">Gradient on stroke</text>
</g> </g>
<g font-family="SVGFreeSansASCII,sans-serif" font-size="28"> <g font-family="SVGFreeSansASCII,sans-serif" font-size="28">

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 5.4 KiB

Before After
Before After

View file

@ -100,7 +100,7 @@
<glyphRef xlink:href="#Y1"/> <glyphRef xlink:href="#Y1"/>
</altGlyphDef> </altGlyphDef>
</defs> </defs>
<g font-family="HappySad" font-size="60" fill="none" stroke-width="5"> <g font-family="HappySad, sans-serif" font-size="60" fill="none" stroke-width="5">
<text x="140" y="190" stroke="fuchsia"> <text x="140" y="190" stroke="fuchsia">
<altGlyph xlink:href="#Hsmile">H</altGlyph> <altGlyph xlink:href="#Hsmile">H</altGlyph>
<altGlyph xlink:href="#Asmile">A</altGlyph> <altGlyph xlink:href="#Asmile">A</altGlyph>

Before

Width:  |  Height:  |  Size: 6.6 KiB

After

Width:  |  Height:  |  Size: 6.6 KiB

Before After
Before After

View file

@ -1,10 +1,10 @@
cask 'safari-technology-preview' do cask 'safari-technology-preview' do
if MacOS.version <= :mojave if MacOS.version <= :mojave
version '104,061-96689-20200407-7f675598-e07d-46db-8b24-b10c33a006ba' version '105,001-02874-20200422-3f38295f-da03-425d-9100-ae835120f1c7'
sha256 'bc1b0a79f99022aae802bbb1e83a6a13613a339115063489fc240567b1b5d81d' sha256 'ce15f783b3e46c0e1267196956d79ea416a14005b6f733c68be5104ea57da20e'
else else
version '104,061-96685-20200407-907fca12-9ba9-4bfa-8b8c-d5bf101d534b' version '105,001-00430-20200422-c04186cc-77e2-42a7-a3c8-6881c4447f31'
sha256 '3dcfde56386f38984c9ede1d67714c43699c5cafece9608ee2730484bffdcf9c' sha256 '443675a62bbe054216129bdd5c91da57c18b3be6b61455ea16f27d35a9be7996'
end end
url "https://secure-appldnld.apple.com/STP/#{version.after_comma}/SafariTechnologyPreview.dmg" url "https://secure-appldnld.apple.com/STP/#{version.after_comma}/SafariTechnologyPreview.dmg"

View file

@ -0,0 +1,2 @@
def test_navigator_webdriver_active(session):
assert session.execute_script("return navigator.webdriver") is True