diff options
author | WPT Sync Bot <josh+wptsync@joshmatthews.net> | 2018-03-28 21:12:37 -0400 |
---|---|---|
committer | WPT Sync Bot <josh+wptsync@joshmatthews.net> | 2018-03-28 22:44:05 -0400 |
commit | 0a3e19aac871a90d58ea45a25406683f09520f89 (patch) | |
tree | ceca05aa80205bea21818b32e0db76430e0844af | |
parent | c8b0dc965d02754622c766017c2fec4145a2f15e (diff) | |
download | servo-0a3e19aac871a90d58ea45a25406683f09520f89.tar.gz servo-0a3e19aac871a90d58ea45a25406683f09520f89.zip |
Update web-platform-tests to revision 592e2ed83ecd717392d37047536250ba74f1bafa
65 files changed, 1906 insertions, 106 deletions
diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json index b120cdca546..3e6095c3c82 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -117737,6 +117737,162 @@ {} ] ], + "css/css-layout-api/constraints-fixed-inline-size-absolute-left-right.https.html": [ + [ + "/css/css-layout-api/constraints-fixed-inline-size-absolute-left-right.https.html", + [ + [ + "/css/css-layout-api/constraints-fixed-inline-size-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-layout-api/constraints-fixed-inline-size-absolute-top-bottom-vrl.https.html": [ + [ + "/css/css-layout-api/constraints-fixed-inline-size-absolute-top-bottom-vrl.https.html", + [ + [ + "/css/css-layout-api/constraints-fixed-inline-size-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-layout-api/constraints-fixed-inline-size-block-auto-avoid-floats-vlr.https.html": [ + [ + "/css/css-layout-api/constraints-fixed-inline-size-block-auto-avoid-floats-vlr.https.html", + [ + [ + "/css/css-layout-api/constraints-fixed-inline-size-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-layout-api/constraints-fixed-inline-size-block-auto-avoid-floats.https.html": [ + [ + "/css/css-layout-api/constraints-fixed-inline-size-block-auto-avoid-floats.https.html", + [ + [ + "/css/css-layout-api/constraints-fixed-inline-size-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-layout-api/constraints-fixed-inline-size-block-auto-vlr.https.html": [ + [ + "/css/css-layout-api/constraints-fixed-inline-size-block-auto-vlr.https.html", + [ + [ + "/css/css-layout-api/constraints-fixed-inline-size-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-layout-api/constraints-fixed-inline-size-block-auto.https.html": [ + [ + "/css/css-layout-api/constraints-fixed-inline-size-block-auto.https.html", + [ + [ + "/css/css-layout-api/constraints-fixed-inline-size-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-layout-api/constraints-fixed-inline-size-fixed-vrl.https.html": [ + [ + "/css/css-layout-api/constraints-fixed-inline-size-fixed-vrl.https.html", + [ + [ + "/css/css-layout-api/constraints-fixed-inline-size-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-layout-api/constraints-fixed-inline-size-fixed.https.html": [ + [ + "/css/css-layout-api/constraints-fixed-inline-size-fixed.https.html", + [ + [ + "/css/css-layout-api/constraints-fixed-inline-size-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-layout-api/constraints-fixed-inline-size-flex-grow-column-vrl.https.html": [ + [ + "/css/css-layout-api/constraints-fixed-inline-size-flex-grow-column-vrl.https.html", + [ + [ + "/css/css-layout-api/constraints-fixed-inline-size-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-layout-api/constraints-fixed-inline-size-flex-grow.https.html": [ + [ + "/css/css-layout-api/constraints-fixed-inline-size-flex-grow.https.html", + [ + [ + "/css/css-layout-api/constraints-fixed-inline-size-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-layout-api/constraints-fixed-inline-size-grid.https.html": [ + [ + "/css/css-layout-api/constraints-fixed-inline-size-grid.https.html", + [ + [ + "/css/css-layout-api/constraints-fixed-inline-size-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-layout-api/constraints-fixed-inline-size-percentage-vlr.https.html": [ + [ + "/css/css-layout-api/constraints-fixed-inline-size-percentage-vlr.https.html", + [ + [ + "/css/css-layout-api/constraints-fixed-inline-size-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-layout-api/constraints-fixed-inline-size-percentage.https.html": [ + [ + "/css/css-layout-api/constraints-fixed-inline-size-percentage.https.html", + [ + [ + "/css/css-layout-api/constraints-fixed-inline-size-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-layout-api/fallback-constructor-error.https.html": [ [ "/css/css-layout-api/fallback-constructor-error.https.html", @@ -181317,6 +181473,30 @@ {} ] ], + "shadow-dom/layout-slot-no-longer-assigned.html": [ + [ + "/shadow-dom/layout-slot-no-longer-assigned.html", + [ + [ + "/shadow-dom/reference/empty.html", + "==" + ] + ], + {} + ] + ], + "shadow-dom/layout-slot-no-longer-fallback.html": [ + [ + "/shadow-dom/layout-slot-no-longer-fallback.html", + [ + [ + "/shadow-dom/reference/empty.html", + "==" + ] + ], + {} + ] + ], "shadow-dom/untriaged/shadow-trees/nested-shadow-trees/nested_tree_reftest.html": [ [ "/shadow-dom/untriaged/shadow-trees/nested-shadow-trees/nested_tree_reftest.html", @@ -248328,6 +248508,11 @@ {} ] ], + "css/css-layout-api/constraints-fixed-inline-size-ref.html": [ + [ + {} + ] + ], "css/css-layout-api/fallback-ref.html": [ [ {} @@ -248353,6 +248538,11 @@ {} ] ], + "css/css-layout-api/support/constraints-fixed-inline-size.js": [ + [ + {} + ] + ], "css/css-layout-api/support/layout-child-fixed-sizes-worklet.js": [ [ {} @@ -281293,6 +281483,11 @@ {} ] ], + "html/semantics/document-metadata/the-link-element/resources/link-load-error-events.sub.js": [ + [ + {} + ] + ], "html/semantics/document-metadata/the-link-element/resources/stylesheet.css": [ [ {} @@ -293143,6 +293338,11 @@ {} ] ], + "shadow-dom/reference/empty.html": [ + [ + {} + ] + ], "shadow-dom/resources/Document-prototype-currentScript-helper.js": [ [ {} @@ -317557,6 +317757,12 @@ {} ] ], + "css/css-typed-om/the-stylepropertymap/properties/center-coordinate.html": [ + [ + "/css/css-typed-om/the-stylepropertymap/properties/center-coordinate.html", + {} + ] + ], "css/css-typed-om/the-stylepropertymap/properties/clear.html": [ [ "/css/css-typed-om/the-stylepropertymap/properties/clear.html", @@ -317587,6 +317793,12 @@ {} ] ], + "css/css-typed-om/the-stylepropertymap/properties/coordinate.html": [ + [ + "/css/css-typed-om/the-stylepropertymap/properties/coordinate.html", + {} + ] + ], "css/css-typed-om/the-stylepropertymap/properties/direction.html": [ [ "/css/css-typed-om/the-stylepropertymap/properties/direction.html", @@ -317965,12 +318177,42 @@ {} ] ], + "css/css-typed-om/the-stylepropertymap/properties/text-decoration-line.html": [ + [ + "/css/css-typed-om/the-stylepropertymap/properties/text-decoration-line.html", + {} + ] + ], + "css/css-typed-om/the-stylepropertymap/properties/text-decoration-skip-ink.html": [ + [ + "/css/css-typed-om/the-stylepropertymap/properties/text-decoration-skip-ink.html", + {} + ] + ], + "css/css-typed-om/the-stylepropertymap/properties/text-decoration-skip.html": [ + [ + "/css/css-typed-om/the-stylepropertymap/properties/text-decoration-skip.html", + {} + ] + ], "css/css-typed-om/the-stylepropertymap/properties/text-decoration-style.html": [ [ "/css/css-typed-om/the-stylepropertymap/properties/text-decoration-style.html", {} ] ], + "css/css-typed-om/the-stylepropertymap/properties/text-decoration-width.html": [ + [ + "/css/css-typed-om/the-stylepropertymap/properties/text-decoration-width.html", + {} + ] + ], + "css/css-typed-om/the-stylepropertymap/properties/text-decoration.html": [ + [ + "/css/css-typed-om/the-stylepropertymap/properties/text-decoration.html", + {} + ] + ], "css/css-typed-om/the-stylepropertymap/properties/text-emphasis-color.html": [ [ "/css/css-typed-om/the-stylepropertymap/properties/text-emphasis-color.html", @@ -320839,6 +321081,12 @@ {} ] ], + "dom/events/relatedTarget.window.js": [ + [ + "/dom/events/relatedTarget.window.html", + {} + ] + ], "dom/historical.html": [ [ "/dom/historical.html", @@ -330139,6 +330387,18 @@ {} ] ], + "html/semantics/document-metadata/the-link-element/link-load-error-events.html": [ + [ + "/html/semantics/document-metadata/the-link-element/link-load-error-events.html", + {} + ] + ], + "html/semantics/document-metadata/the-link-element/link-load-error-events.https.html": [ + [ + "/html/semantics/document-metadata/the-link-element/link-load-error-events.https.html", + {} + ] + ], "html/semantics/document-metadata/the-link-element/link-load-event.html": [ [ "/html/semantics/document-metadata/the-link-element/link-load-event.html", @@ -338217,6 +338477,12 @@ {} ] ], + "html/webappapis/scripting/events/event-handler-attributes-window-body.html": [ + [ + "/html/webappapis/scripting/events/event-handler-attributes-window-body.html", + {} + ] + ], "html/webappapis/scripting/events/event-handler-javascript.html": [ [ "/html/webappapis/scripting/events/event-handler-javascript.html", @@ -502710,6 +502976,62 @@ "a999a2a7ad8981879cdc984bf602939a23a60ea6", "testharness" ], + "css/css-layout-api/constraints-fixed-inline-size-absolute-left-right.https.html": [ + "15f8dde88dd066b5525a6b8990206ac567f48b2a", + "reftest" + ], + "css/css-layout-api/constraints-fixed-inline-size-absolute-top-bottom-vrl.https.html": [ + "9cb3a2b8671ef4f9926a39431d193875a5a1738a", + "reftest" + ], + "css/css-layout-api/constraints-fixed-inline-size-block-auto-avoid-floats-vlr.https.html": [ + "b38fb83238cba9bef74121b1f2a07a1667e4ea63", + "reftest" + ], + "css/css-layout-api/constraints-fixed-inline-size-block-auto-avoid-floats.https.html": [ + "50b56739750402d286da5a3c6cdbbc0335a60bd4", + "reftest" + ], + "css/css-layout-api/constraints-fixed-inline-size-block-auto-vlr.https.html": [ + "929bc22562cd2b1a3635b082c4176215d8668857", + "reftest" + ], + "css/css-layout-api/constraints-fixed-inline-size-block-auto.https.html": [ + "8d0459a147ed62a8c2dc6941bfb38335fa9ad4e5", + "reftest" + ], + "css/css-layout-api/constraints-fixed-inline-size-fixed-vrl.https.html": [ + "888a34c8a1e40c7687a5500efce2496bb5e1b2b6", + "reftest" + ], + "css/css-layout-api/constraints-fixed-inline-size-fixed.https.html": [ + "d98fc7d2cdecc5f11a6853a3280aaf106a8de4e2", + "reftest" + ], + "css/css-layout-api/constraints-fixed-inline-size-flex-grow-column-vrl.https.html": [ + "924c0581767d514b24b530ab012233d61d96055a", + "reftest" + ], + "css/css-layout-api/constraints-fixed-inline-size-flex-grow.https.html": [ + "3f0077ceb95fcfa870c6c6625efbee3c8fa1e2b6", + "reftest" + ], + "css/css-layout-api/constraints-fixed-inline-size-grid.https.html": [ + "ec0ea758406f3bbc73d5d8b8ee2138a3fd941163", + "reftest" + ], + "css/css-layout-api/constraints-fixed-inline-size-percentage-vlr.https.html": [ + "e1e299e101a6f501f2a27b867db36ab8afdc73d1", + "reftest" + ], + "css/css-layout-api/constraints-fixed-inline-size-percentage.https.html": [ + "c11a34aeba8f8743723b8859bb9c6fca886cda23", + "reftest" + ], + "css/css-layout-api/constraints-fixed-inline-size-ref.html": [ + "1d7de325448b3132ec04b8788665829ff5d1fb02", + "support" + ], "css/css-layout-api/fallback-constructor-error.https.html": [ "fdb9954e12f4628c114499a5e69f257b60377617", "reftest" @@ -502834,6 +503156,10 @@ "361b3c82c37c0068d23ae23e96d8e9185d3765b0", "reftest" ], + "css/css-layout-api/support/constraints-fixed-inline-size.js": [ + "ed0224a380c50a7e83d23a95be5a4348ce5bf706", + "support" + ], "css/css-layout-api/support/layout-child-fixed-sizes-worklet.js": [ "5ddda72e3c9d077508622511e8685249c7803028", "support" @@ -523063,7 +523389,7 @@ "testharness" ], "css/css-typed-om/the-stylepropertymap/properties/animation-direction.html": [ - "05e0be2c67fd695d693f2a639acf88ff78d8fd04", + "6c988281b4773fa25ef0d811ff6e0cd37a1e0fae", "testharness" ], "css/css-typed-om/the-stylepropertymap/properties/backface-visibility.html": [ @@ -523075,7 +523401,7 @@ "testharness" ], "css/css-typed-om/the-stylepropertymap/properties/background-image.html": [ - "1255fea8e74561e14720ccf422fd841e1d3e32fa", + "08055b88eca1f841f3b8a9867d8ffeb93d214d1f", "testharness" ], "css/css-typed-om/the-stylepropertymap/properties/background.html": [ @@ -523126,6 +523452,10 @@ "d4139aeff755abe89ee1e04fcd34ccfba4efe91c", "testharness" ], + "css/css-typed-om/the-stylepropertymap/properties/center-coordinate.html": [ + "3f7e38c8f71e7da0fb17e714f37821922bd3d720", + "testharness" + ], "css/css-typed-om/the-stylepropertymap/properties/clear.html": [ "376585635ab5752db4b2078f6247fa621a954282", "testharness" @@ -523146,6 +523476,10 @@ "3f6faf5b2371d8be9483148f3bfa562710c9c3ef", "testharness" ], + "css/css-typed-om/the-stylepropertymap/properties/coordinate.html": [ + "f03d1956798b3bbf5d4ed421cea55b274b7fecc7", + "testharness" + ], "css/css-typed-om/the-stylepropertymap/properties/direction.html": [ "b7c49aba4e8785f819beeb444c113d937d441089", "testharness" @@ -523291,7 +523625,7 @@ "testharness" ], "css/css-typed-om/the-stylepropertymap/properties/mask-image.html": [ - "2a20c6818e9d71adbf3902fde74cb26136917e72", + "8400ca1a6caf399c5914df06028d6616fb9f9571", "testharness" ], "css/css-typed-om/the-stylepropertymap/properties/mix-blend-mode.html": [ @@ -523371,7 +523705,7 @@ "testharness" ], "css/css-typed-om/the-stylepropertymap/properties/resources/testsuite.js": [ - "7e6c530cf36cce5d7b8d02abbbefbdd4370d1be1", + "ca6f58ecbab01ee294f4388b456b3b1bdd7a4629", "support" ], "css/css-typed-om/the-stylepropertymap/properties/right.html": [ @@ -523402,10 +523736,30 @@ "fe6d3765ca8fea1c1963a310d0aa35fa68089a9b", "testharness" ], + "css/css-typed-om/the-stylepropertymap/properties/text-decoration-line.html": [ + "0bd9668c45b14a0c52869ed0627cc408af550a25", + "testharness" + ], + "css/css-typed-om/the-stylepropertymap/properties/text-decoration-skip-ink.html": [ + "f6a122cc2d44432e94e0700961868a5708cde232", + "testharness" + ], + "css/css-typed-om/the-stylepropertymap/properties/text-decoration-skip.html": [ + "db1e8a3d65c8c0653e3412c965df11fc4917ba85", + "testharness" + ], "css/css-typed-om/the-stylepropertymap/properties/text-decoration-style.html": [ "b541bd8b57f8b85f6e5f3a17a3266169debee876", "testharness" ], + "css/css-typed-om/the-stylepropertymap/properties/text-decoration-width.html": [ + "50f917bbd7df4e0c235a6c84a4ec5a90243e36dc", + "testharness" + ], + "css/css-typed-om/the-stylepropertymap/properties/text-decoration.html": [ + "88d9f53aa4691c682c37fe74f7644e8ac8344cc9", + "testharness" + ], "css/css-typed-om/the-stylepropertymap/properties/text-emphasis-color.html": [ "9419ab219034d1fb732965ebd3a03934bcaddf5a", "testharness" @@ -523431,7 +523785,7 @@ "testharness" ], "css/css-typed-om/the-stylepropertymap/properties/transition-duration.html": [ - "b735f3ff6dba561cf2e35a8a85a8e2b93c0edc61", + "fe613a427b8c057fb859eb70a58d506c6a0b3cde", "testharness" ], "css/css-typed-om/the-stylepropertymap/properties/unicode-bidi.html": [ @@ -546258,6 +546612,10 @@ "40ab5636653dfd105738ab38e7d22316132eb630", "testharness" ], + "dom/events/relatedTarget.window.js": [ + "0426d2ecae3f3562be175e4364353d979365ed1c", + "testharness" + ], "dom/historical.html": [ "ccf3d9d2d8eb3e7353ecedd8a4d8ba232f9374ec", "testharness" @@ -563546,8 +563904,16 @@ "1ffdecee25d1f3819f3f67241c3f0746bedbcf97", "testharness" ], + "html/semantics/document-metadata/the-link-element/link-load-error-events.html": [ + "8835935f157e5c227a8ce62f1a4fafcb46c50914", + "testharness" + ], + "html/semantics/document-metadata/the-link-element/link-load-error-events.https.html": [ + "8835935f157e5c227a8ce62f1a4fafcb46c50914", + "testharness" + ], "html/semantics/document-metadata/the-link-element/link-load-event.html": [ - "a1a8b7b20492b7fef977f7734425f9cf55322f2a", + "628527090c78d90d831cb80ea8eee7ffa66722f5", "testharness" ], "html/semantics/document-metadata/the-link-element/link-rellist.html": [ @@ -563570,6 +563936,10 @@ "04a3a89fe805fc930dc3adfa3a4134b950779697", "support" ], + "html/semantics/document-metadata/the-link-element/resources/link-load-error-events.sub.js": [ + "0c45045a1db6958751dfe112aa3234ca936263e7", + "support" + ], "html/semantics/document-metadata/the-link-element/resources/stylesheet.css": [ "2829167c82bafef6cfea06071007a231aa4277f6", "support" @@ -571846,6 +572216,10 @@ "c25750e626c5c2121833fd4627f656ffe9c83d38", "testharness" ], + "html/webappapis/scripting/events/event-handler-attributes-window-body.html": [ + "d5a47edd139eb2ff2fe035451f44996bfe2f414d", + "testharness" + ], "html/webappapis/scripting/events/event-handler-javascript.html": [ "2dece90b5e8b3ac3371a732e158ff44b8ea63b00", "testharness" @@ -576139,7 +576513,7 @@ "testharness" ], "navigation-timing/test_timing_server_redirect.html": [ - "10b7f221c4667e92a993f0aae70820a95ea445aa", + "e08cd61d0e373b0ba04e00d429b3c607df8d2fd4", "testharness" ], "navigation-timing/test_timing_xserver_redirect.html": [ @@ -582583,7 +582957,7 @@ "support" ], "payment-request/OWNERS": [ - "448f2bd0db2f9cff5bbe5c2b9e80c8d609d5379f", + "60cf95eb7b2e583315fe8539d2caf38667412d19", "support" ], "payment-request/PaymentAddress/attributes-and-toJSON-method-manual.https.html": [ @@ -582811,11 +583185,11 @@ "manual" ], "payment-request/show-method-optional-promise-rejects-manual.https.html": [ - "62542519059ab38ee0753deff5e7e6e587f8adbf", + "a8dde7fa5b501688a51f23b330e4cd25273a6146", "manual" ], "payment-request/show-method-optional-promise-resolves-manual.https.html": [ - "a07f98e117bce1f040c5e62ef3acbd2ef7475338", + "a19166fd1366f8510bec53b4e9fc1033a129c44b", "manual" ], "payment-request/show-method-postmessage-iframe.html": [ @@ -593231,7 +593605,7 @@ "testharness" ], "service-workers/service-worker/fetch-event.https.html": [ - "9d365e1960c873a48cf5378cda7615cbef49f5cd", + "1a7e0410ef0e486738ca7c76542c2612228d5bd2", "testharness" ], "service-workers/service-worker/fetch-frame-resource.https.html": [ @@ -595090,6 +595464,14 @@ "1469992db34a25397dc3d5a5e1eb600e8afcf71b", "testharness" ], + "shadow-dom/layout-slot-no-longer-assigned.html": [ + "224a688177941774e0bd3be74cb4aef20160d903", + "reftest" + ], + "shadow-dom/layout-slot-no-longer-fallback.html": [ + "a9be2ec9174a8944a237462b51519a8f88b4987a", + "reftest" + ], "shadow-dom/leaktests/get-elements.html": [ "ceffb5ff2e8b171975acb616d83079f0cfa7a82a", "testharness" @@ -595102,6 +595484,10 @@ "2e7c236bb756dfbd3a6c42c547fc7d7e897883ce", "testharness" ], + "shadow-dom/reference/empty.html": [ + "51a23151c28992fe062b36914463de216bd55fbe", + "support" + ], "shadow-dom/resources/Document-prototype-currentScript-helper.js": [ "f7d4af7942bcd858df4a2f1a8bbda86b32baee31", "support" @@ -602727,7 +603113,7 @@ "wdspec" ], "webdriver/tests/contexts/maximize_window.py": [ - "7912e2f7ebdffe2598eb3b9a20f4fc7fce22447e", + "e0dfeb6234371077baa7f67a45d7ffa9b61c9759", "wdspec" ], "webdriver/tests/contexts/resizing_and_positioning.py": [ @@ -602771,19 +603157,19 @@ "support" ], "webdriver/tests/element_retrieval/find_element.py": [ - "699b97bd31eed625e2f0bed145aaf94c3e646853", + "8c9ed3ac2169f4b65a2e172a6e77b9586d83afa2", "wdspec" ], "webdriver/tests/element_retrieval/find_element_from_element.py": [ - "fa64a4164762861097f11252e8526261038ae1c5", + "4ac7c4f27f19fe0b6a42fe888b478b78d9c4ca7e", "wdspec" ], "webdriver/tests/element_retrieval/find_elements.py": [ - "284ae53c5c94d02fb46b26dcd70af02d7917e7b4", + "fa8c2de1ffd12432bf14368b9c72000567ab8d20", "wdspec" ], "webdriver/tests/element_retrieval/find_elements_from_element.py": [ - "90be4b09a41b8ba00529a78983fbd64cdb3453ef", + "0afca7c9c332ac6bc4da4dd9607ae36b42914a14", "wdspec" ], "webdriver/tests/element_retrieval/get_active_element.py": [ @@ -602827,7 +603213,7 @@ "wdspec" ], "webdriver/tests/fullscreen_window.py": [ - "67cc7d992d81a176297038f5516c8a9c95018040", + "c244064c0595d9274ddef98c527d193355ba13fa", "wdspec" ], "webdriver/tests/get_window_rect.py": [ @@ -602847,7 +603233,7 @@ "testharness" ], "webdriver/tests/minimize_window.py": [ - "ac1df5462702ac368ffa92cc12cfb5e34df226ac", + "08d4414ce915f1ebe7825d5d99e204dc331fe155", "wdspec" ], "webdriver/tests/navigation/current_url.py": [ @@ -602903,7 +603289,7 @@ "wdspec" ], "webdriver/tests/set_window_rect.py": [ - "8a124f80e6e7732a651a80da3f6cdf8e2ed99e3e", + "079038aa66cb729cf205aac040a5fe075d01fd8a", "wdspec" ], "webdriver/tests/state/__init__.py": [ @@ -603679,7 +604065,7 @@ "testharness" ], "webrtc/RTCPeerConnection-track-stats.https.html": [ - "92fbaf0f4c596222975edae433725d616dac6082", + "f69d223cb8cd11e4b68b7687e2361ed3ea947f5e", "testharness" ], "webrtc/RTCPeerConnectionIceEvent-constructor.html": [ @@ -603743,7 +604129,7 @@ "testharness" ], "webrtc/RTCRtpSender-getStats.https.html": [ - "5c480c0d64de4e3ee041b95e5ccaec6264b878b8", + "64c4424e36c566294a317fb423eb02e97a9ebbca", "testharness" ], "webrtc/RTCRtpSender-replaceTrack.html": [ diff --git a/tests/wpt/metadata/css/css-values/vh_not_refreshing_on_chrome.html.ini b/tests/wpt/metadata/css/css-values/vh_not_refreshing_on_chrome.html.ini new file mode 100644 index 00000000000..26435e28b09 --- /dev/null +++ b/tests/wpt/metadata/css/css-values/vh_not_refreshing_on_chrome.html.ini @@ -0,0 +1,2 @@ +[vh_not_refreshing_on_chrome.html] + expected: FAIL diff --git a/tests/wpt/metadata/dom/events/relatedTarget.window.js.ini b/tests/wpt/metadata/dom/events/relatedTarget.window.js.ini new file mode 100644 index 00000000000..cbe3c35452c --- /dev/null +++ b/tests/wpt/metadata/dom/events/relatedTarget.window.js.ini @@ -0,0 +1,4 @@ +[relatedTarget.window.html] + [Untitled] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/document-metadata/the-link-element/link-load-error-events.html.ini b/tests/wpt/metadata/html/semantics/document-metadata/the-link-element/link-load-error-events.html.ini new file mode 100644 index 00000000000..26f8670bd9a --- /dev/null +++ b/tests/wpt/metadata/html/semantics/document-metadata/the-link-element/link-load-error-events.html.ini @@ -0,0 +1,10 @@ +[link-load-error-events.html] + [Load of non-CSS stylesheet] + expected: FAIL + + [Import of non-CSS stylesheet] + expected: FAIL + + [Import of import of non-CSS stylesheet] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/document-metadata/the-link-element/link-load-error-events.https.html.ini b/tests/wpt/metadata/html/semantics/document-metadata/the-link-element/link-load-error-events.https.html.ini new file mode 100644 index 00000000000..2070ad0264a --- /dev/null +++ b/tests/wpt/metadata/html/semantics/document-metadata/the-link-element/link-load-error-events.https.html.ini @@ -0,0 +1,19 @@ +[link-load-error-events.https.html] + [Load of non-CSS stylesheet] + expected: FAIL + + [Import of non-CSS stylesheet] + expected: FAIL + + [Import of import of non-CSS stylesheet] + expected: FAIL + + [Load of http:// stylesheet] + expected: FAIL + + [Import of http:// stylesheet] + expected: FAIL + + [Import of import of http:// stylesheet] + expected: FAIL + diff --git a/tests/wpt/metadata/html/webappapis/scripting/events/event-handler-attributes-window-body.html.ini b/tests/wpt/metadata/html/webappapis/scripting/events/event-handler-attributes-window-body.html.ini new file mode 100644 index 00000000000..6cd2d9dc54b --- /dev/null +++ b/tests/wpt/metadata/html/webappapis/scripting/events/event-handler-attributes-window-body.html.ini @@ -0,0 +1,4 @@ +[event-handler-attributes-window-body.html] + [error] + expected: FAIL + diff --git a/tests/wpt/mozilla/meta/webgl/conformance-1.0.3/conformance/canvas/rapid-resizing.html.ini b/tests/wpt/mozilla/meta/webgl/conformance-1.0.3/conformance/canvas/rapid-resizing.html.ini deleted file mode 100644 index 1e2567027d8..00000000000 --- a/tests/wpt/mozilla/meta/webgl/conformance-1.0.3/conformance/canvas/rapid-resizing.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[rapid-resizing.html] - expected: TIMEOUT - [Overall test] - expected: NOTRUN - diff --git a/tests/wpt/mozilla/meta/webgl/conformance-1.0.3/conformance/glsl/misc/shader-with-non-reserved-words.html.ini b/tests/wpt/mozilla/meta/webgl/conformance-1.0.3/conformance/glsl/misc/shader-with-non-reserved-words.html.ini deleted file mode 100644 index fb8852c9e7a..00000000000 --- a/tests/wpt/mozilla/meta/webgl/conformance-1.0.3/conformance/glsl/misc/shader-with-non-reserved-words.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[shader-with-non-reserved-words.html] - expected: TIMEOUT - [Overall test] - expected: NOTRUN - diff --git a/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-absolute-left-right.https.html b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-absolute-left-right.https.html new file mode 100644 index 00000000000..6b3662a16d4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-absolute-left-right.https.html @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<html class=reftest-wait> +<link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#dom-layoutconstraints-fixedinlinesize"> +<link rel="match" href="constraints-fixed-inline-size-ref.html"> +<meta name="assert" content="This test checks that LayoutConstraints#fixedInlineSize is passed into the layout function correctly." /> +<style> +body { + position: relative; + width: 120px; +} + +.test { + background: red; + position: absolute; + left: 0px; + right: 20px; +} + +@supports (display: layout(test)) { + .test { + background: green; + display: layout(test); + } +} +</style> +<script src="/common/reftest-wait.js"></script> +<script src="/common/worklet-reftest.js"></script> + +<div class="test"></div> + +<script> +importWorkletAndTerminateTestAfterAsyncPaint(CSS.layoutWorklet, {url: 'support/constraints-fixed-inline-size.js'}); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-absolute-top-bottom-vrl.https.html b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-absolute-top-bottom-vrl.https.html new file mode 100644 index 00000000000..632a5dddfac --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-absolute-top-bottom-vrl.https.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<html class=reftest-wait> +<link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#dom-layoutconstraints-fixedinlinesize"> +<link rel="match" href="constraints-fixed-inline-size-ref.html"> +<meta name="assert" content="This test checks that LayoutConstraints#fixedInlineSize is passed into the layout function correctly." /> +<style> +body { + position: relative; + height: 120px; +} + +.test { + background: red; + position: absolute; + left: 0px; + top: 0px; + bottom: 20px; + writing-mode: vertical-rl; +} + +@supports (display: layout(test)) { + .test { + background: green; + display: layout(test); + } +} +</style> +<script src="/common/reftest-wait.js"></script> +<script src="/common/worklet-reftest.js"></script> + +<div class="test"></div> + +<script> +importWorkletAndTerminateTestAfterAsyncPaint(CSS.layoutWorklet, {url: 'support/constraints-fixed-inline-size.js'}); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-block-auto-avoid-floats-vlr.https.html b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-block-auto-avoid-floats-vlr.https.html new file mode 100644 index 00000000000..a8f4dd31ac9 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-block-auto-avoid-floats-vlr.https.html @@ -0,0 +1,37 @@ +<!DOCTYPE html> +<html class=reftest-wait> +<link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#dom-layoutconstraints-fixedinlinesize"> +<link rel="match" href="constraints-fixed-inline-size-ref.html"> +<meta name="assert" content="This test checks that LayoutConstraints#fixedInlineSize is passed into the layout function correctly." /> +<style> +body { + height: 200px; + writing-mode: vertical-lr; +} + +.float { + float: right; + width: 20px; + height: 100px; +} + +.test { + background: red; +} + +@supports (display: layout(test)) { + .test { + background: green; + display: layout(test); + } +} +</style> +<script src="/common/reftest-wait.js"></script> +<script src="/common/worklet-reftest.js"></script> + +<div class="float"></div> +<div class="test"></div> + +<script> +importWorkletAndTerminateTestAfterAsyncPaint(CSS.layoutWorklet, {url: 'support/constraints-fixed-inline-size.js'}); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-block-auto-avoid-floats.https.html b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-block-auto-avoid-floats.https.html new file mode 100644 index 00000000000..2eb6197c077 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-block-auto-avoid-floats.https.html @@ -0,0 +1,36 @@ +<!DOCTYPE html> +<html class=reftest-wait> +<link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#dom-layoutconstraints-fixedinlinesize"> +<link rel="match" href="constraints-fixed-inline-size-ref.html"> +<meta name="assert" content="This test checks that LayoutConstraints#fixedInlineSize is passed into the layout function correctly." /> +<style> +body { + width: 200px; +} + +.float { + float: right; + width: 100px; + height: 20px; +} + +.test { + background: red; +} + +@supports (display: layout(test)) { + .test { + background: green; + display: layout(test); + } +} +</style> +<script src="/common/reftest-wait.js"></script> +<script src="/common/worklet-reftest.js"></script> + +<div class="float"></div> +<div class="test"></div> + +<script> +importWorkletAndTerminateTestAfterAsyncPaint(CSS.layoutWorklet, {url: 'support/constraints-fixed-inline-size.js'}); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-block-auto-vlr.https.html b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-block-auto-vlr.https.html new file mode 100644 index 00000000000..751ea5ef759 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-block-auto-vlr.https.html @@ -0,0 +1,31 @@ +<!DOCTYPE html> +<html class=reftest-wait> +<link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#dom-layoutconstraints-fixedinlinesize"> +<link rel="match" href="constraints-fixed-inline-size-ref.html"> +<meta name="assert" content="This test checks that LayoutConstraints#fixedInlineSize is passed into the layout function correctly." /> +<style> +body { + height: 120px; + writing-mode: vertical-lr; +} + +.test { + margin-bottom: 20px; + background: red; +} + +@supports (display: layout(test)) { + .test { + background: green; + display: layout(test); + } +} +</style> +<script src="/common/reftest-wait.js"></script> +<script src="/common/worklet-reftest.js"></script> + +<div class="test"></div> + +<script> +importWorkletAndTerminateTestAfterAsyncPaint(CSS.layoutWorklet, {url: 'support/constraints-fixed-inline-size.js'}); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-block-auto.https.html b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-block-auto.https.html new file mode 100644 index 00000000000..1458a8bbb79 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-block-auto.https.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html class=reftest-wait> +<link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#dom-layoutconstraints-fixedinlinesize"> +<link rel="match" href="constraints-fixed-inline-size-ref.html"> +<meta name="assert" content="This test checks that LayoutConstraints#fixedInlineSize is passed into the layout function correctly." /> +<style> +body { + width: 120px; +} + +.test { + margin-right: 20px; + background: red; +} + +@supports (display: layout(test)) { + .test { + background: green; + display: layout(test); + } +} +</style> +<script src="/common/reftest-wait.js"></script> +<script src="/common/worklet-reftest.js"></script> + +<div class="test"></div> + +<script> +importWorkletAndTerminateTestAfterAsyncPaint(CSS.layoutWorklet, {url: 'support/constraints-fixed-inline-size.js'}); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-fixed-vrl.https.html b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-fixed-vrl.https.html new file mode 100644 index 00000000000..39ea818216d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-fixed-vrl.https.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html class=reftest-wait> +<link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#dom-layoutconstraints-fixedinlinesize"> +<link rel="match" href="constraints-fixed-inline-size-ref.html"> +<meta name="assert" content="This test checks that LayoutConstraints#fixedInlineSize is passed into the layout function correctly." /> +<style> +.test { + background: red; + height: 100px; + writing-mode: vertical-rl; +} + +@supports (display: layout(test)) { + .test { + background: green; + display: layout(test); + } +} +</style> +<script src="/common/reftest-wait.js"></script> +<script src="/common/worklet-reftest.js"></script> + +<div class="test"></div> + +<script> +importWorkletAndTerminateTestAfterAsyncPaint(CSS.layoutWorklet, {url: 'support/constraints-fixed-inline-size.js'}); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-fixed.https.html b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-fixed.https.html new file mode 100644 index 00000000000..6434d339196 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-fixed.https.html @@ -0,0 +1,26 @@ +<!DOCTYPE html> +<html class=reftest-wait> +<link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#dom-layoutconstraints-fixedinlinesize"> +<link rel="match" href="constraints-fixed-inline-size-ref.html"> +<meta name="assert" content="This test checks that LayoutConstraints#fixedInlineSize is passed into the layout function correctly." /> +<style> +.test { + background: red; + width: 100px; +} + +@supports (display: layout(test)) { + .test { + background: green; + display: layout(test); + } +} +</style> +<script src="/common/reftest-wait.js"></script> +<script src="/common/worklet-reftest.js"></script> + +<div class="test"></div> + +<script> +importWorkletAndTerminateTestAfterAsyncPaint(CSS.layoutWorklet, {url: 'support/constraints-fixed-inline-size.js'}); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-flex-grow-column-vrl.https.html b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-flex-grow-column-vrl.https.html new file mode 100644 index 00000000000..263d45e5b0b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-flex-grow-column-vrl.https.html @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<html class=reftest-wait> +<link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#dom-layoutconstraints-fixedinlinesize"> +<link rel="match" href="constraints-fixed-inline-size-ref.html"> +<meta name="assert" content="This test checks that LayoutConstraints#fixedInlineSize is passed into the layout function correctly." /> +<style> +body { + display: flex; + flex-flow: column; + width: 100px; + height: 100px; +} + +.test { + background: red; + flex-grow: 1; +} + +@supports (display: layout(test)) { + .test { + background: green; + display: layout(test); + } +} +</style> +<script src="/common/reftest-wait.js"></script> +<script src="/common/worklet-reftest.js"></script> + +<div class="test"></div> + +<script> +importWorkletAndTerminateTestAfterAsyncPaint(CSS.layoutWorklet, {url: 'support/constraints-fixed-inline-size.js'}); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-flex-grow.https.html b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-flex-grow.https.html new file mode 100644 index 00000000000..d2589e62e78 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-flex-grow.https.html @@ -0,0 +1,31 @@ +<!DOCTYPE html> +<html class=reftest-wait> +<link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#dom-layoutconstraints-fixedinlinesize"> +<link rel="match" href="constraints-fixed-inline-size-ref.html"> +<meta name="assert" content="This test checks that LayoutConstraints#fixedInlineSize is passed into the layout function correctly." /> +<style> +body { + display: flex; + width: 100px; +} + +.test { + background: red; + flex-grow: 1; +} + +@supports (display: layout(test)) { + .test { + background: green; + display: layout(test); + } +} +</style> +<script src="/common/reftest-wait.js"></script> +<script src="/common/worklet-reftest.js"></script> + +<div class="test"></div> + +<script> +importWorkletAndTerminateTestAfterAsyncPaint(CSS.layoutWorklet, {url: 'support/constraints-fixed-inline-size.js'}); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-grid.https.html b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-grid.https.html new file mode 100644 index 00000000000..94eca6b5967 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-grid.https.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html class=reftest-wait> +<link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#dom-layoutconstraints-fixedinlinesize"> +<link rel="match" href="constraints-fixed-inline-size-ref.html"> +<meta name="assert" content="This test checks that LayoutConstraints#fixedInlineSize is passed into the layout function correctly." /> +<style> +body { + display: grid; + grid: auto-flow / 100px; +} + +.test { + background: red; +} + +@supports (display: layout(test)) { + .test { + background: green; + display: layout(test); + } +} +</style> +<script src="/common/reftest-wait.js"></script> +<script src="/common/worklet-reftest.js"></script> + +<div class="test"></div> + +<script> +importWorkletAndTerminateTestAfterAsyncPaint(CSS.layoutWorklet, {url: 'support/constraints-fixed-inline-size.js'}); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-percentage-vlr.https.html b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-percentage-vlr.https.html new file mode 100644 index 00000000000..0efabcb31ab --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-percentage-vlr.https.html @@ -0,0 +1,31 @@ +<!DOCTYPE html> +<html class=reftest-wait> +<link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#dom-layoutconstraints-fixedinlinesize"> +<link rel="match" href="constraints-fixed-inline-size-ref.html"> +<meta name="assert" content="This test checks that LayoutConstraints#fixedInlineSize is passed into the layout function correctly." /> +<style> +body { + height: 200px; + writing-mode: vertical-lr; +} + +.test { + background: red; + height: 50%; +} + +@supports (display: layout(test)) { + .test { + background: green; + display: layout(test); + } +} +</style> +<script src="/common/reftest-wait.js"></script> +<script src="/common/worklet-reftest.js"></script> + +<div class="test"></div> + +<script> +importWorkletAndTerminateTestAfterAsyncPaint(CSS.layoutWorklet, {url: 'support/constraints-fixed-inline-size.js'}); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-percentage.https.html b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-percentage.https.html new file mode 100644 index 00000000000..4b5a5675ac0 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-percentage.https.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html class=reftest-wait> +<link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#dom-layoutconstraints-fixedinlinesize"> +<link rel="match" href="constraints-fixed-inline-size-ref.html"> +<meta name="assert" content="This test checks that LayoutConstraints#fixedInlineSize is passed into the layout function correctly." /> +<style> +body { + width: 200px; +} + +.test { + background: red; + width: 50%; +} + +@supports (display: layout(test)) { + .test { + background: green; + display: layout(test); + } +} +</style> +<script src="/common/reftest-wait.js"></script> +<script src="/common/worklet-reftest.js"></script> + +<div class="test"></div> + +<script> +importWorkletAndTerminateTestAfterAsyncPaint(CSS.layoutWorklet, {url: 'support/constraints-fixed-inline-size.js'}); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-ref.html b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-ref.html new file mode 100644 index 00000000000..e5727c0e2d2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-ref.html @@ -0,0 +1,10 @@ +<!DOCTYPE html> +<style> +.result { + background: green; + height: 100px; + width: 100px; +} +</style> + +<div class="result"></div> diff --git a/tests/wpt/web-platform-tests/css/css-layout-api/support/constraints-fixed-inline-size.js b/tests/wpt/web-platform-tests/css/css-layout-api/support/constraints-fixed-inline-size.js new file mode 100644 index 00000000000..4e591f7a736 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-layout-api/support/constraints-fixed-inline-size.js @@ -0,0 +1,9 @@ +registerLayout('test', class { + *intrinsicSizes() {} + *layout(children, edges, constraints, styleMap) { + if (constraints.fixedInlineSize !== 100) + return {autoBlockSize: 0}; + + return {autoBlockSize: 100}; + } +}); diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/animation-direction.html b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/animation-direction.html index 8ab03635042..0d4f6c02952 100644 --- a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/animation-direction.html +++ b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/animation-direction.html @@ -13,8 +13,7 @@ <script> 'use strict'; -// FIXME: animation-direction is list-valued. Run list-valued tests here too. -runPropertyTests('animation-direction', [ +runListValuedPropertyTests('animation-direction', [ { syntax: 'normal' }, { syntax: 'reverse' }, { syntax: 'alternate-reverse' }, diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/background-image.html b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/background-image.html index d584a0ff3e4..b3dddedbe4a 100644 --- a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/background-image.html +++ b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/background-image.html @@ -13,8 +13,7 @@ <script> 'use strict'; -// FIXME: background-image is list-valued. Run list-valued tests here too. -runPropertyTests('background-image', [ +runListValuedPropertyTests('background-image', [ { syntax: 'none' }, { syntax: '<image>' }, ]); diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/center-coordinate.html b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/center-coordinate.html new file mode 100644 index 00000000000..97722ec3d5f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/center-coordinate.html @@ -0,0 +1,26 @@ +<!doctype html> +<meta charset="utf-8"> +<title>'center-coordinate' property</title> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get"> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set"> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../../resources/testhelper.js"></script> +<script src="resources/testsuite.js"></script> +<body> +<div id="log"></div> +<script> +'use strict'; + +runPropertyTests('cx', [ + { syntax: '<percentage>' }, + { syntax: '<length>' }, +]); + +runPropertyTests('cy', [ + { syntax: '<percentage>' }, + { syntax: '<length>' }, +]); + +</script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/coordinate.html b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/coordinate.html new file mode 100644 index 00000000000..31ccbfa9b90 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/coordinate.html @@ -0,0 +1,26 @@ +<!doctype html> +<meta charset="utf-8"> +<title>'coordinate' property</title> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get"> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set"> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../../resources/testhelper.js"></script> +<script src="resources/testsuite.js"></script> +<body> +<div id="log"></div> +<script> +'use strict'; + +runPropertyTests('x', [ + { syntax: '<percentage>' }, + { syntax: '<length>' }, +]); + +runPropertyTests('y', [ + { syntax: '<percentage>' }, + { syntax: '<length>' }, +]); + +</script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/mask-image.html b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/mask-image.html index f306fdde92b..aa858d2e46b 100644 --- a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/mask-image.html +++ b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/mask-image.html @@ -13,8 +13,7 @@ <script> 'use strict'; -// FIXME: mask-image is list-valued. Run list-valued tests here too. -runPropertyTests('mask-image', [ +runListValuedPropertyTests('mask-image', [ { syntax: 'none' }, { syntax: '<image>' }, ]); diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/resources/testsuite.js b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/resources/testsuite.js index 2c20c05e7d0..bf2b217177c 100644 --- a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/resources/testsuite.js +++ b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/resources/testsuite.js @@ -378,6 +378,12 @@ function runPropertyTests(propertyName, testCases) { } } +// Same as runPropertyTests but for list-valued properties. +function runListValuedPropertyTests(propertyName, testCases) { + // TODO(https://crbug.com/545318): Run list-valued tests as well. + runPropertyTests(propertyName, testCases); +} + // Check that |propertyName| doesn't "support" examples in |testExamples|. // |testExamples| is a list of CSS string values. An "unsupported" value // doesn't have a corresponding Typed OM representation. It normalizes as diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/text-decoration-line.html b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/text-decoration-line.html new file mode 100644 index 00000000000..dba12630a4a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/text-decoration-line.html @@ -0,0 +1,26 @@ +<!doctype html> +<meta charset="utf-8"> +<title>'text-decoration-line' property</title> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get"> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set"> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../../resources/testhelper.js"></script> +<script src="resources/testsuite.js"></script> +<body> +<div id="log"></div> +<script> +'use strict'; + +runPropertyTests('text-decoration-line', [ + { syntax: 'none' }, + { syntax: 'underline' }, + { syntax: 'overline' }, + { syntax: 'line-through' }, + { syntax: 'blink' }, + { syntax: 'spelling-error' }, + { syntax: 'grammar-error' }, +]); + +</script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/text-decoration-skip-ink.html b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/text-decoration-skip-ink.html new file mode 100644 index 00000000000..57d445d7cd3 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/text-decoration-skip-ink.html @@ -0,0 +1,21 @@ +<!doctype html> +<meta charset="utf-8"> +<title>'text-decoration-skip-ink' property</title> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get"> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set"> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../../resources/testhelper.js"></script> +<script src="resources/testsuite.js"></script> +<body> +<div id="log"></div> +<script> +'use strict'; + +runPropertyTests('text-decoration-skip-ink', [ + { syntax: 'auto' }, + { syntax: 'none' }, +]); + +</script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/text-decoration-skip.html b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/text-decoration-skip.html new file mode 100644 index 00000000000..796b87790d4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/text-decoration-skip.html @@ -0,0 +1,29 @@ +<!doctype html> +<meta charset="utf-8"> +<title>'text-decoration-skip' property</title> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get"> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set"> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../../resources/testhelper.js"></script> +<script src="resources/testsuite.js"></script> +<body> +<div id="log"></div> +<script> +'use strict'; + +runPropertyTests('text-decoration-skip', [ + { syntax: 'none' }, + { syntax: 'objects' }, + { syntax: 'edges' }, + { syntax: 'box-decoration' }, + { syntax: 'spaces' }, +]); + +runUnsupportedPropertyTests('text-decoration-skip', [ + 'objects spaces', 'leading-spaces trailing-spaces', + 'objects edges box-decoration' +]); + +</script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/text-decoration-width.html b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/text-decoration-width.html new file mode 100644 index 00000000000..43aeb165645 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/text-decoration-width.html @@ -0,0 +1,24 @@ +<!doctype html> +<meta charset="utf-8"> +<title>'text-decoration-width' property</title> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get"> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set"> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../../resources/testhelper.js"></script> +<script src="resources/testsuite.js"></script> +<body> +<div id="log"></div> +<script> +'use strict'; + +runPropertyTests('text-decoration-width', [ + { syntax: 'auto' }, + { + syntax: '<length>', + specified: assert_is_equal_with_range_handling + }, +]); + +</script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/text-decoration.html b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/text-decoration.html new file mode 100644 index 00000000000..e9a9827c13d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/text-decoration.html @@ -0,0 +1,20 @@ +<!doctype html> +<meta charset="utf-8"> +<title>'text-decoration' property</title> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get"> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set"> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../../resources/testhelper.js"></script> +<script src="resources/testsuite.js"></script> +<body> +<div id="log"></div> +<script> +'use strict'; + +runUnsupportedPropertyTests('text-decoration', [ + 'underline', 'underline dotted #ff3028', 'green wavy underline' +]); + +</script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/transition-duration.html b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/transition-duration.html index c17e717ba91..c0eb09daa76 100644 --- a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/transition-duration.html +++ b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/transition-duration.html @@ -12,8 +12,7 @@ <script> 'use strict'; -// FIXME: transition-duration is list-valued. Run list-valued tests here too. -runPropertyTests('transition-duration', [ +runListValuedPropertyTests('transition-duration', [ { syntax: '<time>' }, ]); diff --git a/tests/wpt/web-platform-tests/dom/events/relatedTarget.window.js b/tests/wpt/web-platform-tests/dom/events/relatedTarget.window.js new file mode 100644 index 00000000000..d3632bb9e04 --- /dev/null +++ b/tests/wpt/web-platform-tests/dom/events/relatedTarget.window.js @@ -0,0 +1,85 @@ +// https://dom.spec.whatwg.org/#concept-event-dispatch + +const host = document.createElement("div"), + child = host.appendChild(document.createElement("p")), + shadow = host.attachShadow({ mode: "closed" }), + slot = shadow.appendChild(document.createElement("slot")); + +test(() => { + for (target of [shadow, slot]) { + for (relatedTarget of [new XMLHttpRequest(), self, host]) { + const event = new FocusEvent("demo", { relatedTarget: relatedTarget }); + target.dispatchEvent(event); + assert_equals(event.target, null); + assert_equals(event.relatedTarget, null); + } + } +}, "Reset if target pointed to a shadow tree"); + +test(() => { + for (relatedTarget of [shadow, slot]) { + for (target of [new XMLHttpRequest(), self, host]) { + const event = new FocusEvent("demo", { relatedTarget: relatedTarget }); + target.dispatchEvent(event); + assert_equals(event.target, null); + assert_equals(event.relatedTarget, null); + } + } +}, "Reset if relatedTarget pointed to a shadow tree"); + +async_test(t => { + const shadowChild = shadow.appendChild(document.createElement("div")); + shadowChild.addEventListener("demo", t.step_func(() => document.body.appendChild(shadowChild))); + const event = new FocusEvent("demo", { relatedTarget: new XMLHttpRequest() }); + shadowChild.dispatchEvent(event); + assert_equals(shadowChild.parentNode, document.body); + assert_equals(event.target, null); + assert_equals(event.relatedTarget, null); + shadowChild.remove(); + t.done(); +}, "Reset if target pointed to a shadow tree pre-dispatch"); + +async_test(t => { + const shadowChild = shadow.appendChild(document.createElement("div")); + shadowChild.addEventListener("demo", t.step_func(() => document.body.appendChild(shadowChild))); + const event = new FocusEvent("demo", { relatedTarget: shadowChild }); + document.body.dispatchEvent(event); + assert_equals(shadowChild.parentNode, document.body); + assert_equals(event.target, null); + assert_equals(event.relatedTarget, null); + shadowChild.remove(); + t.done(); +}, "Reset if relatedTarget pointed to a shadow tree pre-dispatch"); + +async_test(t => { + const event = new FocusEvent("heya", { relatedTarget: shadow, cancelable: true }), + callback = t.unreached_func(); + host.addEventListener("heya", callback); + t.add_cleanup(() => host.removeEventListener("heya", callback)); + event.preventDefault(); + assert_true(event.defaultPrevented); + assert_false(host.dispatchEvent(event)); + assert_equals(event.target, null); + assert_equals(event.relatedTarget, null); + // Check that the dispatch flag is cleared + event.initEvent("x"); + assert_equals(event.type, "x"); + t.done(); +}, "Reset targets on early return"); + +async_test(t => { + const input = document.body.appendChild(document.createElement("input")), + event = new MouseEvent("click", { relatedTarget: shadow }); + let seen = false; + t.add_cleanup(() => input.remove()); + input.type = "checkbox"; + input.oninput = t.step_func(() => { + assert_equals(event.target, null); + assert_equals(event.relatedTarget, null); + assert_equals(event.composedPath().length, 0); + seen = true; + }); + assert_true(input.dispatchEvent(event)); + assert_true(seen); + t.done(); +}, "Reset targets before activation behavior"); diff --git a/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-load-error-events.html b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-load-error-events.html new file mode 100644 index 00000000000..e4f617d4582 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-load-error-events.html @@ -0,0 +1,6 @@ +<!doctype html> +<meta charset=utf-8> +<title></title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src="resources/link-load-error-events.sub.js"></script> diff --git a/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-load-error-events.https.html b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-load-error-events.https.html new file mode 100644 index 00000000000..e4f617d4582 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-load-error-events.https.html @@ -0,0 +1,6 @@ +<!doctype html> +<meta charset=utf-8> +<title></title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src="resources/link-load-error-events.sub.js"></script> diff --git a/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-load-event.html b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-load-event.html index 6f6172a2d62..541291350a7 100644 --- a/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-load-event.html +++ b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-load-event.html @@ -3,16 +3,15 @@ <link rel="help" href="https://html.spec.whatwg.org/multipage/#the-link-element"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> -<link href="style.css?pipe=trickle(d3)" rel="stylesheet" id="style_test"></link> <script> var saw_link_onload = false; var t = async_test("Check if the stylesheet's load event blocks the document load event"); -document.getElementById('style_test').onload = t.step_func(function() { - saw_link_onload = true; -}); window.addEventListener('load', t.step_func_done(function() { assert_true(saw_link_onload); })); </script> +<link href="style.css?pipe=trickle(d3)" rel="stylesheet" id="style_test" + onload="t.step(function() { saw_link_onload = true; });" + onerror="t.step(function() { assert_unreached('Sheet should load OK'); });"></link> </head> </html> diff --git a/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/resources/link-load-error-events.sub.js b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/resources/link-load-error-events.sub.js new file mode 100644 index 00000000000..ac56a011963 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/resources/link-load-error-events.sub.js @@ -0,0 +1,187 @@ +/** + * This is the guts of the load/error event tests for <link rel="stylesheet">. + * + * We have a list of tests each of which is an object containing: href value, + * expected load success boolean, test description. Href values are set up in + * such a way that we guarantee that all stylesheet URLs are unique. This + * avoids issues around caching of sheets based on URL. + */ + +var isHttps = location.protocol == "https:"; + +var tests = [ + // Basic tests + { + href: existingSheet(), + success: true, + description: "Basic load of stylesheet", + }, + { + href: nonexistentSheet(), + success: false, + description: "Attempted load of nonexistent stylesheet", + }, + { + href: `data:text/css,@import url("${existingSheet()}")`, + success: true, + description: "Import of stylesheet", + }, + { + href: `data:text/css,@import url("${nonexistentSheet()}")`, + success: false, + description: "Import of nonexistent stylesheet", + }, + { + href: `data:text/css,@import url("data:text/css,@import url('${existingSheet()}')")`, + success: true, + description: "Import of import of stylesheet", + }, + { + href: `data:text/css,@import url("data:text/css,@import url('${nonexistentSheet()}')")`, + success: false, + description: "Import of import of nonexistent stylesheet", + }, + + // Non-CSS-response tests. + { + href: makeUnique(""), + success: false, + description: "Load of non-CSS stylesheet", + }, + { + href: `data:text/css,@import url("${makeUnique("")}")`, + success: false, + description: "Import of non-CSS stylesheet", + }, + { + href: `data:text/css,@import url("data:text/css,@import url('${makeUnique("")}')")`, + success: false, + description: "Import of import of non-CSS stylesheet", + }, + + // http:// tests, to test what happens with mixed content blocking. + { + href: httpSheet(), + success: !isHttps, + description: "Load of http:// stylesheet", + }, + { + href: `data:text/css,@import url("${httpSheet()}")`, + success: !isHttps, + description: "Import of http:// stylesheet", + }, + { + href: `data:text/css,@import url("data:text/css,@import url('${httpSheet()}')")`, + success: !isHttps, + description: "Import of import of http:// stylesheet", + }, + + // https:// tests just as a control + { + href: httpsSheet(), + success: true, + description: "Load of https:// stylesheet", + }, + { + href: `data:text/css,@import url("${httpsSheet()}")`, + success: true, + description: "Import of https:// stylesheet", + }, + { + href: `data:text/css,@import url("data:text/css,@import url('${httpsSheet()}')")`, + success: true, + description: "Import of import of https:// stylesheet", + }, + + // Tests with multiple imports some of which are slow and some are fast. + { + href: `data:text/css,@import url("${slowResponse(existingSheet())}"); @import url("${nonexistentSheet()}");`, + success: false, + description: "Slow successful import, fast failing import", + }, + { + href: `data:text/css,@import url("${existingSheet()}"); @import url("${slowResponse(nonexistentSheet())}");`, + success: false, + description: "Fast successful import, slow failing import", + } +]; + +// Note: Here we really do need to use "let" at least for the href, +// because we lazily evaluate it in the unreached cases. +for (var test of tests) { + let {href, success, description} = test; + var t = async_test(description); + var link = document.createElement("link"); + link.rel = "stylesheet"; + if (success) { + link.onload = t.step_func_done(() => {}); + link.onerror = t.step_func_done(() => assert_unreached(`error fired when load expected: ${href}`) ); + } else { + link.onerror = t.step_func_done(() => {}); + link.onload = t.step_func_done(() => assert_unreached(`load fired when error expected: ${href}`) ); + } + link.href = href; + document.head.appendChild(link); +} + +/* Utility function */ +function makeUnique(url) { + // Make sure we copy here, even if the thing coming in is a URL, so we don't + // mutate our caller's data. + url = new URL(url, location.href); + // We want to generate a unique URI to avoid the various caches browsers have + // for stylesheets. We don't want to just use a counter, because that would + // not be robust to the test being reloaded or othewise run multiple times + // without a browser restart. We don't want to use timstamps, because those + // are not likely to be unique across calls to this function, especially given + // the degraded timer resolution browsers have due to Spectre. + // + // So just fall back on Math.random() and assume it can't duplicate values. + url.searchParams.append("r", Math.random()); + return url; +} + +function existingSheet() { + return makeUnique("resources/good.css"); +} + +/** + * Function the add values to the "pipe" search param. See + * http://wptserve.readthedocs.io/en/latest/pipes.html for why one would do + * this. Because this param uses a weird '|'-separated syntax instead of just + * using multiple params with the same name, we need some manual code to munge + * the value properly. + */ +function addPipe(url, pipeVal) { + url = new URL(url, location.href); + var params = url.searchParams; + var oldVal = params.get("pipe"); + if (oldVal) { + params.set("pipe", oldVal + "|" + pipeVal); + } else { + params.set("pipe", pipeVal); + } + return url; +} + +function nonexistentSheet() { + return addPipe(existingSheet(), "status(404)"); +} + +function httpSheet() { + var url = existingSheet(); + url.protocol = "http"; + url.port = {{ports[http][0]}}; + return url; +} + +function httpsSheet() { + var url = existingSheet(); + url.protocol = "https"; + url.port = {{ports[https][0]}}; + return url; +} + +function slowResponse(url) { + return addPipe(url, "trickle(d1)"); +} diff --git a/tests/wpt/web-platform-tests/html/webappapis/scripting/events/event-handler-attributes-window-body.html b/tests/wpt/web-platform-tests/html/webappapis/scripting/events/event-handler-attributes-window-body.html new file mode 100644 index 00000000000..29c4c133b9e --- /dev/null +++ b/tests/wpt/web-platform-tests/html/webappapis/scripting/events/event-handler-attributes-window-body.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<title>HTMLBodyElement event handlers</title> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<body> +<script> +function f() { + return 0; +} + +var handlers = ['blur','error','focus','load','resize','scroll', + 'afterprint','beforeprint','beforeunload','hashchange', + 'languagechange','message','offline','online','pagehide', + 'pageshow','popstate','storage','unload']; +handlers.forEach(function(handler) { + test(function() { + window['on' + handler] = f; + assert_equals(document.body['on' + handler], f); + }, handler); +}); + +handlers.forEach(function(handler) { + window['on' + handler] = null; +}); + +handlers.forEach(function(handler) { + test(function() { + assert_equals(window['on' + handler], null); + assert_equals(document.body['on' + handler], null); + }, handler + " removal"); +}); +</script> diff --git a/tests/wpt/web-platform-tests/navigation-timing/test_timing_server_redirect.html b/tests/wpt/web-platform-tests/navigation-timing/test_timing_server_redirect.html index 19147bea95a..16567e8997c 100644 --- a/tests/wpt/web-platform-tests/navigation-timing/test_timing_server_redirect.html +++ b/tests/wpt/web-platform-tests/navigation-timing/test_timing_server_redirect.html @@ -32,6 +32,7 @@ test_timing_order('redirectStart', 'navigationStart'); test_timing_order('redirectEnd', 'redirectStart'); test_timing_order('fetchStart', 'redirectEnd'); + test_timing_order('requestStart', 'fetchStart'); } </script> diff --git a/tests/wpt/web-platform-tests/payment-request/OWNERS b/tests/wpt/web-platform-tests/payment-request/OWNERS index c4b8e572902..7f3eca71150 100644 --- a/tests/wpt/web-platform-tests/payment-request/OWNERS +++ b/tests/wpt/web-platform-tests/payment-request/OWNERS @@ -3,3 +3,4 @@ @domenic @MSFTkihans @mnoorenberghe +@edenchuang diff --git a/tests/wpt/web-platform-tests/payment-request/show-method-optional-promise-rejects-manual.https.html b/tests/wpt/web-platform-tests/payment-request/show-method-optional-promise-rejects-manual.https.html index 20d8d2d1856..ab89d7ec413 100644 --- a/tests/wpt/web-platform-tests/payment-request/show-method-optional-promise-rejects-manual.https.html +++ b/tests/wpt/web-platform-tests/payment-request/show-method-optional-promise-rejects-manual.https.html @@ -220,7 +220,7 @@ }); testBadUpdate(this.textContent, badDetails, new RangeError()); "> - Updating with a displayItem with an invalid currency results in TypeError. + Updating with a displayItem with an invalid currency results in RangeError. </button></li> <li><button onclick=" diff --git a/tests/wpt/web-platform-tests/payment-request/show-method-optional-promise-resolves-manual.https.html b/tests/wpt/web-platform-tests/payment-request/show-method-optional-promise-resolves-manual.https.html index 777910ce011..623db1531b3 100644 --- a/tests/wpt/web-platform-tests/payment-request/show-method-optional-promise-resolves-manual.https.html +++ b/tests/wpt/web-platform-tests/payment-request/show-method-optional-promise-resolves-manual.https.html @@ -181,7 +181,7 @@ function runUpdateDetailsAlgorithm( const request = new PaymentRequest(validMethods, failDetails, options); const detailsPromise = Promise.resolve(details); const acceptPromise = request.show(detailsPromise); - assert_equals(request.id, "this cant be changed", "id must never change."); + assert_equals(request.id, "this cannot be changed", "id must never change."); await promise_rejects( t, "AbortError", diff --git a/tests/wpt/web-platform-tests/resources/idlharness.js b/tests/wpt/web-platform-tests/resources/idlharness.js index fee33fd15a9..c4caf4b7e1b 100644 --- a/tests/wpt/web-platform-tests/resources/idlharness.js +++ b/tests/wpt/web-platform-tests/resources/idlharness.js @@ -123,6 +123,28 @@ var fround = })(); //@} +/// IdlHarnessError /// +// Entry point +self.IdlHarnessError = function(message) +//@{ +{ + /** + * Message to be printed as the error's toString invocation. + */ + this.message = message; +}; + +IdlHarnessError.prototype = Object.create(Error.prototype); + +//@} +IdlHarnessError.prototype.toString = function() +//@{ +{ + return this.message; +}; + +//@} + /// IdlArray /// // Entry point self.IdlArray = function() @@ -217,7 +239,7 @@ IdlArray.prototype.internal_add_idls = function(parsed_idls, options) if (options && options.only && options.except) { - throw "The only and except options can't be used together." + throw new IdlHarnessError("The only and except options can't be used together."); } function should_skip(name) @@ -235,7 +257,7 @@ IdlArray.prototype.internal_add_idls = function(parsed_idls, options) parsed_idls.forEach(function(parsed_idl) { - if (parsed_idl.type == "interface" && parsed_idl.partial) + if (parsed_idl.partial && ["interface", "dictionary"].includes(parsed_idl.type)) { if (should_skip(parsed_idl.name)) { @@ -280,7 +302,7 @@ IdlArray.prototype.internal_add_idls = function(parsed_idls, options) } if (parsed_idl.name in this.members) { - throw "Duplicate identifier " + parsed_idl.name; + throw new IdlHarnessError("Duplicate identifier " + parsed_idl.name); } switch(parsed_idl.type) { @@ -374,7 +396,7 @@ IdlArray.prototype.recursively_get_implements = function(interface_name) ret = ret.concat(this.recursively_get_implements(ret[i])); if (ret.indexOf(ret[i]) != ret.lastIndexOf(ret[i])) { - throw "Circular implements statements involving " + ret[i]; + throw new IdlHarnessError("Circular implements statements involving " + ret[i]); } } return ret; @@ -404,7 +426,7 @@ IdlArray.prototype.recursively_get_includes = function(interface_name) ret = ret.concat(this.recursively_get_includes(ret[i])); if (ret.indexOf(ret[i]) != ret.lastIndexOf(ret[i])) { - throw "Circular includes statements involving " + ret[i]; + throw new IdlHarnessError("Circular includes statements involving " + ret[i]); } } return ret; @@ -533,7 +555,7 @@ IdlArray.prototype.is_json_type = function(type) function exposure_set(object, default_set) { var exposed = object.extAttrs.filter(function(a) { return a.name == "Exposed" }); if (exposed.length > 1 || exposed.length < 0) { - throw "Unexpected Exposed extended attributes on " + memberName + ": " + exposed; + throw new IdlHarnessError("Unexpected Exposed extended attributes on " + memberName + ": " + exposed); } if (exposed.length === 0) { @@ -567,7 +589,33 @@ function exposed_in(globals) { return globals.indexOf("Worker") >= 0 || globals.indexOf("ServiceWorker") >= 0; } - throw "Unexpected global object"; + throw new IdlHarnessError("Unexpected global object"); +} + +//@} +/** + * Asserts that the given error message is thrown for the given function. + * @param {string|IdlHarnessError} error Expected Error message. + * @param {Function} idlArrayFunc Function operating on an IdlArray that should throw. + */ +IdlArray.prototype.assert_throws = function(error, idlArrayFunc) +//@{ +{ + try { + idlArrayFunc.call(this, this); + throw new IdlHarnessError(`${idlArrayFunc} did not throw the expected IdlHarnessError`); + } catch (e) { + if (e instanceof AssertionError) { + throw e; + } + // Assertions for behaviour of the idlharness.js engine. + if (error instanceof IdlHarnessError) { + error = error.message; + } + if (e.message !== error) { + throw new IdlHarnessError(`${idlArrayFunc} threw ${e}, not the expected IdlHarnessError`); + } + } } //@} @@ -581,9 +629,10 @@ IdlArray.prototype.test = function() this.partials.forEach(function(parsed_idl) { if (!(parsed_idl.name in this.members) - || !(this.members[parsed_idl.name] instanceof IdlInterface)) + || !(this.members[parsed_idl.name] instanceof IdlInterface + || this.members[parsed_idl.name] instanceof IdlDictionary)) { - throw "Partial interface " + parsed_idl.name + " with no original interface"; + throw new IdlHarnessError(`Partial ${parsed_idl.type} ${parsed_idl.name} with no original ${parsed_idl.type}`); } if (parsed_idl.extAttrs) { @@ -848,7 +897,7 @@ IdlArray.prototype.assert_type_is = function(value, type) if (!(type in this.members)) { - throw "Unrecognized type " + type; + throw new IdlHarnessError("Unrecognized type " + type); } if (this.members[type] instanceof IdlInterface) @@ -876,7 +925,7 @@ IdlArray.prototype.assert_type_is = function(value, type) } else { - throw "Type " + type + " isn't an interface or dictionary"; + throw new IdlHarnessError("Type " + type + " isn't an interface or dictionary"); } }; //@} @@ -1345,13 +1394,13 @@ IdlInterface.prototype.test_self = function() { var aliasAttrs = this.extAttrs.filter(function(o) { return o.name === "LegacyWindowAlias"; }); if (aliasAttrs.length > 1) { - throw "Invalid IDL: multiple LegacyWindowAlias extended attributes on " + this.name; + throw new IdlHarnessError("Invalid IDL: multiple LegacyWindowAlias extended attributes on " + this.name); } if (this.is_callback()) { - throw "Invalid IDL: LegacyWindowAlias extended attribute on non-interface " + this.name; + throw new IdlHarnessError("Invalid IDL: LegacyWindowAlias extended attribute on non-interface " + this.name); } if (this.exposureSet.indexOf("Window") === -1) { - throw "Invalid IDL: LegacyWindowAlias extended attribute on " + this.name + " which is not exposed in Window"; + throw new IdlHarnessError("Invalid IDL: LegacyWindowAlias extended attribute on " + this.name + " which is not exposed in Window"); } // TODO: when testing of [NoInterfaceObject] interfaces is supported, // check that it's not specified together with LegacyWindowAlias. @@ -1360,7 +1409,7 @@ IdlInterface.prototype.test_self = function() var rhs = aliasAttrs[0].rhs; if (!rhs) { - throw "Invalid IDL: LegacyWindowAlias extended attribute on " + this.name + " without identifier"; + throw new IdlHarnessError("Invalid IDL: LegacyWindowAlias extended attribute on " + this.name + " without identifier"); } var aliases; if (rhs.type === "identifier-list") { @@ -1733,7 +1782,7 @@ IdlInterface.prototype.test_member_const = function(member) //@{ { if (!this.has_constants()) { - throw "Internal error: test_member_const called without any constants"; + throw new IdlHarnessError("Internal error: test_member_const called without any constants"); } test(function() @@ -2289,7 +2338,7 @@ IdlInterface.prototype.test_object = function(desc) { if (!(current_interface.name in this.array.members)) { - throw "Interface " + current_interface.name + " not found (inherited by " + this.name + ")"; + throw new IdlHarnessError("Interface " + current_interface.name + " not found (inherited by " + this.name + ")"); } if (current_interface.prevent_multiple_testing && current_interface.already_tested) { diff --git a/tests/wpt/web-platform-tests/resources/test/conftest.py b/tests/wpt/web-platform-tests/resources/test/conftest.py index 4688421af23..0be41eeec54 100644 --- a/tests/wpt/web-platform-tests/resources/test/conftest.py +++ b/tests/wpt/web-platform-tests/resources/test/conftest.py @@ -87,7 +87,8 @@ class HTMLItem(pytest.Item, pytest.Collector): @staticmethod def _assert_sequence(nums): - assert nums == range(1, nums[-1] + 1) + if nums and len(nums) > 0: + assert nums == range(1, nums[-1] + 1) @staticmethod def _scrub_stack(test_obj): diff --git a/tests/wpt/web-platform-tests/resources/test/tests/idlharness/IdlDictionary/test_partial_dictionary.html b/tests/wpt/web-platform-tests/resources/test/tests/idlharness/IdlDictionary/test_partial_dictionary.html new file mode 100644 index 00000000000..f716b93ae85 --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/test/tests/idlharness/IdlDictionary/test_partial_dictionary.html @@ -0,0 +1,45 @@ +<!DOCTYPE HTML> +<html> + +<head> + <meta charset="utf-8"> + <title>idlharness: partial dictionaries</title> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/resources/WebIDLParser.js"></script> + <script src="/resources/idlharness.js"></script> + <script src="../helper.js"></script> +</head> + +<body> +<pre id='idl'> +dictionary A {}; +partial dictionary A { + boolean B; +}; +partial dictionary A { + boolean C; +}; +</pre> + +<script> +'use strict'; + +test(() => { + let idlArray = new IdlArray(); + idlArray.add_idls(document.getElementById('idl').textContent); + idlArray.test(); + + let members = idlArray.members["A"].members.map(m => m.name); + assert_array_equals(members, ["B", "C"], 'A should contain B, C'); +}, 'Partial dictionaries'); + +test(() => { + let idlArray = new IdlArray(); + idlArray.add_idls('partial dictionary D {};'); + idlArray.assert_throws('Partial dictionary D with no original dictionary', i => i.test()); +}, 'Partial-only dictionary definition') +</script> + +</body> +</html> diff --git a/tests/wpt/web-platform-tests/resources/test/tests/idlharness/basic.html b/tests/wpt/web-platform-tests/resources/test/tests/idlharness/basic.html index da3c3faaa1c..439c203dc95 100644 --- a/tests/wpt/web-platform-tests/resources/test/tests/idlharness/basic.html +++ b/tests/wpt/web-platform-tests/resources/test/tests/idlharness/basic.html @@ -29,6 +29,27 @@ test(function() { assert_equals(typeof WebIDL2.parse("interface Foo {};"), "object"); }, 'WebIDL2 parse method should produce an AST for correct WebIDL'); + for (let type of ['dictionary', 'interface']) { + test(function() { + let i = new IdlArray(); + i.add_untested_idls(`partial ${type} A {};`); + i.assert_throws(new IdlHarnessError(`Partial ${type} A with no original ${type}`), i => i.test()); + }, `assert_throws should handle ${type} IdlHarnessError`); + test(function() { + let i = new IdlArray(); + i.add_untested_idls(`partial ${type} A {};`); + i.assert_throws(`Partial ${type} A with no original ${type}`, i => i.test()); + }, `assert_throws should handle ${type} IdlHarnessError from message`); + test(function () { + try { + let i = new IdlArray(); + i.add_untested_idls(`${type} A {};`); + i.assert_throws(`Partial ${type} A with no original ${type}`, i => i.test()); + } catch (e) { + assert_true(e instanceof IdlHarnessError); + } + }, `assert_throws should throw if no ${type} IdlHarnessError thrown`); + } </script> </body> </html> diff --git a/tests/wpt/web-platform-tests/resources/testharness.js b/tests/wpt/web-platform-tests/resources/testharness.js index 23b8651bb13..86ecc1ba252 100644 --- a/tests/wpt/web-platform-tests/resources/testharness.js +++ b/tests/wpt/web-platform-tests/resources/testharness.js @@ -1247,6 +1247,13 @@ policies and contribution forms [3]. } expose(assert_readonly, "assert_readonly"); + /** + * Assert an Exception with the expected code is thrown. + * + * @param {object|number|string} code The expected exception code. + * @param {Function} func Function which should throw. + * @param {string} description Error description for the case that the error is not thrown. + */ function assert_throws(code, func, description) { try { diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event.https.html index 9fef304adba..12b09321ed0 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event.https.html @@ -59,6 +59,30 @@ async_test(function(t) { }, 'Service Worker responds to fetch event with string'); async_test(function(t) { + var scope = 'resources/simple.html?string'; + var frame; + service_worker_unregister_and_register(t, worker, scope) + .then(function(reg) { + return wait_for_state(t, reg.installing, 'activated'); + }) + .then(function() { return with_iframe(scope) }) + .then(function(f) { + frame = f; + return frame.contentWindow.fetch(scope + "#foo") + }) + .then(function(response) { return response.text() }) + .then(function(text) { + assert_equals( + text, + 'Test string', + 'Service Worker should respond to fetch with a test string'); + frame.remove(); + return service_worker_unregister_and_done(t, scope); + }) + .catch(unreached_rejection(t)); + }, 'Service Worker responds to fetch event using request fragment with string'); + +async_test(function(t) { var scope = 'resources/simple.html?blob'; service_worker_unregister_and_register(t, worker, scope) .then(function(reg) { diff --git a/tests/wpt/web-platform-tests/shadow-dom/layout-slot-no-longer-assigned.html b/tests/wpt/web-platform-tests/shadow-dom/layout-slot-no-longer-assigned.html new file mode 100644 index 00000000000..dfcac99da02 --- /dev/null +++ b/tests/wpt/web-platform-tests/shadow-dom/layout-slot-no-longer-assigned.html @@ -0,0 +1,15 @@ +<!DOCTYPE html> +<title>Layout using slot elements</title> +<link rel="author" title="Hayato Ito" href="mailto:hayato@google.com"/> +<link rel="help" href="https://dom.spec.whatwg.org/#shadow-tree-slots"> +<link rel="match" href="reference/empty.html"/> +<div id="host"></div> +<script> +const host = document.querySelector('#host'); +const sr = host.attachShadow({ mode: 'open' }); +sr.innerHTML = '<slot name=s1></slot>' +host.innerHTML = '<div id=d1 slot=s1></div>'; + +document.body.offsetLeft; +document.querySelector('#d1').setAttribute('slot', 's2'); +</script> diff --git a/tests/wpt/web-platform-tests/shadow-dom/layout-slot-no-longer-fallback.html b/tests/wpt/web-platform-tests/shadow-dom/layout-slot-no-longer-fallback.html new file mode 100644 index 00000000000..7507f11ac18 --- /dev/null +++ b/tests/wpt/web-platform-tests/shadow-dom/layout-slot-no-longer-fallback.html @@ -0,0 +1,15 @@ +<!DOCTYPE html> +<title>Layout using slot elements</title> +<link rel="author" title="Hayato Ito" href="mailto:hayato@google.com"/> +<link rel="help" href="https://dom.spec.whatwg.org/#shadow-tree-slots"> +<link rel="match" href="reference/empty.html"/> +<div id="host"></div> +<script> +const host = document.querySelector('#host'); +const sr = host.attachShadow({ mode: 'open' }); + +sr.innerHTML = '<slot><div id="fallback">Should not be displayed</div></slot>' + +document.body.offsetLeft; +host.appendChild(document.createElement('div')); +</script> diff --git a/tests/wpt/web-platform-tests/shadow-dom/reference/empty.html b/tests/wpt/web-platform-tests/shadow-dom/reference/empty.html new file mode 100644 index 00000000000..0e76edd65b7 --- /dev/null +++ b/tests/wpt/web-platform-tests/shadow-dom/reference/empty.html @@ -0,0 +1 @@ +<!DOCTYPE html> diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/pytestrunner/runner.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/pytestrunner/runner.py index 8eabf27f47f..36a97cf72ed 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/pytestrunner/runner.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/pytestrunner/runner.py @@ -102,7 +102,19 @@ class SubtestResultRecorder(object): self.record(report.nodeid, "PASS") def record_fail(self, report): - self.record(report.nodeid, "FAIL", stack=report.longrepr) + # pytest outputs the stacktrace followed by an error message prefixed + # with "E ", e.g. + # + # def test_example(): + # > assert "fuu" in "foobar" + # > E AssertionError: assert 'fuu' in 'foobar' + message = "" + for line in report.longreprtext.splitlines(): + if line.startswith("E "): + message = line[1:].strip() + break + + self.record(report.nodeid, "FAIL", message=message, stack=report.longrepr) def record_error(self, report): # error in setup/teardown diff --git a/tests/wpt/web-platform-tests/webdriver/tests/contexts/maximize_window.py b/tests/wpt/web-platform-tests/webdriver/tests/contexts/maximize_window.py index e9257e6fe0a..6143dc15924 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/contexts/maximize_window.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/contexts/maximize_window.py @@ -12,6 +12,12 @@ def maximize(session): return session.transport.send("POST", "session/%s/window/maximize" % session.session_id) +def is_fullscreen(session): + # At the time of writing, WebKit does not conform to the Fullscreen API specification. + # Remove the prefixed fallback when https://bugs.webkit.org/show_bug.cgi?id=158125 is fixed. + return session.execute_script("return !!(window.fullScreen || document.webkitIsFullScreen)") + + # 10.7.3 Maximize Window @@ -137,11 +143,11 @@ def test_fully_exit_fullscreen(session): """ session.window.fullscreen() - assert session.execute_script("return window.fullScreen") is True + assert is_fullscreen(session) is True response = maximize(session) assert_success(response) - assert session.execute_script("return window.fullScreen") is False + assert is_fullscreen(session) is False def test_restore_the_window(session): diff --git a/tests/wpt/web-platform-tests/webdriver/tests/element_retrieval/find_element.py b/tests/wpt/web-platform-tests/webdriver/tests/element_retrieval/find_element.py index 454e3c38bdc..dddb28cb333 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/element_retrieval/find_element.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/element_retrieval/find_element.py @@ -51,6 +51,39 @@ def test_find_element(session, using, value): assert_success(response) +@pytest.mark.parametrize("document,value", [ + ("<a href=#>link text</a>", "link text"), + ("<a href=#> link text </a>", "link text"), + ("<a href=#>link<br>text</a>", "link\ntext"), + ("<a href=#>link&text</a>", "link&text"), + ("<a href=#>LINK TEXT</a>", "LINK TEXT"), + ("<a href=# style='text-transform: uppercase'>link text</a>", "LINK TEXT"), +]) +def test_find_element_link_text(session, document, value): + # Step 8 - 9 + session.url = inline(document) + + response = find_element(session, "link text", value) + assert_success(response) + + +@pytest.mark.parametrize("document,value", [ + ("<a href=#>partial link text</a>", "link"), + ("<a href=#> partial link text </a>", "link"), + ("<a href=#>partial link text</a>", "k t"), + ("<a href=#>partial link<br>text</a>", "k\nt"), + ("<a href=#>partial link&text</a>", "k&t"), + ("<a href=#>PARTIAL LINK TEXT</a>", "LINK"), + ("<a href=# style='text-transform: uppercase'>partial link text</a>", "LINK"), +]) +def test_find_element_partial_link_text(session, document, value): + # Step 8 - 9 + session.url = inline(document) + + response = find_element(session, "partial link text", value) + assert_success(response) + + @pytest.mark.parametrize("using,value", [("css selector", "#wontExist")]) def test_no_element(session, using, value): # Step 8 - 9 @@ -65,7 +98,8 @@ def test_no_element(session, using, value): ("tag name", "a"), ("xpath", "//*[name()='a']")]) def test_xhtml_namespace(session, using, value): - session.url = inline("""<a href="#" id="linkText">full link text</a>""", doctype="xhtml") + session.url = inline("""<a href="#" id="linkText">full link text</a>""", + doctype="xhtml") expected = session.execute_script("return document.links[0]") response = find_element(session, using, value) diff --git a/tests/wpt/web-platform-tests/webdriver/tests/element_retrieval/find_element_from_element.py b/tests/wpt/web-platform-tests/webdriver/tests/element_retrieval/find_element_from_element.py index 2de03835186..f6b985848aa 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/element_retrieval/find_element_from_element.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/element_retrieval/find_element_from_element.py @@ -31,7 +31,6 @@ def test_closed_context(session, create_window): session.close() response = find_element(session, "notReal", "css selector", "foo") - assert_error(response, "no such window") @@ -49,6 +48,41 @@ def test_find_element(session, using, value): assert_success(response) +@pytest.mark.parametrize("document,value", [ + ("<a href=#>link text</a>", "link text"), + ("<a href=#> link text </a>", "link text"), + ("<a href=#>link<br>text</a>", "link\ntext"), + ("<a href=#>link&text</a>", "link&text"), + ("<a href=#>LINK TEXT</a>", "LINK TEXT"), + ("<a href=# style='text-transform: uppercase'>link text</a>", "LINK TEXT"), +]) +def test_find_element_link_text(session, document, value): + # Step 8 - 9 + session.url = inline("<div>{0}</div>".format(document)) + element = session.find.css("div", all=False) + + response = find_element(session, element.id, "link text", value) + assert_success(response) + + +@pytest.mark.parametrize("document,value", [ + ("<a href=#>partial link text</a>", "link"), + ("<a href=#> partial link text </a>", "link"), + ("<a href=#>partial link text</a>", "k t"), + ("<a href=#>partial link<br>text</a>", "k\nt"), + ("<a href=#>partial link&text</a>", "k&t"), + ("<a href=#>PARTIAL LINK TEXT</a>", "LINK"), + ("<a href=# style='text-transform: uppercase'>partial link text</a>", "LINK"), +]) +def test_find_element_partial_link_text(session, document, value): + # Step 8 - 9 + session.url = inline("<div>{0}</div>".format(document)) + element = session.find.css("div", all=False) + + response = find_element(session, element.id, "partial link text", value) + assert_success(response) + + @pytest.mark.parametrize("using,value",[("css selector", "#wontExist")]) def test_no_element(session, using, value): # Step 8 - 9 @@ -65,7 +99,8 @@ def test_no_element(session, using, value): ("tag name", "a"), ("xpath", "//*[name()='a']")]) def test_xhtml_namespace(session, using, value): - session.url = inline("""<p><a href="#" id="linkText">full link text</a></p>""", doctype="xhtml") + session.url = inline("""<p><a href="#" id="linkText">full link text</a></p>""", + doctype="xhtml") from_element = session.execute_script("""return document.querySelector("p")""") expected = session.execute_script("return document.links[0]") diff --git a/tests/wpt/web-platform-tests/webdriver/tests/element_retrieval/find_elements.py b/tests/wpt/web-platform-tests/webdriver/tests/element_retrieval/find_elements.py index a00ae2358c2..781dd3b6408 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/element_retrieval/find_elements.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/element_retrieval/find_elements.py @@ -30,10 +30,7 @@ def test_closed_context(session, create_window): session.window_handle = new_window session.close() - response = session.transport.send("POST", - "session/%s/elements" % session.session_id, - {"using": "css selector", "value": "foo"}) - + response = find_elements(session, "css selector", "foo") assert_error(response, "no such window") @@ -52,6 +49,51 @@ def test_find_elements(session, using, value): assert len(response.body["value"]) == 1 +@pytest.mark.parametrize("document,value", [ + ("<a href=#>link text</a>", "link text"), + ("<a href=#> link text </a>", "link text"), + ("<a href=#>link<br>text</a>", "link\ntext"), + ("<a href=#>link&text</a>", "link&text"), + ("<a href=#>LINK TEXT</a>", "LINK TEXT"), + ("<a href=# style='text-transform: uppercase'>link text</a>", "LINK TEXT"), +]) +def test_find_elements_link_text(session, document, value): + # Step 8 - 9 + session.url = inline("<a href=#>not wanted</a><br/>{0}".format(document)) + expected = session.execute_script("return document.links[1];") + + response = find_elements(session, "link text", value) + value = assert_success(response) + assert isinstance(value, list) + assert len(value) == 1 + + found_element = value[0] + assert_same_element(session, found_element, expected) + + +@pytest.mark.parametrize("document,value", [ + ("<a href=#>partial link text</a>", "link"), + ("<a href=#> partial link text </a>", "link"), + ("<a href=#>partial link text</a>", "k t"), + ("<a href=#>partial link<br>text</a>", "k\nt"), + ("<a href=#>partial link&text</a>", "k&t"), + ("<a href=#>PARTIAL LINK TEXT</a>", "LINK"), + ("<a href=# style='text-transform: uppercase'>partial link text</a>", "LINK"), +]) +def test_find_elements_partial_link_text(session, document, value): + # Step 8 - 9 + session.url = inline("<a href=#>not wanted</a><br/>{0}".format(document)) + expected = session.execute_script("return document.links[1];") + + response = find_elements(session, "partial link text", value) + value = assert_success(response) + assert isinstance(value, list) + assert len(value) == 1 + + found_element = value[0] + assert_same_element(session, found_element, expected) + + @pytest.mark.parametrize("using,value", [("css selector", "#wontExist")]) def test_no_element(session, using, value): # Step 8 - 9 @@ -67,8 +109,9 @@ def test_no_element(session, using, value): ("tag name", "a"), ("xpath", "//*[name()='a']")]) def test_xhtml_namespace(session, using, value): - session.url = inline("""<p><a href="#" id="linkText">full link text</a></p>""", doctype="xhtml") - expected = session.execute_script("return document.links[0]") + session.url = inline("""<a href="#" id="linkText">full link text</a>""", + doctype="xhtml") + expected = session.execute_script("return document.links[0];") response = find_elements(session, using, value) value = assert_success(response) diff --git a/tests/wpt/web-platform-tests/webdriver/tests/element_retrieval/find_elements_from_element.py b/tests/wpt/web-platform-tests/webdriver/tests/element_retrieval/find_elements_from_element.py index 2edc0406c66..4dd8a4a538a 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/element_retrieval/find_elements_from_element.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/element_retrieval/find_elements_from_element.py @@ -48,6 +48,53 @@ def test_find_elements(session, using, value): assert_success(response) +@pytest.mark.parametrize("document,value", [ + ("<a href=#>link text</a>", "link text"), + ("<a href=#> link text </a>", "link text"), + ("<a href=#>link<br>text</a>", "link\ntext"), + ("<a href=#>link&text</a>", "link&text"), + ("<a href=#>LINK TEXT</a>", "LINK TEXT"), + ("<a href=# style='text-transform: uppercase'>link text</a>", "LINK TEXT"), +]) +def test_find_elements_link_text(session, document, value): + # Step 8 - 9 + session.url = inline("<div><a href=#>not wanted</a><br/>{0}</div>".format(document)) + element = session.find.css("div", all=False) + expected = session.execute_script("return document.links[1];") + + response = find_elements(session, element.id, "link text", value) + value = assert_success(response) + assert isinstance(value, list) + assert len(value) == 1 + + found_element = value[0] + assert_same_element(session, found_element, expected) + + +@pytest.mark.parametrize("document,value", [ + ("<a href=#>partial link text</a>", "link"), + ("<a href=#> partial link text </a>", "link"), + ("<a href=#>partial link text</a>", "k t"), + ("<a href=#>partial link<br>text</a>", "k\nt"), + ("<a href=#>partial link&text</a>", "k&t"), + ("<a href=#>PARTIAL LINK TEXT</a>", "LINK"), + ("<a href=# style='text-transform: uppercase'>partial link text</a>", "LINK"), +]) +def test_find_elements_partial_link_text(session, document, value): + # Step 8 - 9 + session.url = inline("<div><a href=#>not wanted</a><br/>{0}</div>".format(document)) + element = session.find.css("div", all=False) + expected = session.execute_script("return document.links[1];") + + response = find_elements(session, element.id, "partial link text", value) + value = assert_success(response) + assert isinstance(value, list) + assert len(value) == 1 + + found_element = value[0] + assert_same_element(session, found_element, expected) + + @pytest.mark.parametrize("using,value", [("css selector", "#wontExist")]) def test_no_element(session, using, value): # Step 8 - 9 @@ -64,7 +111,8 @@ def test_no_element(session, using, value): ("tag name", "a"), ("xpath", "//*[name()='a']")]) def test_xhtml_namespace(session, using, value): - session.url = inline("""<p><a href="#" id="linkText">full link text</a></p>""", doctype="xhtml") + session.url = inline("""<p><a href="#" id="linkText">full link text</a></p>""", + doctype="xhtml") from_element = session.execute_script("""return document.querySelector("p")""") expected = session.execute_script("return document.links[0]") diff --git a/tests/wpt/web-platform-tests/webdriver/tests/fullscreen_window.py b/tests/wpt/web-platform-tests/webdriver/tests/fullscreen_window.py index 43eecc5fd48..36dd78f8c79 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/fullscreen_window.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/fullscreen_window.py @@ -16,6 +16,12 @@ def fullscreen(session): return session.transport.send("POST", "session/%s/window/fullscreen" % session.session_id) +def is_fullscreen(session): + # At the time of writing, WebKit does not conform to the Fullscreen API specification. + # Remove the prefixed fallback when https://bugs.webkit.org/show_bug.cgi?id=158125 is fixed. + return session.execute_script("return !!(window.fullScreen || document.webkitIsFullScreen)") + + # 10.7.5 Fullscreen Window @@ -135,11 +141,6 @@ def test_handle_prompt_missing_value(session, create_dialog): assert read_global(session, "dismiss3") == None -def is_fullscreen(session): - # At the time of writing, WebKit does not conform to the Fullscreen API specification. - # Remove the prefixed fallback when https://bugs.webkit.org/show_bug.cgi?id=158125 is fixed. - return session.execute_script("return !!(window.fullScreen || document.webkitIsFullScreen)") - def test_fullscreen(session): """ 4. Call fullscreen an element with the current top-level browsing diff --git a/tests/wpt/web-platform-tests/webdriver/tests/minimize_window.py b/tests/wpt/web-platform-tests/webdriver/tests/minimize_window.py index 5c0ef72bf84..ff451de9d75 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/minimize_window.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/minimize_window.py @@ -10,6 +10,11 @@ def minimize(session): return session.transport.send("POST", "session/%s/window/minimize" % session.session_id) +def is_fullscreen(session): + # At the time of writing, WebKit does not conform to the Fullscreen API specification. + # Remove the prefixed fallback when https://bugs.webkit.org/show_bug.cgi?id=158125 is fixed. + return session.execute_script("return !!(window.fullScreen || document.webkitIsFullScreen)") + # 10.7.4 Minimize Window @@ -135,11 +140,11 @@ def test_fully_exit_fullscreen(session): """ session.window.fullscreen() - assert session.execute_script("return window.fullScreen") is True + assert is_fullscreen(session) is True response = minimize(session) assert_success(response) - assert session.execute_script("return window.fullScreen") is False + assert is_fullscreen(session) is False assert session.execute_script("return document.hidden") is True diff --git a/tests/wpt/web-platform-tests/webdriver/tests/set_window_rect.py b/tests/wpt/web-platform-tests/webdriver/tests/set_window_rect.py index f945f19a26d..d032b9b26ea 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/set_window_rect.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/set_window_rect.py @@ -13,6 +13,11 @@ alert_doc = inline("<script>window.alert()</script>") def set_window_rect(session, rect): return session.transport.send("POST", "session/%s/window/rect" % session.session_id, rect) +def is_fullscreen(session): + # At the time of writing, WebKit does not conform to the Fullscreen API specification. + # Remove the prefixed fallback when https://bugs.webkit.org/show_bug.cgi?id=158125 is fixed. + return session.execute_script("return !!(window.fullScreen || document.webkitIsFullScreen)") + # 10.7.2 Set Window Rect @@ -293,14 +298,14 @@ def test_fully_exit_fullscreen(session): 3. Exit fullscreen document. """ session.window.fullscreen() - assert session.execute_script("return window.fullScreen") is True + assert is_fullscreen(session) is True response = set_window_rect(session, {"width": 400, "height": 400}) value = assert_success(response) assert value["width"] == 400 assert value["height"] == 400 - assert session.execute_script("return window.fullScreen") is False + assert is_fullscreen(session) is False def test_restore_from_minimized(session): diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-track-stats.https.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-track-stats.https.html index db177aebe38..04d4dedc2c8 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-track-stats.https.html +++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-track-stats.https.html @@ -378,6 +378,52 @@ })); }, 'replaceTrack(): original track attachment stats present after replacing'); + promise_test(async function() { + const caller = new RTCPeerConnection(); + const callee = new RTCPeerConnection(); + let [tracks, streams] = await getUserMediaTracksAndStreams(2); + let sender = caller.addTrack(tracks[0], streams[0]); + callee.addTrack(tracks[1], streams[1]); + exchangeIceCandidates(caller, callee); + await doSignalingHandshake(caller, callee); + await onIceConnectionStateCompleted(caller); + let receiver = caller.getReceivers()[0]; + + // Obtain inbound and outbound RTP stream stats on a full stats report. + let fullReport = await caller.getStats(); + let outboundTrackStats = findStatsByTypeAndId( + fullReport, 'track', sender.track.id); + let outboundStats = findStatsByTypeAndMember( + fullReport, 'outbound-rtp', 'trackId', outboundTrackStats.id); + assert_true(outboundStats != null, 'Has stats for outbound RTP stream'); + let inboundTrackStats = findStatsByTypeAndId( + fullReport, 'track', receiver.track.id); + let inboundStats = findStatsByTypeAndMember( + fullReport, 'inbound-rtp', 'trackId', inboundTrackStats.id); + assert_true(inboundStats != null, 'Has stats for inbound RTP stream'); + + // Perform stats selection algorithm with sender selector. The result should + // contain the outbound-rtp but not the inbound-rtp. + let senderReport = await sender.getStats(); + assert_true(senderReport.has(outboundStats.id)); + assert_false(senderReport.has(inboundStats.id)); + + // Validate the stats graph, ensuring all stats objects are reachable and + // valid from the outbound-rtp stats. + validateStatsGraph(senderReport, senderReport.get(outboundStats.id)); + // Ensure that the stats graph contains some expected dictionaries. + assert_equals(findStatsOfType(senderReport, 'track').length, 1, + 'senderReport should contain track stats'); + assert_equals(findStatsOfType(senderReport, 'transport').length, 1, + 'senderReport should contain transport stats'); + assert_equals(findStatsOfType(senderReport, 'candidate-pair').length, 1, + 'senderReport should contain candidate-pair stats'); + assert_equals(findStatsOfType(senderReport, 'local-candidate').length, 1, + 'senderReport should contain local-candidate stats'); + assert_equals(findStatsOfType(senderReport, 'remote-candidate').length, 1, + 'senderReport should contain remote-candidate stats'); + }, 'RTCRtpSender.getStats() contains only outbound-rtp and related stats'); + // Helpers. function findStatsByTypeAndId(report, type, identifier) { @@ -400,4 +446,53 @@ return null; } + function findStatsOfType(report, type) { + let stats = []; + for (let it = report.values(), n = it.next(); !n.done; n = it.next()) { + if (n.value.type == type) + stats.push(n.value); + } + return stats; + } + + // Returns a promise that is resolved when pc.iceConnectionState changes to + // 'completed'. This is when transport stats can be expected to have its + // selectedCandidatePairId defined. + async function onIceConnectionStateCompleted(pc) { + let resolver = new Resolver(); + pc.oniceconnectionstatechange = e => { + if (pc.iceConnectionState == 'completed') + resolver.resolve(); + }; + return resolver.promise; + } + + // Explores the stats graph starting from |stat|, validating each stat + // (validateRtcStats) and asserting that all stats of the report were visited. + function validateStatsGraph(report, stat) { + let visitedIds = new Set(); + validateStatsGraphRecursively(report, stat.id, visitedIds); + assert_equals(visitedIds.size, report.size, + 'Entire stats graph should have been explored.') + } + + function validateStatsGraphRecursively(report, currentId, visitedIds) { + if (visitedIds.has(currentId)) + return; + visitedIds.add(currentId); + assert_true(report.has(currentId), 'Broken reference.'); + let stat = report.get(currentId); + validateRtcStats(report, stat); + for (let member in stat) { + if (member.endsWith('Id')) { + validateStatsGraphRecursively(report, stat[member], visitedIds); + } else if (member.endsWith('Ids')) { + let ids = stat[member]; + for (let i = 0; i < ids.length; ++i) { + validateStatsGraphRecursively(report, ids[i], visitedIds); + } + } + } + } + </script> diff --git a/tests/wpt/web-platform-tests/webrtc/RTCRtpSender-getStats.https.html b/tests/wpt/web-platform-tests/webrtc/RTCRtpSender-getStats.https.html index e5cb1eb99fa..5342625ea0c 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCRtpSender-getStats.https.html +++ b/tests/wpt/web-platform-tests/webrtc/RTCRtpSender-getStats.https.html @@ -3,6 +3,7 @@ <title>RTCRtpSender.prototype.getStats</title> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="RTCPeerConnection-helper.js"></script> <script src="dictionary-helper.js"></script> <script src="RTCStats-helper.js"></script> <script> @@ -12,6 +13,9 @@ // webrtc-pc 20171130 // webrtc-stats 20171122 + // The following helper functions are called from RTCPeerConnection-helper.js: + // doSignalingHandshake + // The following helper function is called from RTCStats-helper.js // validateStatsReport // assert_stats_report_has_stats @@ -35,31 +39,28 @@ objects added. */ - promise_test(() => { - const pc = new RTCPeerConnection(); - const { sender } = pc.addTransceiver('audio'); + promise_test(async () => { + const caller = new RTCPeerConnection(); + const callee = new RTCPeerConnection(); + const { sender } = caller.addTransceiver('audio'); - return sender.getStats() - .then(statsReport => { - validateStatsReport(statsReport); - assert_stats_report_has_stats(statsReport, ['outbound-rtp']); - }); + await doSignalingHandshake(caller, callee); + const statsReport = await sender.getStats(); + validateStatsReport(statsReport); + assert_stats_report_has_stats(statsReport, ['outbound-rtp']); }, 'sender.getStats() via addTransceiver should return stats report containing outbound-rtp stats'); - promise_test(() => { - const pc = new RTCPeerConnection(); - - return navigator.mediaDevices.getUserMedia({ audio: true }) - .then(mediaStream => { - const [track] = mediaStream.getTracks(); - const sender = pc.addTrack(track, mediaStream); + promise_test(async () => { + const caller = new RTCPeerConnection(); + const callee = new RTCPeerConnection(); + const stream = await navigator.mediaDevices.getUserMedia({audio:true}); + const [track] = stream.getTracks(); + const sender = caller.addTrack(track, stream); - return sender.getStats() - .then(statsReport => { - validateStatsReport(statsReport); - assert_stats_report_has_stats(statsReport, ['outbound-rtp']); - }); - }) + await doSignalingHandshake(caller, callee); + const statsReport = await sender.getStats(); + validateStatsReport(statsReport); + assert_stats_report_has_stats(statsReport, ['outbound-rtp']); }, 'sender.getStats() via addTrack should return stats report containing outbound-rtp stats'); </script> |