mirror of
https://github.com/servo/servo.git
synced 2025-08-05 13:40:08 +01:00
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:
commit
cd620f69de
53 changed files with 344 additions and 375 deletions
|
@ -1,4 +0,0 @@
|
|||
[hit-test-floats-004.html]
|
||||
[Miss float below something else]
|
||||
expected: FAIL
|
||||
|
|
@ -1,2 +1,2 @@
|
|||
[no-transition-from-ua-to-blocking-stylesheet.html]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
|
|
@ -44,12 +44,6 @@
|
|||
[vertical-align length(in) / values]
|
||||
expected: FAIL
|
||||
|
||||
[right length(pc) / values]
|
||||
expected: FAIL
|
||||
|
||||
[top length(pt) / values]
|
||||
expected: FAIL
|
||||
|
||||
[max-height percentage(%) / values]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -68,9 +62,6 @@
|
|||
[border-right-color color(rgba) / values]
|
||||
expected: FAIL
|
||||
|
||||
[top length(pc) / values]
|
||||
expected: FAIL
|
||||
|
||||
[font-size length(ex) / values]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -131,9 +122,6 @@
|
|||
[border-top-width length(cm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[right length(px) / values]
|
||||
expected: FAIL
|
||||
|
||||
[max-width length(em) / values]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -146,9 +134,6 @@
|
|||
[border-right-width length(cm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[top length(px) / values]
|
||||
expected: FAIL
|
||||
|
||||
[outline-offset length(ex) / values]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -179,9 +164,6 @@
|
|||
[min-height percentage(%) / values]
|
||||
expected: FAIL
|
||||
|
||||
[top percentage(%) / values]
|
||||
expected: FAIL
|
||||
|
||||
[max-height length(pt) / values]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -245,9 +227,6 @@
|
|||
[line-height length(pt) / values]
|
||||
expected: FAIL
|
||||
|
||||
[top length(em) / values]
|
||||
expected: FAIL
|
||||
|
||||
[border-top-width length(px) / values]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -293,9 +272,6 @@
|
|||
[background-position length(cm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[top length(in) / values]
|
||||
expected: FAIL
|
||||
|
||||
[line-height length(em) / values]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -386,9 +362,6 @@
|
|||
[min-width length(in) / values]
|
||||
expected: FAIL
|
||||
|
||||
[top length(cm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[outline-width length(cm) / values]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -398,9 +371,6 @@
|
|||
[max-width length(ex) / values]
|
||||
expected: FAIL
|
||||
|
||||
[top length(mm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[letter-spacing length(ex) / values]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -455,9 +425,6 @@
|
|||
[max-height length(cm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[top length(ex) / values]
|
||||
expected: FAIL
|
||||
|
||||
[outline-width length(em) / values]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -503,9 +470,6 @@
|
|||
[line-height length(pc) / values]
|
||||
expected: FAIL
|
||||
|
||||
[right length(pt) / values]
|
||||
expected: FAIL
|
||||
|
||||
[background-position length(em) / values]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -2,6 +2,3 @@
|
|||
[listeners are called when <iframe> is resized]
|
||||
expected: FAIL
|
||||
|
||||
[listeners are called correct number of times]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -17,6 +17,3 @@
|
|||
[test the top of layer]
|
||||
expected: FAIL
|
||||
|
||||
[test some point of the element: top left corner]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -2,3 +2,12 @@
|
|||
[replace / replaceSync on non-constructed stylesheet]
|
||||
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
|
||||
|
||||
|
|
|
@ -312,24 +312,24 @@
|
|||
[Response: combined response Content-Type: text/html;" \\" text/plain ";charset=GBK]
|
||||
expected: NOTRUN
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html;" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: 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]
|
||||
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
|
||||
|
||||
|
|
|
@ -11,6 +11,9 @@
|
|||
[X-Content-Type-Options%3A%20nosniff%0C]
|
||||
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
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[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]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -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]
|
||||
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
|
||||
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
[promise-job-entry.html]
|
||||
expected: TIMEOUT
|
||||
[Fulfillment handler on fulfilled promise]
|
||||
expected: FAIL
|
||||
|
||||
[Rejection handler on pending-then-rejected promise]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[Sanity check: this all works as expected with no promises involved]
|
||||
expected: FAIL
|
||||
|
@ -16,5 +15,5 @@
|
|||
expected: FAIL
|
||||
|
||||
[Fulfillment handler on pending-then-fulfilled promise]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -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]
|
||||
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
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[interface.py]
|
||||
[test_navigator_webdriver_active]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[WorkerGlobalScope-close.html]
|
||||
[Test sending a message after closing.]
|
||||
expected: FAIL
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
[Worker-constructor.html]
|
||||
expected: ERROR
|
|
@ -19989,7 +19989,7 @@
|
|||
]
|
||||
],
|
||||
"pservers-grad-08-b-manual.svg": [
|
||||
"654ec8d409b5a11b86036b428b65def3adbfba26",
|
||||
"ba7413e2c5f9f0c6a587816beddac7985566a9a9",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
|
@ -21109,7 +21109,7 @@
|
|||
]
|
||||
],
|
||||
"text-altglyph-01-b-manual.svg": [
|
||||
"db208cea587322b977eb0c81edc5d38451c3da56",
|
||||
"85a31a18a2957d8c6c5904cb375b53ec490899f5",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
|
@ -315174,7 +315174,7 @@
|
|||
[]
|
||||
],
|
||||
"custom.css": [
|
||||
"a5f59ce7721cce73cc79dd69bff68ef8afe14e9a",
|
||||
"58a982579f06c2c7093e4847a64d91c9722dd946",
|
||||
[]
|
||||
],
|
||||
"files-changed.png": [
|
||||
|
@ -315368,7 +315368,7 @@
|
|||
[]
|
||||
],
|
||||
"making-a-testing-plan.md": [
|
||||
"0f5673016c0502edc11c915ee64b4901ed384c23",
|
||||
"520c5a32e0705e9a692a96f2e6ac998a191acf4b",
|
||||
[]
|
||||
],
|
||||
"manual.md": [
|
||||
|
@ -333464,7 +333464,7 @@
|
|||
],
|
||||
"resources": {
|
||||
"orientation-event-helpers.js": [
|
||||
"528dfa9a7a057324b07cfda37dd454b48c43ff0e",
|
||||
"3168b71c5ec6476f4120ea2e59d00cb371e40596",
|
||||
[]
|
||||
]
|
||||
}
|
||||
|
@ -341083,7 +341083,7 @@
|
|||
[]
|
||||
],
|
||||
"safari-technology-preview.rb": [
|
||||
"d58664c5b6c67e32c63f1d122625a56211371511",
|
||||
"6afe1c188f9f290699605b66762eaaadd0020011",
|
||||
[]
|
||||
],
|
||||
"system_info.yml": [
|
||||
|
@ -394003,7 +394003,14 @@
|
|||
{}
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
"ruby-position.html": [
|
||||
"981a40531a983dd8c1dd27b875874f15232df6ba",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
]
|
||||
},
|
||||
"css-scoping": {
|
||||
"css-scoping-shadow-dynamic-remove-style-detached.html": [
|
||||
|
@ -404604,7 +404611,7 @@
|
|||
]
|
||||
],
|
||||
"CSSStyleSheet-constructable-replace-on-regular-sheet.html": [
|
||||
"d059258d90a64ac7dee02a14d92c677afe3fdb47",
|
||||
"5ce0cbee97a2a1593018089f9252870bdb47587b",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
|
@ -469207,7 +469214,7 @@
|
|||
]
|
||||
],
|
||||
"device-orientation-events-unavailable-on-insecure-origins.html": [
|
||||
"3af5e9241778694dc36e5bbf70fce1326e6e7adf",
|
||||
"571a388f64495e61b8f0eb846e03b226ce007d9f",
|
||||
[
|
||||
null,
|
||||
{
|
||||
|
@ -469240,7 +469247,7 @@
|
|||
],
|
||||
"motion": {
|
||||
"add-during-dispatch.https.html": [
|
||||
"d40b557a2d6f09f2fa04291ddbca859dc4a3d1d1",
|
||||
"3a895b9d0969ab1c8a77509ab29d2bd8071d372e",
|
||||
[
|
||||
null,
|
||||
{
|
||||
|
@ -469249,7 +469256,7 @@
|
|||
]
|
||||
],
|
||||
"add-listener-from-callback.https.html": [
|
||||
"11f2695794c8e1d75f8a30031f2a38c9155252ed",
|
||||
"0803d7cc9bfa8951cbce39dad8c2b63ed713956b",
|
||||
[
|
||||
null,
|
||||
{
|
||||
|
@ -469265,7 +469272,7 @@
|
|||
]
|
||||
],
|
||||
"multiple-event-listeners.https.html": [
|
||||
"ad851eec2919ed04b23c93a43221bcb5acefc023",
|
||||
"207fdd2d9c00b5998601508e33911002697026c0",
|
||||
[
|
||||
null,
|
||||
{
|
||||
|
@ -469274,7 +469281,7 @@
|
|||
]
|
||||
],
|
||||
"null-values.https.html": [
|
||||
"4da64c0c9e85b87505c78b136435b42f546bc995",
|
||||
"a6035543ba457fd701f40f89ccacf32f8a0b503e",
|
||||
[
|
||||
null,
|
||||
{
|
||||
|
@ -469292,7 +469299,7 @@
|
|||
},
|
||||
"orientation": {
|
||||
"absolute-fallback.https.html": [
|
||||
"de0770a9f75c0ad92c503f636f4cf9c8105fc465",
|
||||
"835d2441b358a1ba3aa3013838b19c3aac531d1f",
|
||||
[
|
||||
null,
|
||||
{
|
||||
|
@ -469301,7 +469308,7 @@
|
|||
]
|
||||
],
|
||||
"add-listener-from-callback.https.html": [
|
||||
"040e2a2f5d117eec2f9da811b2327ea5fd368b49",
|
||||
"8f8cfa29c4f948cc926829a48d0d89516dbb26e5",
|
||||
[
|
||||
null,
|
||||
{
|
||||
|
@ -469310,7 +469317,7 @@
|
|||
]
|
||||
],
|
||||
"basic-operation-absolute.https.html": [
|
||||
"bc35e1498f45e0fadc41ccb0948abf012414cd27",
|
||||
"05ac82cd35f3e373c3590a71bc2541d4dba4897f",
|
||||
[
|
||||
null,
|
||||
{
|
||||
|
@ -469319,7 +469326,7 @@
|
|||
]
|
||||
],
|
||||
"basic-operation.https.html": [
|
||||
"eb57d141b35bb4b9e64b7b3dc2efc6ec32973da4",
|
||||
"3806ee0792aeba94e639dddb06b40a9db76bd2f7",
|
||||
[
|
||||
null,
|
||||
{
|
||||
|
@ -469334,15 +469341,8 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"deviceorientationabsoluteevent.https.html": [
|
||||
"e63783f6cf479f38504bb04bcc947a08ee34c8b3",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"multiple-event-listeners.https.html": [
|
||||
"3a8add23c947cba88fc66a1fabf3e955f5578fd5",
|
||||
"13d05f0c745fa0930b74c707ac9381005d4910ba",
|
||||
[
|
||||
null,
|
||||
{
|
||||
|
@ -469360,7 +469360,7 @@
|
|||
]
|
||||
],
|
||||
"null-values.https.html": [
|
||||
"df18f35c6cacf9fc1e090c8ff071a0fb1175ef07",
|
||||
"55039ea2763bbb182b8aaf3ad68904dfa7a90619",
|
||||
[
|
||||
null,
|
||||
{
|
||||
|
@ -469376,7 +469376,7 @@
|
|||
]
|
||||
],
|
||||
"updates.https.html": [
|
||||
"09472e6b419e8a2f772ae9d399b15b3352c2d868",
|
||||
"de203da0a3af07d6b1d82c5550f8224562c623f2",
|
||||
[
|
||||
null,
|
||||
{
|
||||
|
@ -545085,6 +545085,15 @@
|
|||
]
|
||||
]
|
||||
},
|
||||
"interface": {
|
||||
"interface.py": [
|
||||
"6a7afcd26358aaad3779a912fd4bc00a66ca9571",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
]
|
||||
},
|
||||
"is_element_enabled": {
|
||||
"enabled.py": [
|
||||
"dd56084d8d0eca15b7b6d46491bbd9f0a64cef40",
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
[hit-test-floats-004.html]
|
||||
[Miss float below something else]
|
||||
expected: FAIL
|
||||
|
|
@ -1,2 +1,2 @@
|
|||
[no-transition-from-ua-to-blocking-stylesheet.html]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
|
|
@ -509,39 +509,3 @@
|
|||
[border-left-width length(pt) / values]
|
||||
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
|
||||
|
||||
|
|
|
@ -2,6 +2,3 @@
|
|||
[listeners are called when <iframe> is resized]
|
||||
expected: FAIL
|
||||
|
||||
[listeners are called correct number of times]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -21,6 +21,3 @@
|
|||
[test the top of layer]
|
||||
expected: FAIL
|
||||
|
||||
[test some point of the element: top left corner]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -2,3 +2,12 @@
|
|||
[replace / replaceSync on non-constructed stylesheet]
|
||||
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
|
||||
|
||||
|
|
|
@ -312,24 +312,24 @@
|
|||
[fetch(): separate response Content-Type: text/plain ]
|
||||
expected: NOTRUN
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html;" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: 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]
|
||||
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
|
||||
|
||||
|
|
|
@ -11,6 +11,9 @@
|
|||
[X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!]
|
||||
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
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[iframe_sandbox_popups_escaping-3.html]
|
||||
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]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -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]
|
||||
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
|
||||
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
[promise-job-entry.html]
|
||||
expected: TIMEOUT
|
||||
[Fulfillment handler on fulfilled promise]
|
||||
expected: FAIL
|
||||
|
||||
[Rejection handler on pending-then-rejected promise]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[Sanity check: this all works as expected with no promises involved]
|
||||
expected: FAIL
|
||||
|
@ -16,5 +15,5 @@
|
|||
expected: FAIL
|
||||
|
||||
[Fulfillment handler on pending-then-fulfilled promise]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -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]
|
||||
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
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[interface.py]
|
||||
[test_navigator_webdriver_active]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[WorkerGlobalScope-close.html]
|
||||
[Test sending a message after closing.]
|
||||
expected: FAIL
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
[Worker-constructor.html]
|
||||
expected: ERROR
|
34
tests/wpt/web-platform-tests/css/css-ruby/ruby-position.html
Normal file
34
tests/wpt/web-platform-tests/css/css-ruby/ruby-position.html
Normal 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>
|
|
@ -4,15 +4,29 @@
|
|||
<link rel="help" href="https://wicg.github.io/construct-stylesheets/">
|
||||
<script src = '/resources/testharness.js'></script>
|
||||
<script src = '/resources/testharnessreport.js'></script>
|
||||
<style>:root { background-color: lime }</style>
|
||||
<style id="style">:root { background-color: lime }</style>
|
||||
<script>
|
||||
promise_test(async function(t) {
|
||||
|
||||
test(() => {
|
||||
assert_equals(getComputedStyle(document.documentElement).backgroundColor, "rgb(0, 255, 0)", "precondition")
|
||||
let sheet = document.styleSheets[0];
|
||||
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");
|
||||
}, "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");
|
||||
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>
|
||||
|
|
|
@ -5,3 +5,7 @@ div.body {
|
|||
#video-introduction-transcript iframe {
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.table-container {
|
||||
overflow: auto;
|
||||
}
|
|
@ -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
|
||||
can be expressed using regular expressions:
|
||||
|
||||
<div class="table-container">
|
||||
|
||||
```eval_rst
|
||||
================================= ================== ==========================
|
||||
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
|
||||
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
|
||||
|
|
|
@ -8,15 +8,6 @@
|
|||
<script src="resources/orientation-event-helpers.js"></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) {
|
||||
window.location = get_host_info().HTTP_ORIGIN + window.location.pathname;
|
||||
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_LINEAR_ACCELERATION_DATA = [4, 5, 6];
|
||||
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, 'LinearAccelerationSensor', FAKE_LINEAR_ACCELERATION_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.');
|
||||
|
||||
sensor_test(async (t, sensorProvider) => {
|
||||
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);
|
||||
|
||||
return waitForLackOfEvent(t, 'deviceorientation');
|
||||
await new Promise(r => t.step_timeout(r, 1000));
|
||||
}, 'addEventListener() for `deviceorientation` does not crash but the handler never fires.');
|
||||
|
||||
sensor_test(async (t, sensorProvider) => {
|
||||
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);
|
||||
|
||||
return waitForLackOfEvent(t, 'deviceorientationabsolute');
|
||||
await new Promise(r => t.step_timeout(r, 1000));
|
||||
}, 'addEventListener() for `deviceorientationabsolute` does not crash but the handler never fires.');
|
||||
}
|
||||
</script>
|
||||
|
|
|
@ -12,11 +12,18 @@ sensor_test(async (t, sensorProvider) => {
|
|||
4, 5, 6,
|
||||
7, 8, 9);
|
||||
setMockMotionData(sensorProvider, motionData);
|
||||
waitForMotion(motionData);
|
||||
|
||||
return new Promise((resolve, 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;
|
||||
});
|
||||
}, 'Test no fire listeners added during event dispatch.');
|
||||
|
|
|
@ -20,7 +20,7 @@ sensor_test(async (t, sensorProvider) => {
|
|||
assert_true(event instanceof DeviceMotionEvent, 'event is DeviceMotionEvent');
|
||||
assert_equals(event.type, 'devicemotion', 'event.type is devicemotion');
|
||||
assert_true(event.target instanceof Window, 'event is fired on the window object');
|
||||
checkMotion(event, motionData);
|
||||
assertEventEquals(event, getExpectedMotionEvent(motionData));
|
||||
window.removeEventListener('devicemotion', firstListener);
|
||||
if (++firstEventCount == 1) {
|
||||
window.addEventListener('devicemotion', secondListener);
|
||||
|
@ -32,7 +32,7 @@ sensor_test(async (t, sensorProvider) => {
|
|||
let secondEventCount = 0;
|
||||
let secondPromise = new Promise(resolve => {
|
||||
secondListener = (event) => {
|
||||
checkMotion(event, motionData);
|
||||
assertEventEquals(event, getExpectedMotionEvent(motionData));
|
||||
window.removeEventListener('devicemotion', secondListener);
|
||||
++secondEventCount;
|
||||
resolve(event);
|
||||
|
|
|
@ -19,19 +19,24 @@ sensor_test(async (t, sensorProvider) => {
|
|||
let firstEventPromise = new Promise(resolve => {
|
||||
firstListener = resolve;
|
||||
});
|
||||
// We directly add the listener instead of using waitForMotion
|
||||
// because we want the listener to stay active after the first event fires.
|
||||
// We directly add the listener instead of using EventWatcher
|
||||
// because we want to remove listener after the first event fires
|
||||
// but EventWatcher could only stop watching after test done.
|
||||
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.
|
||||
setMockMotionData(sensorProvider, motionData2);
|
||||
const watcher = new EventWatcher(t, window, ['devicemotion']);
|
||||
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);
|
||||
|
||||
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.');
|
||||
</script>
|
||||
|
|
|
@ -24,16 +24,21 @@ sensor_test(async (t, sensorProvider) => {
|
|||
null, null, null,
|
||||
null, null, null);
|
||||
|
||||
const watcher = new EventWatcher(t, window, ['devicemotion']);
|
||||
setMockMotionData(sensorProvider, motionData1);
|
||||
await waitForMotion(motionData1);
|
||||
const firstEvent = await watcher.wait_for('devicemotion');
|
||||
assertEventEquals(firstEvent, getExpectedMotionEvent(motionData1));
|
||||
|
||||
setMockMotionData(sensorProvider, motionData2);
|
||||
await waitForMotion(motionData2);
|
||||
const secondEvent = await watcher.wait_for('devicemotion');
|
||||
assertEventEquals(secondEvent, getExpectedMotionEvent(motionData2));
|
||||
|
||||
setMockMotionData(sensorProvider, motionData3);
|
||||
await waitForMotion(motionData3);
|
||||
const thirdEvent = await watcher.wait_for('devicemotion');
|
||||
assertEventEquals(thirdEvent, getExpectedMotionEvent(motionData3));
|
||||
|
||||
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.');
|
||||
</script>
|
|
@ -9,11 +9,13 @@
|
|||
|
||||
sensor_test(async (t, sensorProvider) => {
|
||||
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
|
||||
// the absolute one.
|
||||
sensorProvider.setGetSensorShouldFail('RelativeOrientationEulerAngles', true);
|
||||
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.');
|
||||
</script>
|
||||
|
|
|
@ -18,7 +18,7 @@ sensor_test(async (t, sensorProvider) => {
|
|||
assert_true(event instanceof DeviceOrientationEvent, 'event is DeviceOrientationEvent');
|
||||
assert_equals(event.type, 'deviceorientation', 'event.type is devicemotion');
|
||||
assert_true(event.target instanceof Window, 'event is fired on the window object');
|
||||
checkOrientation(event, orientationData);
|
||||
assertEventEquals(event, getExpectedOrientationEvent(orientationData));
|
||||
window.removeEventListener('deviceorientation', firstListener);
|
||||
if (++firstEventCount == 1) {
|
||||
window.addEventListener('deviceorientation', secondListener);
|
||||
|
@ -30,7 +30,7 @@ sensor_test(async (t, sensorProvider) => {
|
|||
let secondEventCount = 0;
|
||||
let secondPromise = new Promise(resolve => {
|
||||
secondListener = (event) => {
|
||||
checkOrientation(event, orientationData);
|
||||
assertEventEquals(event, getExpectedOrientationEvent(orientationData));
|
||||
window.removeEventListener('deviceorientation', secondListener);
|
||||
++secondEventCount;
|
||||
resolve(event);
|
||||
|
|
|
@ -9,8 +9,23 @@
|
|||
|
||||
sensor_test(async (t, sensorProvider) => {
|
||||
const orientationData = generateOrientationData(1.1, 2.2, 3.3, true);
|
||||
const watcher = new EventWatcher(t, window, ['deviceorientationabsolute']);
|
||||
|
||||
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.');
|
||||
|
||||
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>
|
||||
|
|
|
@ -9,8 +9,24 @@
|
|||
|
||||
sensor_test(async (t, sensorProvider) => {
|
||||
const orientationData = generateOrientationData(1.1, 2.2, 3.3, false);
|
||||
const watcher = new EventWatcher(t, window, ['deviceorientation']);
|
||||
|
||||
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.');
|
||||
|
||||
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>
|
||||
|
|
|
@ -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>
|
|
@ -15,18 +15,24 @@ sensor_test(async (t, sensorProvider) => {
|
|||
let firstEventPromise = new Promise(resolve => {
|
||||
firstListener = resolve;
|
||||
});
|
||||
// We directly add the listener instead of using waitForOrientation
|
||||
// because we want the listener to stay active after the first event fires.
|
||||
// We directly add the listener instead of using EventWatcher
|
||||
// because we want to remove listener after the first event fires
|
||||
// but EventWatcher could only stop watching after test done.
|
||||
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.
|
||||
setMockOrientationData(sensorProvider, orientationData2);
|
||||
const watcher = new EventWatcher(t, window, ['deviceorientation']);
|
||||
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);
|
||||
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.');
|
||||
</script>
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.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.
|
||||
const orientationData4 = generateOrientationData(null, null, null, false);
|
||||
|
||||
const watcher = new EventWatcher(t, window, ['deviceorientation']);
|
||||
setMockOrientationData(sensorProvider, orientationData1);
|
||||
await waitForOrientation(orientationData1);
|
||||
const firstEvent = await watcher.wait_for('deviceorientation');
|
||||
assertEventEquals(firstEvent, getExpectedOrientationEvent(orientationData1));
|
||||
|
||||
setMockOrientationData(sensorProvider, orientationData2);
|
||||
await waitForOrientation(orientationData2);
|
||||
const secondEvent = await watcher.wait_for('deviceorientation');
|
||||
assertEventEquals(secondEvent, getExpectedOrientationEvent(orientationData2));
|
||||
|
||||
setMockOrientationData(sensorProvider, orientationData3);
|
||||
await waitForOrientation(orientationData3);
|
||||
const thirdEvent = await watcher.wait_for('deviceorientation');
|
||||
assertEventEquals(thirdEvent, getExpectedOrientationEvent(orientationData3));
|
||||
|
||||
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.');
|
||||
</script>
|
||||
</html>
|
||||
|
|
|
@ -11,10 +11,13 @@ sensor_test(async (t, sensorProvider) => {
|
|||
const orientationData1 = generateOrientationData(1.1, 2.2, 3.3, false);
|
||||
const orientationData2 = generateOrientationData(11.1, 22.2, 33.3, false);
|
||||
|
||||
const watcher = new EventWatcher(t, window, ['deviceorientation']);
|
||||
setMockOrientationData(sensorProvider, orientationData1);
|
||||
await waitForOrientation(orientationData1);
|
||||
const firstEvent = await watcher.wait_for('deviceorientation');
|
||||
assertEventEquals(firstEvent, getExpectedOrientationEvent(orientationData1));
|
||||
|
||||
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.');
|
||||
</script>
|
||||
|
|
|
@ -128,120 +128,54 @@ function setMockOrientationData(sensorProvider, orientationData) {
|
|||
]);
|
||||
}
|
||||
|
||||
function checkMotion(event, expectedMotionData) {
|
||||
assert_equals(event.acceleration.x, expectedMotionData.accelerationX, "acceleration.x");
|
||||
assert_equals(event.acceleration.y, expectedMotionData.accelerationY, "acceleration.y");
|
||||
assert_equals(event.acceleration.z, expectedMotionData.accelerationZ, "acceleration.z");
|
||||
|
||||
assert_equals(event.accelerationIncludingGravity.x, expectedMotionData.accelerationIncludingGravityX, "accelerationIncludingGravity.x");
|
||||
assert_equals(event.accelerationIncludingGravity.y, expectedMotionData.accelerationIncludingGravityY, "accelerationIncludingGravity.y");
|
||||
assert_equals(event.accelerationIncludingGravity.z, expectedMotionData.accelerationIncludingGravityZ, "accelerationIncludingGravity.z");
|
||||
|
||||
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 assertEventEquals(actualEvent, expectedEvent) {
|
||||
for (let key1 of Object.keys(Object.getPrototypeOf(expectedEvent))) {
|
||||
if (typeof expectedEvent[key1] === "object" && expectedEvent[key1] !== null) {
|
||||
for (let key2 of Object.keys(expectedEvent[key1])) {
|
||||
assert_equals(actualEvent[key1][key2], expectedEvent[key1][key2],
|
||||
`$[key1].$[key2]`);
|
||||
}
|
||||
} else {
|
||||
assert_equals(actualEvent[key1], expectedEvent[key1], key1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function checkOrientation(event, expectedOrientationData) {
|
||||
assert_equals(event.alpha, expectedOrientationData.alpha, "alpha");
|
||||
assert_equals(event.beta, expectedOrientationData.beta, "beta");
|
||||
assert_equals(event.gamma, expectedOrientationData.gamma, "gamma");
|
||||
|
||||
assert_equals(event.absolute, expectedOrientationData.absolute, "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 getExpectedOrientationEvent(expectedOrientationData) {
|
||||
return new DeviceOrientationEvent('deviceorientation', {
|
||||
alpha: expectedOrientationData.alpha,
|
||||
beta: expectedOrientationData.beta,
|
||||
gamma: expectedOrientationData.gamma,
|
||||
absolute: expectedOrientationData.absolute,
|
||||
});
|
||||
}
|
||||
|
||||
function waitForOrientation(expectedOrientationData, targetWindow = window) {
|
||||
return waitForEvent(
|
||||
new DeviceOrientationEvent('deviceorientation', {
|
||||
alpha: expectedOrientationData.alpha,
|
||||
beta: expectedOrientationData.beta,
|
||||
gamma: expectedOrientationData.gamma,
|
||||
absolute: expectedOrientationData.absolute,
|
||||
}),
|
||||
targetWindow);
|
||||
function getExpectedAbsoluteOrientationEvent(expectedOrientationData) {
|
||||
return new DeviceOrientationEvent('deviceorientationabsolute', {
|
||||
alpha: expectedOrientationData.alpha,
|
||||
beta: expectedOrientationData.beta,
|
||||
gamma: expectedOrientationData.gamma,
|
||||
absolute: expectedOrientationData.absolute,
|
||||
});
|
||||
}
|
||||
|
||||
function waitForAbsoluteOrientation(expectedOrientationData, targetWindow = window) {
|
||||
return waitForEvent(
|
||||
new DeviceOrientationEvent('deviceorientationabsolute', {
|
||||
alpha: expectedOrientationData.alpha,
|
||||
beta: expectedOrientationData.beta,
|
||||
gamma: expectedOrientationData.gamma,
|
||||
absolute: expectedOrientationData.absolute,
|
||||
}),
|
||||
targetWindow);
|
||||
}
|
||||
|
||||
function waitForMotion(expectedMotionData, targetWindow = window) {
|
||||
return waitForEvent(
|
||||
new DeviceMotionEvent('devicemotion', {
|
||||
acceleration: {
|
||||
x: expectedMotionData.accelerationX,
|
||||
y: expectedMotionData.accelerationY,
|
||||
z: expectedMotionData.accelerationZ,
|
||||
},
|
||||
accelerationIncludingGravity: {
|
||||
x: expectedMotionData.accelerationIncludingGravityX,
|
||||
y: expectedMotionData.accelerationIncludingGravityY,
|
||||
z: expectedMotionData.accelerationIncludingGravityZ,
|
||||
},
|
||||
rotationRate: {
|
||||
alpha: expectedMotionData.rotationRateAlpha,
|
||||
beta: expectedMotionData.rotationRateBeta,
|
||||
gamma: expectedMotionData.rotationRateGamma,
|
||||
},
|
||||
interval: expectedMotionData.interval,
|
||||
}),
|
||||
targetWindow);
|
||||
function getExpectedMotionEvent(expectedMotionData) {
|
||||
return new DeviceMotionEvent('devicemotion', {
|
||||
acceleration: {
|
||||
x: expectedMotionData.accelerationX,
|
||||
y: expectedMotionData.accelerationY,
|
||||
z: expectedMotionData.accelerationZ,
|
||||
},
|
||||
accelerationIncludingGravity: {
|
||||
x: expectedMotionData.accelerationIncludingGravityX,
|
||||
y: expectedMotionData.accelerationIncludingGravityY,
|
||||
z: expectedMotionData.accelerationIncludingGravityZ,
|
||||
},
|
||||
rotationRate: {
|
||||
alpha: expectedMotionData.rotationRateAlpha,
|
||||
beta: expectedMotionData.rotationRateBeta,
|
||||
gamma: expectedMotionData.rotationRateGamma,
|
||||
},
|
||||
interval: expectedMotionData.interval,
|
||||
});
|
||||
}
|
||||
|
|
|
@ -75,11 +75,11 @@
|
|||
<!-- ====================================================================== -->
|
||||
<!-- 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 ======== -->
|
||||
<!-- ====================================================================== -->
|
||||
<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 font-family="SVGFreeSansASCII,sans-serif" font-size="28">
|
||||
|
|
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 5.4 KiB |
|
@ -100,7 +100,7 @@
|
|||
<glyphRef xlink:href="#Y1"/>
|
||||
</altGlyphDef>
|
||||
</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">
|
||||
<altGlyph xlink:href="#Hsmile">H</altGlyph>
|
||||
<altGlyph xlink:href="#Asmile">A</altGlyph>
|
||||
|
|
Before Width: | Height: | Size: 6.6 KiB After Width: | Height: | Size: 6.6 KiB |
|
@ -1,10 +1,10 @@
|
|||
cask 'safari-technology-preview' do
|
||||
if MacOS.version <= :mojave
|
||||
version '104,061-96689-20200407-7f675598-e07d-46db-8b24-b10c33a006ba'
|
||||
sha256 'bc1b0a79f99022aae802bbb1e83a6a13613a339115063489fc240567b1b5d81d'
|
||||
version '105,001-02874-20200422-3f38295f-da03-425d-9100-ae835120f1c7'
|
||||
sha256 'ce15f783b3e46c0e1267196956d79ea416a14005b6f733c68be5104ea57da20e'
|
||||
else
|
||||
version '104,061-96685-20200407-907fca12-9ba9-4bfa-8b8c-d5bf101d534b'
|
||||
sha256 '3dcfde56386f38984c9ede1d67714c43699c5cafece9608ee2730484bffdcf9c'
|
||||
version '105,001-00430-20200422-c04186cc-77e2-42a7-a3c8-6881c4447f31'
|
||||
sha256 '443675a62bbe054216129bdd5c91da57c18b3be6b61455ea16f27d35a9be7996'
|
||||
end
|
||||
|
||||
url "https://secure-appldnld.apple.com/STP/#{version.after_comma}/SafariTechnologyPreview.dmg"
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
def test_navigator_webdriver_active(session):
|
||||
assert session.execute_script("return navigator.webdriver") is True
|
Loading…
Add table
Add a link
Reference in a new issue