Update web-platform-tests to revision 5e7cbed423a3040dc8ca50359dd033a46dba5cf4

This commit is contained in:
WPT Sync Bot 2020-04-26 08:19:04 +00:00
parent fdc3a3ffc3
commit 629790db5d
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]
expected: TIMEOUT
expected: FAIL

View file

@ -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

View file

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

View file

@ -17,6 +17,3 @@
[test the top of layer]
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]
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]
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

View file

@ -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

View file

@ -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

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]
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]
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

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]
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": [
"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",

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]
expected: TIMEOUT
expected: FAIL

View file

@ -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

View file

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

View file

@ -21,6 +21,3 @@
[test the top of layer]
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]
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 ]
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

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!]
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

View file

@ -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

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]
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]
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

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]
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/">
<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>

View file

@ -5,3 +5,7 @@ div.body {
#video-introduction-transcript iframe {
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
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

View file

@ -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>

View file

@ -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.');

View file

@ -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);

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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);

View file

@ -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>

View file

@ -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>

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 => {
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>

View file

@ -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>

View file

@ -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>

View file

@ -128,104 +128,39 @@ 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', {
function getExpectedAbsoluteOrientationEvent(expectedOrientationData) {
return new DeviceOrientationEvent('deviceorientationabsolute', {
alpha: expectedOrientationData.alpha,
beta: expectedOrientationData.beta,
gamma: expectedOrientationData.gamma,
absolute: expectedOrientationData.absolute,
}),
targetWindow);
});
}
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', {
function getExpectedMotionEvent(expectedMotionData) {
return new DeviceMotionEvent('devicemotion', {
acceleration: {
x: expectedMotionData.accelerationX,
y: expectedMotionData.accelerationY,
@ -242,6 +177,5 @@ function waitForMotion(expectedMotionData, targetWindow = window) {
gamma: expectedMotionData.rotationRateGamma,
},
interval: expectedMotionData.interval,
}),
targetWindow);
});
}

View file

@ -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

Before After
Before After

View file

@ -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

Before After
Before After

View file

@ -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"

View file

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