diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2018-07-09 15:02:26 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-07-09 15:02:26 -0400 |
commit | 493bb05ed0945ea1193836d55627fde88a34a501 (patch) | |
tree | 8557eacd0d9aa5afbfce5081d6501708ea0a6850 | |
parent | 52ccdba05f5fbe37169f7a1c6fcc413bdc5681b8 (diff) | |
parent | 4787b28da37238d9b1d892b794455db24b481d99 (diff) | |
download | servo-493bb05ed0945ea1193836d55627fde88a34a501.tar.gz servo-493bb05ed0945ea1193836d55627fde88a34a501.zip |
Auto merge of #21099 - servo-wpt-sync:wpt_update_28-06-2018, r=jdm
Sync WPT with upstream (28-06-2018)
Automated downstream sync of changes from upstream as of 28-06-2018.
[no-wpt-sync]
<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/21099)
<!-- Reviewable:end -->
258 files changed, 8196 insertions, 4678 deletions
diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json index 570c138fcbb..322da5eff25 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -19449,6 +19449,18 @@ {} ] ], + "css/CSS2/abspos/between-float-and-text.html": [ + [ + "/css/CSS2/abspos/between-float-and-text.html", + [ + [ + "/css/reference/ref-filled-green-200px-square.html", + "==" + ] + ], + {} + ] + ], "css/CSS2/abspos/hypothetical-inline-alone-on-second-line.html": [ [ "/css/CSS2/abspos/hypothetical-inline-alone-on-second-line.html", @@ -159893,6 +159905,18 @@ {} ] ], + "css/css-writing-modes/scrollbar-vertical-rl.html": [ + [ + "/css/css-writing-modes/scrollbar-vertical-rl.html", + [ + [ + "/css/css-writing-modes/reference/scrollbar-vertical-rl-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-writing-modes/sizing-orthog-htb-in-vlr-001.xht": [ [ "/css/css-writing-modes/sizing-orthog-htb-in-vlr-001.xht", @@ -165481,6 +165505,18 @@ {} ] ], + "css/vendor-imports/mozilla/mozilla-central-reftests/background/box-shadow-currentcolor.html": [ + [ + "/css/vendor-imports/mozilla/mozilla-central-reftests/background/box-shadow-currentcolor.html", + [ + [ + "/css/vendor-imports/mozilla/mozilla-central-reftests/background/box-shadow-currentcolor-ref.html", + "==" + ] + ], + {} + ] + ], "css/vendor-imports/mozilla/mozilla-central-reftests/break3/moz-block-fragmentation-001.html": [ [ "/css/vendor-imports/mozilla/mozilla-central-reftests/break3/moz-block-fragmentation-001.html", @@ -166225,6 +166261,66 @@ {} ] ], + "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001a.html": [ + [ + "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001a.html", + [ + [ + "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001b.html": [ + [ + "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001b.html", + [ + [ + "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-no-principal-box-001.html": [ + [ + "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-no-principal-box-001.html", + [ + [ + "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-no-principal-box-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-containing-block-001.html": [ + [ + "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-containing-block-001.html", + [ + [ + "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-containing-block-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-stacking-and-clipping-001.html": [ + [ + "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-stacking-and-clipping-001.html", + [ + [ + "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-stacking-and-clipping-001-ref.html", + "==" + ] + ], + {} + ] + ], "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-stacking-context-001a.html": [ [ "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-stacking-context-001a.html", @@ -173209,6 +173305,18 @@ {} ] ], + "css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/float-should-push.html": [ + [ + "/css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/float-should-push.html", + [ + [ + "/css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/float-should-push-ref.html", + "==" + ] + ], + {} + ] + ], "css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/shape-outside-border-box-001.html": [ [ "/css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/shape-outside-border-box-001.html", @@ -175669,6 +175777,18 @@ {} ] ], + "css/vendor-imports/mozilla/mozilla-central-reftests/text-decor-3/text-shadow-currentcolor.html": [ + [ + "/css/vendor-imports/mozilla/mozilla-central-reftests/text-decor-3/text-shadow-currentcolor.html", + [ + [ + "/css/vendor-imports/mozilla/mozilla-central-reftests/text-decor-3/text-shadow-currentcolor-ref.html", + "==" + ] + ], + {} + ] + ], "css/vendor-imports/mozilla/mozilla-central-reftests/text3/hyphenation-control-1.html": [ [ "/css/vendor-imports/mozilla/mozilla-central-reftests/text3/hyphenation-control-1.html", @@ -216832,6 +216952,16 @@ {} ] ], + "cookie-store/serviceworker_cookieStore_subscriptions_empty.js": [ + [ + {} + ] + ], + "cookie-store/serviceworker_cookieStore_subscriptions_mismatch.js": [ + [ + {} + ] + ], "cookies/META.yml": [ [ {} @@ -217537,6 +217667,11 @@ {} ] ], + "cors/resources/cache-304.py": [ + [ + {} + ] + ], "cors/resources/checkandremove.py": [ [ {} @@ -240782,6 +240917,11 @@ {} ] ], + "css/css-box/parsing/resources/parsing-testcommon.js": [ + [ + {} + ] + ], "css/css-break/META.yml": [ [ {} @@ -241542,6 +241682,11 @@ {} ] ], + "css/css-env/META.yml": [ + [ + {} + ] + ], "css/css-exclusions/META.yml": [ [ {} @@ -262027,6 +262172,11 @@ {} ] ], + "css/css-writing-modes/parsing/resources/parsing-testcommon.js": [ + [ + {} + ] + ], "css/css-writing-modes/reference/available-size-001-ref.html": [ [ {} @@ -262607,6 +262757,11 @@ {} ] ], + "css/css-writing-modes/reference/scrollbar-vertical-rl-ref.html": [ + [ + {} + ] + ], "css/css-writing-modes/reference/svg-aliasing-001-ref.html": [ [ {} @@ -268067,6 +268222,11 @@ {} ] ], + "css/vendor-imports/mozilla/mozilla-central-reftests/background/box-shadow-currentcolor-ref.html": [ + [ + {} + ] + ], "css/vendor-imports/mozilla/mozilla-central-reftests/background/reftest.list": [ [ {} @@ -268247,6 +268407,26 @@ {} ] ], + "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001-ref.html": [ + [ + {} + ] + ], + "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-no-principal-box-001-ref.html": [ + [ + {} + ] + ], + "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-containing-block-001-ref.html": [ + [ + {} + ] + ], + "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-stacking-and-clipping-001-ref.html": [ + [ + {} + ] + ], "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-stacking-context-001-ref.html": [ [ {} @@ -270272,6 +270452,11 @@ {} ] ], + "css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/float-should-push-ref.html": [ + [ + {} + ] + ], "css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/reftest.list": [ [ {} @@ -270932,6 +271117,11 @@ {} ] ], + "css/vendor-imports/mozilla/mozilla-central-reftests/text-decor-3/text-shadow-currentcolor-ref.html": [ + [ + {} + ] + ], "css/vendor-imports/mozilla/mozilla-central-reftests/text3/hyphenation-control-1-ref.html": [ [ {} @@ -273932,6 +274122,11 @@ {} ] ], + "encrypted-media/scripts/playback-temporary-encrypted-clear-segmented-sources.js": [ + [ + {} + ] + ], "encrypted-media/scripts/playback-temporary-encrypted-clear-sources.js": [ [ {} @@ -288452,11 +288647,6 @@ {} ] ], - "infrastructure/metadata/infrastructure/assumptions/html-elements.html.ini": [ - [ - {} - ] - ], "infrastructure/metadata/infrastructure/browsers/firefox/__dir__.ini": [ [ {} @@ -288657,6 +288847,11 @@ {} ] ], + "interfaces/credential-management.idl": [ + [ + {} + ] + ], "interfaces/css-animations.idl": [ [ {} @@ -288782,6 +288977,11 @@ {} ] ], + "interfaces/image-capture.idl": [ + [ + {} + ] + ], "interfaces/input-events.idl": [ [ {} @@ -288817,11 +289017,6 @@ {} ] ], - "interfaces/mediacapture-image.idl": [ - [ - {} - ] - ], "interfaces/mediacapture-main.idl": [ [ {} @@ -289007,6 +289202,11 @@ {} ] ], + "interfaces/webappsec-subresource-integrity.idl": [ + [ + {} + ] + ], "interfaces/webaudio.idl": [ [ {} @@ -289127,6 +289327,11 @@ {} ] ], + "lifecycle/META.yml": [ + [ + {} + ] + ], "lifecycle/resources/foo.txt": [ [ {} @@ -291342,11 +291547,26 @@ {} ] ], + "quirks/hashless-hex-color/support/common.js": [ + [ + {} + ] + ], "quirks/historical/list-item-bullet-size-ref.html": [ [ {} ] ], + "quirks/support/test-ref-iframe.js": [ + [ + {} + ] + ], + "quirks/unitless-length/support/common.js": [ + [ + {} + ] + ], "referrer-policy/META.yml": [ [ {} @@ -298672,6 +298892,11 @@ {} ] ], + "webaudio/resources/audiobuffersource-testing.js": [ + [ + {} + ] + ], "webaudio/resources/audionodeoptions.js": [ [ {} @@ -298732,6 +298957,11 @@ {} ] ], + "webaudio/resources/note-grain-on-testing.js": [ + [ + {} + ] + ], "webaudio/resources/panner-formulas.js": [ [ {} @@ -298772,6 +299002,11 @@ {} ] ], + "webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-multi-channels-expected.wav": [ + [ + {} + ] + ], "webaudio/the-audio-api/the-audiocontext-interface/.gitkeep": [ [ {} @@ -299397,7 +299632,12 @@ {} ] ], - "webrtc/tools/package-lock.json": [ + "webrtc/tools/codemod-peerconnection-addcleanup": [ + [ + {} + ] + ], + "webrtc/tools/html-codemod.js": [ [ {} ] @@ -315516,123 +315756,99 @@ {} ] ], - "cookie-store/cookieListItem_attributes.tentative.window.js": [ - [ - "/cookie-store/cookieListItem_attributes.tentative.window.html", - {} - ] - ], - "cookie-store/cookieStore_delete_arguments.tentative.window.js": [ - [ - "/cookie-store/cookieStore_delete_arguments.tentative.window.html", - {} - ] - ], - "cookie-store/cookieStore_delete_basic.tentative.window.js": [ - [ - "/cookie-store/cookieStore_delete_basic.tentative.window.html", - {} - ] - ], - "cookie-store/cookieStore_event_arguments.tenative.window.js": [ - [ - "/cookie-store/cookieStore_event_arguments.tenative.window.html", - {} - ] - ], - "cookie-store/cookieStore_event_basic.tentative.window.js": [ + "cookie-store/cookieListItem_attributes.tentative.https.window.js": [ [ - "/cookie-store/cookieStore_event_basic.tentative.window.html", + "/cookie-store/cookieListItem_attributes.tentative.https.window.html", {} ] ], - "cookie-store/cookieStore_event_delete.tenative.window.js": [ + "cookie-store/cookieStore_delete_arguments.tentative.https.window.js": [ [ - "/cookie-store/cookieStore_event_delete.tenative.window.html", + "/cookie-store/cookieStore_delete_arguments.tentative.https.window.html", {} ] ], - "cookie-store/cookieStore_event_overwrite.tentative.window.js": [ + "cookie-store/cookieStore_delete_basic.tentative.https.window.js": [ [ - "/cookie-store/cookieStore_event_overwrite.tentative.window.html", + "/cookie-store/cookieStore_delete_basic.tentative.https.window.html", {} ] ], - "cookie-store/cookieStore_getAll_arguments.tentative.window.js": [ + "cookie-store/cookieStore_event_arguments.tenative.https.window.js": [ [ - "/cookie-store/cookieStore_getAll_arguments.tentative.window.html", + "/cookie-store/cookieStore_event_arguments.tenative.https.window.html", {} ] ], - "cookie-store/cookieStore_getAll_set_basic.tentative.window.js": [ + "cookie-store/cookieStore_event_basic.tentative.https.window.js": [ [ - "/cookie-store/cookieStore_getAll_set_basic.tentative.window.html", + "/cookie-store/cookieStore_event_basic.tentative.https.window.html", {} ] ], - "cookie-store/cookieStore_get_arguments.tentative.window.js": [ + "cookie-store/cookieStore_event_delete.tenative.https.window.js": [ [ - "/cookie-store/cookieStore_get_arguments.tentative.window.html", + "/cookie-store/cookieStore_event_delete.tenative.https.window.html", {} ] ], - "cookie-store/cookieStore_get_delete_basic.tentative.window.js": [ + "cookie-store/cookieStore_event_overwrite.tentative.https.window.js": [ [ - "/cookie-store/cookieStore_get_delete_basic.tentative.window.html", + "/cookie-store/cookieStore_event_overwrite.tentative.https.window.html", {} ] ], - "cookie-store/cookieStore_get_set_basic.tentative.window.js": [ + "cookie-store/cookieStore_getAll_arguments.tentative.https.window.js": [ [ - "/cookie-store/cookieStore_get_set_basic.tentative.window.html", + "/cookie-store/cookieStore_getAll_arguments.tentative.https.window.html", {} ] ], - "cookie-store/cookieStore_has_arguments.tentative.window.js": [ + "cookie-store/cookieStore_getAll_multiple.tentative.https.window.js": [ [ - "/cookie-store/cookieStore_has_arguments.tentative.window.html", + "/cookie-store/cookieStore_getAll_multiple.tentative.https.window.html", {} ] ], - "cookie-store/cookieStore_has_basic.tentative.window.js": [ + "cookie-store/cookieStore_getAll_set_basic.tentative.https.window.js": [ [ - "/cookie-store/cookieStore_has_basic.tentative.window.html", + "/cookie-store/cookieStore_getAll_set_basic.tentative.https.window.html", {} ] ], - "cookie-store/cookieStore_in_detached_frame.tentative.html": [ + "cookie-store/cookieStore_get_arguments.tentative.https.window.js": [ [ - "/cookie-store/cookieStore_in_detached_frame.tentative.html", + "/cookie-store/cookieStore_get_arguments.tentative.https.window.html", {} ] ], - "cookie-store/cookieStore_set_arguments.tentative.window.js": [ + "cookie-store/cookieStore_get_delete_basic.tentative.https.window.js": [ [ - "/cookie-store/cookieStore_set_arguments.tentative.window.html", + "/cookie-store/cookieStore_get_delete_basic.tentative.https.window.html", {} ] ], - "cookie-store/cookieStore_set_expires_option.tentative.window.js": [ + "cookie-store/cookieStore_get_set_basic.tentative.https.window.js": [ [ - "/cookie-store/cookieStore_set_expires_option.tentative.window.html", + "/cookie-store/cookieStore_get_set_basic.tentative.https.window.html", {} ] ], - "cookie-store/cookieStore_special_names.tentative.html": [ + "cookie-store/cookieStore_in_detached_frame.tentative.https.html": [ [ - "/cookie-store/cookieStore_special_names.tentative.html", + "/cookie-store/cookieStore_in_detached_frame.tentative.https.html", {} ] ], - "cookie-store/cookieStore_special_names.tentative.https.html": [ + "cookie-store/cookieStore_set_arguments.tentative.https.window.js": [ [ - "/cookie-store/cookieStore_special_names.tentative.https.html", + "/cookie-store/cookieStore_set_arguments.tentative.https.window.html", {} ] ], - "cookie-store/document_cookie.tentative.html": [ + "cookie-store/cookieStore_special_names.tentative.https.window.js": [ [ - "/cookie-store/document_cookie.tentative.html", + "/cookie-store/cookieStore_special_names.tentative.https.window.html", {} ] ], @@ -315642,33 +315858,21 @@ {} ] ], - "cookie-store/document_getAll_multiple.tentative.html": [ - [ - "/cookie-store/document_getAll_multiple.tentative.html", - {} - ] - ], - "cookie-store/http_cookie_and_set_cookie_headers.tentative.html": [ - [ - "/cookie-store/http_cookie_and_set_cookie_headers.tentative.html", - {} - ] - ], "cookie-store/http_cookie_and_set_cookie_headers.tentative.https.html": [ [ "/cookie-store/http_cookie_and_set_cookie_headers.tentative.https.html", {} ] ], - "cookie-store/httponly_cookies.window.js": [ + "cookie-store/httponly_cookies.https.window.js": [ [ - "/cookie-store/httponly_cookies.window.html", + "/cookie-store/httponly_cookies.https.window.html", {} ] ], - "cookie-store/idlharness.tentative.html": [ + "cookie-store/idlharness.tentative.https.html": [ [ - "/cookie-store/idlharness.tentative.html", + "/cookie-store/idlharness.tentative.https.html", {} ] ], @@ -315678,36 +315882,18 @@ {} ] ], - "cookie-store/no_name_and_no_value.tentative.html": [ - [ - "/cookie-store/no_name_and_no_value.tentative.html", - {} - ] - ], "cookie-store/no_name_and_no_value.tentative.https.html": [ [ "/cookie-store/no_name_and_no_value.tentative.https.html", {} ] ], - "cookie-store/no_name_equals_in_value.tentative.html": [ - [ - "/cookie-store/no_name_equals_in_value.tentative.html", - {} - ] - ], "cookie-store/no_name_equals_in_value.tentative.https.html": [ [ "/cookie-store/no_name_equals_in_value.tentative.https.html", {} ] ], - "cookie-store/no_name_multiple_values.tentative.html": [ - [ - "/cookie-store/no_name_multiple_values.tentative.html", - {} - ] - ], "cookie-store/no_name_multiple_values.tentative.https.html": [ [ "/cookie-store/no_name_multiple_values.tentative.https.html", @@ -315744,6 +315930,18 @@ {} ] ], + "cookie-store/serviceworker_cookieStore_subscriptions_empty.tentative.https.html": [ + [ + "/cookie-store/serviceworker_cookieStore_subscriptions_empty.tentative.https.html", + {} + ] + ], + "cookie-store/serviceworker_cookieStore_subscriptions_mismatch.tentative.https.html": [ + [ + "/cookie-store/serviceworker_cookieStore_subscriptions_mismatch.tentative.https.html", + {} + ] + ], "cookies/http-state/attribute-tests.html": [ [ "/cookies/http-state/attribute-tests.html", @@ -316020,6 +316218,12 @@ {} ] ], + "cors/script-304.html": [ + [ + "/cors/script-304.html", + {} + ] + ], "cors/simple-requests.htm": [ [ "/cors/simple-requests.htm", @@ -316058,9 +316262,9 @@ {} ] ], - "credential-management/idl.https.html": [ + "credential-management/idlharness.https.window.js": [ [ - "/credential-management/idl.https.html", + "/credential-management/idlharness.https.window.html", {} ] ], @@ -317032,6 +317236,156 @@ {} ] ], + "css/css-box/parsing/clear-invalid.html": [ + [ + "/css/css-box/parsing/clear-invalid.html", + {} + ] + ], + "css/css-box/parsing/clear-valid.html": [ + [ + "/css/css-box/parsing/clear-valid.html", + {} + ] + ], + "css/css-box/parsing/float-invalid.html": [ + [ + "/css/css-box/parsing/float-invalid.html", + {} + ] + ], + "css/css-box/parsing/float-valid.html": [ + [ + "/css/css-box/parsing/float-valid.html", + {} + ] + ], + "css/css-box/parsing/height-invalid.html": [ + [ + "/css/css-box/parsing/height-invalid.html", + {} + ] + ], + "css/css-box/parsing/height-valid.html": [ + [ + "/css/css-box/parsing/height-valid.html", + {} + ] + ], + "css/css-box/parsing/margin-invalid.html": [ + [ + "/css/css-box/parsing/margin-invalid.html", + {} + ] + ], + "css/css-box/parsing/margin-valid.html": [ + [ + "/css/css-box/parsing/margin-valid.html", + {} + ] + ], + "css/css-box/parsing/max-height-invalid.html": [ + [ + "/css/css-box/parsing/max-height-invalid.html", + {} + ] + ], + "css/css-box/parsing/max-height-valid.html": [ + [ + "/css/css-box/parsing/max-height-valid.html", + {} + ] + ], + "css/css-box/parsing/max-width-invalid.html": [ + [ + "/css/css-box/parsing/max-width-invalid.html", + {} + ] + ], + "css/css-box/parsing/max-width-valid.html": [ + [ + "/css/css-box/parsing/max-width-valid.html", + {} + ] + ], + "css/css-box/parsing/min-height-invalid.html": [ + [ + "/css/css-box/parsing/min-height-invalid.html", + {} + ] + ], + "css/css-box/parsing/min-height-valid.html": [ + [ + "/css/css-box/parsing/min-height-valid.html", + {} + ] + ], + "css/css-box/parsing/min-width-invalid.html": [ + [ + "/css/css-box/parsing/min-width-invalid.html", + {} + ] + ], + "css/css-box/parsing/min-width-valid.html": [ + [ + "/css/css-box/parsing/min-width-valid.html", + {} + ] + ], + "css/css-box/parsing/overflow-invalid.html": [ + [ + "/css/css-box/parsing/overflow-invalid.html", + {} + ] + ], + "css/css-box/parsing/overflow-valid.html": [ + [ + "/css/css-box/parsing/overflow-valid.html", + {} + ] + ], + "css/css-box/parsing/padding-invalid.html": [ + [ + "/css/css-box/parsing/padding-invalid.html", + {} + ] + ], + "css/css-box/parsing/padding-valid.html": [ + [ + "/css/css-box/parsing/padding-valid.html", + {} + ] + ], + "css/css-box/parsing/visibility-invalid.html": [ + [ + "/css/css-box/parsing/visibility-invalid.html", + {} + ] + ], + "css/css-box/parsing/visibility-valid.html": [ + [ + "/css/css-box/parsing/visibility-valid.html", + {} + ] + ], + "css/css-box/parsing/width-invalid.html": [ + [ + "/css/css-box/parsing/width-invalid.html", + {} + ] + ], + "css/css-box/parsing/width-valid.html": [ + [ + "/css/css-box/parsing/width-valid.html", + {} + ] + ], + "css/css-cascade/all-prop-initial-xml.html": [ + [ + "/css/css-cascade/all-prop-initial-xml.html", + {} + ] + ], "css/css-cascade/inherit-initial.html": [ [ "/css/css-cascade/inherit-initial.html", @@ -319434,6 +319788,12 @@ {} ] ], + "css/css-logical/logical-box-border-shorthands.html": [ + [ + "/css/css-logical/logical-box-border-shorthands.html", + {} + ] + ], "css/css-logical/logical-box-border-style.html": [ [ "/css/css-logical/logical-box-border-style.html", @@ -320004,6 +320364,12 @@ {} ] ], + "css/css-scroll-snap/overflowing-snap-areas.html": [ + [ + "/css/css-scroll-snap/overflowing-snap-areas.html", + {} + ] + ], "css/css-scroll-snap/scroll-snap-type-proximity.html": [ [ "/css/css-scroll-snap/scroll-snap-type-proximity.html", @@ -322182,6 +322548,12 @@ {} ] ], + "css/css-text/white-space/trailing-space-before-br-001.html": [ + [ + "/css/css-text/white-space/trailing-space-before-br-001.html", + {} + ] + ], "css/css-text/white-space/white-space-collapse-000.html": [ [ "/css/css-text/white-space/white-space-collapse-000.html", @@ -322296,6 +322668,42 @@ {} ] ], + "css/css-transforms/parsing/transform-box-invalid.html": [ + [ + "/css/css-transforms/parsing/transform-box-invalid.html", + {} + ] + ], + "css/css-transforms/parsing/transform-box-valid.html": [ + [ + "/css/css-transforms/parsing/transform-box-valid.html", + {} + ] + ], + "css/css-transforms/parsing/transform-invalid.html": [ + [ + "/css/css-transforms/parsing/transform-invalid.html", + {} + ] + ], + "css/css-transforms/parsing/transform-origin-invalid.html": [ + [ + "/css/css-transforms/parsing/transform-origin-invalid.html", + {} + ] + ], + "css/css-transforms/parsing/transform-origin-valid.html": [ + [ + "/css/css-transforms/parsing/transform-origin-valid.html", + {} + ] + ], + "css/css-transforms/parsing/transform-valid.html": [ + [ + "/css/css-transforms/parsing/transform-valid.html", + {} + ] + ], "css/css-transforms/parsing/translate-parsing-invalid.html": [ [ "/css/css-transforms/parsing/translate-parsing-invalid.html", @@ -325224,6 +325632,66 @@ {} ] ], + "css/css-writing-modes/parsing/direction-invalid.html": [ + [ + "/css/css-writing-modes/parsing/direction-invalid.html", + {} + ] + ], + "css/css-writing-modes/parsing/direction-valid.html": [ + [ + "/css/css-writing-modes/parsing/direction-valid.html", + {} + ] + ], + "css/css-writing-modes/parsing/text-combine-upright-invalid.html": [ + [ + "/css/css-writing-modes/parsing/text-combine-upright-invalid.html", + {} + ] + ], + "css/css-writing-modes/parsing/text-combine-upright-valid.html": [ + [ + "/css/css-writing-modes/parsing/text-combine-upright-valid.html", + {} + ] + ], + "css/css-writing-modes/parsing/text-orientation-invalid.html": [ + [ + "/css/css-writing-modes/parsing/text-orientation-invalid.html", + {} + ] + ], + "css/css-writing-modes/parsing/text-orientation-valid.html": [ + [ + "/css/css-writing-modes/parsing/text-orientation-valid.html", + {} + ] + ], + "css/css-writing-modes/parsing/unicode-bidi-invalid.html": [ + [ + "/css/css-writing-modes/parsing/unicode-bidi-invalid.html", + {} + ] + ], + "css/css-writing-modes/parsing/unicode-bidi-valid.html": [ + [ + "/css/css-writing-modes/parsing/unicode-bidi-valid.html", + {} + ] + ], + "css/css-writing-modes/parsing/writing-mode-invalid.html": [ + [ + "/css/css-writing-modes/parsing/writing-mode-invalid.html", + {} + ] + ], + "css/css-writing-modes/parsing/writing-mode-valid.html": [ + [ + "/css/css-writing-modes/parsing/writing-mode-valid.html", + {} + ] + ], "css/css-writing-modes/text-combine-upright-parsing-digits-001.html": [ [ "/css/css-writing-modes/text-combine-upright-parsing-digits-001.html", @@ -337190,6 +337658,12 @@ {} ] ], + "encrypted-media/clearkey-mp4-playback-temporary-clear-encrypted-segmented.https.html": [ + [ + "/encrypted-media/clearkey-mp4-playback-temporary-clear-encrypted-segmented.https.html", + {} + ] + ], "encrypted-media/clearkey-mp4-playback-temporary-clear-encrypted.https.html": [ [ "/encrypted-media/clearkey-mp4-playback-temporary-clear-encrypted.https.html", @@ -339196,10 +339670,20 @@ ], "fetch/api/request/request-keepalive-quota.html": [ [ - "/fetch/api/request/request-keepalive-quota.html", - { - "timeout": "long" - } + "/fetch/api/request/request-keepalive-quota.html?include=fast", + {} + ], + [ + "/fetch/api/request/request-keepalive-quota.html?include=slow-1", + {} + ], + [ + "/fetch/api/request/request-keepalive-quota.html?include=slow-2", + {} + ], + [ + "/fetch/api/request/request-keepalive-quota.html?include=slow-3", + {} ] ], "fetch/api/request/request-keepalive.html": [ @@ -339454,9 +339938,19 @@ {} ] ], - "fetch/cross-origin-resource-policy/fetch.html": [ + "fetch/cross-origin-resource-policy/fetch-in-service-worker.html": [ + [ + "/fetch/cross-origin-resource-policy/fetch-in-service-worker.html", + {} + ] + ], + "fetch/cross-origin-resource-policy/fetch.any.js": [ [ - "/fetch/cross-origin-resource-policy/fetch.html", + "/fetch/cross-origin-resource-policy/fetch.any.html", + {} + ], + [ + "/fetch/cross-origin-resource-policy/fetch.any.worker.html", {} ] ], @@ -343888,6 +344382,12 @@ {} ] ], + "html/scripting/the-noscript-element/non-html-noscript.html": [ + [ + "/html/scripting/the-noscript-element/non-html-noscript.html", + {} + ] + ], "html/semantics/disabled-elements/disabledElement.html": [ [ "/html/semantics/disabled-elements/disabledElement.html", @@ -366320,9 +366820,25 @@ {} ] ], - "quirks/hashless-hex-color.html": [ + "quirks/hashless-hex-color/limited-quirks.html": [ + [ + "/quirks/hashless-hex-color/limited-quirks.html", + { + "timeout": "long" + } + ] + ], + "quirks/hashless-hex-color/no-quirks.html": [ + [ + "/quirks/hashless-hex-color/no-quirks.html", + { + "timeout": "long" + } + ] + ], + "quirks/hashless-hex-color/quirks.html": [ [ - "/quirks/hashless-hex-color.html", + "/quirks/hashless-hex-color/quirks.html", { "timeout": "long" } @@ -366358,9 +366874,21 @@ {} ] ], - "quirks/unitless-length.html": [ + "quirks/unitless-length/limited-quirks.html": [ + [ + "/quirks/unitless-length/limited-quirks.html", + {} + ] + ], + "quirks/unitless-length/no-quirks.html": [ + [ + "/quirks/unitless-length/no-quirks.html", + {} + ] + ], + "quirks/unitless-length/quirks.html": [ [ - "/quirks/unitless-length.html", + "/quirks/unitless-length/quirks.html", {} ] ], @@ -379322,6 +379850,12 @@ {} ] ], + "subresource-integrity/idlharness.window.js": [ + [ + "/subresource-integrity/idlharness.window.html", + {} + ] + ], "subresource-integrity/subresource-css-ed25519.tentative.html": [ [ "/subresource-integrity/subresource-css-ed25519.tentative.html", @@ -381066,12 +381600,90 @@ {} ] ], + "webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-basic.html": [ + [ + "/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-basic.html", + {} + ] + ], + "webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-channels.html": [ + [ + "/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-channels.html", + {} + ] + ], + "webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-ended.html": [ + [ + "/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-ended.html", + {} + ] + ], + "webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-grain.html": [ + [ + "/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-grain.html", + {} + ] + ], + "webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-multi-channels.html": [ + [ + "/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-multi-channels.html", + {} + ] + ], + "webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-one-sample-loop.html": [ + [ + "/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-one-sample-loop.html", + {} + ] + ], + "webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-playbackrate-zero.html": [ + [ + "/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-playbackrate-zero.html", + {} + ] + ], + "webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-start.html": [ + [ + "/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-start.html", + {} + ] + ], + "webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiosource-onended.html": [ + [ + "/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiosource-onended.html", + {} + ] + ], + "webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiosource-time-limits.html": [ + [ + "/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiosource-time-limits.html", + {} + ] + ], "webaudio/the-audio-api/the-audiobuffersourcenode-interface/ctor-audiobuffersource.html": [ [ "/webaudio/the-audio-api/the-audiobuffersourcenode-interface/ctor-audiobuffersource.html", {} ] ], + "webaudio/the-audio-api/the-audiobuffersourcenode-interface/note-grain-on-play.html": [ + [ + "/webaudio/the-audio-api/the-audiobuffersourcenode-interface/note-grain-on-play.html", + {} + ] + ], + "webaudio/the-audio-api/the-audiobuffersourcenode-interface/note-grain-on-timing.html": [ + [ + "/webaudio/the-audio-api/the-audiobuffersourcenode-interface/note-grain-on-timing.html", + {} + ] + ], + "webaudio/the-audio-api/the-audiobuffersourcenode-interface/sample-accurate-scheduling.html": [ + [ + "/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sample-accurate-scheduling.html", + {} + ] + ], "webaudio/the-audio-api/the-audiocontext-interface/audiocontext-getoutputtimestamp.html": [ [ "/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-getoutputtimestamp.html", @@ -381582,6 +382194,12 @@ {} ] ], + "webaudio/the-audio-api/the-convolvernode-interface/convolver-setBuffer-already-has-value.html": [ + [ + "/webaudio/the-audio-api/the-convolvernode-interface/convolver-setBuffer-already-has-value.html", + {} + ] + ], "webaudio/the-audio-api/the-convolvernode-interface/convolver-setBuffer-null.html": [ [ "/webaudio/the-audio-api/the-convolvernode-interface/convolver-setBuffer-null.html", @@ -408742,7 +409360,7 @@ "support" ], "./lint.whitelist": [ - "7f96383c023ae0602813a441202c3be6bc44e624", + "1fd41d38b2af42fffea5bc09c0348feb0f078e85", "support" ], "./serve.py": [ @@ -439857,107 +440475,83 @@ "40595162d15dec7e315ef16f94646045596d7b1c", "support" ], - "cookie-store/cookieListItem_attributes.tentative.window.js": [ - "7d89e9ee77bad065c75bdb4f3467852dbf256b09", + "cookie-store/cookieListItem_attributes.tentative.https.window.js": [ + "773ad9b5ea3636497f9f90c57e5bc5a2fa63c289", "testharness" ], - "cookie-store/cookieStore_delete_arguments.tentative.window.js": [ + "cookie-store/cookieStore_delete_arguments.tentative.https.window.js": [ "740fccd53713d8ffdd84aa388580630025fc016c", "testharness" ], - "cookie-store/cookieStore_delete_basic.tentative.window.js": [ + "cookie-store/cookieStore_delete_basic.tentative.https.window.js": [ "c0a5c01ffcdd3755eb3db3dc4a6ec398fd2aba37", "testharness" ], - "cookie-store/cookieStore_event_arguments.tenative.window.js": [ + "cookie-store/cookieStore_event_arguments.tenative.https.window.js": [ "a61074b6062928c29a83e0f7d456fdce9e3a3d47", "testharness" ], - "cookie-store/cookieStore_event_basic.tentative.window.js": [ + "cookie-store/cookieStore_event_basic.tentative.https.window.js": [ "f6f20c4b587ed51d31ffc9f8bed1dfb7d092a064", "testharness" ], - "cookie-store/cookieStore_event_delete.tenative.window.js": [ + "cookie-store/cookieStore_event_delete.tenative.https.window.js": [ "b492c6567ef91ea0def4195b049f9553bbc8271d", "testharness" ], - "cookie-store/cookieStore_event_overwrite.tentative.window.js": [ + "cookie-store/cookieStore_event_overwrite.tentative.https.window.js": [ "cd238bae3c79a5f3c6e385466fe29487bf0e4c70", "testharness" ], - "cookie-store/cookieStore_getAll_arguments.tentative.window.js": [ - "4804767f6398c3d10d726d21895ae3b72c8f23f3", + "cookie-store/cookieStore_getAll_arguments.tentative.https.window.js": [ + "ea9bc48ed9d2da2523b97d92de84c65226206211", + "testharness" + ], + "cookie-store/cookieStore_getAll_multiple.tentative.https.window.js": [ + "f54045073f8db4f16682da3a4cabc98feb6bdd2e", "testharness" ], - "cookie-store/cookieStore_getAll_set_basic.tentative.window.js": [ + "cookie-store/cookieStore_getAll_set_basic.tentative.https.window.js": [ "d3c3430fa08d8573e6d95c56e0b91604286eb632", "testharness" ], - "cookie-store/cookieStore_get_arguments.tentative.window.js": [ - "1f63b8fc5b9e6a1e0a4aa925d2d3084cb1ea093a", + "cookie-store/cookieStore_get_arguments.tentative.https.window.js": [ + "ea197608e10369f700585066bb91e6846df2fe73", "testharness" ], - "cookie-store/cookieStore_get_delete_basic.tentative.window.js": [ + "cookie-store/cookieStore_get_delete_basic.tentative.https.window.js": [ "a5f91a2bbe6c619b01a9e3deb473645a36c85b44", "testharness" ], - "cookie-store/cookieStore_get_set_basic.tentative.window.js": [ + "cookie-store/cookieStore_get_set_basic.tentative.https.window.js": [ "475f0cdc18f63a0b3a710800a7a4ed82fd7b8ee8", "testharness" ], - "cookie-store/cookieStore_has_arguments.tentative.window.js": [ - "2a73b3ce79da4a3a49cd1580a1c8796b5c54c3a1", - "testharness" - ], - "cookie-store/cookieStore_has_basic.tentative.window.js": [ - "e258d62c411d54d7d5cf016adf78132bb9aa9fae", - "testharness" - ], - "cookie-store/cookieStore_in_detached_frame.tentative.html": [ + "cookie-store/cookieStore_in_detached_frame.tentative.https.html": [ "600452c1a496b8335b27bd24943b8834e37bf4d5", "testharness" ], - "cookie-store/cookieStore_set_arguments.tentative.window.js": [ - "86cdff2d6d564eef090342adb3d41c0b1e1c4513", - "testharness" - ], - "cookie-store/cookieStore_set_expires_option.tentative.window.js": [ - "1425be76976edef1e9c8ef222ab90e956eb21bae", - "testharness" - ], - "cookie-store/cookieStore_special_names.tentative.html": [ - "f839e2825dd18a6f54639fc2b7d4a18ce9906b25", + "cookie-store/cookieStore_set_arguments.tentative.https.window.js": [ + "832b25b61626d3c9656731470ea06e0f95028958", "testharness" ], - "cookie-store/cookieStore_special_names.tentative.https.html": [ - "4d53aaecbf9fea2865ca6492bc69b2ec3a47af79", - "testharness" - ], - "cookie-store/document_cookie.tentative.html": [ - "23916c5325b2c98875eac4ab7291622b44974daf", + "cookie-store/cookieStore_special_names.tentative.https.window.js": [ + "36bcdc14981a5d71f5e46f1cef4ee2031434bc62", "testharness" ], "cookie-store/document_cookie.tentative.https.html": [ "447ba96e7bb23a0def44817e584891097bb81998", "testharness" ], - "cookie-store/document_getAll_multiple.tentative.html": [ - "270700a50ac04a995665700688297b81c372ce37", - "testharness" - ], - "cookie-store/http_cookie_and_set_cookie_headers.tentative.html": [ - "7fb04dc519bafed5f35493f65664b51e23131a1d", - "testharness" - ], "cookie-store/http_cookie_and_set_cookie_headers.tentative.https.html": [ "2ccfc03ad6fedb063e2cd3ff9726b8d482ab5cf0", "testharness" ], - "cookie-store/httponly_cookies.window.js": [ + "cookie-store/httponly_cookies.https.window.js": [ "29d9c0bfaa9aa3e7115758731156dbeca9e736dc", "testharness" ], - "cookie-store/idlharness.tentative.html": [ + "cookie-store/idlharness.tentative.https.html": [ "043875184fa56ad41cda11e6f84314a7aebdb17f", "testharness" ], @@ -439969,26 +440563,14 @@ "0c8a1302ab1839cab71c87db2bda1ca6abcb6a23", "testharness" ], - "cookie-store/no_name_and_no_value.tentative.html": [ - "da68f9d93ef6f0f91da4827240e32a1e93a8df73", - "testharness" - ], "cookie-store/no_name_and_no_value.tentative.https.html": [ "61cfa6f1e5ee1e9165dcc16e32486660a1da9c42", "testharness" ], - "cookie-store/no_name_equals_in_value.tentative.html": [ - "07d5e9462c4395002f23aa4aaf25ae795f9f2452", - "testharness" - ], "cookie-store/no_name_equals_in_value.tentative.https.html": [ "61e7a3cc1f5b197d924c76098b66979d00444012", "testharness" ], - "cookie-store/no_name_multiple_values.tentative.html": [ - "edab422cf19fcdb906e20dcba9dc4a90dde41415", - "testharness" - ], "cookie-store/no_name_multiple_values.tentative.https.html": [ "aa3ed15714a1ed2b7cac4ba2fc7998d9792b7339", "testharness" @@ -440030,7 +440612,7 @@ "support" ], "cookie-store/serviceworker_cookieStore_arguments.js": [ - "a90956237d63fd51556f2d9e50967522870816d4", + "3260186907a9b4779e1a303eec499f880a270ac7", "support" ], "cookie-store/serviceworker_cookieStore_arguments.tentative.https.html": [ @@ -440038,7 +440620,7 @@ "testharness" ], "cookie-store/serviceworker_cookieStore_basic.js": [ - "38fe0bc6fbf08e5387f81e32348252c481af03c0", + "515dc7d31bbc6af83276939dbb997ccd0e8de3ec", "support" ], "cookie-store/serviceworker_cookieStore_basic.tentative.https.html": [ @@ -440046,7 +440628,7 @@ "testharness" ], "cookie-store/serviceworker_cookieStore_subscriptions.js": [ - "4fb3574d207f1dc09e488830714eb70b8bda55b4", + "7e140635e7587de1c606a0faf4a0bf8d8eb8c41e", "support" ], "cookie-store/serviceworker_cookieStore_subscriptions.tentative.https.html": [ @@ -440054,13 +440636,29 @@ "testharness" ], "cookie-store/serviceworker_cookieStore_subscriptions_basic.js": [ - "9de2007372d39f2c8552d476582a482b6a4bd1b4", + "9b477518ee4c8cdc103d3cab11cca371b7b2f72d", "support" ], "cookie-store/serviceworker_cookieStore_subscriptions_basic.tentative.https.html": [ "3836f1d36746ae11b76ee420ba34d902d48bc0af", "testharness" ], + "cookie-store/serviceworker_cookieStore_subscriptions_empty.js": [ + "fd8cf9d3dab06824cf0497c44a388c0cea7d02d6", + "support" + ], + "cookie-store/serviceworker_cookieStore_subscriptions_empty.tentative.https.html": [ + "3f8ec6177bc54738213fab8a1f8947d58714456d", + "testharness" + ], + "cookie-store/serviceworker_cookieStore_subscriptions_mismatch.js": [ + "fa57006fdb09070feb6c7a83553d300d725761b6", + "support" + ], + "cookie-store/serviceworker_cookieStore_subscriptions_mismatch.tentative.https.html": [ + "594f019786ffb316e8140e9f30a2cecadceda2fa", + "testharness" + ], "cookies/META.yml": [ "7456d333deb42015924578efc2a9269fbfa696bf", "support" @@ -441697,6 +442295,10 @@ "9cf4e4db6b0a74fa25f1ab500e91acf90b1c9db6", "support" ], + "cors/resources/cache-304.py": [ + "d95bb900081cf25253c758c1979e214021f21825", + "support" + ], "cors/resources/checkandremove.py": [ "d891a6e489124e4ef7f82faa51a5e2a7221925f9", "support" @@ -441733,6 +442335,10 @@ "e26f213e67940865d3d535f9fa173c999dbef31e", "testharness" ], + "cors/script-304.html": [ + "f3b0b2090f2ef74458a32a9805b4289aba5fd534", + "testharness" + ], "cors/simple-requests.htm": [ "608ea76c3209d7e803b4d4c1b02035e8493d52d5", "testharness" @@ -441765,8 +442371,8 @@ "561636e62d50da2d14e50516c62cbaea1c5bb924", "testharness" ], - "credential-management/idl.https.html": [ - "e9a108beef51c52bbaaf2e53371aec57e69541c0", + "credential-management/idlharness.https.window.js": [ + "9680556aa4d42fa7f86451640a2860caee06a042", "testharness" ], "credential-management/passwordcredential-framed-get.sub.https.html": [ @@ -441921,6 +442527,10 @@ "f060b356887b9ceb49be019634657b847bfffe81", "reftest" ], + "css/CSS2/abspos/between-float-and-text.html": [ + "9594a6d5643108ccd06b2d4a230a1c3c9e4b1bdd", + "reftest" + ], "css/CSS2/abspos/hypothetical-inline-alone-on-second-line-ref.html": [ "1b59f53e07a23d5adcff80646ed1c2e644590674", "support" @@ -504537,6 +505147,106 @@ "ceb5773fc9d6264d1f9210d8675b7bf48764d296", "reftest" ], + "css/css-box/parsing/clear-invalid.html": [ + "ee593f2639cdfb9a26edad7eb5de002e4d077850", + "testharness" + ], + "css/css-box/parsing/clear-valid.html": [ + "c7a6815b7ba52412c376fef82115b6253fe76bdb", + "testharness" + ], + "css/css-box/parsing/float-invalid.html": [ + "dda7379c1d0a45dae405ac599c9ab6ec82bba7de", + "testharness" + ], + "css/css-box/parsing/float-valid.html": [ + "450d8e39065e1b70fef54da8f71ee4d964d0874c", + "testharness" + ], + "css/css-box/parsing/height-invalid.html": [ + "1e64c2115fab346fe519e4f82d6e8cbd5eadd6df", + "testharness" + ], + "css/css-box/parsing/height-valid.html": [ + "6748edae8c0116264361f1677176788751a3f5fd", + "testharness" + ], + "css/css-box/parsing/margin-invalid.html": [ + "02b8f1197408b5e6266e429d4e86f97aec7573ae", + "testharness" + ], + "css/css-box/parsing/margin-valid.html": [ + "6c63a5bf1b5d44b2429d0d1e6df6149db626c04c", + "testharness" + ], + "css/css-box/parsing/max-height-invalid.html": [ + "f5681a9b9166e6ad1e0dd9dffe6e9086d9f2aa45", + "testharness" + ], + "css/css-box/parsing/max-height-valid.html": [ + "39eba8c0f2cb7a928f906d2114318d02adfa931e", + "testharness" + ], + "css/css-box/parsing/max-width-invalid.html": [ + "79a162578c69e2894e1b5ad1e6e8157736b74c2a", + "testharness" + ], + "css/css-box/parsing/max-width-valid.html": [ + "36b408f3adcb3f511e95e99d0e222fc863793752", + "testharness" + ], + "css/css-box/parsing/min-height-invalid.html": [ + "5dbcd534780891103b98ef2f8a7ac2e55a0e5d4c", + "testharness" + ], + "css/css-box/parsing/min-height-valid.html": [ + "7c2b05368598f29e9961ffc4b79a481ccf56e473", + "testharness" + ], + "css/css-box/parsing/min-width-invalid.html": [ + "2aec4d98131be0de37aada0d6ea22a7128eab11c", + "testharness" + ], + "css/css-box/parsing/min-width-valid.html": [ + "c98fa942b4300deb4b53cd897c7edbf036946214", + "testharness" + ], + "css/css-box/parsing/overflow-invalid.html": [ + "9be5ab7e7006147705f999ff81a5bde9cd5335c9", + "testharness" + ], + "css/css-box/parsing/overflow-valid.html": [ + "03c026f82b3a915e16fd8570491c5e11f11e7bfb", + "testharness" + ], + "css/css-box/parsing/padding-invalid.html": [ + "d0cc715ad6ce1e2488bd874d9ee3eeb1a3ffaf8d", + "testharness" + ], + "css/css-box/parsing/padding-valid.html": [ + "c5d31987e637c39891d4568bbc1076714025898a", + "testharness" + ], + "css/css-box/parsing/resources/parsing-testcommon.js": [ + "14f32b772f27a9bc75fe90e2ea1d8e4fb3649e95", + "support" + ], + "css/css-box/parsing/visibility-invalid.html": [ + "6a6c23d644c887c81b4456b8262ca18107b4370f", + "testharness" + ], + "css/css-box/parsing/visibility-valid.html": [ + "91f1bca19b97a3d7b0adffedf01110bf548e39d9", + "testharness" + ], + "css/css-box/parsing/width-invalid.html": [ + "8630f0656bd070b707cbd48ef7d0c24a183b913b", + "testharness" + ], + "css/css-box/parsing/width-valid.html": [ + "2fe349753adc16ea57af2ad0759c567b6c6e83d3", + "testharness" + ], "css/css-break/META.yml": [ "4840f714501765d5bf6f0986fd453d5bf1ac3787", "support" @@ -504561,6 +505271,10 @@ "1013a238512119cb926cf98db0e3cb2e33143ec3", "reftest" ], + "css/css-cascade/all-prop-initial-xml.html": [ + "aace7279b07ffc726175baeab325018eddcc792b", + "testharness" + ], "css/css-cascade/important-prop-ref.html": [ "3633b0204ab1cb13060656736d05c8666a5886d7", "support" @@ -505774,7 +506488,7 @@ "reftest" ], "css/css-contain/contain-size-013.html": [ - "22031a540503764e51111a7e5f9c91a0509b01f8", + "8974279263fbd89e1b781ee9481c7466ce073f1e", "reftest" ], "css/css-contain/contain-size-breaks-001.html": [ @@ -505874,7 +506588,7 @@ "support" ], "css/css-contain/reference/contain-paint-007-ref.html": [ - "090aba85ddcf927a33de227157ac8e411fd5c268", + "c34cc4f333edcc4949ae8418ca736154632dc5eb", "support" ], "css/css-contain/reference/contain-paint-008-ref.html": [ @@ -507957,6 +508671,10 @@ "f9699f59878f869cf0eb62d6b46ff118f6abfcf3", "support" ], + "css/css-env/META.yml": [ + "f05175dd6526e7891c551bb034d190c937a7d555", + "support" + ], "css/css-env/at-supports.tentative.html": [ "a93a3fe4ce531b5693060c3bb3c1c340a25ea490", "testharness" @@ -521122,7 +521840,7 @@ "support" ], "css/css-images/parsing/gradient-position-invalid.html": [ - "5bae73095070f46bc8f38a58fb3808d473d60058", + "dbddb52f007c399a575f3fcd3714f037cc5c9ed1", "testharness" ], "css/css-images/parsing/gradient-position-valid.html": [ @@ -521853,6 +522571,10 @@ "9e3a2a3796bf840f0e3ff78e54ad0382adff5b36", "testharness" ], + "css/css-logical/logical-box-border-shorthands.html": [ + "c02cf997b0f7046a0332079a57deaea78f132057", + "testharness" + ], "css/css-logical/logical-box-border-style.html": [ "b4e50119630c3b3b82f8ffbd03d7e221d77735f7", "testharness" @@ -521898,7 +522620,7 @@ "testharness" ], "css/css-logical/resources/test-box-properties.js": [ - "132f6024928641f0cd1f0580e69126a8ab02eba8", + "ce6a045e4afb9992c0ac13312f8b6516162d19a7", "support" ], "css/css-masking/META.yml": [ @@ -527653,12 +528375,16 @@ "d6432e3ad547c16ead21070cc04278b13ec49b58", "support" ], + "css/css-scroll-snap/overflowing-snap-areas.html": [ + "d290c9e941ee860e1d7f16e40c60c9f9696788c8", + "testharness" + ], "css/css-scroll-snap/scroll-snap-type-proximity.html": [ "75bfc0b6c7686afbbf431e653ab674496ad3fe46", "testharness" ], "css/css-scroll-snap/scrollTo-scrollBy-snaps.html": [ - "6e921f3b1c54df09d594d5e450674618eee42143", + "1cd26585c857250870a3cafdfa077110b7403e5c", "testharness" ], "css/css-scroll-snap/snap-at-user-scroll-end-manual.html": [ @@ -534001,6 +534727,10 @@ "4a0b79a1d58df46801162579c9d76f7854f1dc73", "reftest" ], + "css/css-text/white-space/trailing-space-before-br-001.html": [ + "e00364180ce0af22bcb38312dd1e578527f06b2b", + "testharness" + ], "css/css-text/white-space/white-space-collapse-000.html": [ "311f61dd93bf7b39b07f14aacad5d4bd77639cb2", "testharness" @@ -535457,6 +536187,30 @@ "b715fd67ba6e2aa0d0bddd7c0342c80af1f70690", "testharness" ], + "css/css-transforms/parsing/transform-box-invalid.html": [ + "68bba0550ce8a7a2439ff750f5f570b3bb8745ca", + "testharness" + ], + "css/css-transforms/parsing/transform-box-valid.html": [ + "ec155f1a87f57f6b21803816fd4fd740bb88295a", + "testharness" + ], + "css/css-transforms/parsing/transform-invalid.html": [ + "1fef3227ea79618e5ce262c9052ef323515e7ae9", + "testharness" + ], + "css/css-transforms/parsing/transform-origin-invalid.html": [ + "ef7189aed47a3425cb8ac99792f0be5a14187fdd", + "testharness" + ], + "css/css-transforms/parsing/transform-origin-valid.html": [ + "dad6cd0f561a7c786b71be7acec320f41475ea8f", + "testharness" + ], + "css/css-transforms/parsing/transform-valid.html": [ + "81df9ceb4a0205b2bb6a0a8d63397d94d591814e", + "testharness" + ], "css/css-transforms/parsing/translate-parsing-invalid.html": [ "1f4abad86af0f7be1ccafe8892c8a0a34b4e41b4", "testharness" @@ -548133,6 +548887,50 @@ "b7079a0dd1cc46e8252deff8a3b08e0915ea5a31", "manual" ], + "css/css-writing-modes/parsing/direction-invalid.html": [ + "9f1076e0da9353816521cf34646981c33d82badb", + "testharness" + ], + "css/css-writing-modes/parsing/direction-valid.html": [ + "c68d1dd7d9c2eef8d95c9c90c697a61125dd47b0", + "testharness" + ], + "css/css-writing-modes/parsing/resources/parsing-testcommon.js": [ + "14f32b772f27a9bc75fe90e2ea1d8e4fb3649e95", + "support" + ], + "css/css-writing-modes/parsing/text-combine-upright-invalid.html": [ + "21ca5f024035630875f14a5f45b165548333733f", + "testharness" + ], + "css/css-writing-modes/parsing/text-combine-upright-valid.html": [ + "680c92d6c12a38ec1f5689a5c2b9969041ee3672", + "testharness" + ], + "css/css-writing-modes/parsing/text-orientation-invalid.html": [ + "cb38e4ab395dfabc99813ee8459ebaae4d79e2d0", + "testharness" + ], + "css/css-writing-modes/parsing/text-orientation-valid.html": [ + "d047527d687a9b240e27e835de0fb8786189e399", + "testharness" + ], + "css/css-writing-modes/parsing/unicode-bidi-invalid.html": [ + "911e697b065db6e6f7b6e563e84601cf176eb99e", + "testharness" + ], + "css/css-writing-modes/parsing/unicode-bidi-valid.html": [ + "21c01cd648f6b465fdb46d85a9d247882ca14317", + "testharness" + ], + "css/css-writing-modes/parsing/writing-mode-invalid.html": [ + "d41cb214ab942064e064191c7db41b9b5dff1674", + "testharness" + ], + "css/css-writing-modes/parsing/writing-mode-valid.html": [ + "fa0a2060cda483bf479203069ad53432a4a36b36", + "testharness" + ], "css/css-writing-modes/percent-margin-vlr-003.xht": [ "4dc2d772b9fedfc4f498ed488cd8d31c00c50c71", "reftest" @@ -548645,6 +549443,10 @@ "6718fb7f117b02d835e5019ec884902669263f7f", "support" ], + "css/css-writing-modes/reference/scrollbar-vertical-rl-ref.html": [ + "352bb555091f87a1308dcfa69ca973d3aac211a5", + "support" + ], "css/css-writing-modes/reference/svg-aliasing-001-ref.html": [ "8156e1ec7df883cc2aef362a0d477dd3853f52d6", "support" @@ -548789,6 +549591,10 @@ "252c877b6b62e93b69b97a9dcc99498c5f56db65", "reftest" ], + "css/css-writing-modes/scrollbar-vertical-rl.html": [ + "e0bd3a11b16f322beb29f3c83c1b26ecc9b037d6", + "reftest" + ], "css/css-writing-modes/sizing-orthog-htb-in-vlr-001-ref.xht": [ "31223eeb2b9b8e7077fd90fc18d29221c63cdb6b", "support" @@ -553074,7 +553880,7 @@ "support" ], "css/mediaqueries/test_media_queries.html": [ - "cff3585932589f611a7101329d3b5b6ca27820aa", + "a7d78b13e119f8cd1ffa8812a9af67e59280084d", "testharness" ], "css/mediaqueries/viewport-script-dynamic-ref.html": [ @@ -556337,8 +557143,16 @@ "250751245e07ef7b57020a8dc32735693091a69f", "reftest" ], + "css/vendor-imports/mozilla/mozilla-central-reftests/background/box-shadow-currentcolor-ref.html": [ + "16b29eb7d10d6fc81c47375c80b4b152d61f8ed6", + "support" + ], + "css/vendor-imports/mozilla/mozilla-central-reftests/background/box-shadow-currentcolor.html": [ + "65d934b6ffa0462610dc3adb457824e1b9e0eb59", + "reftest" + ], "css/vendor-imports/mozilla/mozilla-central-reftests/background/reftest.list": [ - "ba3f91bdf65eaa53a76efc11d870f81a23d757dd", + "16df7ae11a37944c42a7f3e2aec16ad0b54f3c3a", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/background/support/aqua-yellow-32x32.png": [ @@ -556654,79 +557468,115 @@ "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-001-ref.html": [ - "1e710115a6ddf673f771a4f668c0be2912609442", + "0b5688cf2bed82383c358c80272652df9eafac34", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-001.html": [ - "3688553c5cfd25d76feee6021794cc7273fe6cff", + "ae677f9c21fb64a02e0a2d9fb5197038800dcf60", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-002-ref.html": [ - "185fa9ad94e9045ca490303e7256fd6ffb2cda03", + "92c69890e77216eda8056fc107e1a63ccf01e810", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-002.html": [ - "449b89844cf89f6ba2e3d27620255dab114a0755", + "0bcaab50f6db9335f1ae5cf02d440d6b6f5d612f", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-003-ref.html": [ - "3189218f9d3312f56f4ffaa04be17db936004c57", + "e87010a85ae9ffdcb4fbf6793a77222090bfe72d", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-003.html": [ - "354b9a2fdc94912d917d9528a268e46cae3ff83c", + "001e102c7ca511c410b1a0392fead919fd4e9a04", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-004-ref.html": [ - "ce9682abc33ecf2e394c63ac5e941d4e50c689eb", + "aa96e24835b8ea7d20d476252696ad5472e6097c", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-004.html": [ - "14271abdfab8e9495dd4c8e73bc7ea72ec45dfab", + "4dc86fc798bd388f58b239e551c5319fecc6a732", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-005.html": [ - "5ab4438dae36c8fa2af8ee2bba12bb60be3837ac", + "2c395f72eb7ed6498b390d05227d70ff5fbae87e", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-006-ref.html": [ - "a54e26fbb340e92d8049ae84191f7a59149e8bc2", + "79a496a7814ee9e1f7cb3688d8e182bb58fb687c", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-006.html": [ - "64b9266835318fb192c4d82319f98f64a8a1c03a", + "732f4c88901981765fc91918e1755af0a23a4a59", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-absolute-001-ref.html": [ - "15047fbe1c488711c1d6c309242eb2d5838f8c7e", + "36b131c631aef3e8279af91651ac492341e40359", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-absolute-001.html": [ - "e4c76a59f93fe875cd85be120d9b492621c6b13b", + "31e0e1a2abab1d54d915021ea158bf3da93cb788", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-fixed-001-ref.html": [ - "15047fbe1c488711c1d6c309242eb2d5838f8c7e", + "36b131c631aef3e8279af91651ac492341e40359", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-fixed-001.html": [ - "75da07ab71aaa13d847201e545a07c5048aa4d0a", + "ab222e28e7f9060860e910384c9e6e95d3f422be", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-float-001-ref.html": [ - "62ecb754d87f4923a9a46f64a0d69da1fafff6a6", + "e69eda30a4601b11a6f1d0551c29a4632dfa4276", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-float-001.html": [ - "f81a30fc22f9d90a107724378ca6f8e66ac78fd6", + "ee93a0a9794588c33606ed23b343bbe1db231e26", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-margin-001-ref.html": [ - "0d45e6ef79bbb757a8b47c06408ffc919a81545a", + "5f079f29a5998ee2d811ec693e660512894633d6", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-margin-001.html": [ - "360f5b95b4eef2bf80101f172557f2fe65f57ca7", + "045d302528444a645e5b6d2fa824ff2a8983b723", + "reftest" + ], + "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001-ref.html": [ + "ee338f9f2dd0054acae169489ef73c7d5b1b562c", + "support" + ], + "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001a.html": [ + "028f9b002b099182d98045b83cbd353e16ab0fb0", + "reftest" + ], + "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001b.html": [ + "127c86614b76a2d851f36bffecbdafa75e7b25f0", + "reftest" + ], + "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-no-principal-box-001-ref.html": [ + "f1d384a53c3345a7e8c3ea404bd7a83b30723567", + "support" + ], + "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-no-principal-box-001.html": [ + "7577aef073596faddef3ce2c72b2537410a4be8d", + "reftest" + ], + "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-containing-block-001-ref.html": [ + "6d7823a0486acad2c53e10419992a1cdb6ede29d", + "support" + ], + "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-containing-block-001.html": [ + "ce22eaf6214d0f732195704a91c1424b4f4d8331", + "reftest" + ], + "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-stacking-and-clipping-001-ref.html": [ + "5de4b9db5002c425b7ed7840f8107662bdb73bce", + "support" + ], + "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-stacking-and-clipping-001.html": [ + "e3691848b9d0dff5ce6a8faf573b5c59fadd5d87", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-stacking-context-001-ref.html": [ @@ -556742,7 +557592,7 @@ "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/contain/reftest.list": [ - "f13efa449db3e07a7fcec53072121e9d906f8562", + "865b3c38162cfb5ef744335416302ca0960f635e", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/counter-styles-3/dependent-builtin-ref.html": [ @@ -560877,8 +561727,16 @@ "e4736754b5c44b272e94a2988dce8feb2e5478f2", "support" ], + "css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/float-should-push-ref.html": [ + "f99113a1b1e389df8e87f71d6490af0c3d586325", + "support" + ], + "css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/float-should-push.html": [ + "7cba915a32e329fb93d3d953c54032cd2d9892cf", + "reftest" + ], "css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/reftest.list": [ - "93dca478ad98d04ac4d0c15188afcff9f7072a3c", + "b47bd519da1b51828d2f4134348badd42280357f", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/shape-outside-border-box-001-ref.html": [ @@ -561614,7 +562472,7 @@ "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/text-decor-3/reftest.list": [ - "3d686cfc2e832a735cc69da4e62b5fc82ff981db", + "25c3ec740acaaed780e14a8544dcf4b66672f2d2", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/text-decor-3/ruby-text-decoration-01-ref.html": [ @@ -562225,6 +563083,14 @@ "d10f62aadf7d4ee16da590a634ec78019122c7f5", "reftest" ], + "css/vendor-imports/mozilla/mozilla-central-reftests/text-decor-3/text-shadow-currentcolor-ref.html": [ + "835e5fb9057ca23376d6f4b9c6b2904541f8cd54", + "support" + ], + "css/vendor-imports/mozilla/mozilla-central-reftests/text-decor-3/text-shadow-currentcolor.html": [ + "572c9c56dc399638dfea85fcd70ef9fd82ec6509", + "reftest" + ], "css/vendor-imports/mozilla/mozilla-central-reftests/text3/hyphenation-control-1-ref.html": [ "31e1e0060f4c0c852998a12897627faf55e1cf25", "support" @@ -564590,7 +565456,7 @@ "support" ], "docs/_writing-tests/assumptions.md": [ - "8bb7a1cda9084f179e1373b8600d597d1072c08c", + "8ac61662756849f43124883e27be13a87a7a3a0f", "support" ], "docs/_writing-tests/css-metadata.md": [ @@ -564650,7 +565516,7 @@ "support" ], "docs/_writing-tests/testharness-api.md": [ - "ccad9b2b76eb48205d1f30847e0472e565d22156", + "a4109b95dfdd98b9f83d15dce8c47867fd0f37ff", "support" ], "docs/_writing-tests/testharness.md": [ @@ -565902,7 +566768,7 @@ "testharness" ], "dom/nodes/attributes.html": [ - "a39c668569ca64cddb49ea050884580fcb18aa68", + "a4d3431ba8a583734ec92977e0e392407012e4bc", "testharness" ], "dom/nodes/attributes.js": [ @@ -568245,6 +569111,10 @@ "3db3dfc846598a30218f740201e48ca6112f4d93", "testharness" ], + "encrypted-media/clearkey-mp4-playback-temporary-clear-encrypted-segmented.https.html": [ + "95a9b4b96c73fb769a1b34570127a3ba356886a3", + "testharness" + ], "encrypted-media/clearkey-mp4-playback-temporary-clear-encrypted.https.html": [ "bade72126b9a42409ef2b1901b84aef7778b2eac", "testharness" @@ -568753,6 +569623,10 @@ "bfe606669dc2c87c3813c119860f00317102a5bd", "support" ], + "encrypted-media/scripts/playback-temporary-encrypted-clear-segmented-sources.js": [ + "bbecdf6fad52b2b6a9bf9c73ddcbef194b53cac1", + "support" + ], "encrypted-media/scripts/playback-temporary-encrypted-clear-sources.js": [ "be851927ab25d4c4c107546aee3c2231f030840c", "support" @@ -569398,7 +570272,7 @@ "testharness" ], "feature-policy/experimental-features/vertical-scroll-touch-action-manual.tentative.html": [ - "5bfd2aa12d15de053f7b6408dc35654dfb690caf", + "752cc2b2febca0f9910e5fe11c01317f02fc2144", "manual" ], "feature-policy/experimental-features/vertical-scroll-touch-block-manual.tentative.html": [ @@ -569606,7 +570480,7 @@ "support" ], "feature-policy/resources/featurepolicy.js": [ - "e43c54ef8b92deb077f9061681a83261552ef2ef", + "559a8ebe478ba82f6616382e19e6e94a49139cb1", "support" ], "feature-policy/resources/picture-in-picture.js": [ @@ -570178,7 +571052,7 @@ "testharness" ], "fetch/api/request/request-keepalive-quota.html": [ - "0b9786a3878a361ba8ec3291216d475bd5148541", + "bcaae1cb50860be535b9ba72ba447a9aa7c333b1", "testharness" ], "fetch/api/request/request-keepalive.html": [ @@ -570597,8 +571471,12 @@ "4d836bed1e90a2d14b1651c0f3229b3f3d0b6b91", "testharness" ], - "fetch/cross-origin-resource-policy/fetch.html": [ - "6a881615d9df0750b640298725be56e60cd5804c", + "fetch/cross-origin-resource-policy/fetch-in-service-worker.html": [ + "d9db1c57557b20c40909bf91a12f85bfa243b39d", + "testharness" + ], + "fetch/cross-origin-resource-policy/fetch.any.js": [ + "497663ca6aa5d76bfead06e176b3f7004e0e7774", "testharness" ], "fetch/cross-origin-resource-policy/iframe-loads.html": [ @@ -571618,7 +572496,7 @@ "testharness" ], "fullscreen/api/element-request-fullscreen-and-exit-iframe-manual.html": [ - "6b06ccdca77fda2a6777a6b22ca1dd6baadd65f7", + "1a4b1290dfa3c40e9d9927860d1635f526940efb", "manual" ], "fullscreen/api/element-request-fullscreen-and-move-manual.html": [ @@ -571714,7 +572592,7 @@ "testharness" ], "fullscreen/model/move-to-fullscreen-iframe-manual.html": [ - "62aec7e1d5065bf99a00fc533c8c6d6704ac2010", + "b6ac159c13ba1df9e209089a98b6abbab5629231", "manual" ], "fullscreen/model/move-to-iframe-manual.html": [ @@ -572850,7 +573728,7 @@ "testharness" ], "html/browsers/browsing-the-web/scroll-to-fragid/004.html": [ - "787654af224115c4282b7d6a89509d57c17d3ed1", + "3265bbcc88866bd3d1fa97b20041e634d2b3c1f5", "testharness" ], "html/browsers/browsing-the-web/scroll-to-fragid/005.html": [ @@ -582513,6 +583391,10 @@ "0f18ee2c61b99893cfe2a3d1ff549b170a8d715d", "support" ], + "html/scripting/the-noscript-element/non-html-noscript.html": [ + "121760184777008c2ddeb598278216e40b34e367", + "testharness" + ], "html/semantics/.gitkeep": [ "da39a3ee5e6b4b0d3255bfef95601890afd80709", "support" @@ -591794,7 +592676,7 @@ "reftest" ], "infrastructure/assumptions/html-elements.html": [ - "9585f8fff4f585b8b4f31ea485f9d0195173772d", + "f220b1d79989287aef4aa450ea6978a7f23890c7", "testharness" ], "infrastructure/assumptions/initial-color-ref.html": [ @@ -591845,10 +592727,6 @@ "a91279f3455bdaf63412e9487192502da1e51baf", "testharness" ], - "infrastructure/metadata/infrastructure/assumptions/html-elements.html.ini": [ - "0f536ac59a959769966d56c5a546f9f2c2557e97", - "support" - ], "infrastructure/metadata/infrastructure/browsers/firefox/__dir__.ini": [ "29d2053e55e60d4e8a15def3a96a3501db03ec54", "support" @@ -592066,7 +592944,7 @@ "support" ], "interfaces/DOM-Parsing.idl": [ - "4324fb1908608583b898ae01ad44d9f8e1da89ac", + "61b8e622931ffee1b779e798e4a381959457ef45", "support" ], "interfaces/FileAPI.idl": [ @@ -592134,13 +593012,17 @@ "support" ], "interfaces/cookie-store.idl": [ - "bb4c385873deafd746f186058b111193c8aebf01", + "427e33a156cad6978e1c9c5ef5a9f906aa67a4c4", "support" ], "interfaces/cors-rfc1918.idl": [ "d7f133c8dd6e1656f82c077d9795714827b9c869", "support" ], + "interfaces/credential-management.idl": [ + "29a0bcde9ddd6629c7bf05757cea45c831fe9a6b", + "support" + ], "interfaces/css-animations.idl": [ "520ed1f6d245c75551aed3f74f988026edf3ff59", "support" @@ -592241,6 +593123,10 @@ "fe86c7370a537be87884d1b9da1f7b7630c6af41", "support" ], + "interfaces/image-capture.idl": [ + "9060a5d260bb68509a1709abf5c3ed59027293ce", + "support" + ], "interfaces/input-events.idl": [ "99bcfa971e6b2628ab8ba174b772d56b23dee38b", "support" @@ -592269,10 +593155,6 @@ "501b9ce0b557e52c122a2bb7f3be1a3e360da512", "support" ], - "interfaces/mediacapture-image.idl": [ - "22f1cdf8c2c07e72570786750f50168d0a5ba782", - "support" - ], "interfaces/mediacapture-main.idl": [ "a2a5e12acdc863828532e28574ed4904f0b0b2b8", "support" @@ -592421,6 +593303,10 @@ "21b54128664c5962c29fd708ebba3d8d90987f26", "support" ], + "interfaces/webappsec-subresource-integrity.idl": [ + "059b8faf32b557e4303a8c119ab46fe58ca85102", + "support" + ], "interfaces/webaudio.idl": [ "a2adb319de88d1d33080a837972caefa5c5c1946", "support" @@ -592725,6 +593611,10 @@ "545a86cb977d49303debac90d00339f1348f7f76", "support" ], + "lifecycle/META.yml": [ + "c99bd5330e9e8c1620ce3e97b9a0d7a307ee285d", + "support" + ], "lifecycle/freeze.html": [ "79f45af08ff1cfe5c29d318fe6a32d281e990960", "testharness" @@ -593926,7 +594816,7 @@ "support" ], "mediacapture-image/idlharness.html": [ - "69441fcf969ff3bd014ac6109c1f8b1a18a8ec54", + "963b96c7cffd42051fa9586ddd9105dac71819a7", "testharness" ], "mediacapture-record/BlobEvent-constructor.html": [ @@ -602770,11 +603660,11 @@ "testharness" ], "payment-request/PaymentMethodChangeEvent/methodDetails-attribute.https.html": [ - "be817481f663888d8ee58f40906caf0744746d04", + "82bd1a4f366b664fb19d38e9e58507fedba6e6ef", "testharness" ], "payment-request/PaymentMethodChangeEvent/methodName-attribute.https.html": [ - "891494d8f44efe3f741e809bd6e7ac7e07ec786e", + "f21447dfe6f5fdf03166517ec406e98948f442ea", "testharness" ], "payment-request/PaymentRequestUpdateEvent/constructor.http.html": [ @@ -602946,7 +603836,7 @@ "testharness" ], "payment-request/payment-response/complete-method-manual.https.html": [ - "3a3e57155d5267e515f7d1711e99fb6a7d170eb7", + "366751b4fed2b18c08ce4daa7f77e4d557af5039", "manual" ], "payment-request/payment-response/helpers.js": [ @@ -603102,7 +603992,7 @@ "support" ], "permissions/interfaces.any.js": [ - "2b16f91ae23a516d2c58299b81e0b3895cba117b", + "255271bea21cf7c43e6b99296bd93ef210d36c49", "testharness" ], "picture-in-picture/META.yml": [ @@ -604045,10 +604935,22 @@ "a9fd790c46562057d00b9a042f548d28259042d0", "testharness" ], - "quirks/hashless-hex-color.html": [ - "161c0bfaabbfb59c426e855b9dcfa746ea9e8f95", + "quirks/hashless-hex-color/limited-quirks.html": [ + "4e4e6074a7669550604c749f3a9b8ebcbcc02785", + "testharness" + ], + "quirks/hashless-hex-color/no-quirks.html": [ + "eb5b9ca4db25184918c811c63db7ab1deb7ec643", + "testharness" + ], + "quirks/hashless-hex-color/quirks.html": [ + "9011c6a7246a5db05ce1f431d42e99ff4e53baf4", "testharness" ], + "quirks/hashless-hex-color/support/common.js": [ + "d3b9c9c0f81547e7bff3d277593b4034e015d1b1", + "support" + ], "quirks/historical/list-item-bullet-size-ref.html": [ "2579fff5cb55faf66c71dfed695f05db8774d98d", "support" @@ -604062,9 +604964,13 @@ "testharness" ], "quirks/percentage-height-calculation.html": [ - "de9964d89f79db9a85df6bf65b5bc039aa244380", + "a81a06f7183fbc033e793b03e811e4669e15cb24", "testharness" ], + "quirks/support/test-ref-iframe.js": [ + "aa4182c108b7aa802b91d3e573a28c1920c58576", + "support" + ], "quirks/supports.html": [ "cac590a930dab33ba0ab7981c31b868861931493", "testharness" @@ -604077,10 +604983,22 @@ "b7a8466a3842237ddf9446bd3ab49de043001526", "testharness" ], - "quirks/unitless-length.html": [ - "578d2aed4afa7cd6739610d353aebc591d832418", + "quirks/unitless-length/limited-quirks.html": [ + "5d34a17086a2f3abb58b0e3e3f0599bc39f8486e", + "testharness" + ], + "quirks/unitless-length/no-quirks.html": [ + "3871b7abd2c53bbf264759db7e1e4be873f8f4bd", "testharness" ], + "quirks/unitless-length/quirks.html": [ + "cf342d1743ca615601e6891fc502d4785afb8647", + "testharness" + ], + "quirks/unitless-length/support/common.js": [ + "ab9f15bb0b89b188fcbfa866cfe040cc0b15b31e", + "support" + ], "referrer-policy/META.yml": [ "f4454894fc36bdc73ea3fde9d4b97efb5c999b2f", "support" @@ -604122,7 +605040,7 @@ "testharness" ], "referrer-policy/generic/common.js": [ - "583f61d9d6f30742f8144ded8ea31035a07034a3", + "99a7fec378d204fd0fafc4bb845acd7c54a2613f", "support" ], "referrer-policy/generic/iframe-inheritance.html": [ @@ -614378,7 +615296,7 @@ "testharness" ], "service-workers/service-worker/referrer-policy-header.https.html": [ - "eef44dace34ca278172d59a609ab4193c3c5af28", + "c44985a9be68e83af6b9c4521310bfaeec88aea8", "testharness" ], "service-workers/service-worker/register-closed-window.https.html": [ @@ -615222,7 +616140,7 @@ "support" ], "service-workers/service-worker/resources/performance-timeline-worker.js": [ - "fc275abc58d82c338ff369ba62994bd3d5609a67", + "c4c32d5b7ca352a3f18548928570a8a7339fa687", "support" ], "service-workers/service-worker/resources/postmessage-blob-url.js": [ @@ -615910,7 +616828,7 @@ "testharness" ], "shadow-dom/Document-prototype-currentScript.html": [ - "c19ae5aa7d8ee63a50514fedd66231e48c31297e", + "dfaf976147656d81e23341d6e6fd9c74d4ca88cb", "testharness" ], "shadow-dom/Document-prototype-importNode.html": [ @@ -617805,6 +618723,10 @@ "40773896fa85b0ac6545d3064f7e594e4e9b4339", "support" ], + "subresource-integrity/idlharness.window.js": [ + "c4d81b58ea18d76c95cc84e43ca5145dbc06f0a3", + "testharness" + ], "subresource-integrity/matching-digest.js": [ "c28fd94f8c51bd90da2464338e91281304818e0a", "support" @@ -622722,7 +623644,7 @@ "testharness" ], "web-animations/animation-model/animation-types/property-list.js": [ - "9416f470f1ac1d320bb4d46461938e85946439e2", + "5a818163c3ddcb6e0901b4f0086d555e9d440e27", "support" ], "web-animations/animation-model/animation-types/property-types.js": [ @@ -623189,6 +624111,10 @@ "d1b1f1fdeb695b9fe72857aa9fca1320b6c36ee1", "support" ], + "webaudio/resources/audiobuffersource-testing.js": [ + "9cce2e47d6fa8e9e28ca55f35d35a48d1745c067", + "support" + ], "webaudio/resources/audionodeoptions.js": [ "d7712311bddd23e171e7e1f024aec0a565b08a13", "support" @@ -623202,7 +624128,7 @@ "support" ], "webaudio/resources/audit.js": [ - "1e7c1c4169bc54bd2046ff5b3392f846c6b7b40f", + "eb55fd24237ac7ea4a69c109202e27d6ccd82f80", "support" ], "webaudio/resources/biquad-filters.js": [ @@ -623237,6 +624163,10 @@ "4508f0205419865b6166340ce6d4f955f914b6b1", "support" ], + "webaudio/resources/note-grain-on-testing.js": [ + "e843543633018830e25884d5f89a8446b77d9066", + "support" + ], "webaudio/resources/panner-formulas.js": [ "872d9aa271558ee3e7aa293c8e3e44fd525461c0", "support" @@ -623321,16 +624251,72 @@ "da39a3ee5e6b4b0d3255bfef95601890afd80709", "support" ], + "webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-basic.html": [ + "79d7953fd8bf9fe307d071ee32f8a41851ae7462", + "testharness" + ], + "webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-channels.html": [ + "07642a64398f3b18017608cde7f90cacb277cc9a", + "testharness" + ], + "webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-ended.html": [ + "7e7c6e9458cb02883c1d53877875ba9723a1fe2d", + "testharness" + ], + "webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-grain.html": [ + "3eda7864e8749d3a2fcf84b9fb13be9ac43765f0", + "testharness" + ], + "webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-multi-channels-expected.wav": [ + "52b39bb00bcc72be9a0e41ceef17210b1cd0be43", + "support" + ], + "webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-multi-channels.html": [ + "9f8f807e8753c2942d31645bc797219482453fb3", + "testharness" + ], + "webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-one-sample-loop.html": [ + "ff8217615accf70197c350f3bead193acacec1c2", + "testharness" + ], + "webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-playbackrate-zero.html": [ + "27bf6a32d45e85dab0ef1001b0c49236559d3022", + "testharness" + ], + "webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-start.html": [ + "ff1a7586221fea1bf47595bdae834350a790bb2d", + "testharness" + ], + "webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiosource-onended.html": [ + "d3350fa17ae71bca0daf02c7ad26e221a4511f3a", + "testharness" + ], + "webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiosource-time-limits.html": [ + "d22ac86e59241f9b3e58aae954bb57079bc35955", + "testharness" + ], "webaudio/the-audio-api/the-audiobuffersourcenode-interface/ctor-audiobuffersource.html": [ "ce84d25460435564021a13dc9e26384bc30e9d96", "testharness" ], + "webaudio/the-audio-api/the-audiobuffersourcenode-interface/note-grain-on-play.html": [ + "4434f6a668dccbaa76d68ecd2fe2a27c71ae1f3c", + "testharness" + ], + "webaudio/the-audio-api/the-audiobuffersourcenode-interface/note-grain-on-timing.html": [ + "e39fdae0e19cd733e2644396adf434bf7a33e323", + "testharness" + ], + "webaudio/the-audio-api/the-audiobuffersourcenode-interface/sample-accurate-scheduling.html": [ + "5b43eb5c5aa96738fc9262130fda1cc1ff002ee3", + "testharness" + ], "webaudio/the-audio-api/the-audiocontext-interface/.gitkeep": [ "da39a3ee5e6b4b0d3255bfef95601890afd80709", "support" ], "webaudio/the-audio-api/the-audiocontext-interface/audiocontext-getoutputtimestamp.html": [ - "03d32deacab7a98f3cce29562b84158e3f512668", + "d930208c2626370bab10256e1ab05e701b5a88b6", "testharness" ], "webaudio/the-audio-api/the-audiocontext-interface/audiocontext-suspend-resume.html": [ @@ -623749,6 +624735,10 @@ "8fac11e0ecfa8bfb9b49d68d0792793f44e94ad4", "testharness" ], + "webaudio/the-audio-api/the-convolvernode-interface/convolver-setBuffer-already-has-value.html": [ + "673bc5a4ff452dd83bd9209b33f40ccdadd0cf43", + "testharness" + ], "webaudio/the-audio-api/the-convolvernode-interface/convolver-setBuffer-null.html": [ "f32f5acdf031b1a2b32bc37324b105d1df7c5fdb", "testharness" @@ -624070,7 +625060,7 @@ "support" ], "webauthn/interfaces.https.any.js": [ - "3ca7a0855f38bf8d0250d0a352dd60c2ee6515fa", + "f143ec75c75322b368f808d7d36be5b7d4cb3c62", "testharness" ], "webauthn/securecontext.http.html": [ @@ -624230,15 +625220,15 @@ "wdspec" ], "webdriver/tests/element_click/interactability.py": [ - "b022a9c9c222cfdcce208a4934eb1bc52de90495", + "b365c3e0e1e8c75da3e196e98d890338f0c15883", "wdspec" ], "webdriver/tests/element_click/navigate.py": [ - "4e6186b1352b71cca8444f9752634d6b04dbaf16", + "ec45e1e3ecb091b5853298704f9944d0f4a04ae9", "wdspec" ], "webdriver/tests/element_click/scroll_into_view.py": [ - "cc9084d4782fdcad3ee82204749109c9c15e28d2", + "d18edb83617f60faf13fcb20aaf7446a30484cfd", "wdspec" ], "webdriver/tests/element_click/select.py": [ @@ -625174,7 +626164,7 @@ "testharness" ], "webrtc/RTCPeerConnection-add-track-no-deadlock.https.html": [ - "a16eaf6805528c2b73650694f26568f41be5d5ff", + "d08414aefa6b0f082a0fcb7f5d05933636c012bb", "testharness" ], "webrtc/RTCPeerConnection-addIceCandidate.html": [ @@ -625182,7 +626172,7 @@ "testharness" ], "webrtc/RTCPeerConnection-addTrack.https.html": [ - "fe5aa5d0a69b1131575624a0a8c3031674b12c85", + "eddb5aedbfea3636ae03c0920c4450afc8e70658", "testharness" ], "webrtc/RTCPeerConnection-addTransceiver.html": [ @@ -625266,7 +626256,7 @@ "testharness" ], "webrtc/RTCPeerConnection-removeTrack.https.html": [ - "0cc7f4a5694e69e9e604fda5849c0b81f360db7d", + "f4251f373bce768c30c5da9253029319921f3cf0", "testharness" ], "webrtc/RTCPeerConnection-setDescription-transceiver.html": [ @@ -625314,7 +626304,7 @@ "testharness" ], "webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html": [ - "b40a9d3d52fd846f695482671877634359e86ab3", + "b3d025c0a50886293e340afc27081212b0bead95", "testharness" ], "webrtc/RTCPeerConnection-setRemoteDescription.html": [ @@ -625374,7 +626364,7 @@ "testharness" ], "webrtc/RTCRtpReceiver-getStats.https.html": [ - "0ead17ad0504866cac28dbb9be20376b55e60a1a", + "ebbca119f90320469cb311cac234c82d230f1191", "testharness" ], "webrtc/RTCRtpReceiver-getSynchronizationSources.https.html": [ @@ -625386,7 +626376,7 @@ "testharness" ], "webrtc/RTCRtpSender-getStats.https.html": [ - "ba31d1217805d647f5efc31e6d4cadc09a8ae426", + "7cea6806ce165a32f5f28d6df215a2af07da7bd2", "testharness" ], "webrtc/RTCRtpSender-replaceTrack.html": [ @@ -625485,12 +626475,16 @@ "4a7dfd32e2129c362e153a83e4645fcc77b74247", "support" ], - "webrtc/tools/package-lock.json": [ - "731c41b82c17db5d5c3e0c636c197fcba01df344", + "webrtc/tools/codemod-peerconnection-addcleanup": [ + "745b67efbb6422f4abac66fb93783f7c5e7e1e01", + "support" + ], + "webrtc/tools/html-codemod.js": [ + "031e1282376e76e2e88f6b61f3dbd0bafb63db8f", "support" ], "webrtc/tools/package.json": [ - "67474f98b40d247ebac9cdee2146019a8e0b10b1", + "3f4c576b69a55927877e64ba022fa2ba8d191156", "support" ], "websockets/Close-1000-reason.any.js": [ @@ -630426,7 +631420,7 @@ "testharness" ], "workers/modules/dedicated-worker-import-referrer.html": [ - "309df42ef9329addc1fc59e2d3c0443454e14ad7", + "9495c1f58acf7062267fd59e682541950a659731", "testharness" ], "workers/modules/dedicated-worker-import.any.js": [ @@ -631102,15 +632096,15 @@ "support" ], "worklets/resources/referrer-checker.py": [ - "9e4cce637b7402da3b6a17d4cb33dc706f222c41", + "3de9f5d0d90e5c360edd453a539cc2b83f45d42e", "support" ], "worklets/resources/referrer-tests.js": [ - "bfa2e28259a44abf3aac6be528e51976c9ff782d", + "e072f492d6aa19866245b357a623c60ec3382c9a", "support" ], "worklets/resources/referrer-window.html": [ - "adfb1c116fedb6396f970ed8072ee73edfc755fc", + "5900ef7037397bc3eb956b97c40cfd7a3a12c95f", "support" ], "worklets/resources/service-worker-interception-tests.js": [ diff --git a/tests/wpt/metadata/cors/script-304.html.ini b/tests/wpt/metadata/cors/script-304.html.ini new file mode 100644 index 00000000000..914b364b684 --- /dev/null +++ b/tests/wpt/metadata/cors/script-304.html.ini @@ -0,0 +1,7 @@ +[script-304.html] + [Load a fresh cross-origin script] + expected: FAIL + + [Reload same cross-origin script from the memory cache after revalidation] + expected: FAIL + diff --git a/tests/wpt/metadata/css/CSS2/abspos/between-float-and-text.html.ini b/tests/wpt/metadata/css/CSS2/abspos/between-float-and-text.html.ini new file mode 100644 index 00000000000..07973158f98 --- /dev/null +++ b/tests/wpt/metadata/css/CSS2/abspos/between-float-and-text.html.ini @@ -0,0 +1,2 @@ +[between-float-and-text.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-fonts/variations/font-weight-matching.html.ini b/tests/wpt/metadata/css/css-fonts/variations/font-weight-matching.html.ini index 7c80799aece..b075270b5f3 100644 --- a/tests/wpt/metadata/css/css-fonts/variations/font-weight-matching.html.ini +++ b/tests/wpt/metadata/css/css-fonts/variations/font-weight-matching.html.ini @@ -38,3 +38,6 @@ [Test @font-face matching for weight 249] expected: FAIL + [Test @font-face matching for weight 420] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-text/white-space/trailing-space-before-br-001.html.ini b/tests/wpt/metadata/css/css-text/white-space/trailing-space-before-br-001.html.ini new file mode 100644 index 00000000000..08a2433c8d4 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/trailing-space-before-br-001.html.ini @@ -0,0 +1,4 @@ +[trailing-space-before-br-001.html] + [CSS Text: A sequence of collapsible spaces at the end of a line is removed] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-transforms/parsing/transform-box-valid.html.ini b/tests/wpt/metadata/css/css-transforms/parsing/transform-box-valid.html.ini new file mode 100644 index 00000000000..7479cbb5a20 --- /dev/null +++ b/tests/wpt/metadata/css/css-transforms/parsing/transform-box-valid.html.ini @@ -0,0 +1,16 @@ +[transform-box-valid.html] + [e.style['transform-box'\] = "content-box" should set the property value] + expected: FAIL + + [e.style['transform-box'\] = "border-box" should set the property value] + expected: FAIL + + [e.style['transform-box'\] = "fill-box" should set the property value] + expected: FAIL + + [e.style['transform-box'\] = "stroke-box" should set the property value] + expected: FAIL + + [e.style['transform-box'\] = "view-box" should set the property value] + expected: FAIL + 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 deleted file mode 100644 index 26435e28b09..00000000000 --- a/tests/wpt/metadata/css/css-values/vh_not_refreshing_on_chrome.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[vh_not_refreshing_on_chrome.html] - expected: FAIL diff --git a/tests/wpt/metadata/css/mediaqueries/test_media_queries.html.ini b/tests/wpt/metadata/css/mediaqueries/test_media_queries.html.ini index c226b13e8fb..f7296240e99 100644 --- a/tests/wpt/metadata/css/mediaqueries/test_media_queries.html.ini +++ b/tests/wpt/metadata/css/mediaqueries/test_media_queries.html.ini @@ -11,9 +11,6 @@ [subtest_6] expected: FAIL - [subtest_7] - expected: FAIL - [subtest_8] expected: FAIL @@ -23,18 +20,9 @@ [subtest_10] expected: FAIL - [subtest_11] - expected: FAIL - [subtest_12] expected: FAIL - [subtest_13] - expected: FAIL - - [subtest_14] - expected: FAIL - [subtest_15] expected: FAIL @@ -854,3 +842,1026 @@ [subtest_385] expected: FAIL + [subtest_2] + expected: FAIL + + [subtest_79] + expected: FAIL + + [subtest_82] + expected: FAIL + + [subtest_84] + expected: FAIL + + [subtest_85] + expected: FAIL + + [subtest_86] + expected: FAIL + + [subtest_89] + expected: FAIL + + [subtest_90] + expected: FAIL + + [subtest_92] + expected: FAIL + + [subtest_95] + expected: FAIL + + [subtest_97] + expected: FAIL + + [subtest_98] + expected: FAIL + + [subtest_99] + expected: FAIL + + [subtest_102] + expected: FAIL + + [subtest_103] + expected: FAIL + + [subtest_105] + expected: FAIL + + [subtest_108] + expected: FAIL + + [subtest_110] + expected: FAIL + + [subtest_111] + expected: FAIL + + [subtest_112] + expected: FAIL + + [subtest_115] + expected: FAIL + + [subtest_116] + expected: FAIL + + [subtest_118] + expected: FAIL + + [subtest_121] + expected: FAIL + + [subtest_123] + expected: FAIL + + [subtest_124] + expected: FAIL + + [subtest_125] + expected: FAIL + + [subtest_128] + expected: FAIL + + [subtest_129] + expected: FAIL + + [subtest_131] + expected: FAIL + + [subtest_135] + expected: FAIL + + [subtest_136] + expected: FAIL + + [subtest_138] + expected: FAIL + + [subtest_139] + expected: FAIL + + [subtest_140] + expected: FAIL + + [subtest_150] + expected: FAIL + + [subtest_151] + expected: FAIL + + [subtest_153] + expected: FAIL + + [subtest_154] + expected: FAIL + + [subtest_156] + expected: FAIL + + [subtest_157] + expected: FAIL + + [subtest_158] + expected: FAIL + + [subtest_163] + expected: FAIL + + [subtest_164] + expected: FAIL + + [subtest_165] + expected: FAIL + + [subtest_170] + expected: FAIL + + [subtest_171] + expected: FAIL + + [subtest_172] + expected: FAIL + + [subtest_173] + expected: FAIL + + [subtest_177] + expected: FAIL + + [subtest_180] + expected: FAIL + + [subtest_181] + expected: FAIL + + [subtest_183] + expected: FAIL + + [subtest_184] + expected: FAIL + + [subtest_187] + expected: FAIL + + [subtest_188] + expected: FAIL + + [subtest_189] + expected: FAIL + + [subtest_191] + expected: FAIL + + [subtest_193] + expected: FAIL + + [subtest_195] + expected: FAIL + + [subtest_196] + expected: FAIL + + [subtest_197] + expected: FAIL + + [subtest_199] + expected: FAIL + + [subtest_231] + expected: FAIL + + [subtest_234] + expected: FAIL + + [subtest_236] + expected: FAIL + + [subtest_237] + expected: FAIL + + [subtest_243] + expected: FAIL + + [subtest_245] + expected: FAIL + + [subtest_265] + expected: FAIL + + [subtest_267] + expected: FAIL + + [subtest_269] + expected: FAIL + + [subtest_270] + expected: FAIL + + [subtest_271] + expected: FAIL + + [subtest_314] + expected: FAIL + + [subtest_315] + expected: FAIL + + [subtest_316] + expected: FAIL + + [subtest_319] + expected: FAIL + + [subtest_321] + expected: FAIL + + [subtest_323] + expected: FAIL + + [subtest_324] + expected: FAIL + + [subtest_326] + expected: FAIL + + [subtest_337] + expected: FAIL + + [subtest_338] + expected: FAIL + + [subtest_339] + expected: FAIL + + [subtest_350] + expected: FAIL + + [subtest_354] + expected: FAIL + + [subtest_359] + expected: FAIL + + [subtest_361] + expected: FAIL + + [subtest_364] + expected: FAIL + + [subtest_366] + expected: FAIL + + [subtest_367] + expected: FAIL + + [subtest_368] + expected: FAIL + + [subtest_369] + expected: FAIL + + [subtest_370] + expected: FAIL + + [subtest_372] + expected: FAIL + + [subtest_373] + expected: FAIL + + [subtest_376] + expected: FAIL + + [subtest_377] + expected: FAIL + + [subtest_380] + expected: FAIL + + [subtest_381] + expected: FAIL + + [subtest_386] + expected: FAIL + + [subtest_389] + expected: FAIL + + [subtest_390] + expected: FAIL + + [subtest_391] + expected: FAIL + + [subtest_392] + expected: FAIL + + [subtest_394] + expected: FAIL + + [subtest_398] + expected: FAIL + + [subtest_399] + expected: FAIL + + [subtest_402] + expected: FAIL + + [subtest_405] + expected: FAIL + + [subtest_406] + expected: FAIL + + [subtest_409] + expected: FAIL + + [subtest_410] + expected: FAIL + + [subtest_413] + expected: FAIL + + [subtest_414] + expected: FAIL + + [subtest_417] + expected: FAIL + + [subtest_418] + expected: FAIL + + [subtest_419] + expected: FAIL + + [subtest_420] + expected: FAIL + + [subtest_422] + expected: FAIL + + [subtest_426] + expected: FAIL + + [subtest_427] + expected: FAIL + + [subtest_430] + expected: FAIL + + [subtest_433] + expected: FAIL + + [subtest_434] + expected: FAIL + + [subtest_437] + expected: FAIL + + [subtest_438] + expected: FAIL + + [subtest_441] + expected: FAIL + + [subtest_442] + expected: FAIL + + [subtest_445] + expected: FAIL + + [subtest_446] + expected: FAIL + + [subtest_447] + expected: FAIL + + [subtest_448] + expected: FAIL + + [subtest_450] + expected: FAIL + + [subtest_454] + expected: FAIL + + [subtest_455] + expected: FAIL + + [subtest_458] + expected: FAIL + + [subtest_461] + expected: FAIL + + [subtest_462] + expected: FAIL + + [subtest_465] + expected: FAIL + + [subtest_466] + expected: FAIL + + [subtest_469] + expected: FAIL + + [subtest_470] + expected: FAIL + + [subtest_473] + expected: FAIL + + [subtest_474] + expected: FAIL + + [subtest_475] + expected: FAIL + + [subtest_476] + expected: FAIL + + [subtest_478] + expected: FAIL + + [subtest_482] + expected: FAIL + + [subtest_483] + expected: FAIL + + [subtest_486] + expected: FAIL + + [subtest_489] + expected: FAIL + + [subtest_490] + expected: FAIL + + [subtest_493] + expected: FAIL + + [subtest_494] + expected: FAIL + + [subtest_497] + expected: FAIL + + [subtest_498] + expected: FAIL + + [subtest_500] + expected: FAIL + + [subtest_501] + expected: FAIL + + [subtest_502] + expected: FAIL + + [subtest_505] + expected: FAIL + + [subtest_509] + expected: FAIL + + [subtest_510] + expected: FAIL + + [subtest_511] + expected: FAIL + + [subtest_512] + expected: FAIL + + [subtest_513] + expected: FAIL + + [subtest_514] + expected: FAIL + + [subtest_515] + expected: FAIL + + [subtest_516] + expected: FAIL + + [subtest_517] + expected: FAIL + + [subtest_520] + expected: FAIL + + [subtest_523] + expected: FAIL + + [subtest_527] + expected: FAIL + + [subtest_528] + expected: FAIL + + [subtest_529] + expected: FAIL + + [subtest_530] + expected: FAIL + + [subtest_534] + expected: FAIL + + [subtest_535] + expected: FAIL + + [subtest_536] + expected: FAIL + + [subtest_537] + expected: FAIL + + [subtest_542] + expected: FAIL + + [subtest_543] + expected: FAIL + + [subtest_544] + expected: FAIL + + [subtest_546] + expected: FAIL + + [subtest_547] + expected: FAIL + + [subtest_550] + expected: FAIL + + [subtest_553] + expected: FAIL + + [subtest_554] + expected: FAIL + + [subtest_558] + expected: FAIL + + [subtest_560] + expected: FAIL + + [subtest_562] + expected: FAIL + + [subtest_566] + expected: FAIL + + [subtest_568] + expected: FAIL + + [subtest_569] + expected: FAIL + + [subtest_570] + expected: FAIL + + [subtest_571] + expected: FAIL + + [subtest_572] + expected: FAIL + + [subtest_573] + expected: FAIL + + [subtest_574] + expected: FAIL + + [subtest_575] + expected: FAIL + + [subtest_576] + expected: FAIL + + [subtest_577] + expected: FAIL + + [subtest_578] + expected: FAIL + + [subtest_579] + expected: FAIL + + [subtest_580] + expected: FAIL + + [subtest_581] + expected: FAIL + + [subtest_582] + expected: FAIL + + [subtest_583] + expected: FAIL + + [subtest_584] + expected: FAIL + + [subtest_585] + expected: FAIL + + [subtest_586] + expected: FAIL + + [subtest_587] + expected: FAIL + + [subtest_588] + expected: FAIL + + [subtest_589] + expected: FAIL + + [subtest_590] + expected: FAIL + + [subtest_591] + expected: FAIL + + [subtest_592] + expected: FAIL + + [subtest_593] + expected: FAIL + + [subtest_594] + expected: FAIL + + [subtest_595] + expected: FAIL + + [subtest_596] + expected: FAIL + + [subtest_597] + expected: FAIL + + [subtest_598] + expected: FAIL + + [subtest_600] + expected: FAIL + + [subtest_601] + expected: FAIL + + [subtest_603] + expected: FAIL + + [subtest_606] + expected: FAIL + + [subtest_607] + expected: FAIL + + [subtest_608] + expected: FAIL + + [subtest_609] + expected: FAIL + + [subtest_610] + expected: FAIL + + [subtest_612] + expected: FAIL + + [subtest_614] + expected: FAIL + + [subtest_615] + expected: FAIL + + [subtest_616] + expected: FAIL + + [subtest_617] + expected: FAIL + + [subtest_618] + expected: FAIL + + [subtest_619] + expected: FAIL + + [subtest_620] + expected: FAIL + + [subtest_621] + expected: FAIL + + [subtest_622] + expected: FAIL + + [subtest_623] + expected: FAIL + + [subtest_624] + expected: FAIL + + [subtest_625] + expected: FAIL + + [subtest_626] + expected: FAIL + + [subtest_627] + expected: FAIL + + [subtest_628] + expected: FAIL + + [subtest_629] + expected: FAIL + + [subtest_630] + expected: FAIL + + [subtest_631] + expected: FAIL + + [subtest_632] + expected: FAIL + + [subtest_634] + expected: FAIL + + [subtest_636] + expected: FAIL + + [subtest_640] + expected: FAIL + + [subtest_641] + expected: FAIL + + [subtest_642] + expected: FAIL + + [subtest_643] + expected: FAIL + + [subtest_644] + expected: FAIL + + [subtest_645] + expected: FAIL + + [subtest_646] + expected: FAIL + + [subtest_647] + expected: FAIL + + [subtest_648] + expected: FAIL + + [subtest_649] + expected: FAIL + + [subtest_650] + expected: FAIL + + [subtest_651] + expected: FAIL + + [subtest_652] + expected: FAIL + + [subtest_653] + expected: FAIL + + [subtest_654] + expected: FAIL + + [subtest_655] + expected: FAIL + + [subtest_656] + expected: FAIL + + [subtest_657] + expected: FAIL + + [subtest_658] + expected: FAIL + + [subtest_659] + expected: FAIL + + [subtest_660] + expected: FAIL + + [subtest_661] + expected: FAIL + + [subtest_662] + expected: FAIL + + [subtest_663] + expected: FAIL + + [subtest_664] + expected: FAIL + + [subtest_665] + expected: FAIL + + [subtest_666] + expected: FAIL + + [subtest_667] + expected: FAIL + + [subtest_668] + expected: FAIL + + [subtest_669] + expected: FAIL + + [subtest_670] + expected: FAIL + + [subtest_671] + expected: FAIL + + [subtest_672] + expected: FAIL + + [subtest_673] + expected: FAIL + + [subtest_674] + expected: FAIL + + [subtest_675] + expected: FAIL + + [subtest_676] + expected: FAIL + + [subtest_677] + expected: FAIL + + [subtest_678] + expected: FAIL + + [subtest_679] + expected: FAIL + + [subtest_680] + expected: FAIL + + [subtest_681] + expected: FAIL + + [subtest_685] + expected: FAIL + + [subtest_686] + expected: FAIL + + [subtest_688] + expected: FAIL + + [subtest_690] + expected: FAIL + + [subtest_693] + expected: FAIL + + [subtest_695] + expected: FAIL + + [subtest_696] + expected: FAIL + + [subtest_697] + expected: FAIL + + [subtest_698] + expected: FAIL + + [subtest_699] + expected: FAIL + + [subtest_700] + expected: FAIL + + [subtest_701] + expected: FAIL + + [subtest_702] + expected: FAIL + + [subtest_703] + expected: FAIL + + [subtest_704] + expected: FAIL + + [subtest_708] + expected: FAIL + + [subtest_709] + expected: FAIL + + [subtest_710] + expected: FAIL + + [subtest_711] + expected: FAIL + + [subtest_712] + expected: FAIL + + [subtest_713] + expected: FAIL + + [subtest_714] + expected: FAIL + + [subtest_715] + expected: FAIL + + [subtest_716] + expected: FAIL + + [subtest_717] + expected: FAIL + + [subtest_719] + expected: FAIL + + [subtest_720] + expected: FAIL + + [subtest_721] + expected: FAIL + + [subtest_723] + expected: FAIL + + [subtest_724] + expected: FAIL + + [subtest_725] + expected: FAIL + + [subtest_726] + expected: FAIL + + [subtest_728] + expected: FAIL + + [subtest_730] + expected: FAIL + + [subtest_731] + expected: FAIL + + [subtest_733] + expected: FAIL + + [subtest_739] + expected: FAIL + + [subtest_742] + expected: FAIL + + [subtest_743] + expected: FAIL + + [subtest_746] + expected: FAIL + + [subtest_747] + expected: FAIL + + [subtest_750] + expected: FAIL + + [subtest_751] + expected: FAIL + + [subtest_752] + expected: FAIL + + [subtest_753] + expected: FAIL + diff --git a/tests/wpt/metadata/dom/nodes/attributes.html.ini b/tests/wpt/metadata/dom/nodes/attributes.html.ini index bd75d0af9bd..c04bd404470 100644 --- a/tests/wpt/metadata/dom/nodes/attributes.html.ini +++ b/tests/wpt/metadata/dom/nodes/attributes.html.ini @@ -3,3 +3,6 @@ [When qualifiedName does not match the QName production, an INVALID_CHARACTER_ERR exception is to be thrown.] expected: FAIL + [Toggling element with inline style should make inline style disappear] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/api/request/request-keepalive-quota.html.ini b/tests/wpt/metadata/fetch/api/request/request-keepalive-quota.html.ini index e4d7c3be226..2319416bd2b 100644 --- a/tests/wpt/metadata/fetch/api/request/request-keepalive-quota.html.ini +++ b/tests/wpt/metadata/fetch/api/request/request-keepalive-quota.html.ini @@ -9,3 +9,20 @@ [A Keep-Alive fetch() should return only its allocated Quota upon promise resolution.] expected: FAIL + +[request-keepalive-quota.html?include=slow-3] + [A Keep-Alive fetch() should not be allowed if the Quota is used up.] + expected: FAIL + + +[request-keepalive-quota.html?include=slow-1] + +[request-keepalive-quota.html?include=slow-2] + [A Keep-Alive fetch() should return only its allocated Quota upon promise resolution.] + expected: FAIL + + +[request-keepalive-quota.html?include=fast] + [A Keep-Alive fetch() with a body over the Quota Limit should reject.] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch-in-service-worker.html.ini b/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch-in-service-worker.html.ini new file mode 100644 index 00000000000..58cf496b960 --- /dev/null +++ b/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch-in-service-worker.html.ini @@ -0,0 +1,4 @@ +[fetch-in-service-worker.html] + [Cross-Origin-Resource-Policy in Service Worker] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch.any.js.ini b/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch.any.js.ini new file mode 100644 index 00000000000..e04b8c545dd --- /dev/null +++ b/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch.any.js.ini @@ -0,0 +1,9 @@ +[fetch.any.html] + [fetch] + expected: FAIL + + +[fetch.any.worker.html] + [fetch] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch.html.ini b/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch.html.ini deleted file mode 100644 index 74b60b89b01..00000000000 --- a/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch.html.ini +++ /dev/null @@ -1,7 +0,0 @@ -[fetch.html] - [Untitled] - expected: FAIL - - [fetch] - expected: FAIL - diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-abort/javascript-url-abort-return-value-undefined.tentative.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-abort/javascript-url-abort-return-value-undefined.tentative.html.ini index 78879bad5f1..5b38c37b086 100644 --- a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-abort/javascript-url-abort-return-value-undefined.tentative.html.ini +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-abort/javascript-url-abort-return-value-undefined.tentative.html.ini @@ -1,5 +1,4 @@ [javascript-url-abort-return-value-undefined.tentative.html] - expected: TIMEOUT [Not aborting fetch for javascript:undefined navigation] - expected: TIMEOUT + expected: FAIL diff --git a/tests/wpt/metadata/quirks/unitless-length.html.ini b/tests/wpt/metadata/quirks/unitless-length.html.ini deleted file mode 100644 index 132f45e8141..00000000000 --- a/tests/wpt/metadata/quirks/unitless-length.html.ini +++ /dev/null @@ -1,1412 +0,0 @@ -[unitless-length.html] - type: testharness - [bottom: 1 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: 1 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: 1 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: 1 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: 1 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: 1 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: +1 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: +1 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: +1 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: +1 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: +1 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: +1 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: -1 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: -1 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: -1 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: -1 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: -1 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: -1 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: 1.5 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: 1.5 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: 1.5 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: 1.5 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: 1.5 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: 1.5 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: +1.5 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: +1.5 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: +1.5 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: +1.5 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: +1.5 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: +1.5 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: -1.5 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: -1.5 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: -1.5 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: -1.5 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: -1.5 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: -1.5 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: \\31 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: \\31 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: \\31 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: \\31 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: \\31 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: \\31 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: +\\31 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: +\\31 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: +\\31 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: +\\31 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: +\\31 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: +\\31 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: -\\31 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: -\\31 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: -\\31 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: -\\31 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: -\\31 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: -\\31 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: \\31 .5 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: \\31 .5 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: \\31 .5 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: \\31 .5 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: \\31 .5 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: \\31 .5 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: +\\31 .5 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: +\\31 .5 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: +\\31 .5 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: +\\31 .5 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: +\\31 .5 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: +\\31 .5 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: -\\31 .5 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: -\\31 .5 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: -\\31 .5 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: -\\31 .5 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: -\\31 .5 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: -\\31 .5 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: 1\\31 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: 1\\31 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: 1\\31 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: 1\\31 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: 1\\31 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: 1\\31 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: +1\\31 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: +1\\31 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: +1\\31 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: +1\\31 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: +1\\31 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: +1\\31 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: -1\\31 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: -1\\31 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: -1\\31 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: -1\\31 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: -1\\31 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: -1\\31 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: 1\\31 .5 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: 1\\31 .5 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: 1\\31 .5 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: 1\\31 .5 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: 1\\31 .5 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: 1\\31 .5 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: +1\\31 .5 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: +1\\31 .5 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: +1\\31 .5 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: +1\\31 .5 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: +1\\31 .5 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: +1\\31 .5 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: -1\\31 .5 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: -1\\31 .5 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: -1\\31 .5 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: -1\\31 .5 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: -1\\31 .5 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: -1\\31 .5 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: a (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: a (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: a (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: a (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: a (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: a (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: A (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: A (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: A (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: A (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: A (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: A (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: 1a (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: 1a (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: 1a (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: 1a (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: 1a (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: 1a (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: +1a (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: +1a (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: +1a (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: +1a (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: +1a (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: +1a (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: -1a (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: -1a (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: -1a (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: -1a (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: -1a (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: -1a (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: +1A (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: +1A (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: +1A (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: +1A (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: +1A (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: +1A (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: -1A (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: -1A (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: -1A (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: -1A (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: -1A (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: -1A (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: +a (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: +a (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: +a (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: +a (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: +a (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: +a (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: -a (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: -a (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: -a (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: -a (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: -a (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: -a (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: +A (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: +A (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: +A (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: +A (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: +A (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: +A (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: -A (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: -A (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: -A (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: -A (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: -A (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: -A (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: @a (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: @a (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: @a (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: @a (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: @a (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: @a (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: @1 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: @1 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: @1 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: @1 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: @1 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: @1 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: @1a (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: @1a (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: @1a (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: @1a (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: @1a (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: @1a (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: "a" (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: "a" (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: "a" (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: "a" (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: "a" (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: "a" (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: "1" (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: "1" (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: "1" (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: "1" (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: "1" (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: "1" (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: "1a" (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: "1a" (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: "1a" (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: "1a" (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: "1a" (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: "1a" (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: url(1) (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: url(1) (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: url(1) (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: url(1) (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: url(1) (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: url(1) (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: url('1') (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: url('1') (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: url('1') (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: url('1') (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: url('1') (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: url('1') (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: #1 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: #1 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: #1 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: #1 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: #1 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: #1 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: #01 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: #01 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: #01 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: #01 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: #01 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: #01 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: #001 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: #001 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: #001 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: #001 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: #001 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: #001 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: #0001 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: #0001 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: #0001 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: #0001 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: #0001 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: #0001 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: #00001 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: #00001 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: #00001 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: #00001 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: #00001 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: #00001 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: #000001 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: #000001 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: #000001 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: #000001 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: #000001 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: #000001 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: +/**/1 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: +/**/1 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: +/**/1 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: +/**/1 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: +/**/1 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: +/**/1 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: -/**/1 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: -/**/1 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: -/**/1 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: -/**/1 (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: -/**/1 (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: -/**/1 (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: calc(1) (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: calc(1) (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: calc(1) (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: calc(1) (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: calc(1) (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: calc(1) (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: calc(2 * 2px) (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: calc(2 * 2px) (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [bottom: calc(2 * 2px) (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: calc(2 * 2px) (quirks)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: calc(2 * 2px) (almost standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - - [top: calc(2 * 2px) (standards)] - expected: - if os == "mac": FAIL - if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL - diff --git a/tests/wpt/metadata/subresource-integrity/idlharness.window.js.ini b/tests/wpt/metadata/subresource-integrity/idlharness.window.js.ini new file mode 100644 index 00000000000..e663f693ac3 --- /dev/null +++ b/tests/wpt/metadata/subresource-integrity/idlharness.window.js.ini @@ -0,0 +1,4 @@ +[idlharness.window.html] + [idlharness] + expected: FAIL + diff --git a/tests/wpt/mozilla/meta/css/border_radius_elliptical_a.html.ini b/tests/wpt/mozilla/meta/css/border_radius_elliptical_a.html.ini deleted file mode 100644 index ba813a41144..00000000000 --- a/tests/wpt/mozilla/meta/css/border_radius_elliptical_a.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[border_radius_elliptical_a.html] - expected: FAIL diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieListItem_attributes.tentative.https.window.js b/tests/wpt/web-platform-tests/cookie-store/cookieListItem_attributes.tentative.https.window.js new file mode 100644 index 00000000000..8093ec40bff --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/cookieListItem_attributes.tentative.https.window.js @@ -0,0 +1,235 @@ +'use strict'; + +// Workaround because add_cleanup doesn't support async functions yet. +// See https://github.com/web-platform-tests/wpt/issues/6075 +async function async_cleanup(cleanup_function) { + try { + await cleanup_function(); + } catch (e) { + // Errors in cleanup functions shouldn't result in test failures. + } +} + +const kCurrentHostname = (new URL(self.location.href)).hostname; + +const kOneDay = 24 * 60 * 60 * 1000; +const kTenYears = 10 * 365 * kOneDay; +const kTenYearsFromNow = Date.now() + kTenYears; + +const kCookieListItemKeys = + ['domain', 'expires', 'name', 'path', 'sameSite', 'secure', 'value'].sort(); + +promise_test(async testCase => { + await cookieStore.delete('cookie-name'); + + await cookieStore.set('cookie-name', 'cookie-value'); + + const cookie = await cookieStore.get('cookie-name'); + assert_equals(cookie.name, 'cookie-name'); + assert_equals(cookie.value, 'cookie-value'); + assert_equals(cookie.domain, null); + assert_equals(cookie.path, '/'); + assert_equals(cookie.expires, null); + assert_equals(cookie.secure, true); + assert_equals(cookie.sameSite, 'strict'); + assert_array_equals(Object.keys(cookie).sort(), kCookieListItemKeys); + + await async_cleanup(() => cookieStore.delete('cookie-name')); +}, 'CookieListItem - cookieStore.set defaults with positional name and value'); + +promise_test(async testCase => { + await cookieStore.delete('cookie-name'); + + await cookieStore.set({ name: 'cookie-name', value: 'cookie-value' }); + const cookie = await cookieStore.get('cookie-name'); + assert_equals(cookie.name, 'cookie-name'); + assert_equals(cookie.value, 'cookie-value'); + assert_equals(cookie.domain, null); + assert_equals(cookie.path, '/'); + assert_equals(cookie.expires, null); + assert_equals(cookie.secure, true); + assert_equals(cookie.sameSite, 'strict'); + assert_array_equals(Object.keys(cookie).sort(), kCookieListItemKeys); + + await async_cleanup(() => cookieStore.delete('cookie-name')); +}, 'CookieListItem - cookieStore.set defaults with name and value in options'); + +promise_test(async testCase => { + await cookieStore.delete('cookie-name'); + + await cookieStore.set('cookie-name', 'cookie-value', + { expires: kTenYearsFromNow }); + const cookie = await cookieStore.get('cookie-name'); + assert_equals(cookie.name, 'cookie-name'); + assert_equals(cookie.value, 'cookie-value'); + assert_equals(cookie.domain, null); + assert_equals(cookie.path, '/'); + assert_approx_equals(cookie.expires, kTenYearsFromNow, kOneDay); + assert_equals(cookie.secure, true); + assert_equals(cookie.sameSite, 'strict'); + assert_array_equals(Object.keys(cookie).sort(), kCookieListItemKeys); + + await async_cleanup(() => cookieStore.delete('cookie-name')); +}, 'CookieListItem - cookieStore.set with expires set to a timestamp 10 ' + + 'years in the future'); + +promise_test(async testCase => { + await cookieStore.delete('cookie-name'); + + await cookieStore.set({ name: 'cookie-name', value: 'cookie-value', + expires: kTenYearsFromNow }); + const cookie = await cookieStore.get('cookie-name'); + assert_equals(cookie.name, 'cookie-name'); + assert_equals(cookie.value, 'cookie-value'); + assert_equals(cookie.domain, null); + assert_equals(cookie.path, '/'); + assert_approx_equals(cookie.expires, kTenYearsFromNow, kOneDay); + assert_equals(cookie.secure, true); + assert_equals(cookie.sameSite, 'strict'); + assert_array_equals(Object.keys(cookie).sort(), kCookieListItemKeys); + + await async_cleanup(() => cookieStore.delete('cookie-name')); +}, 'CookieListItem - cookieStore.set with name and value in options and ' + + 'expires set to a future timestamp'); + +promise_test(async testCase => { + await cookieStore.delete('cookie-name'); + + await cookieStore.set('cookie-name', 'cookie-value', + { expires: new Date(kTenYearsFromNow) }); + const cookie = await cookieStore.get('cookie-name'); + assert_equals(cookie.name, 'cookie-name'); + assert_equals(cookie.value, 'cookie-value'); + assert_equals(cookie.domain, null); + assert_equals(cookie.path, '/'); + assert_approx_equals(cookie.expires, kTenYearsFromNow, kOneDay); + assert_equals(cookie.secure, true); + + await async_cleanup(() => cookieStore.delete('cookie-name')); +}, 'CookieListItem - cookieStore.set with expires set to a Date 10 ' + + 'years in the future'); + +promise_test(async testCase => { + await cookieStore.delete('cookie-name'); + + await cookieStore.set({ name: 'cookie-name', value: 'cookie-value', + expires: new Date(kTenYearsFromNow) }); + const cookie = await cookieStore.get('cookie-name'); + assert_equals(cookie.name, 'cookie-name'); + assert_equals(cookie.value, 'cookie-value'); + assert_equals(cookie.domain, null); + assert_equals(cookie.path, '/'); + assert_approx_equals(cookie.expires, kTenYearsFromNow, kOneDay); + assert_equals(cookie.secure, true); + assert_equals(cookie.sameSite, 'strict'); + assert_array_equals(Object.keys(cookie).sort(), kCookieListItemKeys); + + await async_cleanup(() => cookieStore.delete('cookie-name')); +}, 'CookieListItem - cookieStore.set with name and value in options and ' + + 'expires set to a future Date'); + +promise_test(async testCase => { + await cookieStore.delete('cookie-name', { domain: kCurrentHostname }); + + await cookieStore.set('cookie-name', 'cookie-value', + { domain: kCurrentHostname }); + const cookie = await cookieStore.get('cookie-name'); + assert_equals(cookie.name, 'cookie-name'); + assert_equals(cookie.value, 'cookie-value'); + assert_equals(cookie.domain, kCurrentHostname); + assert_equals(cookie.path, '/'); + assert_equals(cookie.expires, null); + assert_equals(cookie.secure, true); + assert_equals(cookie.sameSite, 'strict'); + assert_array_equals(Object.keys(cookie).sort(), kCookieListItemKeys); + + await async_cleanup(async () => { + await cookieStore.delete('cookie-name', { domain: kCurrentHostname }); + }); +}, 'CookieListItem - cookieStore.set with domain set to the current hostname'); + +promise_test(async testCase => { + const currentUrl = new URL(self.location.href); + const currentPath = currentUrl.pathname; + const currentDirectory = + currentPath.substr(0, currentPath.lastIndexOf('/') + 1); + await cookieStore.delete('cookie-name', { path: currentDirectory }); + + await cookieStore.set('cookie-name', 'cookie-value', + { path: currentDirectory }); + const cookie = await cookieStore.get('cookie-name'); + assert_equals(cookie.name, 'cookie-name'); + assert_equals(cookie.value, 'cookie-value'); + assert_equals(cookie.domain, null); + assert_equals(cookie.path, currentDirectory); + assert_equals(cookie.expires, null); + assert_equals(cookie.secure, true); + assert_equals(cookie.sameSite, 'strict'); + assert_array_equals(Object.keys(cookie).sort(), kCookieListItemKeys); + + await async_cleanup(async () => { + await cookieStore.delete('cookie-name', { path: currentDirectory }); + }); +}, 'CookieListItem - cookieStore.set with path set to the current directory'); + +promise_test(async testCase => { + await cookieStore.delete('cookie-name', { secure: false }); + + await cookieStore.set('cookie-name', 'cookie-value', { secure: false }); + const cookie = await cookieStore.get('cookie-name'); + assert_equals(cookie.name, 'cookie-name'); + assert_equals(cookie.value, 'cookie-value'); + assert_equals(cookie.domain, null); + assert_equals(cookie.path, '/'); + assert_equals(cookie.expires, null); + assert_equals(cookie.secure, false); + assert_equals(cookie.sameSite, 'strict'); + assert_array_equals(Object.keys(cookie).sort(), kCookieListItemKeys); + + await async_cleanup(async () => { + await cookieStore.delete('cookie-name', { secure: false }); + }); +}, 'CookieListItem - cookieStore.set with secure set to false'); + +['strict', 'lax', 'unrestricted'].forEach(sameSiteValue => { + promise_test(async testCase => { + await cookieStore.delete('cookie-name', { sameSite: sameSiteValue }); + + await cookieStore.set({ + name: 'cookie-name', value: 'cookie-value', sameSite: sameSiteValue }); + const cookie = await cookieStore.get('cookie-name'); + assert_equals(cookie.name, 'cookie-name'); + assert_equals(cookie.value, 'cookie-value'); + assert_equals(cookie.domain, null); + assert_equals(cookie.path, '/'); + assert_equals(cookie.expires, null); + assert_equals(cookie.secure, true); + assert_equals(cookie.sameSite, sameSiteValue); + assert_array_equals(Object.keys(cookie).sort(), kCookieListItemKeys); + + await async_cleanup(async () => { + await cookieStore.delete('cookie-name', { secure: sameSiteValue }); + }); + }, `CookieListItem - cookieStore.set with sameSite set to ${sameSiteValue}`); + + promise_test(async testCase => { + await cookieStore.delete('cookie-name', { sameSite: sameSiteValue }); + + await cookieStore.set('cookie-name', 'cookie-value', + { sameSite: sameSiteValue }); + const cookie = await cookieStore.get('cookie-name'); + assert_equals(cookie.name, 'cookie-name'); + assert_equals(cookie.value, 'cookie-value'); + assert_equals(cookie.domain, null); + assert_equals(cookie.path, '/'); + assert_equals(cookie.expires, null); + assert_equals(cookie.secure, true); + assert_equals(cookie.sameSite, sameSiteValue); + assert_array_equals(Object.keys(cookie).sort(), kCookieListItemKeys); + + await async_cleanup(async () => { + await cookieStore.delete('cookie-name', { secure: sameSiteValue }); + }); + }, 'CookieListItem - cookieStore.set with positional name and value and ' + + `sameSite set to ${sameSiteValue}`); +}); diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieListItem_attributes.tentative.window.js b/tests/wpt/web-platform-tests/cookie-store/cookieListItem_attributes.tentative.window.js deleted file mode 100644 index 4b4b211b44d..00000000000 --- a/tests/wpt/web-platform-tests/cookie-store/cookieListItem_attributes.tentative.window.js +++ /dev/null @@ -1,121 +0,0 @@ -'use strict'; - -// Workaround because add_cleanup doesn't support async functions yet. -// See https://github.com/web-platform-tests/wpt/issues/6075 -async function async_cleanup(cleanup_function) { - try { - await cleanup_function(); - } catch (e) { - // Errors in cleanup functions shouldn't result in test failures. - } -} - -const kCurrentHostname = (new URL(self.location.href)).hostname; -const kIsSecureTransport = (new URL(self.location.href)).protocol === 'https:'; - -const kOneDay = 24 * 60 * 60 * 1000; -const kTenYears = 10 * 365 * kOneDay; -const kTenYearsFromNow = Date.now() + kTenYears; - -promise_test(async testCase => { - await cookieStore.delete('cookie-name'); - - await cookieStore.set('cookie-name', 'cookie-value'); - - const cookie = await cookieStore.get('cookie-name'); - assert_equals(cookie.name, 'cookie-name'); - assert_equals(cookie.value, 'cookie-value'); - assert_equals(cookie.domain, null); - assert_equals(cookie.path, '/'); - assert_equals(cookie.expires, null); - assert_equals(cookie.secure, kIsSecureTransport); - - await async_cleanup(() => cookieStore.delete('cookie-name')); -}, 'cookieStore.set defaults with positional name and value'); - -promise_test(async testCase => { - await cookieStore.delete('cookie-name'); - - await cookieStore.set({ name: 'cookie-name', value: 'cookie-value' }); - const cookie = await cookieStore.get('cookie-name'); - assert_equals(cookie.name, 'cookie-name'); - assert_equals(cookie.value, 'cookie-value'); - assert_equals(cookie.domain, null); - assert_equals(cookie.path, '/'); - assert_equals(cookie.expires, null); - assert_equals(cookie.secure, kIsSecureTransport); - - await async_cleanup(() => cookieStore.delete('cookie-name')); -}, 'cookieStore.set defaults with name and value in options'); - -promise_test(async testCase => { - await cookieStore.delete('cookie-name'); - - await cookieStore.set('cookie-name', 'cookie-value', - { expires: kTenYearsFromNow }); - const cookie = await cookieStore.get('cookie-name'); - assert_equals(cookie.name, 'cookie-name'); - assert_equals(cookie.value, 'cookie-value'); - assert_equals(cookie.domain, null); - assert_equals(cookie.path, '/'); - assert_approx_equals(cookie.expires, kTenYearsFromNow, kOneDay); - assert_equals(cookie.secure, kIsSecureTransport); - - await async_cleanup(() => cookieStore.delete('cookie-name')); -}, 'cookieStore.set with expires set to 10 years in the future'); - -promise_test(async testCase => { - await cookieStore.delete('cookie-name'); - - await cookieStore.set({ name: 'cookie-name', value: 'cookie-value', - expires: kTenYearsFromNow }); - const cookie = await cookieStore.get('cookie-name'); - assert_equals(cookie.name, 'cookie-name'); - assert_equals(cookie.value, 'cookie-value'); - assert_equals(cookie.domain, null); - assert_equals(cookie.path, '/'); - assert_approx_equals(cookie.expires, kTenYearsFromNow, kOneDay); - assert_equals(cookie.secure, kIsSecureTransport); - - await async_cleanup(() => cookieStore.delete('cookie-name')); -}, 'cookieStore.set with name and value in options and expires in the future'); - -promise_test(async testCase => { - await cookieStore.delete('cookie-name', { domain: kCurrentHostname }); - - await cookieStore.set('cookie-name', 'cookie-value', - { domain: kCurrentHostname }); - const cookie = await cookieStore.get('cookie-name'); - assert_equals(cookie.name, 'cookie-name'); - assert_equals(cookie.value, 'cookie-value'); - assert_equals(cookie.domain, kCurrentHostname); - assert_equals(cookie.path, '/'); - assert_equals(cookie.expires, null); - assert_equals(cookie.secure, kIsSecureTransport); - - await async_cleanup(async () => { - await cookieStore.delete('cookie-name', { domain: kCurrentHostname }); - }); -}, 'cookieStore.set with domain set to the current hostname'); - -promise_test(async testCase => { - const currentUrl = new URL(self.location.href); - const currentPath = currentUrl.pathname; - const currentDirectory = - currentPath.substr(0, currentPath.lastIndexOf('/') + 1); - await cookieStore.delete('cookie-name', { path: currentDirectory }); - - await cookieStore.set('cookie-name', 'cookie-value', - { path: currentDirectory }); - const cookie = await cookieStore.get('cookie-name'); - assert_equals(cookie.name, 'cookie-name'); - assert_equals(cookie.value, 'cookie-value'); - assert_equals(cookie.domain, null); - assert_equals(cookie.path, currentDirectory); - assert_equals(cookie.expires, null); - assert_equals(cookie.secure, kIsSecureTransport); - - await async_cleanup(async () => { - await cookieStore.delete('cookie-name', { path: currentDirectory }); - }); -}, 'cookieStore.set with path set to the current directory'); diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_delete_arguments.tentative.window.js b/tests/wpt/web-platform-tests/cookie-store/cookieStore_delete_arguments.tentative.https.window.js index 9b10204437c..9b10204437c 100644 --- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_delete_arguments.tentative.window.js +++ b/tests/wpt/web-platform-tests/cookie-store/cookieStore_delete_arguments.tentative.https.window.js diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_delete_basic.tentative.window.js b/tests/wpt/web-platform-tests/cookie-store/cookieStore_delete_basic.tentative.https.window.js index 8a3f7ed66da..8a3f7ed66da 100644 --- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_delete_basic.tentative.window.js +++ b/tests/wpt/web-platform-tests/cookie-store/cookieStore_delete_basic.tentative.https.window.js diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_event_arguments.tenative.window.js b/tests/wpt/web-platform-tests/cookie-store/cookieStore_event_arguments.tenative.https.window.js index bcb698eeb0d..bcb698eeb0d 100644 --- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_event_arguments.tenative.window.js +++ b/tests/wpt/web-platform-tests/cookie-store/cookieStore_event_arguments.tenative.https.window.js diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_event_basic.tentative.window.js b/tests/wpt/web-platform-tests/cookie-store/cookieStore_event_basic.tentative.https.window.js index 7f6d2d919d4..7f6d2d919d4 100644 --- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_event_basic.tentative.window.js +++ b/tests/wpt/web-platform-tests/cookie-store/cookieStore_event_basic.tentative.https.window.js diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_event_delete.tenative.window.js b/tests/wpt/web-platform-tests/cookie-store/cookieStore_event_delete.tenative.https.window.js index f84b2e06745..f84b2e06745 100644 --- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_event_delete.tenative.window.js +++ b/tests/wpt/web-platform-tests/cookie-store/cookieStore_event_delete.tenative.https.window.js diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_event_overwrite.tentative.window.js b/tests/wpt/web-platform-tests/cookie-store/cookieStore_event_overwrite.tentative.https.window.js index 2a5cb5d064f..2a5cb5d064f 100644 --- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_event_overwrite.tentative.window.js +++ b/tests/wpt/web-platform-tests/cookie-store/cookieStore_event_overwrite.tentative.https.window.js diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_getAll_arguments.tentative.window.js b/tests/wpt/web-platform-tests/cookie-store/cookieStore_getAll_arguments.tentative.https.window.js index 4519a1eabda..ef7611d78c8 100644 --- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_getAll_arguments.tentative.window.js +++ b/tests/wpt/web-platform-tests/cookie-store/cookieStore_getAll_arguments.tentative.https.window.js @@ -84,14 +84,14 @@ promise_test(async testCase => { await cookieStore.set('cookie-name-2', 'cookie-value-2'); const cookies = await cookieStore.getAll( - 'cookie-name-', { matchType: 'startsWith' }); + 'cookie-name-', { matchType: 'starts-with' }); assert_equals(cookies.length, 1); assert_equals(cookies[0].name, 'cookie-name-2'); assert_equals(cookies[0].value, 'cookie-value-2'); await async_cleanup(() => cookieStore.delete('cookie-name')); await async_cleanup(() => cookieStore.delete('cookie-name-2')); -}, 'cookieStore.getAll with matchType set to startsWith'); +}, 'cookieStore.getAll with matchType set to starts-with'); promise_test(async testCase => { await cookieStore.set('cookie-name', 'cookie-value'); @@ -109,11 +109,11 @@ promise_test(async testCase => { await cookieStore.set('cookie-name-2', 'cookie-value-2'); const cookies = await cookieStore.getAll( - { matchType: 'startsWith', name: 'cookie-name-' }); + { matchType: 'starts-with', name: 'cookie-name-' }); assert_equals(cookies.length, 1); assert_equals(cookies[0].name, 'cookie-name-2'); assert_equals(cookies[0].value, 'cookie-value-2'); await async_cleanup(() => cookieStore.delete('cookie-name')); await async_cleanup(() => cookieStore.delete('cookie-name-2')); -}, 'cookieStore.getAll with matchType set to startsWith and name in options'); +}, 'cookieStore.getAll with matchType set to starts-with and name in options'); diff --git a/tests/wpt/web-platform-tests/cookie-store/document_getAll_multiple.tentative.html b/tests/wpt/web-platform-tests/cookie-store/cookieStore_getAll_multiple.tentative.https.window.js index 82fd2e6358d..78b3c56fdd3 100644 --- a/tests/wpt/web-platform-tests/cookie-store/document_getAll_multiple.tentative.html +++ b/tests/wpt/web-platform-tests/cookie-store/cookieStore_getAll_multiple.tentative.https.window.js @@ -1,11 +1,3 @@ -<!doctype html> -<meta charset="utf-8"> -<title>Async Cookies: cookieStore.getAll() sees cookieStore.set() cookie</title> -<link rel="help" href="https://github.com/WICG/cookie-store"> -<link rel="author" href="pwnall@chromium.org" title="Victor Costan"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script> 'use strict'; // Workaround because add_cleanup doesn't support async functions yet. @@ -37,5 +29,3 @@ promise_test(async testCase => { await async_cleanup(() => cookieStore.delete('cookie-name-2')); await async_cleanup(() => cookieStore.delete('cookie-name-3')); }, 'cookieStore.getAll returns multiple cookies written by cookieStore.set'); - -</script> diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_getAll_set_basic.tentative.window.js b/tests/wpt/web-platform-tests/cookie-store/cookieStore_getAll_set_basic.tentative.https.window.js index aa0a4ea9a03..aa0a4ea9a03 100644 --- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_getAll_set_basic.tentative.window.js +++ b/tests/wpt/web-platform-tests/cookie-store/cookieStore_getAll_set_basic.tentative.https.window.js diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_arguments.tentative.window.js b/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_arguments.tentative.https.window.js index 66d815f3053..ddc73bec890 100644 --- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_arguments.tentative.window.js +++ b/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_arguments.tentative.https.window.js @@ -58,12 +58,12 @@ promise_test(async testCase => { await cookieStore.set('cookie-name', 'cookie-value'); const cookie = await cookieStore.get( - 'cookie-na', { matchType: 'startsWith' }); + 'cookie-na', { matchType: 'starts-with' }); assert_equals(cookie.name, 'cookie-name'); assert_equals(cookie.value, 'cookie-value'); async_cleanup(() => cookieStore.delete('cookie-name')); -}, 'cookieStore.get with matchType set to startsWith'); +}, 'cookieStore.get with matchType set to starts-with'); promise_test(async testCase => { await cookieStore.set('cookie-name', 'cookie-value'); @@ -78,9 +78,9 @@ promise_test(async testCase => { await cookieStore.set('cookie-name', 'cookie-value'); const cookie = await cookieStore.get( - { matchType: 'startsWith', name: 'cookie-na' }); + { matchType: 'starts-with', name: 'cookie-na' }); assert_equals(cookie.name, 'cookie-name'); assert_equals(cookie.value, 'cookie-value'); async_cleanup(() => cookieStore.delete('cookie-name')); -}, 'cookieStore.get with matchType set to startsWith and name in options'); +}, 'cookieStore.get with matchType set to starts-with and name in options'); diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_delete_basic.tentative.window.js b/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_delete_basic.tentative.https.window.js index fc9645d3e2e..fc9645d3e2e 100644 --- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_delete_basic.tentative.window.js +++ b/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_delete_basic.tentative.https.window.js diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_set_basic.tentative.window.js b/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_set_basic.tentative.https.window.js index 2a082de9d30..2a082de9d30 100644 --- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_set_basic.tentative.window.js +++ b/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_set_basic.tentative.https.window.js diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_has_arguments.tentative.window.js b/tests/wpt/web-platform-tests/cookie-store/cookieStore_has_arguments.tentative.window.js deleted file mode 100644 index c013b720094..00000000000 --- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_has_arguments.tentative.window.js +++ /dev/null @@ -1,92 +0,0 @@ -'use strict'; - -// Workaround because add_cleanup doesn't support async functions yet. -// See https://github.com/web-platform-tests/wpt/issues/6075 -async function async_cleanup(cleanup_function) { - try { - await cleanup_function(); - } catch (e) { - // Errors in cleanup functions shouldn't result in test failures. - } -} - -promise_test(async testCase => { - await cookieStore.set('cookie-name', 'cookie-value'); - await cookieStore.delete('cookie-name-2'); - - const has_cookie = await cookieStore.has('cookie-name'); - assert_equals(has_cookie, true); - const has_cookie2 = await cookieStore.has('cookie-name-2'); - assert_equals(has_cookie2, false); - - await async_cleanup(() => cookieStore.delete('cookie-name')); -}, 'cookieStore.has with positional name'); - -promise_test(async testCase => { - await cookieStore.set('cookie-name', 'cookie-value'); - await cookieStore.delete('cookie-name-2'); - - const has_cookie = await cookieStore.has({ name: 'cookie-name' }); - assert_equals(has_cookie, true); - const has_cookie2 = await cookieStore.has({ name: 'cookie-name-2' }); - assert_equals(has_cookie2, false); - - await async_cleanup(() => cookieStore.delete('cookie-name')); -}, 'cookieStore.has with name in options'); - -promise_test(async testCase => { - await cookieStore.set('cookie-name', 'cookie-value'); - - await promise_rejects(testCase, new TypeError(), cookieStore.has( - 'cookie-name', { name: 'cookie-name' })); - - await async_cleanup(() => cookieStore.delete('cookie-name')); -}, 'cookieStore.has with name in both positional arguments and options'); - -promise_test(async testCase => { - await cookieStore.set('cookie-name', 'cookie-value'); - - const has_cookie = await cookieStore.has( - 'cookie-na', { matchType: 'equals' }); - assert_equals(has_cookie, false); - const has_cookie2 = await cookieStore.has( - 'cookie-name', { matchType: 'equals' }); - assert_equals(has_cookie2, true); - - await async_cleanup(() => cookieStore.delete('cookie-name')); -}, 'cookieStore.has with matchType explicitly set to equals'); - -promise_test(async testCase => { - await cookieStore.set('cookie-name', 'cookie-value'); - - const has_cookie = await cookieStore.has( - 'cookie-na', { matchType: 'startsWith' }); - assert_equals(has_cookie, true); - const has_cookie2 = await cookieStore.has( - 'cookie-name-', { matchType: 'startsWith' }); - assert_equals(has_cookie2, false); - - await async_cleanup(() => cookieStore.delete('cookie-name')); -}, 'cookieStore.has with matchType set to startsWith'); - -promise_test(async testCase => { - await cookieStore.set('cookie-name', 'cookie-value'); - - await promise_rejects(testCase, new TypeError(), cookieStore.has( - 'cookie-name', { matchType: 'invalid' })); - - await async_cleanup(() => cookieStore.delete('cookie-name')); -}, 'cookieStore.has with invalid matchType'); - -promise_test(async testCase => { - await cookieStore.set('cookie-name', 'cookie-value'); - - const has_cookie = await cookieStore.has( - { matchType: 'startsWith', name: 'cookie-na' }); - assert_equals(has_cookie, true); - const has_cookie2 = await cookieStore.has( - { matchType: 'startsWith', name: 'cookie-name-' }); - assert_equals(has_cookie2, false); - - await async_cleanup(() => cookieStore.delete('cookie-name')); -}, 'cookieStore.has with matchType set to startsWith and name in options'); diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_has_basic.tentative.window.js b/tests/wpt/web-platform-tests/cookie-store/cookieStore_has_basic.tentative.window.js deleted file mode 100644 index 0bef0b18dbc..00000000000 --- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_has_basic.tentative.window.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; - -// Workaround because add_cleanup doesn't support async functions yet. -// See https://github.com/web-platform-tests/wpt/issues/6075 -async function async_cleanup(cleanup_function) { - try { - await cleanup_function(); - } catch (e) { - // Errors in cleanup functions shouldn't result in test failures. - } -} - -promise_test(async testCase => { - await cookieStore.set('cookie-name', 'cookie-value'); - assert_equals(await cookieStore.has('cookie-name'), true); - - await async_cleanup(() => cookieStore.delete('cookie-name')); -}, 'cookieStore.has returns true for cookie set by cookieStore.set()'); - -promise_test(async testCase => { - await cookieStore.delete('cookie-name'); - assert_equals(await cookieStore.has('cookie-name'), false); - - await async_cleanup(() => cookieStore.delete('cookie-name')); -}, 'cookieStore.has returns false for cookie deleted by cookieStore.delete()'); diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_in_detached_frame.tentative.html b/tests/wpt/web-platform-tests/cookie-store/cookieStore_in_detached_frame.tentative.https.html index 08a7b5b8e46..08a7b5b8e46 100644 --- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_in_detached_frame.tentative.html +++ b/tests/wpt/web-platform-tests/cookie-store/cookieStore_in_detached_frame.tentative.https.html diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_set_arguments.tentative.window.js b/tests/wpt/web-platform-tests/cookie-store/cookieStore_set_arguments.tentative.https.window.js index c35e8deb117..7f4982ed7c9 100644 --- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_set_arguments.tentative.window.js +++ b/tests/wpt/web-platform-tests/cookie-store/cookieStore_set_arguments.tentative.https.window.js @@ -67,7 +67,7 @@ promise_test(async testCase => { assert_equals(cookie.value, 'cookie-value'); await async_cleanup(() => cookieStore.delete('cookie-name')); -}, 'cookieStore.set with expires in the future'); +}, 'cookieStore.set with expires set to a future timestamp'); promise_test(async testCase => { const tenYears = 10 * 365 * 24 * 60 * 60 * 1000; @@ -80,7 +80,34 @@ promise_test(async testCase => { assert_equals(cookie, null); await async_cleanup(() => cookieStore.delete('cookie-name')); -}, 'cookieStore.set with expires in the past'); +}, 'cookieStore.set with expires set to a past timestamp'); + +promise_test(async testCase => { + const tenYears = 10 * 365 * 24 * 60 * 60 * 1000; + const tenYearsFromNow = Date.now() + tenYears; + await cookieStore.delete('cookie-name'); + + await cookieStore.set( + 'cookie-name', 'cookie-value', { expires: new Date(tenYearsFromNow) }); + const cookie = await cookieStore.get('cookie-name'); + assert_equals(cookie.name, 'cookie-name'); + assert_equals(cookie.value, 'cookie-value'); + + await async_cleanup(() => cookieStore.delete('cookie-name')); +}, 'cookieStore.set with expires set to a future Date'); + +promise_test(async testCase => { + const tenYears = 10 * 365 * 24 * 60 * 60 * 1000; + const tenYearsAgo = Date.now() - tenYears; + await cookieStore.delete('cookie-name'); + + await cookieStore.set( + 'cookie-name', 'cookie-value', { expires: new Date(tenYearsAgo) }); + const cookie = await cookieStore.get('cookie-name'); + assert_equals(cookie, null); + + await async_cleanup(() => cookieStore.delete('cookie-name')); +}, 'cookieStore.set with expires set to a past Date'); promise_test(async testCase => { const tenYears = 10 * 365 * 24 * 60 * 60 * 1000; diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_set_expires_option.tentative.window.js b/tests/wpt/web-platform-tests/cookie-store/cookieStore_set_expires_option.tentative.window.js deleted file mode 100644 index 6f3e6f4980e..00000000000 --- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_set_expires_option.tentative.window.js +++ /dev/null @@ -1,59 +0,0 @@ -'use strict'; - -// Workaround because add_cleanup doesn't support async functions yet. -// See https://github.com/web-platform-tests/wpt/issues/6075 -async function async_cleanup(cleanup_function) { - try { - await cleanup_function(); - } catch (e) { - // Errors in cleanup functions shouldn't result in test failures. - } -} - -promise_test(async testCase => { - const inTwentyFourHours = new Date(Date.now() + 24 * 60 * 60 * 1000); - - assert_equals( - await cookieStore.set( - 'cookie-name', 'cookie-value', { expires: inTwentyFourHours }), - undefined); - - const cookie = await cookieStore.get('cookie-name'); - assert_equals(cookie.name, 'cookie-name'); - assert_equals(cookie.value, 'cookie-value'); - - await async_cleanup(() => cookieStore.delete('cookie-name')); -}, 'cookieStore.set with expires option: Date object'); - -promise_test(async testCase => { - const inTwentyFourHours = Date.now() + 24 * 60 * 60 * 1000; - - assert_equals( - await cookieStore.set( - 'cookie-name', 'cookie-value', { expires: inTwentyFourHours }), - undefined); - - const cookie = await cookieStore.get('cookie-name'); - assert_equals(cookie.name, 'cookie-name'); - assert_equals(cookie.value, 'cookie-value'); - - await async_cleanup(() => cookieStore.delete('cookie-name')); -}, 'cookieStore.set with expires option: milliseconds since epoch object'); - -promise_test(async testCase => { - const year = (new Date()).getUTCFullYear() + 1; - const date = new Date('07 Jun ' + year + ' 07:07:07 UTC'); - const day = ('Sun Mon Tue Wed Thu Fri Sat'.split(' '))[date.getUTCDay()]; - const nextJune = `${day}, 07 Jun ${year} + ' 07:07:07 GMT`; - - assert_equals( - await cookieStore.set( - 'cookie-name', 'cookie-value', { expires: nextJune }), - undefined); - - const cookie = await cookieStore.get('cookie-name'); - assert_equals(cookie.name, 'cookie-name'); - assert_equals(cookie.value, 'cookie-value'); - - await async_cleanup(() => cookieStore.delete('cookie-name')); -}, 'cookieStore.set with expires option: HTTP date string'); diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_special_names.tentative.html b/tests/wpt/web-platform-tests/cookie-store/cookieStore_special_names.tentative.html deleted file mode 100644 index 9859e100521..00000000000 --- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_special_names.tentative.html +++ /dev/null @@ -1,71 +0,0 @@ -<!doctype html> -<meta charset="utf-8"> -<title>Cookie Store: cookieStore handles special cookie names correctly</title> -<link rel="help" href="https://github.com/WICG/cookie-store"> -<link rel="author" href="pwnall@chromium.org" title="Victor Costan"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script> -'use strict'; - -['__Secure-', '__Host-'].forEach(prefix => { - promise_test(async testCase => { - await promise_rejects( - testCase, new TypeError(), - cookieStore.set(`${prefix}cookie-name`, `secure-cookie-value`), - `Setting ${prefix} cookies should fail in non-secure contexts`); - - try { await cookieStore.delete(`${prefix}cookie-name`); } catch (e) {} - }, `cookieStore.set with ${prefix} name on non-secure origin`); - - promise_test(async testCase => { - await promise_rejects( - testCase, new TypeError(), - cookieStore.set( - `${prefix}cookie-name`, `secure-cookie-value`, { - expires: Date.now() - (24 * 60 * 60 * 1000) - }), - `Setting expired ${prefix} cookies should fail in non-secure contexts`); - - try { await cookieStore.delete(`${prefix}cookie-name`); } catch (e) {} - }, `cookieStore.set of expired ${prefix} cookie on non-secure origin`); - - promise_test(async testCase => { - assert_equals( - await cookieStore.get(`${prefix}cookie-name`), - null, - 'get with ${prefix} prefix should not reject'); - assert_equals( - await cookieStore.get({name: `${prefix}cookie-name`}), - null, - 'get with ${prefix} prefix name option should not reject'); - assert_equals( - await cookieStore.get({name: prefix, matchType: 'startsWith'}), - null, - 'get with ${prefix} name and startsWith options should not reject'); - }, `cookieStore.get with ${prefix} name on non-secure origin`); - - promise_test(async testCase => { - assert_array_equals( - await cookieStore.getAll(`${prefix}cookie-name`), - [], - 'getAll with ${prefix} prefix should not reject'); - assert_array_equals( - await cookieStore.getAll({name: `${prefix}cookie-name`}), - [], - 'getAll with ${prefix} prefix name option should not reject'); - assert_array_equals( - await cookieStore.getAll({name: prefix, matchType: 'startsWith'}), - [], - 'getAll with ${prefix} name and startsWith options should not reject'); - }, `cookieStore.getAll with ${prefix} name on non-secure origin`); - - promise_test(async testCase => { - await promise_rejects( - testCase, new TypeError(), - cookieStore.delete(`${prefix}cookie-name`, `host-cookie-value`), - `Deleting ${prefix} cookies should fail in non-secure contexts`); - }, `cookieStore.delete with ${prefix} name on non-secure origin`); -}); - -</script> diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_special_names.tentative.https.html b/tests/wpt/web-platform-tests/cookie-store/cookieStore_special_names.tentative.https.window.js index 0d1be12fa18..c82883a6069 100644 --- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_special_names.tentative.https.html +++ b/tests/wpt/web-platform-tests/cookie-store/cookieStore_special_names.tentative.https.window.js @@ -1,11 +1,3 @@ -<!doctype html> -<meta charset="utf-8"> -<title>Cookie Store: cookieStore handles special cookie names correctly (secure context)</title> -<link rel="help" href="https://github.com/WICG/cookie-store"> -<link rel="author" href="pwnall@chromium.org" title="Victor Costan"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script> 'use strict'; ['__Secure-', '__Host-'].forEach(prefix => { @@ -37,5 +29,3 @@ `Deleting ${prefix} cookies should not fail in secure context`); }, `cookieStore.delete with ${prefix} name on secure origin`); }); - -</script> diff --git a/tests/wpt/web-platform-tests/cookie-store/document_cookie.tentative.html b/tests/wpt/web-platform-tests/cookie-store/document_cookie.tentative.html deleted file mode 100644 index f5528d2d96c..00000000000 --- a/tests/wpt/web-platform-tests/cookie-store/document_cookie.tentative.html +++ /dev/null @@ -1,8 +0,0 @@ -<!DOCTYPE html> -<meta charset="utf-8"> -<title>Async Cookies: document.cookie</title> -<meta name="help" href="https://github.com/WICG/cookie-store/"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="resources/cookie-test-helpers.js"></script> -<script src="resources/document_cookie.js"></script> diff --git a/tests/wpt/web-platform-tests/cookie-store/http_cookie_and_set_cookie_headers.tentative.html b/tests/wpt/web-platform-tests/cookie-store/http_cookie_and_set_cookie_headers.tentative.html deleted file mode 100644 index 4370350a948..00000000000 --- a/tests/wpt/web-platform-tests/cookie-store/http_cookie_and_set_cookie_headers.tentative.html +++ /dev/null @@ -1,8 +0,0 @@ -<!DOCTYPE html> -<meta charset="utf-8"> -<title>Async Cookies: HTTP Cookie and Set-Cookie headers</title> -<meta name="help" href="https://github.com/WICG/cookie-store/"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="resources/cookie-test-helpers.js"></script> -<script src="resources/http_cookie_and_set_cookie_headers.js"></script> diff --git a/tests/wpt/web-platform-tests/cookie-store/httponly_cookies.window.js b/tests/wpt/web-platform-tests/cookie-store/httponly_cookies.https.window.js index 01239aec58f..01239aec58f 100644 --- a/tests/wpt/web-platform-tests/cookie-store/httponly_cookies.window.js +++ b/tests/wpt/web-platform-tests/cookie-store/httponly_cookies.https.window.js diff --git a/tests/wpt/web-platform-tests/cookie-store/idlharness.tentative.html b/tests/wpt/web-platform-tests/cookie-store/idlharness.tentative.https.html index b9cab343ffb..b9cab343ffb 100644 --- a/tests/wpt/web-platform-tests/cookie-store/idlharness.tentative.html +++ b/tests/wpt/web-platform-tests/cookie-store/idlharness.tentative.https.html diff --git a/tests/wpt/web-platform-tests/cookie-store/no_name_and_no_value.tentative.html b/tests/wpt/web-platform-tests/cookie-store/no_name_and_no_value.tentative.html deleted file mode 100644 index 79923b5ae8c..00000000000 --- a/tests/wpt/web-platform-tests/cookie-store/no_name_and_no_value.tentative.html +++ /dev/null @@ -1,8 +0,0 @@ -<!DOCTYPE html> -<meta charset="utf-8"> -<title>Async Cookies: Test No Name and No Value</title> -<meta name="help" href="https://github.com/WICG/cookie-store/"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="resources/cookie-test-helpers.js"></script> -<script src="resources/no_name_and_no_value.js"></script> diff --git a/tests/wpt/web-platform-tests/cookie-store/no_name_equals_in_value.tentative.html b/tests/wpt/web-platform-tests/cookie-store/no_name_equals_in_value.tentative.html deleted file mode 100644 index 17597038c08..00000000000 --- a/tests/wpt/web-platform-tests/cookie-store/no_name_equals_in_value.tentative.html +++ /dev/null @@ -1,8 +0,0 @@ -<!DOCTYPE html> -<meta charset="utf-8"> -<title>Async Cookies: Test No Name, '=' in Value</title> -<meta name="help" href="https://github.com/WICG/cookie-store/"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="resources/cookie-test-helpers.js"></script> -<script src="resources/no_name_equals_in_value.js"></script> diff --git a/tests/wpt/web-platform-tests/cookie-store/no_name_multiple_values.tentative.html b/tests/wpt/web-platform-tests/cookie-store/no_name_multiple_values.tentative.html deleted file mode 100644 index 755d1066799..00000000000 --- a/tests/wpt/web-platform-tests/cookie-store/no_name_multiple_values.tentative.html +++ /dev/null @@ -1,8 +0,0 @@ -<!DOCTYPE html> -<meta charset="utf-8"> -<title>Async Cookies: Test No Name, Multiple Values</title> -<meta name="help" href="https://github.com/WICG/cookie-store/"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="resources/cookie-test-helpers.js"></script> -<script src="resources/no_name_multiple_values.js"></script> diff --git a/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_arguments.js b/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_arguments.js index 0ffe6f8b0b0..7e19c985139 100644 --- a/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_arguments.js +++ b/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_arguments.js @@ -5,10 +5,12 @@ self.GLOBAL = { importScripts("/resources/testharness.js"); importScripts( - "cookieStore_delete_arguments.tentative.window.js", - "cookieStore_get_arguments.tentative.window.js", - "cookieStore_getAll_arguments.tentative.window.js", - "cookieStore_has_arguments.tentative.window.js", - "cookieStore_set_arguments.tentative.window.js"); + "cookieListItem_attributes.tentative.https.window.js", + "cookieStore_delete_arguments.tentative.https.window.js", + "cookieStore_get_arguments.tentative.https.window.js", + "cookieStore_getAll_arguments.tentative.https.window.js", + "cookieStore_getAll_multiple.tentative.https.window.js", + "cookieStore_set_arguments.tentative.https.window.js", + "cookieStore_special_names.tentative.https.window.js"); done(); diff --git a/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_basic.js b/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_basic.js index 0d8039f9d33..7461ef5f98d 100644 --- a/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_basic.js +++ b/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_basic.js @@ -5,9 +5,9 @@ self.GLOBAL = { importScripts("/resources/testharness.js"); importScripts( - "cookieStore_get_delete_basic.tentative.window.js", - "cookieStore_get_set_basic.tentative.window.js", - "cookieStore_getAll_set_basic.tentative.window.js", - "cookieStore_has_basic.tentative.window.js"); + "cookieStore_delete_basic.tentative.https.window.js", + "cookieStore_get_delete_basic.tentative.https.window.js", + "cookieStore_get_set_basic.tentative.https.window.js", + "cookieStore_getAll_set_basic.tentative.https.window.js"); done(); diff --git a/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions.js b/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions.js index a2affed5eac..93566cd2443 100644 --- a/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions.js +++ b/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions.js @@ -13,7 +13,7 @@ self.addEventListener('install', (event) => { { name: 'cookie-name1', matchType: 'equals', url: '/scope/path1' }]); await cookieStore.subscribeToChanges([ { }, // Test the default values for subscription properties. - { name: 'cookie-prefix', matchType: 'startsWith' }, + { name: 'cookie-prefix', matchType: 'starts-with' }, ]); })()); }); @@ -54,10 +54,10 @@ promise_test(async testCase => { assert_equals('equals', subscriptions[0].matchType); assert_equals(subscriptions[1].name, 'cookie-prefix'); - assert_equals('startsWith', subscriptions[1].matchType); + assert_equals('starts-with', subscriptions[1].matchType); assert_false('name' in subscriptions[2]); - assert_equals('startsWith', subscriptions[2].matchType); + assert_equals('starts-with', subscriptions[2].matchType); }, 'getChangeSubscriptions returns subscriptions passed to subscribeToChanges'); promise_test(async testCase => { diff --git a/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_basic.js b/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_basic.js index 2b602f4c5f0..ef4ddfbd60c 100644 --- a/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_basic.js +++ b/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_basic.js @@ -40,7 +40,7 @@ promise_test(async testCase => { promise_test(async testCase => { await kServiceWorkerActivatedPromise; - cookie_change_received_promise = new Promise((resolve) => { + const cookie_change_received_promise = new Promise((resolve) => { self.addEventListener('cookiechange', (event) => { resolve(event); }); diff --git a/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_empty.js b/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_empty.js new file mode 100644 index 00000000000..0da734d63d1 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_empty.js @@ -0,0 +1,36 @@ +self.GLOBAL = { + isWindow: function() { return false; }, + isWorker: function() { return true; }, +}; +importScripts("/resources/testharness.js"); + +self.addEventListener('install', (event) => { + event.waitUntil((async () => { + cookieStore.subscribeToChanges([]); + })()); +}); + +// Workaround because add_cleanup doesn't support async functions yet. +// See https://github.com/w3c/web-platform-tests/issues/6075 +async function async_cleanup(cleanup_function) { + try { + await cleanup_function(); + } catch (e) { + // Errors in cleanup functions shouldn't result in test failures. + } +} + +// Resolves when the service worker receives the 'activate' event. +const kServiceWorkerActivatedPromise = new Promise(resolve => { + self.addEventListener('activate', event => { resolve(); }); +}); + +promise_test(async testCase => { + await kServiceWorkerActivatedPromise; + + const subscriptions = await cookieStore.getChangeSubscriptions(); + assert_equals(subscriptions.length, 0); + +}, 'getChangeSubscriptions returns an empty array when there are no subscriptions'); + +done(); diff --git a/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_empty.tentative.https.html b/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_empty.tentative.https.html new file mode 100644 index 00000000000..38690fe3c72 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_empty.tentative.https.html @@ -0,0 +1,21 @@ +<!doctype html> +<meta charset="utf-8"> +<title>Async Cookies: ServiceWorker without cookie change subscriptions</title> +<link rel="help" href="https://github.com/WICG/cookie-store"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +'use strict'; + +(async () => { + const scope = 'scope'; + + let registration = await navigator.serviceWorker.getRegistration(scope); + if (registration) + await registration.unregister(); + registration = await navigator.serviceWorker.register( + 'serviceworker_cookieStore_subscriptions_empty.js', {scope}); + + fetch_tests_from_worker(registration.installing); +})(); +</script> diff --git a/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_mismatch.js b/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_mismatch.js new file mode 100644 index 00000000000..5e4ec4355f1 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_mismatch.js @@ -0,0 +1,53 @@ +self.GLOBAL = { + isWindow: function() { return false; }, + isWorker: function() { return true; }, +}; +importScripts("/resources/testharness.js"); + +self.addEventListener('install', (event) => { + event.waitUntil((async () => { + cookieStore.subscribeToChanges([ + { name: 'cookie-name', matchType: 'equals', url: '/scope/path' }]); + })()); +}); + +// Workaround because add_cleanup doesn't support async functions yet. +// See https://github.com/w3c/web-platform-tests/issues/6075 +async function async_cleanup(cleanup_function) { + try { + await cleanup_function(); + } catch (e) { + // Errors in cleanup functions shouldn't result in test failures. + } +} + +// Resolves when the service worker receives the 'activate' event. +const kServiceWorkerActivatedPromise = new Promise(resolve => { + self.addEventListener('activate', event => { resolve(); }); +}); + +promise_test(async testCase => { + await kServiceWorkerActivatedPromise; + + const cookie_change_received_promise = new Promise((resolve) => { + self.addEventListener('cookiechange', (event) => { + resolve(event); + }); + }); + + await cookieStore.set('another-cookie-name', 'cookie-value'); + await cookieStore.set('cookie-name', 'cookie-value'); + + const event = await cookie_change_received_promise; + assert_equals(event.type, 'cookiechange'); + assert_equals(event.changed.length, 1); + assert_equals(event.changed[0].name, 'cookie-name'); + assert_equals(event.changed[0].value, 'cookie-value'); + + await async_cleanup(() => { + cookieStore.delete('another-cookie-name'); + cookieStore.delete('cookie-name'); + }); +}, 'cookiechange not dispatched for change that does not match subscription'); + +done(); diff --git a/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_mismatch.tentative.https.html b/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_mismatch.tentative.https.html new file mode 100644 index 00000000000..ea70a1efcd0 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_mismatch.tentative.https.html @@ -0,0 +1,21 @@ +<!doctype html> +<meta charset="utf-8"> +<title>Async Cookies: ServiceWorker cookiechange event filtering</title> +<link rel="help" href="https://github.com/WICG/cookie-store"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +'use strict'; + +(async () => { + const scope = 'scope'; + + let registration = await navigator.serviceWorker.getRegistration(scope); + if (registration) + await registration.unregister(); + registration = await navigator.serviceWorker.register( + 'serviceworker_cookieStore_subscriptions_mismatch.js', {scope}); + + fetch_tests_from_worker(registration.installing); +})(); +</script> diff --git a/tests/wpt/web-platform-tests/cors/resources/cache-304.py b/tests/wpt/web-platform-tests/cors/resources/cache-304.py new file mode 100644 index 00000000000..7acdfd69768 --- /dev/null +++ b/tests/wpt/web-platform-tests/cors/resources/cache-304.py @@ -0,0 +1,10 @@ +def main(request, response): + match = request.headers.get("If-None-Match", None) + if match is not None and match == "mybestscript-v1": + response.status = (304, "YEP") + return "" + response.headers.set("Access-Control-Allow-Origin", "*") + response.headers.set("Cache-Control", "must-revalidate") + response.headers.set("ETag", "mybestscript-v1") + response.headers.set("Content-Type", "text/javascript") + return "function hep() { }" diff --git a/tests/wpt/web-platform-tests/cors/script-304.html b/tests/wpt/web-platform-tests/cors/script-304.html new file mode 100644 index 00000000000..e164ca6f41b --- /dev/null +++ b/tests/wpt/web-platform-tests/cors/script-304.html @@ -0,0 +1,40 @@ +<!doctype html> +<html> + <head> + <meta charset="utf-8"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/common/get-host-info.sub.js"></script> + <script src="/common/utils.js"></script> + </head> + <body> + <div id="testDiv"></div> + <script> + +const scriptURL = get_host_info().HTTP_REMOTE_ORIGIN + "/cors/resources/cache-304.py?" + token(); + +function loadScript(test) +{ + const script = document.createElement("script"); + script.crossOrigin = "anonymous"; + script.src = scriptURL; + return new Promise((resolve, reject) => { + // Let's add a small timeout so that the script is fully loaded in memory cache before reloading it. + script.onload = test.step_timeout(resolve, 50); + script.onerror = reject; + testDiv.appendChild(script); + }); +} + +promise_test((test) => { + return loadScript(test); +}, "Load a fresh cross-origin script"); + +promise_test((test) => { + return loadScript(test); +}, "Reload same cross-origin script from the memory cache after revalidation"); + +</script> + </body> +</html> + diff --git a/tests/wpt/web-platform-tests/credential-management/idl.https.html b/tests/wpt/web-platform-tests/credential-management/idl.https.html deleted file mode 100644 index 8754b5a30b6..00000000000 --- a/tests/wpt/web-platform-tests/credential-management/idl.https.html +++ /dev/null @@ -1,103 +0,0 @@ -<!DOCTYPE html> -<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 type="text/plain" id="untested"> - dictionary CredentialData { - USVString id; - }; - - [Exposed=Window, SecureContext] - interface Credential { - readonly attribute USVString id; - readonly attribute DOMString type; - }; - - [NoInterfaceObject, SecureContext] - interface CredentialUserData { - readonly attribute USVString name; - readonly attribute USVString iconURL; - }; - - dictionary PasswordCredentialData : CredentialData { - USVString name; - USVString iconURL; - required USVString password; - }; - - typedef (PasswordCredentialData or HTMLFormElement) PasswordCredentialInit; - - typedef (FormData or URLSearchParams) CredentialBodyType; - - - dictionary FederatedCredentialInit : CredentialData { - USVString name; - USVString iconURL; - required USVString provider; - DOMString protocol; - }; - - dictionary CredentialCreationOptions { - PasswordCredentialInit? password; - FederatedCredentialInit? federated; - }; - - enum CredentialMediationRequirement { - "silent", - "optional", - "required" - }; - - dictionary CredentialRequestOptions { - boolean password = false; - FederatedCredentialRequestOptions federated; - - CredentialMediationRequirement mediation = "optional"; - }; - - dictionary FederatedCredentialRequestOptions { - sequence<USVString> providers; - sequence<DOMString> protocols; - }; - -</script> -<script type="text/plain" id="tested"> - [Exposed=Window, SecureContext] - interface CredentialsContainer { - Promise<Credential> get(optional CredentialRequestOptions options); - Promise<Credential> store(Credential credential); - Promise<Credential?> create(optional CredentialCreationOptions options); - Promise<void> preventSilentAccess(); - }; - - [Constructor(PasswordCredentialData data), - Constructor(HTMLFormElement form), - Exposed=Window, - SecureContext] - interface PasswordCredential : Credential { - readonly attribute DOMString password; - }; - PasswordCredential implements CredentialUserData; - - [Constructor(FederatedCredentialInit data), - Exposed=Window, - SecureContext] - interface FederatedCredential : Credential { - readonly attribute USVString provider; - readonly attribute DOMString? protocol; - }; - FederatedCredential implements CredentialUserData; -</script> -<script> - "use strict"; - var idl_array = new IdlArray(); - idl_array.add_untested_idls(document.querySelector('#untested').textContent); - idl_array.add_idls(document.querySelector('#tested').textContent); - idl_array.add_objects({ - CredentialsContainer: ['navigator.credentials'], - PasswordCredential: ['new PasswordCredential({ id: "id", password: "pencil", iconURL: "https://example.com/", name: "name" })'], - FederatedCredential: ['new FederatedCredential({ id: "id", provider: "https://example.com", iconURL: "https://example.com/", name: "name" })'] - }); - idl_array.test(); -</script> diff --git a/tests/wpt/web-platform-tests/credential-management/idlharness.https.window.js b/tests/wpt/web-platform-tests/credential-management/idlharness.https.window.js new file mode 100644 index 00000000000..15508b872ed --- /dev/null +++ b/tests/wpt/web-platform-tests/credential-management/idlharness.https.window.js @@ -0,0 +1,35 @@ +// META: script=/resources/WebIDLParser.js +// META: script=/resources/idlharness.js + +// https://w3c.github.io/webappsec-credential-management/ + +'use strict'; + +promise_test(async () => { + const idl = await fetch('/interfaces/credential-management.idl').then(r => r.text()); + const html = await fetch('/interfaces/html.idl').then(r => r.text()); + + var idl_array = new IdlArray(); + idl_array.add_idls(idl); + idl_array.add_dependency_idls(html); + idl_array.add_objects({ + CredentialsContainer: ['navigator.credentials'], + PasswordCredential: [ + `new PasswordCredential({ + id: "id", + password: "pencil", + iconURL: "https://example.com/", + name: "name" + })` + ], + FederatedCredential: [ + `new FederatedCredential({ + id: "id", + provider: "https://example.com", + iconURL: "https://example.com/", + name: "name" + })` + ] + }); + idl_array.test(); +}) diff --git a/tests/wpt/web-platform-tests/css/CSS2/abspos/between-float-and-text.html b/tests/wpt/web-platform-tests/css/CSS2/abspos/between-float-and-text.html new file mode 100644 index 00000000000..b4c933e8d80 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/CSS2/abspos/between-float-and-text.html @@ -0,0 +1,11 @@ +<!DOCTYPE html> +<title>Auto-positioned abspos after text, before float</title> +<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org"> +<link rel="help" href="https://www.w3.org/TR/CSS22/visudet.html#abs-non-replaced-width" title="10.3.7 Absolutely positioned, non-replaced elements"> +<link rel="match" href="../../reference/ref-filled-green-200px-square.html"> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div style="line-height:20px; margin-top:-20px;"> + + <div style="position:absolute; width:200px; height:200px; background:green;"></div> + <div style="float:left; margin-top:20px; width:200px; height:200px; background:red;"></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/clear-invalid.html b/tests/wpt/web-platform-tests/css/css-box/parsing/clear-invalid.html new file mode 100644 index 00000000000..6c2980cc23e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-box/parsing/clear-invalid.html @@ -0,0 +1,19 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS basic box model: parsing clear with invalid values</title> +<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-clear"> +<meta name="assert" content="clear supports only the grammar 'none | left | right | both'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_invalid_value("clear", "auto"); +test_invalid_value("clear", "left right"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/clear-valid.html b/tests/wpt/web-platform-tests/css/css-box/parsing/clear-valid.html new file mode 100644 index 00000000000..59b68f1923b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-box/parsing/clear-valid.html @@ -0,0 +1,21 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS basic box model: parsing clear with valid values</title> +<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-clear"> +<meta name="assert" content="clear supports the full grammar 'none | left | right | both'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_valid_value("clear", "none"); +test_valid_value("clear", "left"); +test_valid_value("clear", "right"); +test_valid_value("clear", "both"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/float-invalid.html b/tests/wpt/web-platform-tests/css/css-box/parsing/float-invalid.html new file mode 100644 index 00000000000..f20183f0527 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-box/parsing/float-invalid.html @@ -0,0 +1,20 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS basic box model: parsing float with invalid values</title> +<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-float"> +<meta name="assert" content="float supports only the grammar 'left | right | top | bottom | start | end | none | <page-floats>'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_invalid_value("float", "auto"); +test_invalid_value("float", "right bottom"); +test_invalid_value("float", "top, left"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/float-valid.html b/tests/wpt/web-platform-tests/css/css-box/parsing/float-valid.html new file mode 100644 index 00000000000..be91602a4a2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-box/parsing/float-valid.html @@ -0,0 +1,29 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS basic box model: parsing float with valid values</title> +<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-float"> +<meta name="assert" content="float supports the full grammar 'left | right | top | bottom | start | end | none | <page-floats>'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_valid_value("float", "left"); +test_valid_value("float", "right"); +test_valid_value("float", "none"); + +// The following are not yet supported by browsers: +// test_valid_value("float", "top"); +// test_valid_value("float", "bottom"); +// test_valid_value("float", "start"); // not permitted in https://drafts.csswg.org/css-page-floats/#float-property +// test_valid_value("float", "end"); // not permitted in https://drafts.csswg.org/css-page-floats/#float-property + +// Page floats are now defined in +// https://drafts.csswg.org/css-page-floats/#float-property +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/height-invalid.html b/tests/wpt/web-platform-tests/css/css-box/parsing/height-invalid.html new file mode 100644 index 00000000000..120cce6fcfa --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-box/parsing/height-invalid.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS basic box model: parsing height with invalid values</title> +<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-height"> +<meta name="assert" content="height supports only the grammar '[<length> | <percentage>] | available | min-content | max-content | fit-content | complex | auto'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_invalid_value("height", "none"); + +test_invalid_value("height", "min-content available"); +test_invalid_value("height", "max-content 10px"); +test_invalid_value("height", "20% available"); + +test_invalid_value("height", "-10px"); +test_invalid_value("height", "-20%"); +test_invalid_value("height", "60"); +test_invalid_value("height", "10px 20%"); + +test_invalid_value("height", "10px border-box"); +test_invalid_value("height", "content-box 20%"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/height-valid.html b/tests/wpt/web-platform-tests/css/css-box/parsing/height-valid.html new file mode 100644 index 00000000000..9b3df67c11d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-box/parsing/height-valid.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS basic box model: parsing height with valid values</title> +<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-height"> +<meta name="assert" content="height supports the full grammar '[<length> | <percentage>] | available | min-content | max-content | fit-content | complex | auto'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_valid_value("height", "auto"); + +test_valid_value("height", "10px"); +test_valid_value("height", "20%"); +test_valid_value("height", "calc(2em + 3ex)"); + +test_valid_value("height", "min-content"); +test_valid_value("height", "max-content"); +test_valid_value("height", "fit-content"); + +// The following are not yet supported by browsers: +// test_valid_value("height", "available"); +// test_valid_value("height", "complex"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/margin-invalid.html b/tests/wpt/web-platform-tests/css/css-box/parsing/margin-invalid.html new file mode 100644 index 00000000000..d28c4823b6c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-box/parsing/margin-invalid.html @@ -0,0 +1,25 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS basic box model: parsing margin with invalid values</title> +<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-margin"> +<meta name="assert" content="margin supports only the grammar '[ <length> | <percentage> | auto]{1,4}'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_invalid_value("margin", "available"); +test_invalid_value("margin", "10px border-box"); +test_invalid_value("margin", "1% 2% 3% 4% 5%"); + +test_invalid_value("margin-top", "calc(2em + 3ex) auto"); +test_invalid_value("margin-right", "auto calc(2em + 3ex) 20%"); +test_invalid_value("margin-bottom", "10px 20% calc(2em + 3ex) auto"); +test_invalid_value("margin-bottom-left", "none"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/margin-valid.html b/tests/wpt/web-platform-tests/css/css-box/parsing/margin-valid.html new file mode 100644 index 00000000000..9986222e263 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-box/parsing/margin-valid.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS basic box model: parsing margin with valid values</title> +<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-margin"> +<meta name="assert" content="margin supports the full grammar '[ <length> | <percentage> | auto]{1,4}'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_valid_value("margin", "10px"); +test_valid_value("margin", "20%"); +test_valid_value("margin", "calc(2em + 3ex)"); +test_valid_value("margin", "auto"); +test_valid_value("margin", "-10px"); +test_valid_value("margin", "-20%"); + +test_valid_value("margin", "calc(2em + 3ex) auto"); +test_valid_value("margin", "auto calc(2em + 3ex) 20%"); +test_valid_value("margin", "10px 20% calc(2em + 3ex) auto"); + +test_valid_value("margin-top", "10px"); +test_valid_value("margin-right", "20%"); +test_valid_value("margin-bottom", "calc(2em + 3ex)"); +test_valid_value("margin-left", "auto"); +test_valid_value("margin-top", "-10px"); +test_valid_value("margin-right", "-20%"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/max-height-invalid.html b/tests/wpt/web-platform-tests/css/css-box/parsing/max-height-invalid.html new file mode 100644 index 00000000000..9f37619f334 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-box/parsing/max-height-invalid.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS basic box model: parsing max-height with invalid values</title> +<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-max-height"> +<meta name="assert" content="max-height supports only the grammar '[ [<length> | <percentage>] && [border-box | content-box]? ] | available | min-content | max-content | fit-content | none'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_invalid_value("max-height", "complex"); +test_invalid_value("max-height", "auto"); +test_invalid_value("max-height", "none available"); +test_invalid_value("max-height", "max-content 10px"); +test_invalid_value("max-height", "20% available"); + +test_invalid_value("max-height", "-10px"); +test_invalid_value("max-height", "-20%"); +test_invalid_value("max-height", "60"); +test_invalid_value("max-height", "10px 20%"); +test_invalid_value("max-height", "content-box border-box"); +test_invalid_value("max-height", "10px border-box 20%"); +test_invalid_value("max-height", "content-box 20% border-box"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/max-height-valid.html b/tests/wpt/web-platform-tests/css/css-box/parsing/max-height-valid.html new file mode 100644 index 00000000000..846eb1da92b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-box/parsing/max-height-valid.html @@ -0,0 +1,31 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS basic box model: parsing max-height with valid values</title> +<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-max-height"> +<meta name="assert" content="max-height supports the full grammar '[ [<length> | <percentage>] && [border-box | content-box]? ] | available | min-content | max-content | fit-content | none'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_valid_value("max-height", "none"); + +test_valid_value("max-height", "10px"); +test_valid_value("max-height", "20%"); +test_valid_value("max-height", "calc(2em + 3ex)"); + +test_valid_value("max-height", "min-content"); +test_valid_value("max-height", "max-content"); +test_valid_value("max-height", "fit-content"); + +// The following are not yet supported by browsers: +// test_valid_value("max-height", "available"); +// test_valid_value("max-height", "10px border-box"); +// test_valid_value("max-height", "content-box 20%", "20% content-box"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/max-width-invalid.html b/tests/wpt/web-platform-tests/css/css-box/parsing/max-width-invalid.html new file mode 100644 index 00000000000..32f51ef4529 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-box/parsing/max-width-invalid.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS basic box model: parsing max-width with invalid values</title> +<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-max-width"> +<meta name="assert" content="max-width supports only the grammar '[ [<length> | <percentage>] && [border-box | content-box]? ] | available | min-content | max-content | fit-content | none'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_invalid_value("max-width", "complex"); +test_invalid_value("max-width", "auto"); +test_invalid_value("max-width", "none available"); +test_invalid_value("max-width", "max-content 10px"); +test_invalid_value("max-width", "20% available"); + +test_invalid_value("max-width", "-10px"); +test_invalid_value("max-width", "-20%"); +test_invalid_value("max-width", "60"); +test_invalid_value("max-width", "10px 20%"); +test_invalid_value("max-width", "content-box border-box"); +test_invalid_value("max-width", "10px border-box 20%"); +test_invalid_value("max-width", "content-box 20% border-box"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/max-width-valid.html b/tests/wpt/web-platform-tests/css/css-box/parsing/max-width-valid.html new file mode 100644 index 00000000000..73e175918f8 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-box/parsing/max-width-valid.html @@ -0,0 +1,31 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS basic box model: parsing max-width with valid values</title> +<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-max-width"> +<meta name="assert" content="max-width supports the full grammar '[ [<length> | <percentage>] && [border-box | content-box]? ] | available | min-content | max-content | fit-content | none'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_valid_value("max-width", "none"); + +test_valid_value("max-width", "10px"); +test_valid_value("max-width", "20%"); +test_valid_value("max-width", "calc(2em + 3ex)"); + +test_valid_value("max-width", "min-content"); +test_valid_value("max-width", "max-content"); +test_valid_value("max-width", "fit-content"); + +// The following are not yet supported by browsers: +// test_valid_value("max-width", "available"); +// test_valid_value("max-width", "10px border-box"); +// test_valid_value("max-width", "content-box 20%", "20% content-box"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/min-height-invalid.html b/tests/wpt/web-platform-tests/css/css-box/parsing/min-height-invalid.html new file mode 100644 index 00000000000..846d1888362 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-box/parsing/min-height-invalid.html @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS basic box model: parsing min-height with invalid values</title> +<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-min-height"> +<meta name="assert" content="min-height supports only the grammar '[ [<length> | <percentage>] && [border-box | content-box]? ] | available | min-content | max-content | fit-content'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_invalid_value("min-height", "complex"); +test_invalid_value("min-height", "none"); +test_invalid_value("min-height", "none available"); +test_invalid_value("min-height", "max-content 10px"); +test_invalid_value("min-height", "20% available"); + +test_invalid_value("min-height", "-10px"); +test_invalid_value("min-height", "-20%"); +test_invalid_value("min-height", "60"); +test_invalid_value("min-height", "10px 20%"); +test_invalid_value("min-height", "content-box border-box"); +test_invalid_value("min-height", "10px border-box 20%"); +test_invalid_value("min-height", "content-box 20% border-box"); + +// The following is not yet rejected by browsers: +test_invalid_value("min-height", "auto"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/min-height-valid.html b/tests/wpt/web-platform-tests/css/css-box/parsing/min-height-valid.html new file mode 100644 index 00000000000..728667015e0 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-box/parsing/min-height-valid.html @@ -0,0 +1,29 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS basic box model: parsing min-height with valid values</title> +<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-min-height"> +<meta name="assert" content="min-height supports the full grammar '[ [<length> | <percentage>] && [border-box | content-box]? ] | available | min-content | max-content | fit-content'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_valid_value("min-height", "10px"); +test_valid_value("min-height", "20%"); +test_valid_value("min-height", "calc(2em + 3ex)"); + +test_valid_value("min-height", "min-content"); +test_valid_value("min-height", "max-content"); +test_valid_value("min-height", "fit-content"); + +// The following are not yet supported by browsers: +// test_valid_value("min-height", "available"); +// test_valid_value("min-height", "10px border-box"); +// test_valid_value("min-height", "content-box 20%", "20% content-box"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/min-width-invalid.html b/tests/wpt/web-platform-tests/css/css-box/parsing/min-width-invalid.html new file mode 100644 index 00000000000..e6998b0001c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-box/parsing/min-width-invalid.html @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS basic box model: parsing min-width with invalid values</title> +<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-min-width"> +<meta name="assert" content="min-width supports only the grammar '[ [<length> | <percentage>] && [border-box | content-box]? ] | available | min-content | max-content | fit-content'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_invalid_value("min-width", "complex"); +test_invalid_value("min-width", "none"); +test_invalid_value("min-width", "none available"); +test_invalid_value("min-width", "max-content 10px"); +test_invalid_value("min-width", "20% available"); + +test_invalid_value("min-width", "-10px"); +test_invalid_value("min-width", "-20%"); +test_invalid_value("min-width", "60"); +test_invalid_value("min-width", "10px 20%"); +test_invalid_value("min-width", "content-box border-box"); +test_invalid_value("min-width", "10px border-box 20%"); +test_invalid_value("min-width", "content-box 20% border-box"); + +// The following is not yet rejected by browsers: +test_invalid_value("min-width", "auto"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/min-width-valid.html b/tests/wpt/web-platform-tests/css/css-box/parsing/min-width-valid.html new file mode 100644 index 00000000000..5440b8793d7 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-box/parsing/min-width-valid.html @@ -0,0 +1,29 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS basic box model: parsing min-width with valid values</title> +<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-min-width"> +<meta name="assert" content="min-width supports the full grammar '[ [<length> | <percentage>] && [border-box | content-box]? ] | available | min-content | max-content | fit-content'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_valid_value("min-width", "10px"); +test_valid_value("min-width", "20%"); +test_valid_value("min-width", "calc(2em + 3ex)"); + +test_valid_value("min-width", "min-content"); +test_valid_value("min-width", "max-content"); +test_valid_value("min-width", "fit-content"); + +// The following are not yet supported by browsers: +// test_valid_value("min-width", "available"); +// test_valid_value("min-width", "10px border-box"); +// test_valid_value("min-width", "content-box 20%", "20% content-box"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/overflow-invalid.html b/tests/wpt/web-platform-tests/css/css-box/parsing/overflow-invalid.html new file mode 100644 index 00000000000..dd97b9823f7 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-box/parsing/overflow-invalid.html @@ -0,0 +1,24 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS basic box model: parsing overflow with invalid values</title> +<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-overflow"> +<meta name="assert" content="overflow supports only the grammar '[ visible | hidden | scroll | auto | no-display | no-content ]{1,2}'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_invalid_value("overflow", "none"); +test_invalid_value("overflow", "visible hidden scroll"); +test_invalid_value("overflow", "no-display, no-content"); + +test_invalid_value("overflow-x", "none"); +test_invalid_value("overflow-y", "visible hidden"); +test_invalid_value("overflow-y", "no-display, no-content"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/overflow-valid.html b/tests/wpt/web-platform-tests/css/css-box/parsing/overflow-valid.html new file mode 100644 index 00000000000..d4411c80367 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-box/parsing/overflow-valid.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS basic box model: parsing overflow with valid values</title> +<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-overflow"> +<meta name="assert" content="overflow supports the full grammar '[ visible | hidden | scroll | auto | no-display | no-content ]{1,2}'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_valid_value("overflow", "visible"); +test_valid_value("overflow", "hidden"); +test_valid_value("overflow", "scroll"); +test_valid_value("overflow", "auto"); + +test_valid_value("overflow-x", "visible"); +test_valid_value("overflow-x", "hidden"); +test_valid_value("overflow-x", "scroll"); +test_valid_value("overflow-y", "auto"); + +// The following are not yet supported by browsers: +// test_valid_value("overflow", "no-display"); +// test_valid_value("overflow", "no-content"); +// test_valid_value("overflow", "visible hidden"); +// test_valid_value("overflow", "auto scroll"); +// test_valid_value("overflow", "no-display no-content"); +// test_valid_value("overflow-y", "no-display"); +// test_valid_value("overflow-y", "no-content"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/padding-invalid.html b/tests/wpt/web-platform-tests/css/css-box/parsing/padding-invalid.html new file mode 100644 index 00000000000..54bfc69cfe3 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-box/parsing/padding-invalid.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS basic box model: parsing padding with invalid values</title> +<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-padding"> +<meta name="assert" content="padding supports only the grammar '<length>{1,4}'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_invalid_value("padding", "auto"); +test_invalid_value("padding", "available"); +test_invalid_value("padding", "10px border-box"); +test_invalid_value("padding", "calc(2em + 3ex) auto"); +test_invalid_value("padding", "10px 20px 30px 40px 50px"); + +test_invalid_value("padding-top", "auto"); +test_invalid_value("padding-bottom", "10px 20px calc(2em + 3ex) auto"); +test_invalid_value("padding-bottom-left", "10px 20px"); + +test_invalid_value("padding-top", "-10px"); + +// The following are not yet rejected by browsers: +test_invalid_value("padding", "20%"); +test_invalid_value("padding", "10px 20% 30% 40px"); +test_invalid_value("padding-right", "20%"); +test_invalid_value("padding-right", "calc(2em + 3%)"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/padding-valid.html b/tests/wpt/web-platform-tests/css/css-box/parsing/padding-valid.html new file mode 100644 index 00000000000..f3cda52a4a2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-box/parsing/padding-valid.html @@ -0,0 +1,25 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS basic box model: parsing padding with valid values</title> +<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-padding"> +<meta name="assert" content="padding supports the full grammar '<length>{1,4}'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_valid_value("padding", "10px"); +test_valid_value("padding", "10px 20px 30px 40px"); +test_valid_value("padding", "calc(2em + 3ex)"); + +test_valid_value("padding-top", "10px"); +test_valid_value("padding-right", "20px"); +test_valid_value("padding-bottom", "30px"); +test_valid_value("padding-left", "40px"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/resources/parsing-testcommon.js b/tests/wpt/web-platform-tests/css/css-box/parsing/resources/parsing-testcommon.js new file mode 100644 index 00000000000..b075882f89a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-box/parsing/resources/parsing-testcommon.js @@ -0,0 +1,39 @@ +'use strict'; + +// serializedValue can be the expected serialization of value, +// or an array of permitted serializations, +// or omitted if value should serialize as value. +function test_valid_value(property, value, serializedValue) { + if (arguments.length < 3) + serializedValue = value; + + var stringifiedValue = JSON.stringify(value); + + test(function(){ + var div = document.createElement('div'); + div.style[property] = value; + assert_not_equals(div.style.getPropertyValue(property), "", "property should be set"); + + var div = document.createElement('div'); + div.style[property] = value; + var readValue = div.style.getPropertyValue(property); + if (serializedValue instanceof Array) + assert_in_array(readValue, serializedValue, "serialization should be sound"); + else + assert_equals(readValue, serializedValue, "serialization should be canonical"); + + div.style[property] = readValue; + assert_equals(div.style.getPropertyValue(property), readValue, "serialization should round-trip"); + + }, "e.style['" + property + "'] = " + stringifiedValue + " should set the property value"); +} + +function test_invalid_value(property, value) { + var stringifiedValue = JSON.stringify(value); + + test(function(){ + var div = document.createElement('div'); + div.style[property] = value; + assert_equals(div.style.getPropertyValue(property), ""); + }, "e.style['" + property + "'] = " + stringifiedValue + " should not set the property value"); +} diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/visibility-invalid.html b/tests/wpt/web-platform-tests/css/css-box/parsing/visibility-invalid.html new file mode 100644 index 00000000000..39050694101 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-box/parsing/visibility-invalid.html @@ -0,0 +1,19 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS basic box model: parsing visibility with invalid values</title> +<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-visibility"> +<meta name="assert" content="visibility supports only the grammar 'visible | hidden | collapse'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_invalid_value("visibility", "auto"); +test_invalid_value("visibility", "hidden collapse"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/visibility-valid.html b/tests/wpt/web-platform-tests/css/css-box/parsing/visibility-valid.html new file mode 100644 index 00000000000..fbff1f09812 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-box/parsing/visibility-valid.html @@ -0,0 +1,20 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS basic box model: parsing visibility with valid values</title> +<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-visibility"> +<meta name="assert" content="visibility supports the full grammar 'visible | hidden | collapse'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_valid_value("visibility", "visible"); +test_valid_value("visibility", "hidden"); +test_valid_value("visibility", "collapse"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/width-invalid.html b/tests/wpt/web-platform-tests/css/css-box/parsing/width-invalid.html new file mode 100644 index 00000000000..f573ba2c5f4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-box/parsing/width-invalid.html @@ -0,0 +1,31 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS basic box model: parsing width with invalid values</title> +<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-width"> +<meta name="assert" content="width supports only the grammar '[<length> | <percentage>] | available | min-content | max-content | fit-content | auto'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_invalid_value("width", "complex"); +test_invalid_value("width", "none"); + +test_invalid_value("width", "min-content available"); +test_invalid_value("width", "max-content 10px"); +test_invalid_value("width", "20% available"); + +test_invalid_value("width", "-10px"); +test_invalid_value("width", "-20%"); +test_invalid_value("width", "60"); +test_invalid_value("width", "10px 20%"); + +test_invalid_value("width", "10px border-box"); +test_invalid_value("width", "content-box 20%"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/width-valid.html b/tests/wpt/web-platform-tests/css/css-box/parsing/width-valid.html new file mode 100644 index 00000000000..7ae55ccb2d5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-box/parsing/width-valid.html @@ -0,0 +1,29 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS basic box model: parsing width with valid values</title> +<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-width"> +<meta name="assert" content="width supports the full grammar '[<length> | <percentage>] | available | min-content | max-content | fit-content | auto'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_valid_value("width", "auto"); + +test_valid_value("width", "10px"); +test_valid_value("width", "20%"); +test_valid_value("width", "calc(2em + 3ex)"); + +test_valid_value("width", "min-content"); +test_valid_value("width", "max-content"); +test_valid_value("width", "fit-content"); + +// The following is not yet supported by browsers: +// test_valid_value("width", "available"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-cascade/all-prop-initial-xml.html b/tests/wpt/web-platform-tests/css/css-cascade/all-prop-initial-xml.html new file mode 100644 index 00000000000..a04956a52d1 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-cascade/all-prop-initial-xml.html @@ -0,0 +1,34 @@ +<!doctype html> +<title>all: initial on unknown XML tree</title> +<link rel=help href=https://www.w3.org/TR/css-cascade-3/#all-shorthand> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<body> +<script> +const iframe = document.createElement("iframe"); +const setup_test = async_test("setup"); +iframe.onload = setup_test.step_func_done(function() { + const root = iframe.contentDocument.documentElement; + // we need the empty stylesheet to avoid default XSLT views of the XML + const style = iframe.contentDocument.createElementNS("http://www.w3.org/1999/xhtml", "style"); + root.appendChild(style); + const cs = iframe.contentWindow.getComputedStyle(root); + let actual_initial = Object.create(null); + for (let i = 0; i < cs.length; i++) { + let prop_name = cs[i]; + actual_initial[prop_name] = cs[prop_name]; + } + test(() => { + style.textContent = ":root { color: blue }"; + assert_equals(cs["color"], "rgb(0, 0, 255)"); + }, "stylesheet takes effect"); + style.textContent = ":root { all: initial; direction: initial; unicode-bidi: initial; } style { display: none; }"; + for (let prop_name in actual_initial) { + test(() => { + assert_equals(cs[prop_name], actual_initial[prop_name]); + }, prop_name); + } +}); +iframe.src = URL.createObjectURL(new Blob(["<foo/>"], { type: "application/xml" })); +document.body.appendChild(iframe); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-contain/contain-size-013.html b/tests/wpt/web-platform-tests/css/css-contain/contain-size-013.html index f1bbc085454..4d1cbc403bd 100644 --- a/tests/wpt/web-platform-tests/css/css-contain/contain-size-013.html +++ b/tests/wpt/web-platform-tests/css/css-contain/contain-size-013.html @@ -14,4 +14,4 @@ img { </style> <p>Test passes if there is a filled green square and <strong>no red</strong>.</p> -<img src="/css/support/60x60-red.png" /> +<img src="/css/support/60x60-red.png" alt="Image download support must be enabled" /> diff --git a/tests/wpt/web-platform-tests/css/css-contain/reference/contain-paint-007-ref.html b/tests/wpt/web-platform-tests/css/css-contain/reference/contain-paint-007-ref.html index 3048d55f11a..ae3c424f726 100644 --- a/tests/wpt/web-platform-tests/css/css-contain/reference/contain-paint-007-ref.html +++ b/tests/wpt/web-platform-tests/css/css-contain/reference/contain-paint-007-ref.html @@ -9,7 +9,11 @@ rtc { display: ruby-text-container; font-size: 1rem; } +rtc::after { + content: "PASS"; + position: absolute; +} </style> <p>This test passes if you can see the word PASS below. -<div><ruby><rtc>PASS</rtc></ruby></div> +<div><ruby><rtc></rtc></ruby></div> diff --git a/tests/wpt/web-platform-tests/css/css-env/META.yml b/tests/wpt/web-platform-tests/css/css-env/META.yml new file mode 100644 index 00000000000..51a24d0b7a3 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-env/META.yml @@ -0,0 +1,3 @@ +suggested_reviewers: + - rebeccahughes + - lilles diff --git a/tests/wpt/web-platform-tests/css/css-images/parsing/gradient-position-invalid.html b/tests/wpt/web-platform-tests/css/css-images/parsing/gradient-position-invalid.html index e53486e62d1..7a636481beb 100644 --- a/tests/wpt/web-platform-tests/css/css-images/parsing/gradient-position-invalid.html +++ b/tests/wpt/web-platform-tests/css/css-images/parsing/gradient-position-invalid.html @@ -12,6 +12,8 @@ </head> <body> <script> +test_invalid_value("background-image", "radial-gradient(at top 0px, red, blue)"); + // The following were supported in an earlier version of the spec. // https://github.com/w3c/csswg-drafts/issues/2140 // Deprecated in Blink with support to be removed in M68, around July 2018. diff --git a/tests/wpt/web-platform-tests/css/css-logical/logical-box-border-shorthands.html b/tests/wpt/web-platform-tests/css/css-logical/logical-box-border-shorthands.html new file mode 100644 index 00000000000..497d9f4867f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-logical/logical-box-border-shorthands.html @@ -0,0 +1,15 @@ +<!DOCTYPE html> +<meta charset="utf-8" /> +<title>CSS Logical Properties: Flow-Relative Border Shorthands</title> +<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com" /> +<link rel="help" href="https://drafts.csswg.org/css-logical/#border-shorthands"> +<meta name="assert" content="This test checks the interaction of the flow-relative border-* shorthand properties with the physical ones in different writing modes." /> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> + +<div id="log"></div> + +<script src="./resources/test-box-properties.js"></script> +<script> +runTests(createBoxPropertyGroup("border-*", {type: ["length", "border-style", "color"]})); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-logical/resources/test-box-properties.js b/tests/wpt/web-platform-tests/css/css-logical/resources/test-box-properties.js index a52b8fdbba1..da4774771a7 100644 --- a/tests/wpt/web-platform-tests/css/css-logical/resources/test-box-properties.js +++ b/tests/wpt/web-platform-tests/css/css-logical/resources/test-box-properties.js @@ -90,14 +90,14 @@ * }, logical: { * inlineStart: "margin-inline-start", inlineEnd: "margin-inline-end", * blockStart: "margin-block-start", blockEnd: "margin-block-end", - * }, type: "length", prerequisites: "...", property: "'margin-*'" } + * }, type: ["length"], prerequisites: "...", property: "'margin-*'" } * * @param {string} property * A string representing the property names, like "margin-*". * @param {Object} descriptor - * @param {string} descriptor.type + * @param {string|string[]} descriptor.type * Describes the kind of values accepted by the property, like "length". - * Must be a key from the `testValues` object. + * Must be a key or a collection of keys from the `testValues` object. * @param {Object={}} descriptor.prerequisites * Represents property declarations that are needed by `property` to work. * For example, border-width properties require a border style. @@ -115,7 +115,8 @@ physical[physicalSide] = isInset ? physicalSide : property.replace("*", physicalSide); prerequisites += makeDeclaration(descriptor.prerequisites, physicalSide); } - return {name, logical, physical, type: descriptor.type, prerequisites, property}; + const type = [].concat(descriptor.type); + return {name, logical, physical, type, prerequisites, property}; }; /** @@ -134,7 +135,7 @@ horizontal: `${prefix}width`, vertical: `${prefix}height`, }, - type: "length", + type: ["length"], prerequisites: makeDeclaration({display: "block"}), property: (prefix ? prefix.slice(0, -1) + " " : "") + "sizing", }; @@ -147,7 +148,9 @@ * An object returned by createBoxPropertyGroup or createSizingPropertyGroup. */ exports.runTests = function(group) { - const values = testValues[group.type]; + const values = testValues[group.type[0]].map(function(_, i) { + return group.type.map(type => testValues[type][i]).join(" "); + }); const logicals = Object.values(group.logical); const physicals = Object.values(group.physical); @@ -158,8 +161,8 @@ expected.push([logicalProp, values[i]]); } testCSSValues("logical properties in inline style", testElement.style, expected); - testElement.style.cssText = ""; }, `Test that logical ${group.property} properties are supported.`); + testElement.style.cssText = ""; for (const writingMode of writingModes) { for (const style of writingMode.styles) { diff --git a/tests/wpt/web-platform-tests/css/css-scroll-snap/overflowing-snap-areas.html b/tests/wpt/web-platform-tests/css/css-scroll-snap/overflowing-snap-areas.html new file mode 100644 index 00000000000..6d3c1865fe7 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-scroll-snap/overflowing-snap-areas.html @@ -0,0 +1,153 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.csswg.org/css-scroll-snap-1" /> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<style> +div { + position: absolute; +} +.scroller-x { + overflow: scroll; + scroll-snap-type: x mandatory; + width: 500px; + height: 500px; +} +.scroller-y { + overflow: scroll; + scroll-snap-type: y mandatory; + width: 500px; + height: 500px; +} +.space { + width: 4000px; + height: 4000px; +} +.target { + scroll-snap-align: start; +} +.large-x { + width: 3000px; + height: 400px; + background-color: yellow; +} +.large-y { + width: 400px; + height: 2000px; + background-color: green; +} +.small { + height: 200px; + width: 200px; + background-color: black; +} +</style> +<div class="scroller-x" id="one-target"> + <div id="space"></div> + <div class="large-x target" id="single" style="left: 200px;"></div> +</div> + +<div class="scroller-x" id="x"> + <div class="space"></div> + <div style="left: 200px;"> + <div class="target large-x"></div> + <div class="target small" style="left: 200px"></div> + <div class="target small" style="left: 600px"></div> + <div class="target small" style="left: 1200px"></div> + </div> +</div> + +<div class="scroller-y" id="y"> + <div class="space"></div> + <div style="top: 200px;"> + <div class="target large-y"></div> + <div class="target small" style="top: 200px"></div> + <div class="target small" style="top: 600px"></div> + <div class="target small" style="top: 1200px"></div> + </div> +</div> + +<div class="scroller-x" id="two-axes" style="scroll-snap-type: both mandatory"> + <div class="space"></div> + <div class="target large-x" style="top: 200px"></div> +</div> + +<script> +var one_target_scroller = document.getElementById("one-target"); +var scroller_x = document.getElementById("x"); +var scroller_y = document.getElementById("y"); +var two_axes_scroller = document.getElementById("two-axes"); + +test(() => { + one_target_scroller.scrollTo(10, 0); + assert_equals(one_target_scroller.scrollLeft, 200); + assert_equals(one_target_scroller.scrollTop, 0); +}, "Snaps to the snap position if the snap area doesn't cover the snapport on x."); + +test(() => { + var right_align = 3200 - one_target_scroller.clientWidth; + one_target_scroller.scrollTo(right_align, 0); + assert_equals(one_target_scroller.scrollLeft, right_align); + assert_equals(one_target_scroller.scrollTop, 0); +}, "Snaps to the snap position if the snap area covers the snapport on x on the right border."); + +// We use end alignment for this test so that we don't fall on a snap +// position when the snap area just covers the snapport on the left border. +test(() => { + document.getElementById("single").style.scrollSnapAlign = 'end'; + one_target_scroller.scrollTo(200, 0); + assert_equals(one_target_scroller.scrollLeft, 200); + assert_equals(one_target_scroller.scrollTop, 0); +}, "Snaps to the snap position if the snap area covers the snapport on x on the left border."); + +test(() => { + scroller_x.scrollTo(500, 0); + assert_equals(scroller_x.scrollLeft, 400); + assert_equals(scroller_x.scrollTop, 0); +}, "Snaps if the distance between the previous(400) and next(800) " + + "snap positions is smaller than snapport(500) on x."); + +test(() => { + scroller_y.scrollTo(0, 500); + assert_equals(scroller_y.scrollLeft, 0); + assert_equals(scroller_y.scrollTop, 400); +}, "Snaps if the distance between the previous(400) and next(800) " + + "snap positions is smaller than snapport(500) on y."); + +test(() => { + scroller_x.scrollTo(900, 0); + assert_equals(scroller_x.scrollLeft, 900); + assert_equals(scroller_x.scrollTop, 0); +}, "Snap to current scroll position which is a valid snap position, " + + "as the snap area covers snapport on x and the distance between the " + + "previous(800) and next(1400) is larger than snapport(500)."); + +test(() => { + scroller_y.scrollTo(0, 900); + assert_equals(scroller_y.scrollLeft, 0); + assert_equals(scroller_y.scrollTop, 900); +}, "Snap to current scroll position which is a valid snap position, " + + "as the snap area covers snapport on y and the distance between the " + + "previous(800) and next(1400) is larger than snapport(500)."); + +test(() => { + scroller_x.scrollTo(1500, 0); + assert_equals(scroller_x.scrollLeft, 1500); + assert_equals(scroller_x.scrollTop, 0); +}, "Snap to current scroll position which is a valid snap position, as the " + + "snap area covers snapport on x and there is no subsequent snap positions."); + +test(() => { + scroller_y.scrollTo(0, 1500); + assert_equals(scroller_y.scrollLeft, 0); + assert_equals(scroller_y.scrollTop, 1500); +}, "Snap to current scroll position which is a valid snap position, as the " + + "snap area covers snapport on y and there is no subsequent snap positions."); + +test(() => { + two_axes_scroller.scrollTo(10, 100); + assert_equals(two_axes_scroller.scrollLeft, 10); + assert_equals(two_axes_scroller.scrollTop, 200); +}, "Snap to current scroll position on x as the area is covering x axis." + + "However, we snap to the specified snap position on y as the area is not " + + "covering y axis."); +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-scroll-snap/scrollTo-scrollBy-snaps.html b/tests/wpt/web-platform-tests/css/css-scroll-snap/scrollTo-scrollBy-snaps.html index 766cf57a047..58807a6836f 100644 --- a/tests/wpt/web-platform-tests/css/css-scroll-snap/scrollTo-scrollBy-snaps.html +++ b/tests/wpt/web-platform-tests/css/css-scroll-snap/scrollTo-scrollBy-snaps.html @@ -8,41 +8,55 @@ body { overflow: scroll; scroll-snap-type: both mandatory; } +div { + position: absolute; +} .scroller { overflow: scroll; scroll-snap-type: both mandatory; } -#div-scroller { +#inner-scroller { + top: 3000px; width: 800px; height: 800px; } -.content { +.space { + left: 0px; + top: 0px; width: 2100px; height: 2100px; } .target { - width: 1000px; - height: 1000px; + width: 600px; + height: 600px; scroll-snap-align: start; - float: left; } -</style> +.left { + left: 0px; +} +.right { + left: 1000px; +} +.top { + top: 0px; +} +.bottom { + top: 1000px; +} +</style> <body class="scroller"> - <div class="content" id="content"> - <div class="target"></div> - <div class="target"></div> - <div class="target"></div> - <div class="target"></div> - </div> - - <div class="scroller" id="div-scroller"> - <div class="content"> - <div class="target"></div> - <div class="target"></div> - <div class="target"></div> - <div class="target"></div> - </div> + <div class="space"></div> + <div class="target left top"></div> + <div class="target right top"></div> + <div class="target left bottom"></div> + <div class="target right bottom"></div> + <div class="scroller" id="inner-scroller"> + <div class="space"></div> + <div class="target left top"></div> + <div class="target right top"></div> + <div class="target left bottom"></div> + <div class="target right bottom"></div> </div> </body> @@ -55,7 +69,7 @@ function format_dict(dict) { return `{${props.join(', ')}}`; } -var divScroller = document.getElementById("div-scroller"); +var divScroller = document.getElementById("inner-scroller"); var viewport = document.scrollingElement; [ [{left: 800}, 1000, 0], @@ -140,6 +154,4 @@ var viewport = document.scrollingElement; assert_equals(window.scrollY, expectedY); }, `scrollBy(${format_dict(input)}) on window lands on (${expectedX}, ${expectedY})`); }); - -document.body.removeChild(document.getElementById("content")); </script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/trailing-space-before-br-001.html b/tests/wpt/web-platform-tests/css/css-text/white-space/trailing-space-before-br-001.html new file mode 100644 index 00000000000..2ecd4d3767a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/trailing-space-before-br-001.html @@ -0,0 +1,44 @@ +<!DOCTYPE html> +<title>CSS Text: A sequence of collapsible spaces at the end of a line is removed</title> +<link rel='help' href='https://drafts.csswg.org/css-text-3/#white-space-phase-2'> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<style> +#container > div { + display: inline-block; + -font-family: Ahem; + font-size: 10px; +} +</style> +<body> +<div id=log></div> +<div id=container> + <div>1111</div> + <div>1111 </div> + <div> 1111</div> + <div> 1111 </div> + <div>1111<br></div> + <div>1111<br> </div> + <div>1111 <br></div> + <div>1111 <br> </div> +</div> +<script> +(function () { + const epsilon = 1; + let elements = Array.from(container.children); + let reference = elements[0]; + let reference_width = reference.offsetWidth; + for (let element of elements) { + test(() => { + assert_approx_equals(element.offsetWidth, reference_width, epsilon); + }, escapeSpaces(element.innerHTML)); + } +})(); + +function escapeSpaces(text) { + return text + .replace(/ /g, ' ') + .replace(/\n/g, '
') +} +</script> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-box-invalid.html b/tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-box-invalid.html new file mode 100644 index 00000000000..3af91965883 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-box-invalid.html @@ -0,0 +1,20 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Transform Module Level 1: parsing transform-box with invalid values</title> +<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-transforms/#transform-box-property"> +<meta name="assert" content="transform-box supports only the grammar 'content-box | border-box | fill-box | stroke-box | view-box'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_invalid_value("transform-box", "margin-box"); +test_invalid_value("transform-box", "padding-box"); +test_invalid_value("transform-box", "fill-box view-box"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-box-valid.html b/tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-box-valid.html new file mode 100644 index 00000000000..742750b6677 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-box-valid.html @@ -0,0 +1,22 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Transform Module Level 1: parsing transform-box with valid values</title> +<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-transforms/#transform-box-property"> +<meta name="assert" content="transform-box supports the full grammar 'content-box | border-box | fill-box | stroke-box | view-box'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_valid_value("transform-box", "content-box"); +test_valid_value("transform-box", "border-box"); +test_valid_value("transform-box", "fill-box"); +test_valid_value("transform-box", "stroke-box"); +test_valid_value("transform-box", "view-box"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-invalid.html b/tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-invalid.html new file mode 100644 index 00000000000..dc81069c9e8 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-invalid.html @@ -0,0 +1,45 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Transform Module Level 2: parsing transform with invalid values</title> +<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-transforms-2/#transform-property"> +<meta name="assert" content="transform supports only the grammar 'none | <transform-list>'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_invalid_value("transform", "none scale(2)"); +test_invalid_value("transform", "translateX(3%) none"); + +test_invalid_value("transform", "matrix(1, 2)"); + +test_invalid_value("transform", "translate(1px, 2px, 3px)"); + +test_invalid_value("transform", "translateX(-4px, 5px)"); + +test_invalid_value("transform", "translateY(4%, 5%)"); + +test_invalid_value("transform", "scale(6, 7, 8)"); + +test_invalid_value("transform", "scaleX(1, 2)"); + +test_invalid_value("transform", "scaleY(3, 4)"); + +test_invalid_value("transform", "rotate(0, 0)"); +test_invalid_value("transform", "rotate(0, 0, 0)"); +test_invalid_value("transform", "rotate(0, 0, 0, 0)"); + +test_invalid_value("transform", "skew(0, 0, 0)"); + +test_invalid_value("transform", "skewX(0, 0)"); + +test_invalid_value("transform", "skewY(0, 0)"); + +test_invalid_value("transform", "scaleX(2), scaleY(3)"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-origin-invalid.html b/tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-origin-invalid.html new file mode 100644 index 00000000000..dab56a04231 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-origin-invalid.html @@ -0,0 +1,24 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Transform Module Level 1: parsing transform-origin with invalid values</title> +<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-transforms/#transform-origin-property"> +<meta name="assert" content="transform-origin supports only the grammar from spec."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_invalid_value("transform-origin", "1px 2px 3%"); +test_invalid_value("transform-origin", "1px 2px left"); +test_invalid_value("transform-origin", "1px 2px 3px 4px"); +test_invalid_value("transform-origin", "1px left"); +test_invalid_value("transform-origin", "top 1px"); // Blink fails. +test_invalid_value("transform-origin", "right left"); +test_invalid_value("transform-origin", "top bottom"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-origin-valid.html b/tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-origin-valid.html new file mode 100644 index 00000000000..ab36024ef2b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-origin-valid.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Transform Module Level 1: parsing transform-origin with valid values</title> +<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-transforms/#transform-origin-property"> +<meta name="assert" content="transform-origin supports the full grammar from spec."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_valid_value("transform-origin", "left", ["left center 0px", "left 50% 0px", "left center"]); +test_valid_value("transform-origin", "center", ["center center 0px", "center 50% 0px", "center center"]); +test_valid_value("transform-origin", "right", ["right center 0px", "right 50% 0px", "right center"]); +test_valid_value("transform-origin", "top", ["center top 0px", "50% top 0px", "center top"]); +test_valid_value("transform-origin", "bottom", ["center bottom 0px", "50% bottom 0px", "center bottom"]); +test_valid_value("transform-origin", "-1px", ["-1px center 0px", "-1px 50% 0px", "-1px center"]); +test_valid_value("transform-origin", "calc(2em + 3ex)", ["calc(2em + 3ex) center 0px", "calc(2em + 3ex) 50% 0px", "calc(2em + 3ex) center"]); +test_valid_value("transform-origin", "-4%", ["-4% center 0px", "-4% 50% 0px", "-4% center"]); + +test_valid_value("transform-origin", "left center", ["left center 0px", "left center"]); +test_valid_value("transform-origin", "center top", ["center top 0px", "center top"]); +test_valid_value("transform-origin", "right -4%", ["right -4% 0px", "right -4%"]); +test_valid_value("transform-origin", "-1px bottom 5px"); + +test_valid_value("transform-origin", "center left 6px", "left center 6px"); +test_valid_value("transform-origin", "top center", ["center top 0px", "center top"]); +test_valid_value("transform-origin", "bottom right 7px", "right bottom 7px"); +test_valid_value("transform-origin", "-1px -2px -3px"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-valid.html b/tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-valid.html new file mode 100644 index 00000000000..9a5b9c0696e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-valid.html @@ -0,0 +1,53 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Transform Module Level 2: parsing transform with valid values</title> +<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-transforms-2/#transform-property"> +<meta name="assert" content="transform supports the full grammar 'none | <transform-list>'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_valid_value("transform", "none"); + +test_valid_value("transform", "matrix(1, 0, 0, 1, 0, 0)"); +test_valid_value("transform", "matrix(1, 2, 3, 4, 5, 6)"); +test_valid_value("transform", "matrix(-0.1, -0.2, -0.3, -0.4, -0.5, -0.6)"); + +test_valid_value("transform", "translate(1px)"); +test_valid_value("transform", "translate(2%, -3%)"); + +test_valid_value("transform", "translateX(-4px)"); + +test_valid_value("transform", "translateY(5%)"); + +test_valid_value("transform", "scale(2)"); +test_valid_value("transform", "scale(3, 4)"); +test_valid_value("transform", "scale(-5, -6)"); + +test_valid_value("transform", "scaleX(7)"); + +test_valid_value("transform", "scaleY(-8)"); + +test_valid_value("transform", "rotate(0)", "rotate(0deg)"); +test_valid_value("transform", "rotate(90deg)"); + +test_valid_value("transform", "skew(0)", "skew(0deg)"); +test_valid_value("transform", "skew(90deg)"); +test_valid_value("transform", "skew(0, -90deg)", "skew(0deg, -90deg)"); +test_valid_value("transform", "skew(90deg, 0)", "skew(90deg, 0deg)"); + +test_valid_value("transform", "skewX(0)", "skewX(0deg)"); +test_valid_value("transform", "skewX(90deg)"); + +test_valid_value("transform", "skewY(0)", "skewY(0deg)"); +test_valid_value("transform", "skewY(-90deg)"); + +test_valid_value("transform", "translate(1px, 2%) scale(3, 4) rotate(-90deg)"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/direction-invalid.html b/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/direction-invalid.html new file mode 100644 index 00000000000..a587b9fb0e0 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/direction-invalid.html @@ -0,0 +1,19 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Writing Modes Level 3: parsing direction with invalid values</title> +<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#propdef-direction"> +<meta name="assert" content="direction supports only the grammar 'ltr | rtl'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_invalid_value("direction", "auto"); +test_invalid_value("direction", "ltr rtl"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/direction-valid.html b/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/direction-valid.html new file mode 100644 index 00000000000..436226a9187 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/direction-valid.html @@ -0,0 +1,19 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Writing Modes Level 3: parsing direction with valid values</title> +<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#propdef-direction"> +<meta name="assert" content="direction supports the full grammar 'ltr | rtl'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_valid_value("direction", "ltr"); +test_valid_value("direction", "rtl"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/resources/parsing-testcommon.js b/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/resources/parsing-testcommon.js new file mode 100644 index 00000000000..b075882f89a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/resources/parsing-testcommon.js @@ -0,0 +1,39 @@ +'use strict'; + +// serializedValue can be the expected serialization of value, +// or an array of permitted serializations, +// or omitted if value should serialize as value. +function test_valid_value(property, value, serializedValue) { + if (arguments.length < 3) + serializedValue = value; + + var stringifiedValue = JSON.stringify(value); + + test(function(){ + var div = document.createElement('div'); + div.style[property] = value; + assert_not_equals(div.style.getPropertyValue(property), "", "property should be set"); + + var div = document.createElement('div'); + div.style[property] = value; + var readValue = div.style.getPropertyValue(property); + if (serializedValue instanceof Array) + assert_in_array(readValue, serializedValue, "serialization should be sound"); + else + assert_equals(readValue, serializedValue, "serialization should be canonical"); + + div.style[property] = readValue; + assert_equals(div.style.getPropertyValue(property), readValue, "serialization should round-trip"); + + }, "e.style['" + property + "'] = " + stringifiedValue + " should set the property value"); +} + +function test_invalid_value(property, value) { + var stringifiedValue = JSON.stringify(value); + + test(function(){ + var div = document.createElement('div'); + div.style[property] = value; + assert_equals(div.style.getPropertyValue(property), ""); + }, "e.style['" + property + "'] = " + stringifiedValue + " should not set the property value"); +} diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/text-combine-upright-invalid.html b/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/text-combine-upright-invalid.html new file mode 100644 index 00000000000..8807997de8b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/text-combine-upright-invalid.html @@ -0,0 +1,19 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Writing Modes Level 3: parsing text-combine-upright with invalid values</title> +<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#propdef-text-combine-upright"> +<meta name="assert" content="text-combine-upright supports only the grammar 'none | all'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_invalid_value("text-combine-upright", "auto"); +test_invalid_value("text-combine-upright", "none all"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/text-combine-upright-valid.html b/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/text-combine-upright-valid.html new file mode 100644 index 00000000000..f599f12bf17 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/text-combine-upright-valid.html @@ -0,0 +1,19 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Writing Modes Level 3: parsing text-combine-upright with valid values</title> +<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#propdef-text-combine-upright"> +<meta name="assert" content="text-combine-upright supports the full grammar 'none | all'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_valid_value("text-combine-upright", "none"); +test_valid_value("text-combine-upright", "all"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/text-orientation-invalid.html b/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/text-orientation-invalid.html new file mode 100644 index 00000000000..4461dbeea2f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/text-orientation-invalid.html @@ -0,0 +1,19 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Writing Modes Level 3: parsing text-orientation with invalid values</title> +<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#propdef-text-orientation"> +<meta name="assert" content="text-orientation supports only the grammar 'mixed | upright | sideways'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_invalid_value("text-orientation", "auto"); +test_invalid_value("text-orientation", "mixed upright"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/text-orientation-valid.html b/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/text-orientation-valid.html new file mode 100644 index 00000000000..f6304fd4d8a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/text-orientation-valid.html @@ -0,0 +1,20 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Writing Modes Level 3: parsing text-orientation with valid values</title> +<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#propdef-text-orientation"> +<meta name="assert" content="text-orientation supports the full grammar 'mixed | upright | sideways'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_valid_value("text-orientation", "mixed"); +test_valid_value("text-orientation", "upright"); +test_valid_value("text-orientation", "sideways"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/unicode-bidi-invalid.html b/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/unicode-bidi-invalid.html new file mode 100644 index 00000000000..10907cbe931 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/unicode-bidi-invalid.html @@ -0,0 +1,19 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Writing Modes Level 3: parsing unicode-bidi with invalid values</title> +<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#propdef-unicode-bidi"> +<meta name="assert" content="unicode-bidi supports only the grammar 'normal | embed | isolate | bidi-override | isolate-override | plaintext'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_invalid_value("unicode-bidi", "auto"); +test_invalid_value("unicode-bidi", "isolate plaintext"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/unicode-bidi-valid.html b/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/unicode-bidi-valid.html new file mode 100644 index 00000000000..49c42345a36 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/unicode-bidi-valid.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Writing Modes Level 3: parsing unicode-bidi with valid values</title> +<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#propdef-unicode-bidi"> +<meta name="assert" content="unicode-bidi supports the full grammar 'normal | embed | isolate | bidi-override | isolate-override | plaintext'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_valid_value("unicode-bidi", "normal"); +test_valid_value("unicode-bidi", "embed"); +test_valid_value("unicode-bidi", "isolate"); +test_valid_value("unicode-bidi", "bidi-override"); +test_valid_value("unicode-bidi", "isolate-override"); +test_valid_value("unicode-bidi", "plaintext"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/writing-mode-invalid.html b/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/writing-mode-invalid.html new file mode 100644 index 00000000000..7b36e47cc56 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/writing-mode-invalid.html @@ -0,0 +1,19 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Writing Modes Level 3: parsing writing-mode with invalid values</title> +<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#propdef-writing-mode"> +<meta name="assert" content="writing-mode supports only the grammar 'horizontal-tb | vertical-rl | vertical-lr'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_invalid_value("writing-mode", "auto"); +test_invalid_value("writing-mode", "horizontal-tb vertical-rl"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/writing-mode-valid.html b/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/writing-mode-valid.html new file mode 100644 index 00000000000..4264e3840db --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/writing-mode-valid.html @@ -0,0 +1,20 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Writing Modes Level 3: parsing writing-mode with valid values</title> +<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#propdef-writing-mode"> +<meta name="assert" content="writing-mode supports the full grammar 'horizontal-tb | vertical-rl | vertical-lr'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_valid_value("writing-mode", "horizontal-tb"); +test_valid_value("writing-mode", "vertical-rl"); +test_valid_value("writing-mode", "vertical-lr"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/reference/scrollbar-vertical-rl-ref.html b/tests/wpt/web-platform-tests/css/css-writing-modes/reference/scrollbar-vertical-rl-ref.html new file mode 100644 index 00000000000..2ee601d16d2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/reference/scrollbar-vertical-rl-ref.html @@ -0,0 +1,21 @@ +<!DOCTYPE html> +<html> +<head> + <title>CSS Writing Modes Test: vertical-rl painting with vertical scrollbar reference</title> + <link rel="author" title="Aleks Totic" href="atotic@chromium.org" /> + <style> + #container { + width: 300px; + height: 200px; + border: 1px solid black; + writing-mode: vertical-rl; + overflow: scroll; + background: blue; + } + #target { + width:500px; + } + </style> +<div id="container"> + <div id="target"><br></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/scrollbar-vertical-rl.html b/tests/wpt/web-platform-tests/css/css-writing-modes/scrollbar-vertical-rl.html new file mode 100644 index 00000000000..71e57efb09a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/scrollbar-vertical-rl.html @@ -0,0 +1,29 @@ +<!DOCTYPE html> +<html> +<head> + <title>CSS Writing Modes Test: vertical-rl painting with vertical scrollbar</title> + + <link rel="author" title="Aleks Totic" href="atotic@chromium.org" /> + <link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#orthogonal-flows" title="7.3 Orthogonal flows" /> + <link rel="match" href="./reference/scrollbar-vertical-rl-ref.html" /> + + <style> + #container { + width: 300px; + height: 200px; + border: 1px solid black; + writing-mode: vertical-rl; + overflow: scroll; + background: red; + } + #target { + width:500px; + background:blue; + } + </style> +</head> +<body> +<div id="container"> + <div id="target"><br></div> +</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/mediaqueries/test_media_queries.html b/tests/wpt/web-platform-tests/css/mediaqueries/test_media_queries.html index 57830f4d47f..a239efdc116 100644 --- a/tests/wpt/web-platform-tests/css/mediaqueries/test_media_queries.html +++ b/tests/wpt/web-platform-tests/css/mediaqueries/test_media_queries.html @@ -99,35 +99,55 @@ function run() { // The no-type syntax doesn't mix with the not and only keywords. query_should_be_parseable("(orientation)"); - query_should_not_be_parseable("not (orientation)"); + query_should_be_parseable("not (orientation)"); query_should_not_be_parseable("only (orientation)"); query_should_be_parseable("all and (orientation)"); query_should_be_parseable("not all and (orientation)"); query_should_be_parseable("only all and (orientation)"); + query_should_not_be_parseable("not not (orientation)"); + query_should_be_parseable("(orientation) and (orientation)"); + query_should_be_parseable("(orientation) or (orientation)"); + query_should_be_parseable("(orientation) or ((orientation) and ((orientation) or (orientation) or (not (orientation))))"); + + query_should_not_be_parseable("all and (orientation) or (orientation)"); + query_should_be_parseable("all and (orientation) and (orientation)"); + + query_should_not_be_parseable("(orientation) and (orientation) or (orientation)"); + query_should_not_be_parseable("(orientation) and not (orientation)"); + + var features = [ "width", "height", "device-width", "device-height" ]; + var separators = [ ":", ">", ">=", "=", "<=", "<" ]; var feature; var i; for (i in features) { feature = features[i]; expression_should_be_parseable(feature); - expression_should_be_parseable(feature + ": 0"); - expression_should_be_parseable(feature + ": 0px"); - expression_should_be_parseable(feature + ": 0em"); - expression_should_be_parseable(feature + ": -0"); - expression_should_be_parseable("min-" + feature + ": -0"); - expression_should_be_parseable("max-" + feature + ": -0"); - expression_should_be_parseable(feature + ": -0cm"); - expression_should_be_parseable(feature + ": 1px"); - expression_should_be_parseable(feature + ": 0.001mm"); - expression_should_be_parseable(feature + ": 100000px"); - expression_should_not_be_parseable(feature + ": -1px"); - expression_should_not_be_parseable("min-" + feature + ": -1px"); - expression_should_not_be_parseable("max-" + feature + ": -1px"); - expression_should_not_be_parseable(feature + ": -0.00001mm"); - expression_should_not_be_parseable(feature + ": -100000em"); expression_should_not_be_parseable("min-" + feature); expression_should_not_be_parseable("max-" + feature); + for (let separator of separators) { + expression_should_be_parseable(feature + " " + separator + " 0"); + expression_should_be_parseable(feature + " " + separator + " 0px"); + expression_should_be_parseable(feature + " " + separator + " 0em"); + expression_should_be_parseable(feature + " " + separator + " -0"); + expression_should_be_parseable(feature + " " + separator + " -0cm"); + expression_should_be_parseable(feature + " " + separator + " 1px"); + expression_should_be_parseable(feature + " " + separator + " 0.001mm"); + expression_should_be_parseable(feature + " " + separator + " 100000px"); + if (separator == ":") { + expression_should_be_parseable("min-" + feature + " " + separator + " -0"); + expression_should_be_parseable("max-" + feature + " " + separator + " -0"); + } else { + expression_should_not_be_parseable("min-" + feature + " " + separator + " -0"); + expression_should_not_be_parseable("max-" + feature + " " + separator + " -0"); + } + expression_should_not_be_parseable(feature + " " + separator + " -1px"); + expression_should_not_be_parseable("min-" + feature + " " + separator + " -1px"); + expression_should_not_be_parseable("max-" + feature + " " + separator + " -1px"); + expression_should_not_be_parseable(feature + " " + separator + " -0.00001mm"); + expression_should_not_be_parseable(feature + " " + separator + " -100000em"); + } } var content_div = document.getElementById("content"); @@ -142,15 +162,21 @@ function run() { iframe_style.height = height_val + "px"; var device_width = window.screen.width; var device_height = window.screen.height; - features = { "width": width_val, - "height": height_val, - "device-width": device_width, - "device-height": device_height }; + features = { + "width": width_val, + "height": height_val, + "device-width": device_width, + "device-height": device_height + }; for (feature in features) { var value = features[feature]; should_apply("all and (" + feature + ": " + value + "px)"); + should_apply("all and (" + feature + " = " + value + "px)"); should_not_apply("all and (" + feature + ": " + (value + 1) + "px)"); should_not_apply("all and (" + feature + ": " + (value - 1) + "px)"); + should_not_apply("all and (" + feature + " = " + (value + 1) + "px)"); + should_not_apply("all and (" + feature + " = " + (value - 1) + "px)"); + should_apply("all and (min-" + feature + ": " + value + "px)"); should_not_apply("all and (min-" + feature + ": " + (value + 1) + "px)"); should_apply("all and (min-" + feature + ": " + (value - 1) + "px)"); @@ -165,6 +191,21 @@ function run() { (Math.ceil(value/em_size) + 1) + "em)"); should_not_apply("all and (max-" + feature + ": " + (Math.floor(value/em_size) - 1) + "em)"); + + should_apply("(" + feature + " <= " + value + "px)"); + should_apply("(" + feature + " >= " + value + "px)"); + should_not_apply("(" + feature + " < " + value + "px)"); + should_not_apply("(" + feature + " > " + value + "px)"); + + should_apply("(" + feature + " < " + (value + 1) + "px)"); + should_apply("(" + feature + " <= " + (value + 1) + "px)"); + should_not_apply("(" + feature + " > " + (value + 1) + "px)"); + should_not_apply("(" + feature + " >= " + (value + 1) + "px)"); + + should_apply("(" + feature + " > " + (value - 1) + "px)"); + should_apply("(" + feature + " >= " + (value - 1) + "px)"); + should_not_apply("(" + feature + " < " + (value - 1) + "px)"); + should_not_apply("(" + feature + " <= " + (value - 1) + "px)"); } iframe_style.width = "0"; diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/background/box-shadow-currentcolor-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/background/box-shadow-currentcolor-ref.html new file mode 100644 index 00000000000..4bb4cbd4178 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/background/box-shadow-currentcolor-ref.html @@ -0,0 +1,31 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> + <head> + <meta charset="utf-8"> + <title>CSS Reftest Reference</title> + <link rel="author" title="Dan Glastonbury" href="mailto:dglastonbury@mozilla.com" /> + <style type="text/css"> + div { + padding: 40px; + } + + p { + padding: 2em; + border: 1px solid limegreen; + box-shadow: 10px 5px 5px limegreen; + } + </style> + </head> + <body> + <!-- content of test --> + <div> + <p style="color: limegreen"> + This box should have a green box shadow. + </p> + </div> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/background/box-shadow-currentcolor.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/background/box-shadow-currentcolor.html new file mode 100644 index 00000000000..cdb0b9d9fc2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/background/box-shadow-currentcolor.html @@ -0,0 +1,36 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> + <head> + <meta charset="utf-8"> + <title>CSS Test: 'box-shadow' respects 'currentcolor'</title> + <link rel="author" title="Dan Glastonbury" href="mailto:dglastonbury@mozilla.com" /> + <link rel="help" href="https://www.w3.org/TR/css-backgrounds-3/#the-box-shadow" /> + <link rel="help" href="https://www.w3.org/TR/css-color-3/#currentcolor" /> + <link rel="match" href="box-shadow-currentcolor-ref.html" /> + <style type="text/css"> + div { + color: transparent; + padding: 40px; + box-shadow: 10px 5px 5px currentcolor; + } + + p { + padding: 2em; + border: 1px solid currentcolor; + box-shadow: inherit; + } + </style> + </head> + <body> + <!-- content of test --> + <div> + <p style="color: limegreen"> + This box should have a green box shadow. + </p> + </div> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/background/reftest.list b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/background/reftest.list index 541e9872beb..e60bdb947f5 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/background/reftest.list +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/background/reftest.list @@ -36,3 +36,6 @@ # background-attachment test cases == background-attachment-fixed-inside-transform-1.html background-attachment-fixed-inside-transform-1-ref.html + +# box-shadow with currentcolor test cases +== box-shadow-currentcolor.html box-shadow-currentcolor-ref.html
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-001-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-001-ref.html index 9cffaf9a398..629cb939e01 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-001-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-001-ref.html @@ -5,9 +5,6 @@ <title>CSS Reftest Reference</title> <link rel="author" title="Kyle Zentner" href="mailto:zentner.kyle@gmail.com"> <style> - body { - margin: 0; - } #a { width: 150px; height: 150px; diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-001.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-001.html index 5b320e8ae41..0f7874b71e0 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-001.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-001.html @@ -7,9 +7,6 @@ <link rel="help" href="http://www.w3.org/TR/css-containment-1/#containment-paint"> <link rel="match" href="contain-paint-clip-001-ref.html"> <style> - body { - margin: 0; - } .root { contain: paint; width: 100px; @@ -31,11 +28,6 @@ top: -25px; left: -25px; } - .c { - width: 100px; - height: 100px; - background: red; - } .background { position: absolute; top: 0; diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-002-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-002-ref.html index 7b0ca5ec555..3baefff57cf 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-002-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-002-ref.html @@ -6,9 +6,6 @@ <link rel="author" title="Yusuf Sermet" href="mailto:ysermet@mozilla.com"> <link rel="author" title="Kyle Zentner" href="mailto:zentner.kyle@gmail.com"> <style> - body { - margin: 0; - } .root { overflow: hidden; width: 100px; diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-002.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-002.html index eb7c8b32678..b6fbc9c2927 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-002.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-002.html @@ -8,9 +8,6 @@ <link rel="help" href="http://www.w3.org/TR/css-containment-1/#containment-paint"> <link rel="match" href="contain-paint-clip-002-ref.html"> <style> - body { - margin: 0; - } .root { contain: paint; width: 100px; diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-003-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-003-ref.html index 34e79489af7..425844ae476 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-003-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-003-ref.html @@ -5,9 +5,6 @@ <title>CSS Reftest Reference</title> <link rel="author" title="Kyle Zentner" href="mailto:zentner.kyle@gmail.com"> <style> - body { - margin: 0; - } .root { overflow-x: scroll; overflow-y: scroll; diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-003.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-003.html index e02dae14f02..ed270e9e0cc 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-003.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-003.html @@ -7,9 +7,6 @@ <link rel="help" href="http://www.w3.org/TR/css-containment-1/#containment-paint"> <link rel="match" href="contain-paint-clip-003-ref.html"> <style> - body { - margin: 0; - } .root { contain: paint; overflow-y: scroll; diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-004-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-004-ref.html index 4eda898abed..0861c68cbe3 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-004-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-004-ref.html @@ -5,9 +5,6 @@ <title>CSS Reftest Reference</title> <link rel="author" title="Kyle Zentner" href="mailto:zentner.kyle@gmail.com"> <style> - body { - margin: 0; - } .root { overflow-y: scroll; overflow-x: scroll; diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-004.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-004.html index e3ed254761c..844a59ad691 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-004.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-004.html @@ -7,9 +7,6 @@ <link rel="help" href="http://www.w3.org/TR/css-containment-1/#containment-paint"> <link rel="match" href="contain-paint-clip-004-ref.html"> <style> - body { - margin: 0; - } .root { contain: paint; overflow-x: scroll; diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-005.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-005.html index dc92202640f..b2766e374e4 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-005.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-005.html @@ -8,11 +8,9 @@ <link rel="help" href="http://www.w3.org/TR/css-containment-1/#containment-paint"> <link rel="match" href="contain-paint-clip-003-ref.html"> <style> - body { - margin: 0; - } ul { padding: 0; + margin: 0; } .root { contain: paint; diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-006-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-006-ref.html index f3823949600..ecd22b307a9 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-006-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-006-ref.html @@ -6,9 +6,6 @@ <link rel="author" title="Yusuf Sermet" href="mailto:ysermet@mozilla.com"> <link rel="author" title="Kyle Zentner" href="mailto:zentner.kyle@gmail.com"> <style> - body { - margin: 0; - } .root { width: 100px; height: 100px; diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-006.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-006.html index f6ffdc3928e..14d23f43134 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-006.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-006.html @@ -8,9 +8,6 @@ <link rel="help" href="http://www.w3.org/TR/css-containment-1/#containment-paint"> <link rel="match" href="contain-paint-clip-006-ref.html"> <style> - body { - margin: 0; - } .root { contain: paint; width: 100px; diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-absolute-001-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-absolute-001-ref.html index 422706802a2..8861d19f888 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-absolute-001-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-absolute-001-ref.html @@ -5,9 +5,6 @@ <title>CSS Reftest Reference</title> <link rel="author" title="Kyle Zentner" href="mailto:zentner.kyle@gmail.com"> <style> - body { - margin: 0; - } #a { width: 100px; height: 100px; diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-absolute-001.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-absolute-001.html index fc04df008a2..ef564069eb1 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-absolute-001.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-absolute-001.html @@ -7,9 +7,6 @@ <link rel="help" href="http://www.w3.org/TR/css-containment-1/#containment-paint"> <link rel="match" href="contain-paint-containing-block-absolute-001-ref.html"> <style> - body { - margin: 0; - } #a { contain: paint; width: 100px; diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-fixed-001-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-fixed-001-ref.html index 422706802a2..8861d19f888 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-fixed-001-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-fixed-001-ref.html @@ -5,9 +5,6 @@ <title>CSS Reftest Reference</title> <link rel="author" title="Kyle Zentner" href="mailto:zentner.kyle@gmail.com"> <style> - body { - margin: 0; - } #a { width: 100px; height: 100px; diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-fixed-001.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-fixed-001.html index 60f180beaab..fc5ede156e9 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-fixed-001.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-fixed-001.html @@ -7,9 +7,6 @@ <link rel="help" href="http://www.w3.org/TR/css-containment-1/#containment-paint"> <link rel="match" href="contain-paint-containing-block-fixed-001-ref.html"> <style> - body { - margin: 0; - } #a { contain: paint; width: 100px; diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-float-001-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-float-001-ref.html index 5a70a21c176..ceff7f4569e 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-float-001-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-float-001-ref.html @@ -5,9 +5,6 @@ <title>CSS Reftest Reference</title> <link rel="author" title="Kyle Zentner" href="mailto:zentner.kyle@gmail.com"> <style> - body { - margin: 0; - } #left { float: left; height: 50px; diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-float-001.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-float-001.html index 06a59f2e58d..e5827209d71 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-float-001.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-float-001.html @@ -7,9 +7,6 @@ <link rel="help" href="http://www.w3.org/TR/css-containment-1/#containment-paint"> <link rel="match" href="contain-paint-formatting-context-float-001-ref.html"> <style> - body { - margin: 0; - } #left { float: left; height: 50px; diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-margin-001-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-margin-001-ref.html index 6dde7bc90e1..1976f71bf55 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-margin-001-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-margin-001-ref.html @@ -5,9 +5,6 @@ <title>CSS Reftest Test</title> <link rel="author" title="Kyle Zentner" href="mailto:zentner.kyle@gmail.com"> <style> - body { - margin: 0; - } #a { background: blue; margin: 10px; diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-margin-001.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-margin-001.html index fdc0bb7f15e..d3746422865 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-margin-001.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-margin-001.html @@ -7,9 +7,6 @@ <link rel="help" href="http://www.w3.org/TR/css-containment-1/#containment-paint"> <link rel="match" href="contain-paint-formatting-context-margin-001-ref.html"> <style> - body { - margin: 0; - } #a { contain: paint; background: blue; diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001-ref.html new file mode 100644 index 00000000000..d23678941e2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001-ref.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset=utf-8> + <title>CSS Reftest Reference</title> + <link rel="author" title="Yusuf Sermet" href="mailto:ysermet@mozilla.com"> + <style> + tr { + z-index: 10; + } + th { + background-color: blue; + padding-left: 50px; + } + caption { + position: fixed; + background-color: yellow; + z-index: 2; + } + </style> + </head> + <body> + <table> + <caption>PASS</caption> + <tr> + <th> </th> + </tr> + </table> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001a.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001a.html new file mode 100644 index 00000000000..283b8b941a4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001a.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset=utf-8> + <title>CSS-contain test: paint containment on internal table elements except table-cell.</title> + <link rel="author" title="Yusuf Sermet" href="mailto:ysermet@mozilla.com"> + <link rel="help" href="http://www.w3.org/TR/css-containment-1/#containment-paint"> + <link rel="match" href="contain-paint-ignored-cases-internal-table-001-ref.html"> + <meta name="assert" content="Paint containment should not apply to internal table elements except table-cell. This test testes only the tr element, and confirms contain:paint does not create a stacking context."> + <style> + tr { + contain: paint; + z-index: 10; + } + th { + background-color: blue; + padding-left: 50px; + } + caption { + position: fixed; + background-color: yellow; + z-index: 2; + } + </style> + </head> + <body> + <table> + <caption>PASS</caption> + <tr> + <th> </th> + </tr> + </table> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001b.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001b.html new file mode 100644 index 00000000000..cff28b8b5c2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001b.html @@ -0,0 +1,36 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset=utf-8> + <title>CSS-contain test: paint containment on internal table elements except table-cell.</title> + <link rel="author" title="Yusuf Sermet" href="mailto:ysermet@mozilla.com"> + <link rel="help" href="http://www.w3.org/TR/css-containment-1/#containment-paint"> + <link rel="match" href="contain-paint-ignored-cases-internal-table-001-ref.html"> + <meta name="assert" content="Paint containment should not apply to internal table elements except table-cell. This test testes only the tbody element, and confirms contain:paint does not create a stacking context."> + <style> + tbody { + contain: paint; + z-index: 10; + } + th { + background-color: blue; + padding-left: 50px; + } + caption { + position: fixed; + background-color: yellow; + z-index: 2; + } + </style> + </head> + <body> + <table> + <caption>PASS</caption> + <tbody> + <tr> + <th> </th> + </tr> + </tbody> + </table> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-no-principal-box-001-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-no-principal-box-001-ref.html new file mode 100644 index 00000000000..b4513709e51 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-no-principal-box-001-ref.html @@ -0,0 +1,57 @@ +<!DOCTYPE HTML> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Reftest Reference</title> + <link rel="author" title="Yusuf Sermet" href="mailto:ysermet@mozilla.com"> + <style> + div { + position: relative; + width: 100px; + } + #div1, + #div3 { + background-color: #cfc; + height: 100px; + } + #div1 { + z-index: 5; + } + #div2 { + display: contents; + background-color: #fdd; + height: 100px; + top: -20px; + } + #div2_1 { + background-color: #ffc; + z-index: 6; + top: -10px; + height: 100px; + } + #div2_2 { + z-index: 3; + position: absolute; + top: -15px; + width: 40px; + height: 300px; + background-color: #ddf; + } + #div3 { + z-index: 2; + top: -50px; + } + </style> +</head> +<body> + <div id="div1"></div> + + <div id="div2"> + <div id="div2_1"></div> + + <div id="div2_2"></div> + </div> + + <div id="div3"></div> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-no-principal-box-001.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-no-principal-box-001.html new file mode 100644 index 00000000000..4b9c9072099 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-no-principal-box-001.html @@ -0,0 +1,61 @@ +<!DOCTYPE HTML> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Test: 'contain: paint' with 'display: contents'.</title> + <link rel="author" title="Yusuf Sermet" href="mailto:ysermet@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-contain/#containment-paint"> + <link rel="match" href="contain-paint-ignored-cases-no-principal-box-001-ref.html"> + <meta name="assert" content="Contain:paint should have no effect when no principle box is generated."> + <style> + div { + position: relative; + width: 100px; + } + #div1, + #div3 { + background-color: #cfc; + height: 100px; + } + #div1 { + z-index: 5; + } + #div2 { + display: contents; + contain: paint; + background-color: #fdd; + height: 100px; + top: -20px; + } + #div2_1 { + background-color: #ffc; + z-index: 6; + top: -10px; + height: 100px; + } + #div2_2 { + z-index: 3; + position: absolute; + top: -15px; + width: 40px; + height: 300px; + background-color: #ddf; + } + #div3 { + z-index: 2; + top: -50px; + } + </style> +</head> +<body> + <div id="div1"></div> + + <div id="div2"> + <div id="div2_1"></div> + + <div id="div2_2"></div> + </div> + + <div id="div3"></div> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-containing-block-001-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-containing-block-001-ref.html new file mode 100644 index 00000000000..5df0b246292 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-containing-block-001-ref.html @@ -0,0 +1,37 @@ +<!doctype html> +<html lang=en> + <head> + <meta charset=utf-8> + <title>CSS Reftest Reference</title> + <link rel="author" title="Yusuf Sermet" href="mailto:ysermet@mozilla.com"> + <style> + rb, + rbc, + rt, + rtc { + background-color: yellow; + font-size: 2em; + } + rbc { + display: ruby-base-container; + } + .contained { + width: 50px; + height: 10px; + background-color: blue; + top: 0; + left: 0; + position: fixed; + } + .wrapper { + display: inline-block; + } + </style> + </head> + <body> + <div class="wrapper"><ruby><rt> <div class="contained"></div></rt></ruby></div> + <div class="wrapper"><ruby><rtc> <div class="contained"></div></rtc></ruby></div> + <div class="wrapper"><ruby><rb> <div class="contained"></div></rb></ruby></div> + <div class="wrapper"><ruby><rbc> <div class="contained"></div></rbc></ruby></div> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-containing-block-001.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-containing-block-001.html new file mode 100644 index 00000000000..71764e18558 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-containing-block-001.html @@ -0,0 +1,41 @@ +<!doctype html> +<html lang=en> + <head> + <meta charset=utf-8> + <title>CSS-contain test: paint containment on internal ruby elements.</title> + <link rel="author" title="Yusuf Sermet" href="mailto:ysermet@mozilla.com"> + <link rel="help" href="http://www.w3.org/TR/css-containment-1/#containment-paint"> + <link rel="match" href="contain-paint-ignored-cases-ruby-containing-block-001-ref.html"> + <meta name="assert" content="Paint containment should not apply to ruby base, ruby base container, ruby text, and ruby text container. This test confirms contain:paint does not act as a containing block for fixed positioned descendants."> + <style> + rb, + rbc, + rt, + rtc { + contain: paint; + background-color: yellow; + font-size: 2em; + } + rbc { + display: ruby-base-container; + } + .contained { + width: 50px; + height: 10px; + background-color: blue; + top: 0; + left: 0; + position: fixed; + } + .wrapper { + display: inline-block; + } + </style> + </head> + <body> + <div class="wrapper"><ruby><rt> <div class="contained"></div></rt></ruby></div> + <div class="wrapper"><ruby><rtc> <div class="contained"></div></rtc></ruby></div> + <div class="wrapper"><ruby><rb> <div class="contained"></div></rb></ruby></div> + <div class="wrapper"><ruby><rbc> <div class="contained"></div></rbc></ruby></div> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-stacking-and-clipping-001-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-stacking-and-clipping-001-ref.html new file mode 100644 index 00000000000..02f7a406656 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-stacking-and-clipping-001-ref.html @@ -0,0 +1,52 @@ +<!doctype html> +<html lang=en> + <head> + <meta charset=utf-8> + <title>CSS Reftest Reference</title> + <link rel="author" title="Yusuf Sermet" href="mailto:ysermet@mozilla.com"> + <style> + div { + position: relative; + } + rbc { + display: ruby-base-container; + } + .contained { + z-index: 5; + width: 70px; + height: 10px; + background-color: blue; + margin-left: -25px; + } + .background { + display: inline-block; + background-color: yellow; + height: 50px; + width: 50px; + position: fixed; + z-index: 2; + } + .group { + display: inline-block; + } + </style> + </head> + <body> + <div class="group"> + <div class="background"></div> + <ruby><rb> <div class="contained"></div></rb></ruby> + </div> + <div class="group"> + <div class="background"></div> + <ruby><rbc> <div class="contained"></div></rbc></ruby> + </div> + <div class="group"> + <div class="background"></div> + <ruby><rt> <div class="contained"></div></rt></ruby> + </div> + <div class="group"> + <div class="background"></div> + <ruby><rtc> <div class="contained"></div></rtc></ruby> + </div> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-stacking-and-clipping-001.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-stacking-and-clipping-001.html new file mode 100644 index 00000000000..1f1c147f94f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-stacking-and-clipping-001.html @@ -0,0 +1,60 @@ +<!doctype html> +<html lang=en> + <head> + <meta charset=utf-8> + <title>CSS-contain test: paint containment on internal ruby elements.</title> + <link rel="author" title="Yusuf Sermet" href="mailto:ysermet@mozilla.com"> + <link rel="help" href="http://www.w3.org/TR/css-containment-1/#containment-paint"> + <link rel="match" href="contain-paint-ignored-cases-ruby-stacking-and-clipping-001-ref.html"> + <meta name="assert" content="Paint containment should not apply to ruby base, ruby base container, ruby text, and ruby text container. This test confirms that contain:paint does not create a stacking context and does not apply overflow clipping."> + <style> + div { + position: relative; + } + rb, + rbc, + rt, + rtc { + contain: paint; + } + rbc { + display: ruby-base-container; + } + .contained { + z-index: 5; + width: 70px; + height: 10px; + background-color: blue; + margin-left: -25px; + } + .background { + background-color: yellow; + height: 50px; + width: 50px; + position: fixed; + z-index: 2; + } + .group { + display: inline-block; + } + </style> + </head> + <body> + <div class="group"> + <div class="background"></div> + <ruby><rb> <div class="contained"></div></rb></ruby> + </div> + <div class="group"> + <div class="background"></div> + <ruby><rbc> <div class="contained"></div></rbc></ruby> + </div> + <div class="group"> + <div class="background"></div> + <ruby><rt> <div class="contained"></div></rt></ruby> + </div> + <div class="group"> + <div class="background"></div> + <ruby><rtc> <div class="contained"></div></rtc></ruby> + </div> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/reftest.list b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/reftest.list index d503f7e5c66..7e762eceb77 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/reftest.list +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/reftest.list @@ -9,5 +9,10 @@ == contain-paint-containing-block-fixed-001.html contain-paint-containing-block-fixed-001-ref.html == contain-paint-formatting-context-float-001.html contain-paint-formatting-context-float-001-ref.html == contain-paint-formatting-context-margin-001.html contain-paint-formatting-context-margin-001-ref.html +== contain-paint-ignored-cases-internal-table-001a.html contain-paint-ignored-cases-internal-table-001-ref.html +== contain-paint-ignored-cases-internal-table-001b.html contain-paint-ignored-cases-internal-table-001-ref.html +== contain-paint-ignored-cases-no-principal-box-001.html contain-paint-ignored-cases-no-principal-box-001-ref.html +== contain-paint-ignored-cases-ruby-containing-block-001.html contain-paint-ignored-cases-ruby-containing-block-001-ref.html +== contain-paint-ignored-cases-ruby-stacking-and-clipping-001.html contain-paint-ignored-cases-ruby-stacking-and-clipping-001-ref.html == contain-paint-stacking-context-001a.html contain-paint-stacking-context-001-ref.html == contain-paint-stacking-context-001b.html contain-paint-stacking-context-001-ref.html diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/float-should-push-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/float-should-push-ref.html new file mode 100644 index 00000000000..6a349fd359f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/float-should-push-ref.html @@ -0,0 +1,72 @@ +<!DOCTYPE HTML> +<meta charset="utf-8"> +<title>Reference: Ensure shape-outside floats that don't cover their margin-rect affect layout properly</title> +<link rel="author" title="Brad Werth" href="mailto:bwerth@mozilla.com"> +<link rel="author" title="Mozilla" href="http://www.mozilla.org/"> + +<style> + body { + margin: 0px; + line-height: 1; + } + + .container { + width: 300px; + height: 100px; + background: lightgray; + } + + .too-wide { + display: inline-block; + width: 250px; + height: 20px; + background: lightblue; + clear: left; + } + + .shape { + background: black; + width: 100px; + height: 100px; + float: left; + } + + .spacer { + clear: left; + height: 30px; + } + + .inset { + background: orange; + } + + .polygon { + background: pink; + } + + .image { + background: brown; + } + +</style> + +<p>All light blue bars should be pushed below the square floats, regardless of how those floats are defined.</p> + +<div class="container"> +<div class="shape inset">inset(1px) at top</div> +<span class="too-wide"></span> +</div> + +<div class="spacer"></div> + +<div class="container"> +<div class="shape polygon">polygon</div> +<span class="too-wide"></span> +</div> + +<div class="spacer"></div> + +<div class="container"> +<div class="shape image">image</div> +<span class="too-wide"></span> +</div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/float-should-push.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/float-should-push.html new file mode 100644 index 00000000000..c6bcfe576b6 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/float-should-push.html @@ -0,0 +1,77 @@ +<!DOCTYPE HTML> +<meta charset="utf-8"> +<title>Ensure shape-outside floats that don't cover their margin-rect affect layout properly</title> +<link rel="author" title="Brad Werth" href="mailto:bwerth@mozilla.com"> +<link rel="author" title="Mozilla" href="http://www.mozilla.org/"> +<link rel="help" href="https://drafts.csswg.org/css-shapes-1/"> +<link rel="match" href="float-should-push-ref.html"> +<meta name="assert" content="Test that a too-wide inline block clear floats defined by shape-outside shapes that don't reach the top of the margin rect."> + +<style> + body { + margin: 0px; + line-height: 1; + } + + .container { + width: 300px; + height: 100px; + background: lightgray; + } + + .too-wide { + display: inline-block; + width: 250px; + height: 20px; + background: lightblue; + } + + .shape { + background: black; + width: 100px; + height: 100px; + float: left; + } + + .spacer { + clear: left; + height: 30px; + } + + .inset { + background: orange; + shape-outside: inset(1px 0px 0px 0px); + } + + .polygon { + background: pink; + shape-outside: polygon(0px 0px, 100px 0px, 100px 100px, 0px 100px); + } + + .image { + background: brown; + shape-outside: linear-gradient(0deg, black, black 100%); + } + +</style> + +<p>All light blue bars should be pushed below the square floats, regardless of how those floats are defined.</p> + +<div class="container"> +<div class="shape inset">inset(1px) at top</div> +<span class="too-wide"></span> +</div> + +<div class="spacer"></div> + +<div class="container"> +<div class="shape polygon">polygon</div> +<span class="too-wide"></span> +</div> + +<div class="spacer"></div> + +<div class="container"> +<div class="shape image">image</div> +<span class="too-wide"></span> +</div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/reftest.list b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/reftest.list index 14933dcd024..75a318005eb 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/reftest.list +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/reftest.list @@ -106,6 +106,8 @@ # Tests of shape-outside layout behavior with too-wide inline elements == float-retry-push-circle.html float-retry-push-ref.html +# The next test offsets a 250px wide element up to one pixel due to small offsets in gradient generation. == float-retry-push-image.html float-retry-push-ref.html == float-retry-push-inset.html float-retry-push-ref.html == float-retry-push-polygon.html float-retry-push-ref.html +== float-should-push.html float-should-push-ref.html diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/text-decor-3/reftest.list b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/text-decor-3/reftest.list index a6e18f3f389..8d1b308ec9c 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/text-decor-3/reftest.list +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/text-decor-3/reftest.list @@ -130,3 +130,6 @@ == text-emphasis-line-height-004d.html text-emphasis-line-height-004-ref.html # END tests from support/generate-text-emphasis-line-height-tests.py == text-emphasis-line-height-001z.html text-emphasis-line-height-001-ref.html + +# text-shadow 'currentcolor' test cases +== text-shadow-currentcolor.html text-shadow-currentcolor-ref.html
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/text-decor-3/text-shadow-currentcolor-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/text-decor-3/text-shadow-currentcolor-ref.html new file mode 100644 index 00000000000..943c750f6f2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/text-decor-3/text-shadow-currentcolor-ref.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> + <head> + <meta charset="utf-8"> + <title>CSS Reftest Reference</title> + <link rel="author" title="Dan Glastonbury" href="mailto:dglastonbury@mozilla.com" /> + <style type="text/css"> + p { + text-shadow: 0 0 10px green; + color: green; + font: 1.5em Georgia, serif; + } + </style> + </head> + <body> + <!-- content of test --> + <p>This text should have a green drop shadow</p> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/text-decor-3/text-shadow-currentcolor.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/text-decor-3/text-shadow-currentcolor.html new file mode 100644 index 00000000000..34a35cd6397 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/text-decor-3/text-shadow-currentcolor.html @@ -0,0 +1,31 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> + <head> + <meta charset="utf-8"> + <title>CSS Test: 'text-shadow' respects 'currentcolor'</title> + <link rel="author" title="Dan Glastonbury" href="mailto:dglastonbury@mozilla.com" /> + <link rel="help" href="https://www.w3.org/TR/css-text-decor-3/#text-shadow-property" /> + <link rel="help" href="https://www.w3.org/TR/css-color-3/#currentcolor" /> + <link rel="match" href="text-shadow-currentcolor-ref.html" /> + <style type="text/css"> + body { + color: red; + text-shadow: 0 0 10px currentcolor; + } + + p { + text-shadow: inherit; + color: green; + font: 1.5em Georgia, serif; + } + </style> + </head> + <body> + <!-- content of test --> + <p>This text should have a green drop shadow</p> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/docs/_writing-tests/assumptions.md b/tests/wpt/web-platform-tests/docs/_writing-tests/assumptions.md index 6e12f96a6ef..d1ab75b0f1d 100644 --- a/tests/wpt/web-platform-tests/docs/_writing-tests/assumptions.md +++ b/tests/wpt/web-platform-tests/docs/_writing-tests/assumptions.md @@ -16,8 +16,13 @@ tests can freely rely on these assumptions being true: * The user stylesheet is empty (except where indicated by the tests). * The device is interactive and uses scroll bars. * The device has the Ahem font installed. - * The HTML `div` element is assigned `display: block;` and no other - property declaration. + * The HTML `div` element is assigned `display: block;`, the + `unicode-bidi` property may be declared, and no other property + declarations. + <!-- unicode-bidi: isolate should be required; we currently don't + assume this because Chrome and Safari are yet to ship this: see + https://bugs.chromium.org/p/chromium/issues/detail?id=296863 and + https://bugs.webkit.org/show_bug.cgi?id=65617 --> * The HTML `span` element is assigned `display: inline;` and no other property declaration. * The HTML `p` element is assigned `display: block;` diff --git a/tests/wpt/web-platform-tests/docs/_writing-tests/testharness-api.md b/tests/wpt/web-platform-tests/docs/_writing-tests/testharness-api.md index 737804741bd..92a9536b690 100644 --- a/tests/wpt/web-platform-tests/docs/_writing-tests/testharness-api.md +++ b/tests/wpt/web-platform-tests/docs/_writing-tests/testharness-api.md @@ -700,6 +700,11 @@ Relies on `===`, distinguishes between `-0` and `+0`, and has a specific check f asserts that `expected` is an Array, and `actual` is equal to one of the members i.e. `expected.indexOf(actual) != -1` +### `assert_object_equals(actual, expected, description)` +asserts that `actual` is an object and not null and that all enumerable +properties on `actual` are own properties on `expected` with the same values, +recursing if the value is an object and not null. + ### `assert_array_equals(actual, expected, description)` asserts that `actual` and `expected` have the same length and the value of each indexed property in `actual` is the strictly equal diff --git a/tests/wpt/web-platform-tests/dom/nodes/attributes.html b/tests/wpt/web-platform-tests/dom/nodes/attributes.html index 486cafaad9f..21188933ea4 100644 --- a/tests/wpt/web-platform-tests/dom/nodes/attributes.html +++ b/tests/wpt/web-platform-tests/dom/nodes/attributes.html @@ -136,6 +136,12 @@ test(function() { attr_is(el.attributes[0], "2", "bat", "foo", "foo", "foo:bat") }, "toggleAttribute should set the attribute with the given qualified name") +test(function() { + var el = document.createElement("foo") + el.style = "color: red; background-color: green" + assert_equals(el.toggleAttribute("style"), false) +}, "Toggling element with inline style should make inline style disappear") + // setAttribute exhaustive tests // Step 1 test(function() { diff --git a/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-clear-encrypted-segmented.https.html b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-clear-encrypted-segmented.https.html new file mode 100644 index 00000000000..f63fd51ca80 --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-clear-encrypted-segmented.https.html @@ -0,0 +1,60 @@ +<!doctype html> +<html> + <head> + <meta charset=utf-8> + <title>Encrypted Media Extensions: Successful Playback, Temporary session with Clear Key, mp4, clear then encrypted using segmented media</title> + <link rel="help" href="https://w3c.github.io/encrypted-media/"> + + <!-- Web Platform Test Harness scripts --> + <script src=/resources/testharness.js></script> + <script src=/resources/testharnessreport.js></script> + + <!-- Helper scripts for Encrypted Media Extensions tests --> + <script src=/encrypted-media/util/utils.js></script> + <script src=/encrypted-media/util/fetch.js></script> + <script src=/encrypted-media/util/testmediasource.js></script> + <script src=/encrypted-media/util/utf8.js></script> + + <!-- Content metadata --> + <script src=/encrypted-media/content/content-metadata.js></script> + + <!-- Message handler for Clear Key keysystem --> + <script src=/encrypted-media/util/clearkey-messagehandler.js></script> + + <!-- The script for this specific test --> + <script src=/encrypted-media/scripts/playback-temporary-encrypted-clear-segmented-sources.js></script> + + </head> + <body> + <div id='log'></div> + + <div id='video'> + <video id="videoelement" width="200px"></video> + </div> + + <script> + var encryptedcontentitem = content['mp4-basic'], + clearcontentitem = content['mp4-clear'], + handler = new MessageHandler('org.w3.clearkey', encryptedcontentitem), + configEncrypted = { video: document.getElementById('videoelement'), + keysystem: 'org.w3.clearkey', + messagehandler: handler.messagehandler, + audioPath: encryptedcontentitem.audio.path, + videoPath: encryptedcontentitem.video.path, + audioType: encryptedcontentitem.audio.type, + videoType: encryptedcontentitem.video.type, + duration: 4, + initDataType: 'keyids', + initData: getInitData(encryptedcontentitem, 'keyids'), + }, + configClear = { audioPath: clearcontentitem.audio.path, + videoPath: clearcontentitem.video.path, + audioType: clearcontentitem.audio.type, + videoType: clearcontentitem.video.type, + duration: 4, + }; + + runTest(configEncrypted,configClear); + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-temporary-encrypted-clear-segmented-sources.js b/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-temporary-encrypted-clear-segmented-sources.js new file mode 100644 index 00000000000..8f5af2cd6bd --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-temporary-encrypted-clear-segmented-sources.js @@ -0,0 +1,109 @@ +function runTest(configEncrypted,configClear,qualifier) { + + var testname = testnamePrefix(qualifier, configEncrypted.keysystem) + + ', temporary, ' + + /video\/([^;]*)/.exec(configEncrypted.videoType)[1] + + ', playback, encrypted and clear sources in separate segments'; + + var configuration = { initDataTypes: [ configEncrypted.initDataType ], + audioCapabilities: [ { contentType: configEncrypted.audioType } ], + videoCapabilities: [ { contentType: configEncrypted.videoType } ], + sessionTypes: [ 'temporary' ] }; + + async_test(function(test) { + var didAppendEncrypted = false, + _video = configEncrypted.video, + _mediaKeys, + _mediaKeySession, + _mediaSource, + _sourceBuffer; + + function onFailure(error) { + forceTestFailureFromPromise(test, error); + } + + function onVideoError(event) { + var message = (_video.error || {}).message || 'Got unknown error from <video>'; + forceTestFailureFromPromise(test, new Error(message)); + } + + function onMessage(event) { + assert_equals(event.target, _mediaKeySession); + assert_true(event instanceof window.MediaKeyMessageEvent); + assert_equals(event.type, 'message'); + assert_in_array(event.messageType, ['license-request', 'individualization-request']); + + configEncrypted.messagehandler(event.messageType, event.message).then(function(response) { + return _mediaKeySession.update(response); + }).catch(onFailure); + } + + function onEncrypted(event) { + assert_equals(event.target, _video); + assert_true(event instanceof window.MediaEncryptedEvent); + assert_equals(event.type, 'encrypted'); + + var initDataType = configEncrypted.initDataType || event.initDataType; + var initData = configEncrypted.initData || event.initData; + + _mediaKeySession = _mediaKeys.createSession('temporary'); + waitForEventAndRunStep('message', _mediaKeySession, onMessage, test); + _mediaKeySession.generateRequest(initDataType, initData).catch(onFailure); + } + + function onPlaying(event) { + // Not using waitForEventAndRunStep() to avoid too many + // EVENT(onTimeUpdate) logs. + _video.addEventListener('timeupdate', onTimeupdate, true); + } + + function onTimeupdate(event) { + if (_video.currentTime > (configEncrypted.duration || 1) + (configClear.duration || 1)) { + _video.pause(); + test.done(); + } + if (_video.currentTime > 1 && !didAppendEncrypted) { + didAppendEncrypted = true; + _sourceBuffer.timestampOffset = configClear.duration; + fetchAndAppend(configEncrypted.videoPath).then(function() { + _mediaSource.endOfStream(); + }).catch(onFailure); + } + } + + function fetchAndAppend(path) { + return fetch(path).then(function(response) { + if (!response.ok) throw new Error('Resource fetch failed'); + return response.arrayBuffer(); + }).then(function(data) { + return new Promise(function(resolve, reject) { + _sourceBuffer.appendBuffer(data); + _sourceBuffer.addEventListener('updateend', resolve); + _sourceBuffer.addEventListener('error', reject); + }); + }); + } + + _video.addEventListener('error', onVideoError); + navigator.requestMediaKeySystemAccess(configEncrypted.keysystem, [configuration]).then(function(access) { + return access.createMediaKeys(); + }).then(function(mediaKeys) { + _mediaKeys = mediaKeys; + return _video.setMediaKeys(_mediaKeys); + }).then(function(){ + waitForEventAndRunStep('encrypted', _video, onEncrypted, test); + waitForEventAndRunStep('playing', _video, onPlaying, test); + + return new Promise(function(resolve, reject) { + _mediaSource = new MediaSource(); + _mediaSource.addEventListener('sourceopen', resolve); + _video.src = URL.createObjectURL(_mediaSource); + }); + }).then(function() { + _sourceBuffer = _mediaSource.addSourceBuffer(configEncrypted.videoType); + return fetchAndAppend(configClear.videoPath); + }).then(function() { + _video.play(); + }).catch(onFailure); + }, testname); +} diff --git a/tests/wpt/web-platform-tests/feature-policy/experimental-features/vertical-scroll-touch-action-manual.tentative.html b/tests/wpt/web-platform-tests/feature-policy/experimental-features/vertical-scroll-touch-action-manual.tentative.html index 03da3704403..c1b5f1d0762 100644 --- a/tests/wpt/web-platform-tests/feature-policy/experimental-features/vertical-scroll-touch-action-manual.tentative.html +++ b/tests/wpt/web-platform-tests/feature-policy/experimental-features/vertical-scroll-touch-action-manual.tentative.html @@ -1,4 +1,5 @@ <!doctype html> +<meta name="timeout" content="long"> <title>vertical-scroll test for touch-action</title> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> diff --git a/tests/wpt/web-platform-tests/feature-policy/resources/featurepolicy.js b/tests/wpt/web-platform-tests/feature-policy/resources/featurepolicy.js index 55c7f98a8db..f3784b2adfd 100644 --- a/tests/wpt/web-platform-tests/feature-policy/resources/featurepolicy.js +++ b/tests/wpt/web-platform-tests/feature-policy/resources/featurepolicy.js @@ -22,7 +22,7 @@ function assert_feature_policy_supported() { // attribute. "feature_name" is the feature name of a policy controlled // feature (https://wicg.github.io/feature-policy/#features). // See examples at: -// https://github.com/WICG/feature-policy/blob/gh-pages/features.md +// https://github.com/WICG/feature-policy/blob/master/features.md // allow_attribute: Optional argument, only used for testing fullscreen or // payment: either "allowfullscreen" or "allowpaymentrequest" is passed. function test_feature_availability( diff --git a/tests/wpt/web-platform-tests/fetch/api/request/request-keepalive-quota.html b/tests/wpt/web-platform-tests/fetch/api/request/request-keepalive-quota.html index 19596cea2c8..f71b1b2996a 100644 --- a/tests/wpt/web-platform-tests/fetch/api/request/request-keepalive-quota.html +++ b/tests/wpt/web-platform-tests/fetch/api/request/request-keepalive-quota.html @@ -6,9 +6,13 @@ <meta name="help" href="https://fetch.spec.whatwg.org/#request"> <meta name="help" href="https://fetch.spec.whatwg.org/#body-mixin"> <meta name="author" title="Microsoft Edge" href="https://www.microsoft.com"> - <meta name="timeout" content="long"> + <meta name="variant" content="?include=fast"> + <meta name="variant" content="?include=slow-1"> + <meta name="variant" content="?include=slow-2"> + <meta name="variant" content="?include=slow-3"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> + <script src="/common/subset-tests-by-key.js"></script> </head> <body> <script> @@ -38,22 +42,22 @@ } // Test 1 Byte - promise_test(function(test) { + subsetTestByKey("fast", promise_test, function(test) { return fetchKeepAliveRequest(noDelay, 1 /* bodySize */); }, 'A Keep-Alive fetch() with a small body should succeed.'); // Test Quota full limit - promise_test(function(test) { + subsetTestByKey("fast", promise_test, function(test) { return fetchKeepAliveRequest(noDelay, expectedQuota /* bodySize */); }, 'A Keep-Alive fetch() with a body at the Quota Limit should succeed.'); // Test Quota + 1 Byte - promise_test(function(test) { + subsetTestByKey("fast", promise_test, function(test) { return promise_rejects(test, TypeError(), fetchKeepAliveRequest(noDelay, expectedQuota + 1)); }, 'A Keep-Alive fetch() with a body over the Quota Limit should reject.'); // Test the Quota becomes available upon promise completion. - promise_test(function (test) { + subsetTestByKey("slow-1", promise_test, function (test) { // Fill our Quota then try to send a second fetch. return fetchKeepAliveRequest(standardDelay, expectedQuota).then(() => { // Now validate that we can send another Keep-Alive fetch for the full size of the quota. @@ -62,7 +66,7 @@ }, 'A Keep-Alive fetch() should return its allocated Quota upon promise resolution.'); // Ensure only the correct amount of Quota becomes available when a fetch completes. - promise_test(function(test) { + subsetTestByKey("slow-2", promise_test, function(test) { // Create a fetch that uses all but 1 Byte of the Quota and runs for 2x as long as the other requests. const first = fetchKeepAliveRequest(standardDelay * 2, expectedQuota - 1); @@ -79,7 +83,7 @@ }, 'A Keep-Alive fetch() should return only its allocated Quota upon promise resolution.'); // Test rejecting a fetch() after the quota is used up. - promise_test(function (test) { + subsetTestByKey("slow-3", promise_test, function (test) { // Fill our Quota then try to send a second fetch. const p = fetchKeepAliveRequest(standardDelay, expectedQuota); diff --git a/tests/wpt/web-platform-tests/fetch/cross-origin-resource-policy/fetch-in-service-worker.html b/tests/wpt/web-platform-tests/fetch/cross-origin-resource-policy/fetch-in-service-worker.html new file mode 100644 index 00000000000..e493904e2dc --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/cross-origin-resource-policy/fetch-in-service-worker.html @@ -0,0 +1,12 @@ +<!DOCTYPE html> +<title>Cross-Origin-Resource-Policy in Service Worker</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/service-workers/service-worker/resources/test-helpers.sub.js"></script> +<script> + +service_worker_test( + 'fetch.any.js', + 'fetch.any.js test'); + +</script> diff --git a/tests/wpt/web-platform-tests/fetch/cross-origin-resource-policy/fetch.html b/tests/wpt/web-platform-tests/fetch/cross-origin-resource-policy/fetch.any.js index 7cf8d60050a..758c52a695a 100644 --- a/tests/wpt/web-platform-tests/fetch/cross-origin-resource-policy/fetch.html +++ b/tests/wpt/web-platform-tests/fetch/cross-origin-resource-policy/fetch.any.js @@ -1,17 +1,17 @@ -<!DOCTYPE html> -<html> -<head> - <script src="/resources/testharness.js"></script> - <script src="/resources/testharnessreport.js"></script> - <script src="/common/get-host-info.sub.js"></script> -</head> -<body> - <script> +// META: script=/common/get-host-info.sub.js +// META: script=/resources/testharness.js + +if (!self.document) { + importScripts("/resources/testharness.js"); + importScripts("/common/get-host-info.sub.js"); +} + const host = get_host_info(); -const localBaseURL = host.HTTP_ORIGIN + window.location.pathname.replace(/\/[^\/]*$/, '/') ; -const sameSiteBaseURL = "http://" + host.ORIGINAL_HOST + ":" + host.HTTP_PORT2 + window.location.pathname.replace(/\/[^\/]*$/, '/') ; -const notSameSiteBaseURL = host.HTTP_NOTSAMESITE_ORIGIN + window.location.pathname.replace(/\/[^\/]*$/, '/') ; -const httpsBaseURL = host.HTTPS_ORIGIN + window.location.pathname.replace(/\/[^\/]*$/, '/') ; +const path = "/fetch/cross-origin-resource-policy/"; +const localBaseURL = host.HTTP_ORIGIN + path; +const sameSiteBaseURL = "http://" + host.ORIGINAL_HOST + ":" + host.HTTP_PORT2 + path; +const notSameSiteBaseURL = host.HTTP_NOTSAMESITE_ORIGIN + path; +const httpsBaseURL = host.HTTPS_ORIGIN + path; promise_test(async () => { const response = await fetch("./resources/hello.py?corp=same-origin"); @@ -78,6 +78,3 @@ promise_test(async (test) => { return promise_rejects(test, new TypeError, fetch(notSameSiteBaseURL + "resources/redirect.py?corp=same-origin&redirectTo=" + encodeURIComponent(finalURL), { mode: "no-cors" })); }, "Cross-origin no-cors fetch with a 'Cross-Origin-Resource-Policy: same-origin' redirect response header."); - </script> -</body> -</html> diff --git a/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-and-exit-iframe-manual.html b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-and-exit-iframe-manual.html index fc7f57525c6..dc2a99c1e83 100644 --- a/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-and-exit-iframe-manual.html +++ b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-and-exit-iframe-manual.html @@ -37,6 +37,6 @@ async_test(t => { document.onfullscreenerror = t.unreached_func('fullscreenerror event'); iframeDoc.onfullscreenerror = t.unreached_func('iframe fullscreenerror event'); - trusted_request(t, iframeBody, document.body); + trusted_request(t, iframeBody, iframeBody); }); </script> diff --git a/tests/wpt/web-platform-tests/fullscreen/model/move-to-fullscreen-iframe-manual.html b/tests/wpt/web-platform-tests/fullscreen/model/move-to-fullscreen-iframe-manual.html index 683865a0e00..69082cacc2b 100644 --- a/tests/wpt/web-platform-tests/fullscreen/model/move-to-fullscreen-iframe-manual.html +++ b/tests/wpt/web-platform-tests/fullscreen/model/move-to-fullscreen-iframe-manual.html @@ -10,7 +10,7 @@ async_test(t => { const iframeDoc = iframe.contentDocument; // Enter fullscreen for the iframe's body element. - trusted_request(t, iframeDoc.body, document.body); + trusted_request(t, iframeDoc.body, iframeDoc.body); document.onfullscreenchange = t.step_func(() => { assert_equals(document.fullscreenElement, iframe, "document's initial fullscreen element"); assert_equals(iframeDoc.fullscreenElement, iframeDoc.body, "iframe's initial fullscreen element"); diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/scroll-to-fragid/004.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/scroll-to-fragid/004.html index 950172d7b99..c365c6fd29f 100644 --- a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/scroll-to-fragid/004.html +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/scroll-to-fragid/004.html @@ -15,7 +15,7 @@ t.step(function() { t.step_func(function(e) { assert_equals(e.target, window); assert_equals(e.type, "hashchange"); - assert_true(e.bubbles, "bubbles"); + assert_false(e.bubbles, "bubbles"); assert_false(e.cancelable, "cancelable"); t.done(); }), true) diff --git a/tests/wpt/web-platform-tests/html/scripting/the-noscript-element/non-html-noscript.html b/tests/wpt/web-platform-tests/html/scripting/the-noscript-element/non-html-noscript.html new file mode 100644 index 00000000000..2f85d1d47dc --- /dev/null +++ b/tests/wpt/web-platform-tests/html/scripting/the-noscript-element/non-html-noscript.html @@ -0,0 +1,16 @@ +<!doctype html> +<title>noscript rules don't apply to non-html elements</title> +<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/#the-noscript-element"> +<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1470150"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<body> +<script> +test(function() { + let non_html_noscript = document.createElementNS("http://www.w3.org/2000/svg", "noscript"); + document.body.appendChild(non_html_noscript); + assert_not_equals(getComputedStyle(non_html_noscript).display, "none"); +}, "Non-HTML <noscript> element shouldn't be undisplayed by a UA rule"); +</script> +</body> diff --git a/tests/wpt/web-platform-tests/infrastructure/assumptions/html-elements.html b/tests/wpt/web-platform-tests/infrastructure/assumptions/html-elements.html index 1cfe1d1fee5..3fe3d201ff6 100644 --- a/tests/wpt/web-platform-tests/infrastructure/assumptions/html-elements.html +++ b/tests/wpt/web-platform-tests/infrastructure/assumptions/html-elements.html @@ -67,7 +67,9 @@ test(function() { for (var i = 0; i < a_styles.length; i++) { var property = a_styles[i]; assert_equals(property, b_styles[i], "Same property on div.a and div.b"); - assert_equals(a_styles[property], b_styles[property], "Different value for " + property); + if (property !== "unicode-bidi") { + assert_equals(a_styles[property], b_styles[property], "Different value for " + property); + } } }, "Compare CSS div definitions (only valid if pre-reqs pass)"); diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/assumptions/html-elements.html.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/assumptions/html-elements.html.ini deleted file mode 100644 index 93a497dc562..00000000000 --- a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/assumptions/html-elements.html.ini +++ /dev/null @@ -1,6 +0,0 @@ -[html-elements.html] - [Compare CSS div definitions (only valid if pre-reqs pass)] - expected: - if product == "chrome": FAIL - - diff --git a/tests/wpt/web-platform-tests/interfaces/DOM-Parsing.idl b/tests/wpt/web-platform-tests/interfaces/DOM-Parsing.idl index 11d5d8bc372..71d659bac1f 100644 --- a/tests/wpt/web-platform-tests/interfaces/DOM-Parsing.idl +++ b/tests/wpt/web-platform-tests/interfaces/DOM-Parsing.idl @@ -1,6 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the DOM Parsing and Serialization spec. -// See https://w3c.github.io/DOM-Parsing/ +// Content of this file was automatically extracted from the +// "DOM Parsing and Serialization" spec. +// See: https://w3c.github.io/DOM-Parsing/ [Constructor, Exposed=Window] interface DOMParser { @@ -14,18 +15,15 @@ enum SupportedType { "application/xhtml+xml", "image/svg+xml" }; - [Constructor, Exposed=Window] interface XMLSerializer { DOMString serializeToString(Node root); }; - partial interface Element { [CEReactions, TreatNullAs=EmptyString] attribute DOMString innerHTML; [CEReactions, TreatNullAs=EmptyString] attribute DOMString outerHTML; [CEReactions] void insertAdjacentHTML(DOMString position, DOMString text); }; - partial interface Range { [CEReactions, NewObject] DocumentFragment createContextualFragment(DOMString fragment); }; diff --git a/tests/wpt/web-platform-tests/interfaces/cookie-store.idl b/tests/wpt/web-platform-tests/interfaces/cookie-store.idl index b38f61e749d..63ddc090778 100644 --- a/tests/wpt/web-platform-tests/interfaces/cookie-store.idl +++ b/tests/wpt/web-platform-tests/interfaces/cookie-store.idl @@ -1,8 +1,19 @@ // https://github.com/WICG/cookie-store/blob/gh-pages/explainer.md +enum CookieSameSite { + "strict", + "lax", + "unrestricted" +}; + dictionary CookieListItem { USVString name; USVString value; + USVString? domain; + USVString path; + DOMTimeStamp? expires; + boolean secure; + CookieSameSite sameSite; }; typedef sequence<CookieListItem> CookieList; @@ -14,6 +25,7 @@ dictionary CookieChangeEventInit : EventInit { [ Exposed=Window, + SecureContext, Constructor(DOMString type, optional CookieChangeEventInit eventInitDict) ] interface CookieChangeEvent : Event { readonly attribute CookieList changed; @@ -35,7 +47,7 @@ dictionary ExtendableCookieChangeEventInit : ExtendableEventInit { enum CookieMatchType { "equals", - "startsWith" + "starts-with" }; dictionary CookieStoreGetOptions { @@ -50,12 +62,14 @@ dictionary CookieStoreSetOptions { DOMTimeStamp? expires = null; USVString domain; USVString path = "/"; - boolean? secure; + boolean secure = true; boolean httpOnly = false; + CookieSameSite sameSite = "strict"; }; [ - Exposed=(ServiceWorker,Window) + Exposed=(ServiceWorker,Window), + SecureContext ] interface CookieStore : EventTarget { Promise<CookieList?> getAll(USVString name, optional CookieStoreGetOptions options); Promise<CookieList?> getAll(optional CookieStoreGetOptions options); @@ -63,9 +77,6 @@ dictionary CookieStoreSetOptions { Promise<CookieListItem?> get(USVString name, optional CookieStoreGetOptions options); Promise<CookieListItem?> get(optional CookieStoreGetOptions options); - Promise<boolean> has(USVString name, optional CookieStoreGetOptions options); - Promise<boolean> has(optional CookieStoreGetOptions options); - Promise<void> set(USVString name, USVString value, optional CookieStoreSetOptions options); Promise<void> set(CookieStoreSetOptions options); @@ -79,6 +90,7 @@ dictionary CookieStoreSetOptions { [Exposed=Window] attribute EventHandler onchange; }; +[SecureContext] partial interface Window { [Replaceable, SameObject] readonly attribute CookieStore cookieStore; }; diff --git a/tests/wpt/web-platform-tests/interfaces/credential-management.idl b/tests/wpt/web-platform-tests/interfaces/credential-management.idl new file mode 100644 index 00000000000..7c3a928ab5b --- /dev/null +++ b/tests/wpt/web-platform-tests/interfaces/credential-management.idl @@ -0,0 +1,103 @@ +// GENERATED CONTENT - DO NOT EDIT +// Content of this file was automatically extracted from the +// "Credential Management Level 1" spec. +// See: https://w3c.github.io/webappsec-credential-management/ + +[Exposed=Window, SecureContext] +interface Credential { + readonly attribute USVString id; + readonly attribute DOMString type; +}; + +[SecureContext] +interface mixin CredentialUserData { + readonly attribute USVString name; + readonly attribute USVString iconURL; +}; + +partial interface Navigator { + [SecureContext, SameObject] readonly attribute CredentialsContainer credentials; +}; + +[Exposed=Window, SecureContext] +interface CredentialsContainer { + Promise<Credential?> get(optional CredentialRequestOptions options); + Promise<Credential> store(Credential credential); + Promise<Credential?> create(optional CredentialCreationOptions options); + Promise<void> preventSilentAccess(); +}; + +dictionary CredentialData { + required USVString id; +}; + +dictionary CredentialRequestOptions { + CredentialMediationRequirement mediation = "optional"; + AbortSignal signal; +}; + +enum CredentialMediationRequirement { + "silent", + "optional", + "required" +}; + +dictionary CredentialCreationOptions { + AbortSignal signal; +}; + +typedef (FormData or URLSearchParams) CredentialBodyType; + +[Constructor(HTMLFormElement form), + Constructor(PasswordCredentialData data), + Exposed=Window, + SecureContext] +interface PasswordCredential : Credential { + readonly attribute USVString password; +}; +PasswordCredential includes CredentialUserData; + +partial dictionary CredentialRequestOptions { + boolean password = false; +}; + +dictionary PasswordCredentialData : CredentialData { + USVString name; + USVString iconURL; + required USVString password; +}; + +typedef (PasswordCredentialData or HTMLFormElement) PasswordCredentialInit; + +partial dictionary CredentialCreationOptions { + PasswordCredentialInit password; +}; + +[Constructor(FederatedCredentialInit data), + Exposed=Window, + SecureContext] +interface FederatedCredential : Credential { + readonly attribute USVString provider; + readonly attribute DOMString? protocol; +}; +FederatedCredential includes CredentialUserData; + +dictionary FederatedCredentialRequestOptions { + sequence<USVString> providers; + sequence<DOMString> protocols; +}; + +partial dictionary CredentialRequestOptions { + FederatedCredentialRequestOptions federated; +}; + +dictionary FederatedCredentialInit : CredentialData { + USVString name; + USVString iconURL; + required USVString provider; + DOMString protocol; +}; + +partial dictionary CredentialCreationOptions { + FederatedCredentialInit federated; +}; diff --git a/tests/wpt/web-platform-tests/interfaces/mediacapture-image.idl b/tests/wpt/web-platform-tests/interfaces/image-capture.idl index 3aeb6ebfa99..740475d7205 100644 --- a/tests/wpt/web-platform-tests/interfaces/mediacapture-image.idl +++ b/tests/wpt/web-platform-tests/interfaces/image-capture.idl @@ -1,6 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the MediaStream Image Capture spec. -// See https://w3c.github.io/mediacapture-image/ +// Content of this file was automatically extracted from the +// "MediaStream Image Capture" spec. +// See: https://w3c.github.io/mediacapture-image/ [Exposed=Window, Constructor(MediaStreamTrack videoTrack)] interface ImageCapture { diff --git a/tests/wpt/web-platform-tests/interfaces/webappsec-subresource-integrity.idl b/tests/wpt/web-platform-tests/interfaces/webappsec-subresource-integrity.idl new file mode 100644 index 00000000000..899f4710188 --- /dev/null +++ b/tests/wpt/web-platform-tests/interfaces/webappsec-subresource-integrity.idl @@ -0,0 +1,11 @@ +// GENERATED CONTENT - DO NOT EDIT +// Content of this file was automatically extracted from the Subresource Integrity spec. +// See https://w3c.github.io/webappsec-subresource-integrity/ + +partial interface HTMLLinkElement { + attribute DOMString integrity; +}; + +partial interface HTMLScriptElement { + attribute DOMString integrity; +}; diff --git a/tests/wpt/web-platform-tests/lifecycle/META.yml b/tests/wpt/web-platform-tests/lifecycle/META.yml new file mode 100644 index 00000000000..3f09265b002 --- /dev/null +++ b/tests/wpt/web-platform-tests/lifecycle/META.yml @@ -0,0 +1,2 @@ +suggested_reviewers: + - fmeawad diff --git a/tests/wpt/web-platform-tests/lint.whitelist b/tests/wpt/web-platform-tests/lint.whitelist index 948f1df6606..7c9a703cc23 100644 --- a/tests/wpt/web-platform-tests/lint.whitelist +++ b/tests/wpt/web-platform-tests/lint.whitelist @@ -110,6 +110,8 @@ CONSOLE: streams/resources/test-utils.js CONSOLE: service-workers/service-worker/resources/navigation-redirect-other-origin.html CONSOLE: service-workers/service-worker/navigation-redirect.https.html CONSOLE: service-workers/service-worker/resources/clients-get-other-origin.html +CONSOLE: webrtc/tools/* +CONSOLE: webaudio/resources/audit.js:39 # use of console in a public library - annotation-model ensures # it is not actually used diff --git a/tests/wpt/web-platform-tests/mediacapture-image/idlharness.html b/tests/wpt/web-platform-tests/mediacapture-image/idlharness.html index 4b19b5893a7..252281eefa6 100644 --- a/tests/wpt/web-platform-tests/mediacapture-image/idlharness.html +++ b/tests/wpt/web-platform-tests/mediacapture-image/idlharness.html @@ -17,15 +17,21 @@ 'use strict'; promise_test(async () => { - const srcs = ['mediacapture-image', 'mediacapture-main', 'html', 'dom']; + const srcs = ['image-capture', 'mediacapture-main', 'html', 'dom']; const [idl, main, html, dom] = await Promise.all( srcs.map(i => fetch(`/interfaces/${i}.idl`).then(r => r.text()))); - var canvas = document.getElementById('canvas'); - var context = canvas.getContext("2d"); - context.fillStyle = "red"; - context.fillRect(0, 0, 10, 10); - var track = canvas.captureStream().getVideoTracks()[0]; + let capture; + try { + var canvas = document.getElementById('canvas'); + var context = canvas.getContext("2d"); + context.fillStyle = "red"; + context.fillRect(0, 0, 10, 10); + var track = canvas.captureStream().getVideoTracks()[0]; + capture = new ImageCapture(track); + } catch (e) { + // Will be surfaced in idlharness.js's test_object below. + } var idl_array = new IdlArray(); idl_array.add_idls(idl); @@ -33,7 +39,7 @@ idl_array.add_dependency_idls(html); idl_array.add_dependency_idls(dom); idl_array.add_objects({ - ImageCapturer : [new ImageCapture(track)] + ImageCapture : [capture] }); idl_array.test(); }, 'Test mediacapture-image IDL interfaces'); diff --git a/tests/wpt/web-platform-tests/payment-request/PaymentMethodChangeEvent/methodDetails-attribute.https.html b/tests/wpt/web-platform-tests/payment-request/PaymentMethodChangeEvent/methodDetails-attribute.https.html index 331e8ef2b36..a478c559d49 100644 --- a/tests/wpt/web-platform-tests/payment-request/PaymentMethodChangeEvent/methodDetails-attribute.https.html +++ b/tests/wpt/web-platform-tests/payment-request/PaymentMethodChangeEvent/methodDetails-attribute.https.html @@ -19,3 +19,4 @@ test(() => { assert_equals(test, "pass"); assert_equals(event.methodDetails, methodDetails); }, "Must have a methodDetails IDL attribute, which is initialized with to the methodName dictionary value"); +</script> diff --git a/tests/wpt/web-platform-tests/payment-request/PaymentMethodChangeEvent/methodName-attribute.https.html b/tests/wpt/web-platform-tests/payment-request/PaymentMethodChangeEvent/methodName-attribute.https.html index 13ea515bf96..e6e0bf9a919 100644 --- a/tests/wpt/web-platform-tests/payment-request/PaymentMethodChangeEvent/methodName-attribute.https.html +++ b/tests/wpt/web-platform-tests/payment-request/PaymentMethodChangeEvent/methodName-attribute.https.html @@ -14,3 +14,4 @@ test(() => { const { methodName } = event; assert_equals(methodName, "wpt-test"); }, "Must have a methodName IDL attribute, which is initialized with to the methodName dictionary value"); +</script> diff --git a/tests/wpt/web-platform-tests/payment-request/payment-response/complete-method-manual.https.html b/tests/wpt/web-platform-tests/payment-request/payment-response/complete-method-manual.https.html index a67f0664d99..9c87b75b78b 100644 --- a/tests/wpt/web-platform-tests/payment-request/payment-response/complete-method-manual.https.html +++ b/tests/wpt/web-platform-tests/payment-request/payment-response/complete-method-manual.https.html @@ -16,6 +16,9 @@ async function runManualTest({ completeWith: result }, button) { // We .complete() as normal, using the passed test value const promise = response.complete(result); assert_true(promise instanceof Promise, "returns a promise"); + // Immediately calling complete() again yields a rejected promise. + await promise_rejects(t, "InvalidStateError", response.complete(result)); + // but the original promise is unaffected const returnedValue = await promise; assert_equals( returnedValue, @@ -23,17 +26,8 @@ async function runManualTest({ completeWith: result }, button) { "Returned value must always be undefined" ); // We now call .complete() again, to force an exception - // because [[completeCalled]] is true. - try { - await response.complete(result); - assert_unreached("Expected InvalidStateError to be thrown"); - } catch (err) { - assert_equals( - err.code, - DOMException.INVALID_STATE_ERR, - "Must throw an InvalidStateError" - ); - } + // because [[complete]] is true. + await promise_rejects(t, "InvalidStateError", response.complete(result)); button.innerHTML = `✅ ${button.textContent}`; } catch (err) { button.innerHTML = `❌ ${button.textContent}`; diff --git a/tests/wpt/web-platform-tests/permissions/interfaces.any.js b/tests/wpt/web-platform-tests/permissions/interfaces.any.js index c20f422bf43..78f1fc65b79 100644 --- a/tests/wpt/web-platform-tests/permissions/interfaces.any.js +++ b/tests/wpt/web-platform-tests/permissions/interfaces.any.js @@ -11,18 +11,20 @@ if (self.importScripts) { // https://w3c.github.io/permissions/#idl-index promise_test(async () => { + const idl = await fetch("/interfaces/permissions.idl").then(r => r.text()); + const dom = await fetch("/interfaces/dom.idl").then(r => r.text()); + const html = await fetch("/interfaces/html.idl").then(r => r.text()); - const permissions_idl = await fetch("/interfaces/permissions.idl") - .then(response => response.text()); const idl_array = new IdlArray(); - - idl_array.add_untested_idls('interface Navigator {};'); - idl_array.add_untested_idls('[Exposed=(Window,Worker)] interface EventTarget {};'); - idl_array.add_untested_idls('interface EventHandler {};'); - idl_array.add_untested_idls('interface WorkerNavigator {};'); - idl_array.add_idls(permissions_idl); - - self.permissionStatus = await navigator.permissions.query({ name: "geolocation" }); + idl_array.add_idls(idl); + idl_array.add_dependency_idls(dom); + idl_array.add_dependency_idls(html); + + try { + self.permissionStatus = await navigator.permissions.query({ name: "geolocation" }); + } catch (e) { + // Will be surfaced in idlharness.js's test_object below. + } if (self.GLOBAL.isWorker()) { idl_array.add_objects({ WorkerNavigator: ['navigator'] }); diff --git a/tests/wpt/web-platform-tests/quirks/hashless-hex-color.html b/tests/wpt/web-platform-tests/quirks/hashless-hex-color.html deleted file mode 100644 index cbda90c0af7..00000000000 --- a/tests/wpt/web-platform-tests/quirks/hashless-hex-color.html +++ /dev/null @@ -1,498 +0,0 @@ -<!doctype html> -<html> - <head> - <title>The hashless hex color quirk</title> - <meta name="timeout" content="long"> - <script src="/resources/testharness.js"></script> - <script src="/resources/testharnessreport.js"></script> - <style> iframe { width:20px; height:20px; } </style> - </head> - <body> - <div id=log></div> - <iframe id=quirks></iframe> - <iframe id=almost></iframe> - <iframe id=standards></iframe> - <script> - setup({explicit_done:true}); - onload = function() { - var html = "<style id=style></style><div id=test></div><div id=ref></div><svg><circle id=svg /><circle id=svg_ref /></svg>"; - var a_doctype = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">'; - var s_doctype = '<!DOCTYPE HTML>'; - var q = document.getElementById('quirks').contentWindow; - var a = document.getElementById('almost').contentWindow; - var s = document.getElementById('standards').contentWindow; - q.document.open(); - q.document.write(html); - q.document.close(); - a.document.open(); - a.document.write(a_doctype + html); - a.document.close(); - s.document.open(); - s.document.write(s_doctype + html); - s.document.close(); - [q, a, s].forEach(function(win) { - ['style', 'test', 'ref', 'svg', 'svg_ref'].forEach(function(id) { - win[id] = win.document.getElementById(id); - }); - }); - - var tests = [ - {input:"123", q:"#000123"}, - {input:"023", q:"#000023"}, - {input:"003", q:"#000003"}, - {input:"000", q:"#000"}, - {input:"abc", q:"#abc"}, - {input:"ABC", q:"#abc"}, - {input:"1ab", q:"#0001ab"}, - {input:"1AB", q:"#0001ab"}, - {input:"112233", q:"#123"}, - {input:"012233", q:"#012233"}, - {input:"002233", q:"#023"}, - {input:"000233", q:"#000233"}, - {input:"000033", q:"#003"}, - {input:"000003", q:"#000003"}, - {input:"000000", q:"#000000"}, - {input:"aabbcc", q:"#abc"}, - {input:"AABBCC", q:"#abc"}, - {input:"11aabb", q:"#1ab"}, - {input:"11AABB", q:"#1ab"}, - {input:"\\31 23", q:"#123"}, - {input:"\\61 bc", q:"#abc"}, - {input:"\\41 BC", q:"#abc"}, - {input:"\\31 ab", q:"#1ab"}, - {input:"\\31 AB", q:"#1ab"}, - {input:"\\31 12233", q:"#123"}, - {input:"\\61 abbcc", q:"#abc"}, - {input:"\\41 ABBCC", q:"#abc"}, - {input:"\\31 1aabb", q:"#1ab"}, - {input:"\\31 1AABB", q:"#1ab"}, - {input:"12\\33 ", q:"#000123"}, - {input:"1", q:"#000001"}, - {input:"12", q:"#000012"}, - {input:"1234", q:"#001234"}, - {input:"12345", q:"#012345"}, - {input:"1234567"}, - {input:"12345678"}, - {input:"a"}, - {input:"aa"}, - {input:"aaaa"}, - {input:"aaaaa"}, - {input:"aaaaaaa"}, - {input:"aaaaaaaa"}, - {input:"A"}, - {input:"AA"}, - {input:"AAAA"}, - {input:"AAAAA"}, - {input:"AAAAAAA"}, - {input:"AAAAAAAA"}, - {input:"1a", q:"#00001a"}, - {input:"1abc", q:"#001abc"}, - {input:"1abcd", q:"#01abcd"}, - {input:"1abcdef"}, - {input:"1abcdeff"}, - {input:"+1", q:"#000001"}, - {input:"+12", q:"#000012"}, - {input:"+123", q:"#000123"}, - {input:"+1234", q:"#001234"}, - {input:"+12345", q:"#012345"}, - {input:"+123456", q:"#123456"}, - {input:"+1234567"}, - {input:"+12345678"}, - {input:"-1"}, - {input:"-12"}, - {input:"-123"}, - {input:"-1234"}, - {input:"-12345"}, - {input:"-123456"}, - {input:"-1234567"}, - {input:"-12345678"}, - {input:"+1a", q:"#00001a"}, - {input:"+12a", q:"#00012a"}, - {input:"+123a", q:"#00123a"}, - {input:"+1234a", q:"#01234a"}, - {input:"+12345a", q:"#12345a"}, - {input:"+123456a"}, - {input:"+1234567a"}, - {input:"-1a"}, - {input:"-12a"}, - {input:"-123a"}, - {input:"-1234a"}, - {input:"-12345a"}, - {input:"-123456a"}, - {input:"-1234567a"}, - {input:"-12345678a"}, - {input:"+1A", q:"#00001a"}, - {input:"+12A", q:"#00012a"}, - {input:"+123A", q:"#00123a"}, - {input:"+1234A", q:"#01234a"}, - {input:"+12345A", q:"#12345a"}, - {input:"+123456A"}, - {input:"+1234567A"}, - {input:"-1A"}, - {input:"-12A"}, - {input:"-123A"}, - {input:"-1234A"}, - {input:"-12345A"}, - {input:"-123456A"}, - {input:"-1234567A"}, - {input:"-12345678A"}, - {input:"+a"}, - {input:"+aa"}, - {input:"+aaa"}, - {input:"+aaaa"}, - {input:"+aaaaa"}, - {input:"+aaaaaa"}, - {input:"+aaaaaaa"}, - {input:"+aaaaaaaa"}, - {input:"-a"}, - {input:"-aa"}, - {input:"-aaa"}, - {input:"-aaaa"}, - {input:"-aaaaa"}, - {input:"-aaaaaa"}, - {input:"-aaaaaaa"}, - {input:"-aaaaaaaa"}, - {input:"-aaaaaaaaa"}, - {input:"+A"}, - {input:"+AA"}, - {input:"+AAA"}, - {input:"+AAAA"}, - {input:"+AAAAA"}, - {input:"+AAAAAA"}, - {input:"+AAAAAAA"}, - {input:"+AAAAAAAA"}, - {input:"-A"}, - {input:"-AA"}, - {input:"-AAA"}, - {input:"-AAAA"}, - {input:"-AAAAA"}, - {input:"-AAAAAA"}, - {input:"-AAAAAAA"}, - {input:"-AAAAAAAA"}, - {input:"-AAAAAAAAA"}, - {input:"1.1"}, - {input:"1.11"}, - {input:"1.111"}, - {input:"1.1111"}, - {input:"1.11111"}, - {input:"1.111111"}, - {input:"1.1111111"}, - {input:"+1.1"}, - {input:"+1.11"}, - {input:"+1.111"}, - {input:"+1.1111"}, - {input:"+1.11111"}, - {input:"+1.111111"}, - {input:"+1.1111111"}, - {input:"-1.1"}, - {input:"-1.11"}, - {input:"-1.111"}, - {input:"-1.1111"}, - {input:"-1.11111"}, - {input:"-1.111111"}, - {input:"-1.1111111"}, - {input:"1.1a"}, - {input:"1.11a"}, - {input:"1.111a"}, - {input:"1.1111a"}, - {input:"1.11111a"}, - {input:"1.111111a"}, - {input:"+1.1a"}, - {input:"+1.11a"}, - {input:"+1.111a"}, - {input:"+1.1111a"}, - {input:"+1.11111a"}, - {input:"+1.111111a"}, - {input:"-1.1a"}, - {input:"-1.11a"}, - {input:"-1.111a"}, - {input:"-1.1111a"}, - {input:"-1.11111a"}, - {input:"-1.111111a"}, - {input:"1.0"}, - {input:"11.0"}, - {input:"111.0"}, - {input:"1111.0"}, - {input:"11111.0"}, - {input:"111111.0"}, - {input:"1111111.0"}, - {input:"11111111.0"}, - {input:"+1.0"}, - {input:"+11.0"}, - {input:"+111.0"}, - {input:"+1111.0"}, - {input:"+11111.0"}, - {input:"+111111.0"}, - {input:"+1111111.0"}, - {input:"+11111111.0"}, - {input:"-1.0"}, - {input:"-11.0"}, - {input:"-111.0"}, - {input:"-1111.0"}, - {input:"-11111.0"}, - {input:"-111111.0"}, - {input:"-1111111.0"}, - {input:"-11111111.0"}, - {input:"1.0a"}, - {input:"11.0a"}, - {input:"111.0a"}, - {input:"1111.0a"}, - {input:"11111.0a"}, - {input:"111111.0a"}, - {input:"1111111.0a"}, - {input:"+1.0a"}, - {input:"+11.0a"}, - {input:"+111.0a"}, - {input:"+1111.0a"}, - {input:"+11111.0a"}, - {input:"+111111.0a"}, - {input:"+1111111.0a"}, - {input:"-1.0a"}, - {input:"-11.0a"}, - {input:"-111.0a"}, - {input:"-1111.0a"}, - {input:"-11111.0a"}, - {input:"-111111.0a"}, - {input:"-1111111.0a"}, - {input:"+/**/123"}, - {input:"-/**/123"}, - {input:"+/**/123456"}, - {input:"-/**/123456"}, - {input:"+/**/abc"}, - {input:"-/**/abc"}, - {input:"+/**/abcdef"}, - {input:"-/**/abcdef"}, - {input:"+/**/12a"}, - {input:"-/**/12a"}, - {input:"+/**/12345a"}, - {input:"-/**/12345a"}, - {input:"abg"}, - {input:"aabbcg"}, - {input:"1ag"}, - {input:"1122ag"}, - {input:"ABG"}, - {input:"AABBCG"}, - {input:"1AG"}, - {input:"1122AG"}, - {input:"@a"}, - {input:"@ab"}, - {input:"@abc"}, - {input:"@abcd"}, - {input:"@abcde"}, - {input:"@abcdef"}, - {input:"@1"}, - {input:"@11"}, - {input:"@111"}, - {input:"@1111"}, - {input:"@11111"}, - {input:"@111111"}, - {input:"@1a"}, - {input:"@11a"}, - {input:"@111a"}, - {input:"@1111a"}, - {input:"@11111a"}, - {input:'"a"'}, - {input:'"ab"'}, - {input:'"abc"'}, - {input:'"abcd"'}, - {input:'"abcde"'}, - {input:'"abcdef"'}, - {input:'"1"'}, - {input:'"11"'}, - {input:'"111"'}, - {input:'"1111"'}, - {input:'"11111"'}, - {input:'"111111"'}, - {input:'"1a"'}, - {input:'"11a"'}, - {input:'"111a"'}, - {input:'"1111a"'}, - {input:'"11111a"'}, - {input:"url(a)", svg:'url(a)'}, - {input:"url(aa)", svg:'url(aa)'}, - {input:"url(aaa)", svg:'url(aaa)'}, - {input:"url(aaaa)", svg:'url(aaaa)'}, - {input:"url(aaaaa)", svg:'url(aaaaa)'}, - {input:"url(aaaaaa)", svg:'url(aaaaaa)'}, - {input:"url('a')", svg:'url(a)'}, - {input:"url('aa')", svg:'url(aa)'}, - {input:"url('aaa')", svg:'url(aaa)'}, - {input:"url('aaaa')", svg:'url(aaaa)'}, - {input:"url('aaaaa')", svg:'url(aaaaa)'}, - {input:"url('aaaaaa')", svg:'url(aaaaaa)'}, - {input:"#a"}, - {input:"#aa"}, - {input:"#aaaaa"}, - {input:"#aaaaaaa"}, - {input:"#1"}, - {input:"#11"}, - {input:"#11111"}, - {input:"#1111111"}, - {input:"#1a"}, - {input:"#1111a"}, - {input:"#111111a"}, - {input:"1%"}, - {input:"11%"}, - {input:"111%"}, - {input:"1111%"}, - {input:"11111%"}, - {input:"111111%"}, - {input:"calc(123)"}, - {input:"rgb(119, 255, 255)", q:"#7ff", s:"#7ff", svg:"#7ff"}, - {input:"rgba(119, 255, 255, 001)", q:"#7ff", s:"#7ff", svg:"#7ff"}, - {input:"hsl(100, 100%, 100%)", q:"#fff", s:"#fff", svg:"#fff"}, - {input:"hsla(100, 100%, 100%, 001)", q:"#fff", s:"#fff", svg:"#fff"}, - {input:"rgb(calc(100 + 155), 255, 255)", q:"#fff", s:"#fff", svg:"#fff"}, - {input:"rgba(calc(100 + 155), 255, 255, 001)", q:"#fff", s:"#fff", svg:"#fff"}, - {input:"hsl(calc(050 + 050), 100%, 100%)", q:"#fff", s:"#fff", svg:"#fff"}, - {input:"hsla(calc(050 + 050), 100%, 100%, 001)", q:"#fff", s:"#fff", svg:"#fff"}, - {input:"rgb(/**/255, 255, 255)", q:"#fff", s:"#fff", svg:"#fff"}, - {input:"rgb(/**/255/**/, /**/255/**/, /**/255/**/)", q:"#fff", s:"#fff", svg:"#fff"}, - {input:"rgb(calc(/**/100/**/ + /**/155/**/), 255, 255)", q:"#fff", s:"#fff", svg:"#fff"}, - {input:"#123 123 abc 12a", q:"#123 #000123 #abc #00012a", shorthand:true}, - {input:"rgb(119, 255, 255) 123", q:"#7ff #000123", shorthand:true}, - {input:"123 rgb(119, 255, 255)", q:"#000123 #7ff", shorthand:true}, - {input:"1e1"}, - {input:"11e1"}, - {input:"111e1"}, - {input:"1111e1"}, - {input:"11111e1"}, - {input:"111111e1"}, - {input:"1e+1"}, - {input:"11e+1"}, - {input:"111e+1"}, - {input:"1111e+1"}, - {input:"11111e+1"}, - {input:"111111e+1"}, - {input:"1e-0"}, - {input:"11e-0"}, - {input:"111e-0"}, - {input:"1111e-0"}, - {input:"11111e-0"}, - {input:"111111e-0"}, - {input:"1e1a"}, - {input:"11e1a"}, - {input:"111e1a"}, - {input:"1111e1a"}, - {input:"11111e1a"}, - {input:"111111e1a"}, - {desc:"1111111111...", input:"1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"}, - {desc:"1111111111...a", input:"1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111a"}, - {desc:"a1111111111...", input:"a1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"}, - ]; - - var props = [ - {prop:'background-color', check:'background-color'}, - {prop:'border-color', check:'border-top-color', check_also:['border-right-color', 'border-bottom-color', 'border-left-color']}, - {prop:'border-top-color', check:'border-top-color'}, - {prop:'border-right-color', check:'border-right-color'}, - {prop:'border-bottom-color', check:'border-bottom-color'}, - {prop:'border-left-color', check:'border-left-color'}, - {prop:'color', check:'color'}, - ]; - var style_template = '#test{{prop}:{test};}' + - '#ref{{prop}:{ref};}'; - - tests.forEach(function(t) { - var name = t.desc || t.input; - var test_q = async_test(name + ' (quirks)'); - var test_a = async_test(name + ' (almost standards)'); - var test_s = async_test(name + ' (standards)'); - var test_svg = async_test(name + ' (SVG)'); - for (var i in props) { - if (t.shorthand && !(props[i].check_also)) { - continue; - } - test_q.step(function() { - q.style.textContent = style_template.replace('{test}', t.input) - .replace('{ref}', t.q).replace(/\{prop\}/g, props[i].prop); - assert_equals(q.getComputedStyle(q.test).getPropertyValue(props[i].check), - q.getComputedStyle(q.ref).getPropertyValue(props[i].check), - props[i].prop); - if (t.shorthand && props[i].check_also) { - for (var j in props[i].check_also) { - assert_equals(q.getComputedStyle(q.test).getPropertyValue(props[i].check_also[j]), - q.getComputedStyle(q.ref).getPropertyValue(props[i].check_also[j]), - props[i].prop + ' checking ' + props[i].check_also[j]); - } - } - }); - test_a.step(function() { - a.style.textContent = style_template.replace('{test}', t.input) - .replace('{ref}', t.s).replace(/\{prop\}/g, props[i].prop); - assert_equals(a.getComputedStyle(a.test).getPropertyValue(props[i].check), - a.getComputedStyle(a.ref).getPropertyValue(props[i].check), - props[i].prop); - if (t.shorthand && props[i].check_also) { - for (var j in props[i].check_also) { - assert_equals(a.getComputedStyle(q.test).getPropertyValue(props[i].check_also[j]), - a.getComputedStyle(q.ref).getPropertyValue(props[i].check_also[j]), - props[i].prop + ' checking ' + props[i].check_also[j]); - } - } - }); - test_s.step(function() { - s.style.textContent = style_template.replace('{test}', t.input) - .replace('{ref}', t.s).replace(/\{prop\}/g, props[i].prop); - assert_equals(s.getComputedStyle(s.test).getPropertyValue(props[i].check), - s.getComputedStyle(s.ref).getPropertyValue(props[i].check), - props[i].prop); - if (t.shorthand && props[i].check_also) { - for (var j in props[i].check_also) { - assert_equals(s.getComputedStyle(q.test).getPropertyValue(props[i].check_also[j]), - s.getComputedStyle(q.ref).getPropertyValue(props[i].check_also[j]), - props[i].prop + ' checking ' + props[i].check_also[j]); - } - } - }); - test_svg.step(function() { - q.svg.setAttribute('fill', t.input); - a.svg.setAttribute('fill', t.input); - s.svg.setAttribute('fill', t.input); - if (t.svg) { - q.svg_ref.setAttribute('fill', t.svg); - a.svg_ref.setAttribute('fill', t.svg); - s.svg_ref.setAttribute('fill', t.svg); - } else { - q.svg_ref.removeAttribute('fill'); - a.svg_ref.removeAttribute('fill'); - s.svg_ref.removeAttribute('fill'); - } - assert_equals(q.getComputedStyle(q.svg).fill, q.getComputedStyle(q.svg_ref).fill, 'SVG fill="" in quirks mode'); - assert_equals(a.getComputedStyle(a.svg).fill, a.getComputedStyle(a.svg_ref).fill, 'SVG fill="" in almost standards mode'); - assert_equals(s.getComputedStyle(s.svg).fill, s.getComputedStyle(s.svg_ref).fill, 'SVG fill="" in standards mode'); - }); - } - test_q.done(); - test_a.done(); - test_s.done(); - test_svg.done(); - }); - - var other_tests = [ - {input:'background:abc', prop:'background-color'}, - {input:'border-top:1px solid abc', prop:'border-top-color'}, - {input:'border-right:1px solid abc', prop:'border-right-color'}, - {input:'border-bottom:1px solid abc', prop:'border-bottom-color'}, - {input:'border-left:1px solid abc', prop:'border-left-color'}, - {input:'border:1px solid abc', prop:'border-top-color'}, - {input:'outline-color:abc', prop:'outline-color'}, - {input:'outline:1px solid abc', prop:'outline-color'} - ]; - - var other_template = "#test{{test};}" - - other_tests.forEach(function(t) { - test(function() { - q.style.textContent = other_template.replace('{test}', t.input); - assert_equals(q.getComputedStyle(q.test).getPropertyValue(t.prop), - q.getComputedStyle(q.ref).getPropertyValue(t.prop), - 'quirk was supported'); - }, document.title+', excluded property '+t.input); - }); - - done(); - } - </script> - </body> -</html> diff --git a/tests/wpt/web-platform-tests/quirks/hashless-hex-color/limited-quirks.html b/tests/wpt/web-platform-tests/quirks/hashless-hex-color/limited-quirks.html new file mode 100644 index 00000000000..f7dd7ed4bd4 --- /dev/null +++ b/tests/wpt/web-platform-tests/quirks/hashless-hex-color/limited-quirks.html @@ -0,0 +1,16 @@ +<!doctype html> +<html> + <head> + <title>The hashless hex color quirk (limited-quirks)</title> + <meta name="timeout" content="long"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <style> iframe { width:20px; height:20px; } </style> + </head> + <body> + <div id=log></div> + <iframe class=limited-quirks></iframe> + <script src=../support/test-ref-iframe.js></script> + <script src=support/common.js></script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/quirks/hashless-hex-color/no-quirks.html b/tests/wpt/web-platform-tests/quirks/hashless-hex-color/no-quirks.html new file mode 100644 index 00000000000..2ea5c666b74 --- /dev/null +++ b/tests/wpt/web-platform-tests/quirks/hashless-hex-color/no-quirks.html @@ -0,0 +1,16 @@ +<!doctype html> +<html> + <head> + <title>The hashless hex color quirk (no-quirks)</title> + <meta name="timeout" content="long"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <style> iframe { width:20px; height:20px; } </style> + </head> + <body> + <div id=log></div> + <iframe class=no-quirks></iframe> + <script src=../support/test-ref-iframe.js></script> + <script src=support/common.js></script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/quirks/hashless-hex-color/quirks.html b/tests/wpt/web-platform-tests/quirks/hashless-hex-color/quirks.html new file mode 100644 index 00000000000..bc45da2eab8 --- /dev/null +++ b/tests/wpt/web-platform-tests/quirks/hashless-hex-color/quirks.html @@ -0,0 +1,16 @@ +<!doctype html> +<html> + <head> + <title>The hashless hex color quirk (quirks)</title> + <meta name="timeout" content="long"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <style> iframe { width:20px; height:20px; } </style> + </head> + <body> + <div id=log></div> + <iframe class=quirks></iframe> + <script src=../support/test-ref-iframe.js></script> + <script src=support/common.js></script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/quirks/hashless-hex-color/support/common.js b/tests/wpt/web-platform-tests/quirks/hashless-hex-color/support/common.js new file mode 100644 index 00000000000..eea618050da --- /dev/null +++ b/tests/wpt/web-platform-tests/quirks/hashless-hex-color/support/common.js @@ -0,0 +1,423 @@ +setup({explicit_done:true}); +onload = function() { + setupIframe(); + + var tests = [ + {input:"123", q:"#000123"}, + {input:"023", q:"#000023"}, + {input:"003", q:"#000003"}, + {input:"000", q:"#000"}, + {input:"abc", q:"#abc"}, + {input:"ABC", q:"#abc"}, + {input:"1ab", q:"#0001ab"}, + {input:"1AB", q:"#0001ab"}, + {input:"112233", q:"#123"}, + {input:"012233", q:"#012233"}, + {input:"002233", q:"#023"}, + {input:"000233", q:"#000233"}, + {input:"000033", q:"#003"}, + {input:"000003", q:"#000003"}, + {input:"000000", q:"#000000"}, + {input:"aabbcc", q:"#abc"}, + {input:"AABBCC", q:"#abc"}, + {input:"11aabb", q:"#1ab"}, + {input:"11AABB", q:"#1ab"}, + {input:"\\31 23", q:"#123"}, + {input:"\\61 bc", q:"#abc"}, + {input:"\\41 BC", q:"#abc"}, + {input:"\\31 ab", q:"#1ab"}, + {input:"\\31 AB", q:"#1ab"}, + {input:"\\31 12233", q:"#123"}, + {input:"\\61 abbcc", q:"#abc"}, + {input:"\\41 ABBCC", q:"#abc"}, + {input:"\\31 1aabb", q:"#1ab"}, + {input:"\\31 1AABB", q:"#1ab"}, + {input:"12\\33 ", q:"#000123"}, + {input:"1", q:"#000001"}, + {input:"12", q:"#000012"}, + {input:"1234", q:"#001234"}, + {input:"12345", q:"#012345"}, + {input:"1234567"}, + {input:"12345678"}, + {input:"a"}, + {input:"aa"}, + {input:"aaaa"}, + {input:"aaaaa"}, + {input:"aaaaaaa"}, + {input:"aaaaaaaa"}, + {input:"A"}, + {input:"AA"}, + {input:"AAAA"}, + {input:"AAAAA"}, + {input:"AAAAAAA"}, + {input:"AAAAAAAA"}, + {input:"1a", q:"#00001a"}, + {input:"1abc", q:"#001abc"}, + {input:"1abcd", q:"#01abcd"}, + {input:"1abcdef"}, + {input:"1abcdeff"}, + {input:"+1", q:"#000001"}, + {input:"+12", q:"#000012"}, + {input:"+123", q:"#000123"}, + {input:"+1234", q:"#001234"}, + {input:"+12345", q:"#012345"}, + {input:"+123456", q:"#123456"}, + {input:"+1234567"}, + {input:"+12345678"}, + {input:"-1"}, + {input:"-12"}, + {input:"-123"}, + {input:"-1234"}, + {input:"-12345"}, + {input:"-123456"}, + {input:"-1234567"}, + {input:"-12345678"}, + {input:"+1a", q:"#00001a"}, + {input:"+12a", q:"#00012a"}, + {input:"+123a", q:"#00123a"}, + {input:"+1234a", q:"#01234a"}, + {input:"+12345a", q:"#12345a"}, + {input:"+123456a"}, + {input:"+1234567a"}, + {input:"-1a"}, + {input:"-12a"}, + {input:"-123a"}, + {input:"-1234a"}, + {input:"-12345a"}, + {input:"-123456a"}, + {input:"-1234567a"}, + {input:"-12345678a"}, + {input:"+1A", q:"#00001a"}, + {input:"+12A", q:"#00012a"}, + {input:"+123A", q:"#00123a"}, + {input:"+1234A", q:"#01234a"}, + {input:"+12345A", q:"#12345a"}, + {input:"+123456A"}, + {input:"+1234567A"}, + {input:"-1A"}, + {input:"-12A"}, + {input:"-123A"}, + {input:"-1234A"}, + {input:"-12345A"}, + {input:"-123456A"}, + {input:"-1234567A"}, + {input:"-12345678A"}, + {input:"+a"}, + {input:"+aa"}, + {input:"+aaa"}, + {input:"+aaaa"}, + {input:"+aaaaa"}, + {input:"+aaaaaa"}, + {input:"+aaaaaaa"}, + {input:"+aaaaaaaa"}, + {input:"-a"}, + {input:"-aa"}, + {input:"-aaa"}, + {input:"-aaaa"}, + {input:"-aaaaa"}, + {input:"-aaaaaa"}, + {input:"-aaaaaaa"}, + {input:"-aaaaaaaa"}, + {input:"-aaaaaaaaa"}, + {input:"+A"}, + {input:"+AA"}, + {input:"+AAA"}, + {input:"+AAAA"}, + {input:"+AAAAA"}, + {input:"+AAAAAA"}, + {input:"+AAAAAAA"}, + {input:"+AAAAAAAA"}, + {input:"-A"}, + {input:"-AA"}, + {input:"-AAA"}, + {input:"-AAAA"}, + {input:"-AAAAA"}, + {input:"-AAAAAA"}, + {input:"-AAAAAAA"}, + {input:"-AAAAAAAA"}, + {input:"-AAAAAAAAA"}, + {input:"1.1"}, + {input:"1.11"}, + {input:"1.111"}, + {input:"1.1111"}, + {input:"1.11111"}, + {input:"1.111111"}, + {input:"1.1111111"}, + {input:"+1.1"}, + {input:"+1.11"}, + {input:"+1.111"}, + {input:"+1.1111"}, + {input:"+1.11111"}, + {input:"+1.111111"}, + {input:"+1.1111111"}, + {input:"-1.1"}, + {input:"-1.11"}, + {input:"-1.111"}, + {input:"-1.1111"}, + {input:"-1.11111"}, + {input:"-1.111111"}, + {input:"-1.1111111"}, + {input:"1.1a"}, + {input:"1.11a"}, + {input:"1.111a"}, + {input:"1.1111a"}, + {input:"1.11111a"}, + {input:"1.111111a"}, + {input:"+1.1a"}, + {input:"+1.11a"}, + {input:"+1.111a"}, + {input:"+1.1111a"}, + {input:"+1.11111a"}, + {input:"+1.111111a"}, + {input:"-1.1a"}, + {input:"-1.11a"}, + {input:"-1.111a"}, + {input:"-1.1111a"}, + {input:"-1.11111a"}, + {input:"-1.111111a"}, + {input:"1.0"}, + {input:"11.0"}, + {input:"111.0"}, + {input:"1111.0"}, + {input:"11111.0"}, + {input:"111111.0"}, + {input:"1111111.0"}, + {input:"11111111.0"}, + {input:"+1.0"}, + {input:"+11.0"}, + {input:"+111.0"}, + {input:"+1111.0"}, + {input:"+11111.0"}, + {input:"+111111.0"}, + {input:"+1111111.0"}, + {input:"+11111111.0"}, + {input:"-1.0"}, + {input:"-11.0"}, + {input:"-111.0"}, + {input:"-1111.0"}, + {input:"-11111.0"}, + {input:"-111111.0"}, + {input:"-1111111.0"}, + {input:"-11111111.0"}, + {input:"1.0a"}, + {input:"11.0a"}, + {input:"111.0a"}, + {input:"1111.0a"}, + {input:"11111.0a"}, + {input:"111111.0a"}, + {input:"1111111.0a"}, + {input:"+1.0a"}, + {input:"+11.0a"}, + {input:"+111.0a"}, + {input:"+1111.0a"}, + {input:"+11111.0a"}, + {input:"+111111.0a"}, + {input:"+1111111.0a"}, + {input:"-1.0a"}, + {input:"-11.0a"}, + {input:"-111.0a"}, + {input:"-1111.0a"}, + {input:"-11111.0a"}, + {input:"-111111.0a"}, + {input:"-1111111.0a"}, + {input:"+/**/123"}, + {input:"-/**/123"}, + {input:"+/**/123456"}, + {input:"-/**/123456"}, + {input:"+/**/abc"}, + {input:"-/**/abc"}, + {input:"+/**/abcdef"}, + {input:"-/**/abcdef"}, + {input:"+/**/12a"}, + {input:"-/**/12a"}, + {input:"+/**/12345a"}, + {input:"-/**/12345a"}, + {input:"abg"}, + {input:"aabbcg"}, + {input:"1ag"}, + {input:"1122ag"}, + {input:"ABG"}, + {input:"AABBCG"}, + {input:"1AG"}, + {input:"1122AG"}, + {input:"@a"}, + {input:"@ab"}, + {input:"@abc"}, + {input:"@abcd"}, + {input:"@abcde"}, + {input:"@abcdef"}, + {input:"@1"}, + {input:"@11"}, + {input:"@111"}, + {input:"@1111"}, + {input:"@11111"}, + {input:"@111111"}, + {input:"@1a"}, + {input:"@11a"}, + {input:"@111a"}, + {input:"@1111a"}, + {input:"@11111a"}, + {input:'"a"'}, + {input:'"ab"'}, + {input:'"abc"'}, + {input:'"abcd"'}, + {input:'"abcde"'}, + {input:'"abcdef"'}, + {input:'"1"'}, + {input:'"11"'}, + {input:'"111"'}, + {input:'"1111"'}, + {input:'"11111"'}, + {input:'"111111"'}, + {input:'"1a"'}, + {input:'"11a"'}, + {input:'"111a"'}, + {input:'"1111a"'}, + {input:'"11111a"'}, + {input:"url(a)", svg:'url(a)'}, + {input:"url(aa)", svg:'url(aa)'}, + {input:"url(aaa)", svg:'url(aaa)'}, + {input:"url(aaaa)", svg:'url(aaaa)'}, + {input:"url(aaaaa)", svg:'url(aaaaa)'}, + {input:"url(aaaaaa)", svg:'url(aaaaaa)'}, + {input:"url('a')", svg:'url(a)'}, + {input:"url('aa')", svg:'url(aa)'}, + {input:"url('aaa')", svg:'url(aaa)'}, + {input:"url('aaaa')", svg:'url(aaaa)'}, + {input:"url('aaaaa')", svg:'url(aaaaa)'}, + {input:"url('aaaaaa')", svg:'url(aaaaaa)'}, + {input:"#a"}, + {input:"#aa"}, + {input:"#aaaaa"}, + {input:"#aaaaaaa"}, + {input:"#1"}, + {input:"#11"}, + {input:"#11111"}, + {input:"#1111111"}, + {input:"#1a"}, + {input:"#1111a"}, + {input:"#111111a"}, + {input:"1%"}, + {input:"11%"}, + {input:"111%"}, + {input:"1111%"}, + {input:"11111%"}, + {input:"111111%"}, + {input:"calc(123)"}, + {input:"rgb(119, 255, 255)", q:"#7ff", s:"#7ff", svg:"#7ff"}, + {input:"rgba(119, 255, 255, 001)", q:"#7ff", s:"#7ff", svg:"#7ff"}, + {input:"hsl(100, 100%, 100%)", q:"#fff", s:"#fff", svg:"#fff"}, + {input:"hsla(100, 100%, 100%, 001)", q:"#fff", s:"#fff", svg:"#fff"}, + {input:"rgb(calc(100 + 155), 255, 255)", q:"#fff", s:"#fff", svg:"#fff"}, + {input:"rgba(calc(100 + 155), 255, 255, 001)", q:"#fff", s:"#fff", svg:"#fff"}, + {input:"hsl(calc(050 + 050), 100%, 100%)", q:"#fff", s:"#fff", svg:"#fff"}, + {input:"hsla(calc(050 + 050), 100%, 100%, 001)", q:"#fff", s:"#fff", svg:"#fff"}, + {input:"rgb(/**/255, 255, 255)", q:"#fff", s:"#fff", svg:"#fff"}, + {input:"rgb(/**/255/**/, /**/255/**/, /**/255/**/)", q:"#fff", s:"#fff", svg:"#fff"}, + {input:"rgb(calc(/**/100/**/ + /**/155/**/), 255, 255)", q:"#fff", s:"#fff", svg:"#fff"}, + {input:"#123 123 abc 12a", q:"#123 #000123 #abc #00012a", shorthand:true}, + {input:"rgb(119, 255, 255) 123", q:"#7ff #000123", shorthand:true}, + {input:"123 rgb(119, 255, 255)", q:"#000123 #7ff", shorthand:true}, + {input:"1e1"}, + {input:"11e1"}, + {input:"111e1"}, + {input:"1111e1"}, + {input:"11111e1"}, + {input:"111111e1"}, + {input:"1e+1"}, + {input:"11e+1"}, + {input:"111e+1"}, + {input:"1111e+1"}, + {input:"11111e+1"}, + {input:"111111e+1"}, + {input:"1e-0"}, + {input:"11e-0"}, + {input:"111e-0"}, + {input:"1111e-0"}, + {input:"11111e-0"}, + {input:"111111e-0"}, + {input:"1e1a"}, + {input:"11e1a"}, + {input:"111e1a"}, + {input:"1111e1a"}, + {input:"11111e1a"}, + {input:"111111e1a"}, + {desc:"1111111111...", input:"1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"}, + {desc:"1111111111...a", input:"1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111a"}, + {desc:"a1111111111...", input:"a1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"}, + ]; + + var props = [ + {prop:'background-color', check:'background-color'}, + {prop:'border-color', check:'border-top-color', check_also:['border-right-color', 'border-bottom-color', 'border-left-color']}, + {prop:'border-top-color', check:'border-top-color'}, + {prop:'border-right-color', check:'border-right-color'}, + {prop:'border-bottom-color', check:'border-bottom-color'}, + {prop:'border-left-color', check:'border-left-color'}, + {prop:'color', check:'color'}, + ]; + var style_template = '#test{{prop}:{test};}' + + '#ref{{prop}:{ref};}'; + + tests.forEach(function(t) { + var name = t.desc || t.input; + var test_html = async_test(name); + var test_svg = async_test(name + ' (SVG)'); + for (var i in props) { + if (t.shorthand && !(props[i].check_also)) { + continue; + } + test_html.step(function() { + win.style.textContent = style_template.replace('{test}', t.input) + .replace('{ref}', quirks ? t.q : t.s).replace(/\{prop\}/g, props[i].prop); + assert_equals(win.getComputedStyle(win.test).getPropertyValue(props[i].check), + win.getComputedStyle(win.ref).getPropertyValue(props[i].check), + props[i].prop); + if (t.shorthand && props[i].check_also) { + for (var j in props[i].check_also) { + assert_equals(win.getComputedStyle(win.test).getPropertyValue(props[i].check_also[j]), + win.getComputedStyle(win.ref).getPropertyValue(props[i].check_also[j]), + props[i].prop + ' checking ' + props[i].check_also[j]); + } + } + }); + test_svg.step(function() { + win.svg.setAttribute('fill', t.input); + if (t.svg) { + win.svg_ref.setAttribute('fill', t.svg); + } else { + win.svg_ref.removeAttribute('fill'); + } + assert_equals(win.getComputedStyle(win.svg).fill, win.getComputedStyle(win.svg_ref).fill, 'SVG fill=""'); + }); + } + test_html.done(); + test_svg.done(); + }); + + if (quirks) { + var other_tests = [ + {input:'background:abc', prop:'background-color'}, + {input:'border-top:1px solid abc', prop:'border-top-color'}, + {input:'border-right:1px solid abc', prop:'border-right-color'}, + {input:'border-bottom:1px solid abc', prop:'border-bottom-color'}, + {input:'border-left:1px solid abc', prop:'border-left-color'}, + {input:'border:1px solid abc', prop:'border-top-color'}, + {input:'outline-color:abc', prop:'outline-color'}, + {input:'outline:1px solid abc', prop:'outline-color'} + ]; + + var other_template = "#test{{test};}" + + other_tests.forEach(function(t) { + test(function() { + win.style.textContent = other_template.replace('{test}', t.input); + assert_equals(win.getComputedStyle(win.test).getPropertyValue(t.prop), + win.getComputedStyle(win.ref).getPropertyValue(t.prop), + 'quirk was supported'); + }, document.title+', excluded property '+t.input); + }); + } + + done(); +} diff --git a/tests/wpt/web-platform-tests/quirks/percentage-height-calculation.html b/tests/wpt/web-platform-tests/quirks/percentage-height-calculation.html index 7cadd8b0faf..987cc245ca2 100644 --- a/tests/wpt/web-platform-tests/quirks/percentage-height-calculation.html +++ b/tests/wpt/web-platform-tests/quirks/percentage-height-calculation.html @@ -64,7 +64,7 @@ {style:'#foo { height:100px } #test { height:calc(100% + 1px) }', body:'<div id=foo><div id=test></div></div>', q:101, s:101}, {style:'#foo { height:100px } #test { height:5px; height:calc(100% + 1px) }', body:'<div id=foo><div><div id=test></div></div></div>', q:0, s:0}, {style:'html { display:inline } #test { height:100% }', body:'<div id=test></div>', q:184, s:0}, // display:inline on root has no effect - {style:'html { margin:10px } body { display:inline } #test { height:100% }', body:'<div id=test></div>', q:200, s:0}, + {style:'html { margin:10px } body { display:inline } #test { height:100% }', body:'<div id=test></div>', q:180, s:0}, {style:'body { margin:0 } #test { height:100% }', body:'<div id=test></div>', q:200, s:0}, {style:'body { margin:0; padding:10px } #test { height:100% }', body:'<div id=test></div>', q:180, s:0}, {style:'body { margin:0; border:10px solid } #test { height:100% }', body:'<div id=test></div>', q:180, s:0}, @@ -118,10 +118,10 @@ {input:'<html xmlns="{html}"><head><style>#test { height:100% }</style></head><body/><div id="test"/></html>', q:200, s:0}, {input:'<html xmlns="{html}"><head><style>#test { height:100% }</style></head><span><body><div id="test"/></body></span></html>', q:200, s:0}, {input:'<html xmlns="{html}"><head><style>#test { height:100% }</style></head><body><body><div id="test"/></body></body></html>', q:200, s:0}, - {input:'<html><head xmlns="{html}"><style>#test { height:100% }</style></head><body xmlns="{html}"><div id="test"/></body></html>', q:200, s:0}, - {input:'<div xmlns="{html}"><head><style>#test { height:100% }</style></head><body><div id="test"/></body></div>', q:200, s:0}, + {input:'<html><head xmlns="{html}"><style>#test { height:100% }</style></head><body xmlns="{html}"><div id="test"/></body></html>', q:184, s:0}, + {input:'<div xmlns="{html}"><head><style>#test { height:100% }</style></head><body><div id="test"/></body></div>', q:184, s:0}, {input:'<html xmlns="{html}"><head><style>#test { height:100% }</style></head><body xmlns=""><div xmlns="{html}" id="test"/></body></html>', q:200, s:0}, - {input:'<HTML xmlns="{html}"><head><style>#test { height:100% }</style></head><body><div id="test"/></body></HTML>', q:200, s:0}, + {input:'<HTML xmlns="{html}"><head><style>#test { height:100% }</style></head><body><div id="test"/></body></HTML>', q:184, s:0}, {input:'<html xmlns="{html}"><head><style>#test { height:100% }</style></head><BODY><div id="test"/></BODY></html>', q:200, s:0}, ]; diff --git a/tests/wpt/web-platform-tests/quirks/support/test-ref-iframe.js b/tests/wpt/web-platform-tests/quirks/support/test-ref-iframe.js new file mode 100644 index 00000000000..e5df41d4249 --- /dev/null +++ b/tests/wpt/web-platform-tests/quirks/support/test-ref-iframe.js @@ -0,0 +1,17 @@ +function setupIframe() { + var iframe = document.querySelector('iframe'); + var html = "<style id=style></style><div id=test></div><div id=ref></div><svg><circle id=svg /><circle id=svg_ref /></svg>"; + if (iframe.className === "limited-quirks") { + html = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">' + html; + } else if (iframe.className === "no-quirks") { + html = '<!DOCTYPE HTML>' + html; + } + window.quirks = iframe.className === "quirks"; + window.win = iframe.contentWindow; + win.document.open(); + win.document.write(html); + win.document.close(); + ['style', 'test', 'ref', 'svg', 'svg_ref'].forEach(function(id) { + win[id] = win.document.getElementById(id); + }); +} diff --git a/tests/wpt/web-platform-tests/quirks/unitless-length.html b/tests/wpt/web-platform-tests/quirks/unitless-length.html deleted file mode 100644 index 944c91fe395..00000000000 --- a/tests/wpt/web-platform-tests/quirks/unitless-length.html +++ /dev/null @@ -1,219 +0,0 @@ -<!doctype html> -<html> - <head> - <title>The unitless length quirk</title> - <script src="/resources/testharness.js"></script> - <script src="/resources/testharnessreport.js"></script> - <style> iframe { width:20px; height:20px; } </style> - </head> - <body> - <div id=log></div> - <iframe id=quirks></iframe> - <iframe id=almost></iframe> - <iframe id=standards></iframe> - <script> - setup({explicit_done:true}); - onload = function() { - var html = "<style id=style></style><div id=test></div><div id=ref></div>"; - var a_doctype = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">'; - var s_doctype = '<!DOCTYPE HTML>'; - var q = document.getElementById('quirks').contentWindow; - var a = document.getElementById('almost').contentWindow; - var s = document.getElementById('standards').contentWindow; - q.document.open(); - q.document.write(html); - q.document.close(); - a.document.open(); - a.document.write(a_doctype + html); - a.document.close(); - s.document.open(); - s.document.write(s_doctype + html); - s.document.close(); - [q, a, s].forEach(function(win) { - ['style', 'test', 'ref'].forEach(function(id) { - win[id] = win.document.getElementById(id); - }); - }); - - var tests = [ - {input:"1", q:"1px"}, - {input:"+1", q:"1px"}, - {input:"-1", q:"-1px"}, - {input:"1.5", q:"1.5px"}, - {input:"+1.5", q:"1.5px"}, - {input:"-1.5", q:"-1.5px"}, - {input:"\\31 "}, - {input:"+\\31 "}, - {input:"-\\31 "}, - {input:"\\31 .5"}, - {input:"+\\31 .5"}, - {input:"-\\31 .5"}, - {input:"1\\31 "}, - {input:"+1\\31 "}, - {input:"-1\\31 "}, - {input:"1\\31 .5"}, - {input:"+1\\31 .5"}, - {input:"-1\\31 .5"}, - {input:"a"}, - {input:"A"}, - {input:"1a"}, - {input:"+1a"}, - {input:"-1a"}, - {input:"+1A"}, - {input:"-1A"}, - {input:"+a"}, - {input:"-a"}, - {input:"+A"}, - {input:"-A"}, - {input:"@a"}, - {input:"@1"}, - {input:"@1a"}, - {input:'"a"'}, - {input:'"1"'}, - {input:'"1a"'}, - {input:"url(1)"}, - {input:"url('1')"}, - {input:"#1"}, - {input:"#01"}, - {input:"#001"}, - {input:"#0001"}, - {input:"#00001"}, - {input:"#000001"}, - {input:"+/**/1"}, - {input:"-/**/1"}, - {input:"calc(1)"}, - {input:"calc(2 * 2px)", q:"4px", s:"4px"}, - {input:"1px 2", q:"1px 2px", shorthand:true}, - {input:"1 2px", q:"1px 2px", shorthand:true}, - {input:"1px calc(2)", shorthand:true}, - {input:"calc(1) 2px", shorthand:true}, - {input:"1 +2", q:"1px 2px", shorthand:true}, - {input:"1 -2", q:"1px -2px", shorthand:true}, - ]; - - var props = [ - {prop:'background-position', check:'background-position', check_also:[]}, - {prop:'border-spacing', check:'border-spacing', check_also:[]}, - {prop:'border-top-width', check:'border-top-width'}, - {prop:'border-right-width', check:'border-right-width'}, - {prop:'border-bottom-width', check:'border-bottom-width'}, - {prop:'border-left-width', check:'border-left-width'}, - {prop:'border-width', check:'border-top-width', check_also:['border-right-width', 'border-bottom-width', 'border-left-width']}, - {prop:'bottom', check:'bottom'}, - {prop:'clip', check:'clip'}, - {prop:'font-size', check:'font-size'}, - {prop:'height', check:'height'}, - {prop:'left', check:'left'}, - {prop:'letter-spacing', check:'letter-spacing'}, - {prop:'margin-right', check:'margin-right'}, - {prop:'margin-left', check:'margin-left'}, - {prop:'margin-top', check:'margin-top'}, - {prop:'margin-bottom', check:'margin-bottom'}, - {prop:'margin', check:'margin-top', check_also:['margin-right', 'margin-bottom', 'margin-left']}, - {prop:'max-height', check:'max-height'}, - {prop:'max-width', check:'max-width'}, - {prop:'min-height', check:'min-height'}, - {prop:'min-width', check:'min-width'}, - {prop:'padding-top', check:'padding-top'}, - {prop:'padding-right', check:'padding-right'}, - {prop:'padding-bottom', check:'padding-bottom'}, - {prop:'padding-left', check:'padding-left'}, - {prop:'padding', check:'padding-top', check_also:['padding-right', 'padding-bottom', 'padding-left']}, - {prop:'right', check:'right'}, - {prop:'text-indent', check:'text-indent'}, - {prop:'top', check:'top'}, - {prop:'vertical-align', check:'vertical-align'}, - {prop:'width', check:'width'}, - {prop:'word-spacing', check:'word-spacing'}, - ]; - var style_template = '#test{border-style:solid;position:relative;{prop}:{test};}' + - '#ref{border-style:solid;position:relative;{prop}:{ref};}'; - - tests.forEach(function(t) { - for (var i in props) { - if (t.shorthand && !(props[i].check_also)) { - continue; - } - test(function() { - q.style.textContent = style_template.replace('{test}', t.input) - .replace('{ref}', t.q).replace(/\{prop\}/g, props[i].prop) - .replace(/clip:[^;]+/g, function(match) { - return 'clip:rect(auto, auto, auto, ' + match.substr(5) + ')'; - }); - assert_equals(q.getComputedStyle(q.test).getPropertyValue(props[i].check), - q.getComputedStyle(q.ref).getPropertyValue(props[i].check), - props[i].prop); - if (t.shorthand && props[i].check_also) { - for (var j in props[i].check_also) { - assert_equals(q.getComputedStyle(q.test).getPropertyValue(props[i].check_also[j]), - q.getComputedStyle(q.ref).getPropertyValue(props[i].check_also[j]), - props[i].prop + ', checking ' + props[i].check_also[j]); - } - } - }, props[i].prop + ": " + t.input + ' (quirks)'); - test(function() { - a.style.textContent = style_template.replace('{test}', t.input) - .replace('{ref}', t.s).replace(/\{prop\}/g, props[i].prop) - .replace(/clip:[^;]+/g, function(match) { - return 'clip:rect(auto, auto, auto, ' + match.substr(5) + ')'; - }); - assert_equals(a.getComputedStyle(a.test).getPropertyValue(props[i].check), - a.getComputedStyle(a.ref).getPropertyValue(props[i].check), - props[i].prop + ' in almost standards mode'); - if (t.shorthand && props[i].check_also) { - for (var j in props[i].check_also) { - assert_equals(a.getComputedStyle(a.test).getPropertyValue(props[i].check_also[j]), - a.getComputedStyle(a.ref).getPropertyValue(props[i].check_also[j]), - props[i].prop + ', checking ' + props[i].check_also[j]); - } - } - }, props[i].prop + ": " + t.input + ' (almost standards)'); - test(function() { - s.style.textContent = style_template.replace('{test}', t.input) - .replace('{ref}', t.s).replace(/\{prop\}/g, props[i].prop) - .replace(/clip:[^;]+/g, function(match) { - return 'clip:rect(auto, auto, auto, ' + match.substr(5) + ')'; - }); - assert_equals(s.getComputedStyle(s.test).getPropertyValue(props[i].check), - s.getComputedStyle(s.ref).getPropertyValue(props[i].check), - props[i].prop + ' in standards mode'); - if (t.shorthand && props[i].check_also) { - for (var j in props[i].check_also) { - assert_equals(s.getComputedStyle(s.test).getPropertyValue(props[i].check_also[j]), - s.getComputedStyle(s.ref).getPropertyValue(props[i].check_also[j]), - props[i].prop + ', checking ' + props[i].check_also[j]); - } - } - }, props[i].prop + ": " + t.input + ' (standards)'); - } - }); - - var other_tests = [ - {input:'background:1 1', prop:'background-position'}, - {input:'border-top:red solid 1', prop:'border-top-width'}, - {input:'border-right:red solid 1', prop:'border-right-width'}, - {input:'border-bottom:red solid 1', prop:'border-bottom-width'}, - {input:'border-left:red solid 1', prop:'border-left-width'}, - {input:'border:red solid 1', prop:'border-top-width'}, - {input:'font:normal normal normal 40 sans-serif', prop:'font-size'}, - {input:'outline:red solid 1', prop:'outline-width'}, - {input:'outline-width:1', prop:'outline-width'}, - ]; - - var other_template = "#test{position:relative;outline-style:solid;{test}}" + - "#ref{outline-style:solid}"; - - other_tests.forEach(function(t) { - test(function() { - q.style.textContent = other_template.replace('{test}', t.input); - assert_equals(q.getComputedStyle(q.test).getPropertyValue(t.prop), - q.getComputedStyle(q.ref).getPropertyValue(t.prop), - 'quirk was supported'); - }, 'Excluded property '+t.input); - }); - - done(); - } - </script> - </body> -</html> diff --git a/tests/wpt/web-platform-tests/quirks/unitless-length/limited-quirks.html b/tests/wpt/web-platform-tests/quirks/unitless-length/limited-quirks.html new file mode 100644 index 00000000000..fab0b3b805b --- /dev/null +++ b/tests/wpt/web-platform-tests/quirks/unitless-length/limited-quirks.html @@ -0,0 +1,15 @@ +<!doctype html> +<html> + <head> + <title>The unitless length quirk (limited-quirks)</title> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <style> iframe { width:20px; height:20px; } </style> + </head> + <body> + <div id=log></div> + <iframe class=limited-quirks></iframe> + <script src=../support/test-ref-iframe.js></script> + <script src=support/common.js></script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/quirks/unitless-length/no-quirks.html b/tests/wpt/web-platform-tests/quirks/unitless-length/no-quirks.html new file mode 100644 index 00000000000..cd192029df4 --- /dev/null +++ b/tests/wpt/web-platform-tests/quirks/unitless-length/no-quirks.html @@ -0,0 +1,15 @@ +<!doctype html> +<html> + <head> + <title>The unitless length quirk (no-quirks)</title> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <style> iframe { width:20px; height:20px; } </style> + </head> + <body> + <div id=log></div> + <iframe class=no-quirks></iframe> + <script src=../support/test-ref-iframe.js></script> + <script src=support/common.js></script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/quirks/unitless-length/quirks.html b/tests/wpt/web-platform-tests/quirks/unitless-length/quirks.html new file mode 100644 index 00000000000..80bda7a3929 --- /dev/null +++ b/tests/wpt/web-platform-tests/quirks/unitless-length/quirks.html @@ -0,0 +1,15 @@ +<!doctype html> +<html> + <head> + <title>The unitless length quirk (quirks)</title> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <style> iframe { width:20px; height:20px; } </style> + </head> + <body> + <div id=log></div> + <iframe class=quirks></iframe> + <script src=../support/test-ref-iframe.js></script> + <script src=support/common.js></script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/quirks/unitless-length/support/common.js b/tests/wpt/web-platform-tests/quirks/unitless-length/support/common.js new file mode 100644 index 00000000000..f2f7eab4e33 --- /dev/null +++ b/tests/wpt/web-platform-tests/quirks/unitless-length/support/common.js @@ -0,0 +1,152 @@ +setup({explicit_done:true}); +onload = function() { + setupIframe(); + + var tests = [ + {input:"1", q:"1px"}, + {input:"+1", q:"1px"}, + {input:"-1", q:"-1px"}, + {input:"1.5", q:"1.5px"}, + {input:"+1.5", q:"1.5px"}, + {input:"-1.5", q:"-1.5px"}, + {input:"\\31 "}, + {input:"+\\31 "}, + {input:"-\\31 "}, + {input:"\\31 .5"}, + {input:"+\\31 .5"}, + {input:"-\\31 .5"}, + {input:"1\\31 "}, + {input:"+1\\31 "}, + {input:"-1\\31 "}, + {input:"1\\31 .5"}, + {input:"+1\\31 .5"}, + {input:"-1\\31 .5"}, + {input:"a"}, + {input:"A"}, + {input:"1a"}, + {input:"+1a"}, + {input:"-1a"}, + {input:"+1A"}, + {input:"-1A"}, + {input:"+a"}, + {input:"-a"}, + {input:"+A"}, + {input:"-A"}, + {input:"@a"}, + {input:"@1"}, + {input:"@1a"}, + {input:'"a"'}, + {input:'"1"'}, + {input:'"1a"'}, + {input:"url(1)"}, + {input:"url('1')"}, + {input:"#1"}, + {input:"#01"}, + {input:"#001"}, + {input:"#0001"}, + {input:"#00001"}, + {input:"#000001"}, + {input:"+/**/1"}, + {input:"-/**/1"}, + {input:"calc(1)"}, + {input:"calc(2 * 2px)", q:"4px", s:"4px"}, + {input:"1px 2", q:"1px 2px", shorthand:true}, + {input:"1 2px", q:"1px 2px", shorthand:true}, + {input:"1px calc(2)", shorthand:true}, + {input:"calc(1) 2px", shorthand:true}, + {input:"1 +2", q:"1px 2px", shorthand:true}, + {input:"1 -2", q:"1px -2px", shorthand:true}, + ]; + + var props = [ + {prop:'background-position', check:'background-position', check_also:[]}, + {prop:'border-spacing', check:'border-spacing', check_also:[]}, + {prop:'border-top-width', check:'border-top-width'}, + {prop:'border-right-width', check:'border-right-width'}, + {prop:'border-bottom-width', check:'border-bottom-width'}, + {prop:'border-left-width', check:'border-left-width'}, + {prop:'border-width', check:'border-top-width', check_also:['border-right-width', 'border-bottom-width', 'border-left-width']}, + {prop:'bottom', check:'bottom'}, + {prop:'clip', check:'clip'}, + {prop:'font-size', check:'font-size'}, + {prop:'height', check:'height'}, + {prop:'left', check:'left'}, + {prop:'letter-spacing', check:'letter-spacing'}, + {prop:'margin-right', check:'margin-right'}, + {prop:'margin-left', check:'margin-left'}, + {prop:'margin-top', check:'margin-top'}, + {prop:'margin-bottom', check:'margin-bottom'}, + {prop:'margin', check:'margin-top', check_also:['margin-right', 'margin-bottom', 'margin-left']}, + {prop:'max-height', check:'max-height'}, + {prop:'max-width', check:'max-width'}, + {prop:'min-height', check:'min-height'}, + {prop:'min-width', check:'min-width'}, + {prop:'padding-top', check:'padding-top'}, + {prop:'padding-right', check:'padding-right'}, + {prop:'padding-bottom', check:'padding-bottom'}, + {prop:'padding-left', check:'padding-left'}, + {prop:'padding', check:'padding-top', check_also:['padding-right', 'padding-bottom', 'padding-left']}, + {prop:'right', check:'right'}, + {prop:'text-indent', check:'text-indent'}, + {prop:'top', check:'top'}, + {prop:'vertical-align', check:'vertical-align'}, + {prop:'width', check:'width'}, + {prop:'word-spacing', check:'word-spacing'}, + ]; + var style_template = '#test{border-style:solid;position:relative;{prop}:{test};}' + + '#ref{border-style:solid;position:relative;{prop}:{ref};}'; + + tests.forEach(function(t) { + for (var i in props) { + if (t.shorthand && !(props[i].check_also)) { + continue; + } + test(function() { + win.style.textContent = style_template.replace('{test}', t.input) + .replace('{ref}', quirks ? t.q : t.s).replace(/\{prop\}/g, props[i].prop) + .replace(/clip:[^;]+/g, function(match) { + return 'clip:rect(auto, auto, auto, ' + match.substr(5) + ')'; + }); + assert_equals(win.getComputedStyle(win.test).getPropertyValue(props[i].check), + win.getComputedStyle(win.ref).getPropertyValue(props[i].check), + props[i].prop); + if (t.shorthand && props[i].check_also) { + for (var j in props[i].check_also) { + assert_equals(win.getComputedStyle(win.test).getPropertyValue(props[i].check_also[j]), + win.getComputedStyle(win.ref).getPropertyValue(props[i].check_also[j]), + props[i].prop + ', checking ' + props[i].check_also[j]); + } + } + }, props[i].prop + ": " + t.input); + + } + }); + + if (quirks) { + var other_tests = [ + {input:'background:1 1', prop:'background-position'}, + {input:'border-top:red solid 1', prop:'border-top-width'}, + {input:'border-right:red solid 1', prop:'border-right-width'}, + {input:'border-bottom:red solid 1', prop:'border-bottom-width'}, + {input:'border-left:red solid 1', prop:'border-left-width'}, + {input:'border:red solid 1', prop:'border-top-width'}, + {input:'font:normal normal normal 40 sans-serif', prop:'font-size'}, + {input:'outline:red solid 1', prop:'outline-width'}, + {input:'outline-width:1', prop:'outline-width'}, + ]; + + var other_template = "#test{position:relative;outline-style:solid;{test}}" + + "#ref{outline-style:solid}"; + + other_tests.forEach(function(t) { + test(function() { + win.style.textContent = other_template.replace('{test}', t.input); + assert_equals(win.getComputedStyle(win.test).getPropertyValue(t.prop), + win.getComputedStyle(win.ref).getPropertyValue(t.prop), + 'quirk was supported'); + }, 'Excluded property '+t.input); + }); + } + + done(); +} diff --git a/tests/wpt/web-platform-tests/referrer-policy/generic/common.js b/tests/wpt/web-platform-tests/referrer-policy/generic/common.js index 1ccdaabf077..c98056f680b 100644 --- a/tests/wpt/web-platform-tests/referrer-policy/generic/common.js +++ b/tests/wpt/web-platform-tests/referrer-policy/generic/common.js @@ -230,9 +230,10 @@ function queryAreaLink(url, callback, referrer_policy) { queryNavigable(area, url, callback, referrer_policy) } -function queryScript(url, callback) { +function queryScript(url, callback, attributes, referrer_policy) { var script = document.createElement("script"); script.src = url; + script.referrerPolicy = referrer_policy; var listener = function(event) { var server_data = event.data; diff --git a/tests/wpt/web-platform-tests/resources/chromium/generic_sensor_mocks.js b/tests/wpt/web-platform-tests/resources/chromium/generic_sensor_mocks.js index 2cdf868b9bf..24a469199ff 100644 --- a/tests/wpt/web-platform-tests/resources/chromium/generic_sensor_mocks.js +++ b/tests/wpt/web-platform-tests/resources/chromium/generic_sensor_mocks.js @@ -167,23 +167,13 @@ var GenericSensorTest = (() => { initParams: initParams}; } - async reset() { + reset() { if (this.activeSensor_ !== null) { this.activeSensor_.reset(); this.activeSensor_ = null; } - // Wait for an event loop iteration to let - // the pending mojo commands pass. - function schedule(func) { - return new Promise(resolve => { - setTimeout(() => { - func(); - resolve(); - }, 0); - }); - } - await schedule(this.binding_.close.bind(this.binding_)); - await schedule(this.interceptor_.stop.bind(this.interceptor_)); + this.binding_.close(); + this.interceptor_.stop(); } } @@ -216,9 +206,13 @@ var GenericSensorTest = (() => { async reset() { if (!testInternal.initialized) throw new Error('Call initialize() before reset().'); - await testInternal.sensorProvider.reset(); + testInternal.sensorProvider.reset(); testInternal.sensorProvider = null; testInternal.initialized = false; + + // Wait for an event loop iteration to let any pending mojo commands in + // the sensor provider finish. + await new Promise(resolve => setTimeout(resolve, 0)); } } diff --git a/tests/wpt/web-platform-tests/resources/testharness.js b/tests/wpt/web-platform-tests/resources/testharness.js index d4bf2920616..54379c665a8 100644 --- a/tests/wpt/web-platform-tests/resources/testharness.js +++ b/tests/wpt/web-platform-tests/resources/testharness.js @@ -997,6 +997,9 @@ policies and contribution forms [3]. function assert_object_equals(actual, expected, description) { + assert(typeof actual === "object" && actual !== null, "assert_object_equals", description, + "value is ${actual}, expected object", + {actual: actual}); //This needs to be improved a great deal function check_equal(actual, expected, stack) { diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/referrer-policy-header.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/referrer-policy-header.https.html index f2e91d472c0..05d773e3144 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/referrer-policy-header.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/referrer-policy-header.https.html @@ -5,39 +5,41 @@ <script src="/common/get-host-info.sub.js"></script> <script src="resources/test-helpers.sub.js"></script> <script> -promise_test(function(t) { - var SCOPE = 'resources/referrer-policy-iframe.html'; - var SCRIPT = 'resources/fetch-rewrite-worker-referrer-policy.js'; - var host_info = get_host_info(); - var body, unregister; - body = service_worker_unregister_and_register(t, SCRIPT, SCOPE) - .then(function(registration) { - unregister = registration.unregister.bind(registration); - return wait_for_state(t, registration.installing, 'activated'); - }) - .then(function() { return with_iframe(SCOPE); }) - .then(function(frame) { - var channel = new MessageChannel(); - t.add_cleanup(function() { - frame.remove(); - }); +const SCOPE = 'resources/referrer-policy-iframe.html'; +const SCRIPT = 'resources/fetch-rewrite-worker-referrer-policy.js'; - return new Promise(function(resolve) { - channel.port1.onmessage = resolve; - frame.contentWindow.postMessage({}, - host_info['HTTPS_ORIGIN'], - [channel.port2]); - }); - }) - .then(function(e) { - assert_equals(e.data.results, 'finish'); - }); +promise_test(async t => { + const registration = + await service_worker_unregister_and_register(t, SCRIPT, SCOPE); + await wait_for_state(t, registration.installing, 'activated'); + promise_test(() => registration.unregister(), + 'Remove registration as a cleanup'); +}, 'Initialize global state (service worker registration)'); - // Schedule un-registration to occur after test execution has completed, - // without hiding test failure. - return body - .then(unregister, unregister) - .then(function() { return body; }); - }, 'Verify the referer with a Referrer Policy'); +promise_test(async t => { + const full_scope_url = new URL(SCOPE, location.href); + const redirect_to = `${full_scope_url.href}?ignore=true`; + const frame = await with_iframe( + `${SCOPE}?pipe=status(302)|header(Location,${redirect_to})|` + + 'header(Referrer-Policy,origin)'); + assert_equals(frame.contentDocument.referrer, + full_scope_url.origin + '/'); + t.add_cleanup(() => frame.remove()); +}, 'Referrer for a main resource redirected with referrer-policy (origin) ' + + 'should only have origin.'); + +promise_test(async t => { + const host_info = get_host_info(); + const frame = await with_iframe(SCOPE); + const channel = new MessageChannel(); + t.add_cleanup(() => frame.remove()); + const e = await new Promise(resolve => { + channel.port1.onmessage = resolve; + frame.contentWindow.postMessage( + {}, host_info['HTTPS_ORIGIN'], [channel.port2]); + }); + assert_equals(e.data.results, 'finish'); +}, 'Referrer for fetch requests initiated from a service worker with ' + + 'referrer-policy (origin) should only have origin.'); </script> diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/performance-timeline-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/performance-timeline-worker.js index 6f7df75e921..a752b436524 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/performance-timeline-worker.js +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/performance-timeline-worker.js @@ -44,12 +44,22 @@ promise_test(function(test) { assert_greater_than(entry.startTime, 0); assert_greater_than(entry.responseEnd, entry.startTime); } - return new Promise(function(resolve) { - performance.onresourcetimingbufferfull = resolve; + return Promise.race([ + new Promise(function(resolve) { + performance.onresourcetimingbufferfull = _ => { + resolve('bufferfull'); + } performance.setResourceTimingBufferSize(expectedResources.length); - }); + }), + + // Race the bufferfull event against another fetch. We should get the + // event before this completes. This allows us to detect a failure + // to dispatch the event without timing out the entire test. + fetch('dummy.txt').then(resp => resp.text()) + ]); }) - .then(function() { + .then(function(result) { + assert_equals(result, 'bufferfull'); performance.clearResourceTimings(); assert_equals(performance.getEntriesByType('resource').length, 0); }) diff --git a/tests/wpt/web-platform-tests/shadow-dom/Document-prototype-currentScript.html b/tests/wpt/web-platform-tests/shadow-dom/Document-prototype-currentScript.html index ff0344fe493..176ef348fcb 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/Document-prototype-currentScript.html +++ b/tests/wpt/web-platform-tests/shadow-dom/Document-prototype-currentScript.html @@ -1,6 +1,7 @@ <!DOCTYPE html> <html> <head> +<meta charset=utf-8> <title>HTML: Document.prototype.currentScript</title> <meta name="author" title="Ryosuke Niwa" href="mailto:rniwa@webkit.org"> <meta name="assert" content="If the script element is in a document, then set the script element's node document's currentScript attribute to the script element."> @@ -12,11 +13,16 @@ <div id="log"></div> <script id="outerScriptElement"> +function assert_shadowdom_supported() { + assert_true('attachShadow' in document.createElement('div'), 'Shadow DOM is not supported'); +} + var outerScriptElement = document.currentScript; function testInlineScript(mode) { test(function () { + assert_shadowdom_supported(); var host = document.createElement('div'); var shadowRoot = host.attachShadow({mode: mode}); var scriptElement = document.createElement('script'); @@ -45,7 +51,11 @@ function executeNextTest() var mode = testCase.mode; + testCase.test.add_cleanup(() => { + setTimeout(executeNextTest, 1); + }); testCase.test.step(function () { + assert_shadowdom_supported(); testedScriptElement = document.createElement('script'); testedScriptElement.src = 'resources/Document-prototype-currentScript-helper.js'; @@ -67,7 +77,6 @@ function executeNextTest() assert_equals(document.currentScript, testCase.expected()); }); testCase.test.done(); - setTimeout(executeNextTest, 1); } } diff --git a/tests/wpt/web-platform-tests/subresource-integrity/idlharness.window.js b/tests/wpt/web-platform-tests/subresource-integrity/idlharness.window.js new file mode 100644 index 00000000000..a1ea4097557 --- /dev/null +++ b/tests/wpt/web-platform-tests/subresource-integrity/idlharness.window.js @@ -0,0 +1,23 @@ +// META: script=/resources/WebIDLParser.js +// META: script=/resources/idlharness.js + +// https://w3c.github.io/webappsec-subresource-integrity/ + +'use strict'; + +promise_test(async () => { + const srcs = ['webappsec-subresource-integrity', 'html', 'dom', 'cssom']; + const [idl, html, dom, cssom] = await Promise.all( + srcs.map(i => fetch(`/interfaces/${i}.idl`).then(r => r.text()))); + + const idl_array = new IdlArray(); + idl_array.add_idls(idl); + idl_array.add_dependency_idls(html); + idl_array.add_dependency_idls(dom); + idl_array.add_dependency_idls(cssom); + idl_array.add_objects({ + HTMLScriptElement: ['document.createElement("script")'], + HTMLLinkElement: ['document.createElement("link")'], + }); + idl_array.test(); +}, 'webappsec-subresource-integrity interfaces'); diff --git a/tests/wpt/web-platform-tests/tools/conftest.py b/tests/wpt/web-platform-tests/tools/conftest.py index 27a259c54ce..894fe6223ea 100644 --- a/tests/wpt/web-platform-tests/tools/conftest.py +++ b/tests/wpt/web-platform-tests/tools/conftest.py @@ -1,6 +1,5 @@ import platform import os -import sys from hypothesis import settings, HealthCheck @@ -12,14 +11,3 @@ settings.register_profile("pypy", settings(suppress_health_check=[HealthCheck.to settings.load_profile(os.getenv("HYPOTHESIS_PROFILE", "default" if impl != "PyPy" else "pypy")) - -# these can't even be imported on Py3, so totally ignore it even from collection -ignore_dirs = ["serve", "wptserve"] - -collect_ignore = [] -if sys.version_info[0] >= 3: - for d in ignore_dirs: - path = os.path.join(os.path.dirname(__file__), d) - collect_ignore.extend([os.path.join(root, f) - for root, _, files in os.walk(path) - for f in files]) diff --git a/tests/wpt/web-platform-tests/tools/serve/serve.py b/tests/wpt/web-platform-tests/tools/serve/serve.py index 5ebfa3a933d..7e645b0fcaf 100644 --- a/tests/wpt/web-platform-tests/tools/serve/serve.py +++ b/tests/wpt/web-platform-tests/tools/serve/serve.py @@ -13,7 +13,7 @@ import sys import threading import time import traceback -import urllib2 +from six.moves import urllib import uuid from collections import defaultdict, OrderedDict from multiprocessing import Process, Event @@ -444,10 +444,10 @@ def check_subdomains(config): connected = False for i in range(10): try: - urllib2.urlopen("http://%s:%d/" % (host, port)) + urllib.request.urlopen("http://%s:%d/" % (host, port)) connected = True break - except urllib2.URLError: + except urllib.error.URLError: time.sleep(1) if not connected: @@ -460,7 +460,7 @@ def check_subdomains(config): continue try: - urllib2.urlopen("http://%s:%d/" % (domain, port)) + urllib.request.urlopen("http://%s:%d/" % (domain, port)) except Exception: logger.critical("Failed probing domain %s. " "You may need to edit /etc/hosts or similar, see README.md." % domain) diff --git a/tests/wpt/web-platform-tests/tools/serve/test_serve.py b/tests/wpt/web-platform-tests/tools/serve/test_serve.py index b517e64ad1c..803a30e72d6 100644 --- a/tests/wpt/web-platform-tests/tools/serve/test_serve.py +++ b/tests/wpt/web-platform-tests/tools/serve/test_serve.py @@ -1,6 +1,7 @@ import pickle import platform import os +import sys import pytest @@ -11,6 +12,7 @@ from .serve import Config @pytest.mark.skipif(platform.uname()[0] == "Windows", reason="Expected contents are platform-dependent") +@pytest.mark.xfail(sys.version_info >= (3,), reason="serve only works on Py2") def test_make_hosts_file_nix(): c = Config(browser_host="foo.bar", alternate_hosts={"alt": "foo2.bar"}) hosts = serve.make_hosts_file(c, "192.168.42.42") @@ -32,6 +34,7 @@ def test_make_hosts_file_nix(): @pytest.mark.skipif(platform.uname()[0] != "Windows", reason="Expected contents are platform-dependent") +@pytest.mark.xfail(sys.version_info >= (3,), reason="serve only works on Py2") def test_make_hosts_file_windows(): c = Config(browser_host="foo.bar", alternate_hosts={"alt": "foo2.bar"}) hosts = serve.make_hosts_file(c, "192.168.42.42") diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/firefox.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/firefox.py index 47526da2eb8..16f1de8f7a0 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/firefox.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/firefox.py @@ -249,16 +249,21 @@ class FirefoxBrowser(Browser): prefs = Preferences() pref_paths = [] - prefs_general = os.path.join(self.prefs_root, 'prefs_general.js') - if os.path.isfile(prefs_general): - # Old preference file used in Firefox 60 and earlier (remove when no longer supported) - pref_paths.append(prefs_general) profiles = os.path.join(self.prefs_root, 'profiles.json') if os.path.isfile(profiles): with open(profiles, 'r') as fh: for name in json.load(fh)['web-platform-tests']: pref_paths.append(os.path.join(self.prefs_root, name, 'user.js')) + else: + # Old preference files used before the creation of profiles.json (remove when no longer supported) + legacy_pref_paths = ( + os.path.join(self.prefs_root, 'prefs_general.js'), # Used in Firefox 60 and below + os.path.join(self.prefs_root, 'common', 'user.js'), # Used in Firefox 61 + ) + for path in legacy_pref_paths: + if os.path.isfile(path): + pref_paths.append(path) for path in pref_paths: if os.path.exists(path): diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/webkit.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/webkit.py index 1c8aec9eb56..f0f777833c8 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/webkit.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/webkit.py @@ -30,14 +30,18 @@ def browser_kwargs(test_type, run_info_data, **kwargs): "webdriver_args": kwargs.get("webdriver_args")} -def capabilities_for_port(webkit_port, binary, binary_args): +def capabilities_for_port(server_config, **kwargs): from selenium.webdriver import DesiredCapabilities - if webkit_port == "gtk": + if kwargs["webkit_port"] == "gtk": capabilities = dict(DesiredCapabilities.WEBKITGTK.copy()) capabilities["webkitgtk:browserOptions"] = { - "binary": binary, - "args": binary_args + "binary": kwargs["binary"], + "args": kwargs.get("binary_args", []), + "certificates": [ + {"host": server_config["browser_host"], + "certificateFile": kwargs["host_cert_path"]} + ] } return capabilities @@ -49,10 +53,8 @@ def executor_kwargs(test_type, server_config, cache_manager, run_info_data, executor_kwargs = base_executor_kwargs(test_type, server_config, cache_manager, **kwargs) executor_kwargs["close_after_done"] = True - capabilities = capabilities_for_port(kwargs["webkit_port"], - kwargs["binary"], - kwargs.get("binary_args", [])) - executor_kwargs["capabilities"] = capabilities + executor_kwargs["capabilities"] = capabilities_for_port(server_config, + **kwargs) return executor_kwargs diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_cookies.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_cookies.py index 2e2d0d6771b..305d0ac45e9 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_cookies.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_cookies.py @@ -1,3 +1,4 @@ +import sys import unittest import pytest @@ -7,6 +8,7 @@ from .base import TestUsingServer class TestResponseSetCookie(TestUsingServer): + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_name_value(self): @wptserve.handlers.handler def handler(request, response): @@ -19,6 +21,7 @@ class TestResponseSetCookie(TestUsingServer): self.assertEqual(resp.info()["Set-Cookie"], "name=value; Path=/") + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_unset(self): @wptserve.handlers.handler def handler(request, response): @@ -32,6 +35,7 @@ class TestResponseSetCookie(TestUsingServer): self.assertTrue("Set-Cookie" not in resp.info()) + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_delete(self): @wptserve.handlers.handler def handler(request, response): @@ -50,6 +54,7 @@ class TestResponseSetCookie(TestUsingServer): #Should also check that expires is in the past class TestRequestCookies(TestUsingServer): + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_set_cookie(self): @wptserve.handlers.handler def handler(request, response): diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_handlers.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_handlers.py index 6769bd3adef..cf40cd1522d 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_handlers.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_handlers.py @@ -12,12 +12,14 @@ from .base import TestUsingServer, doc_root class TestFileHandler(TestUsingServer): + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_GET(self): resp = self.request("/document.txt") self.assertEqual(200, resp.getcode()) self.assertEqual("text/plain", resp.info()["Content-Type"]) self.assertEqual(open(os.path.join(doc_root, "document.txt"), 'rb').read(), resp.read()) + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_headers(self): resp = self.request("/with_headers.txt") self.assertEqual(200, resp.getcode()) @@ -29,6 +31,7 @@ class TestFileHandler(TestUsingServer): self.assertEqual(resp.info()["Double-Header"], "PA, SS") + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_range(self): resp = self.request("/document.txt", headers={"Range":"bytes=10-19"}) self.assertEqual(206, resp.getcode()) @@ -39,6 +42,7 @@ class TestFileHandler(TestUsingServer): self.assertEqual("10", resp.info()['Content-Length']) self.assertEqual(expected[10:20], data) + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_range_no_end(self): resp = self.request("/document.txt", headers={"Range":"bytes=10-"}) self.assertEqual(206, resp.getcode()) @@ -48,6 +52,7 @@ class TestFileHandler(TestUsingServer): self.assertEqual("bytes 10-%i/%i" % (len(expected) - 1, len(expected)), resp.info()['Content-Range']) self.assertEqual(expected[10:], data) + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_range_no_start(self): resp = self.request("/document.txt", headers={"Range":"bytes=-10"}) self.assertEqual(206, resp.getcode()) @@ -58,6 +63,7 @@ class TestFileHandler(TestUsingServer): resp.info()['Content-Range']) self.assertEqual(expected[-10:], data) + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_multiple_ranges(self): resp = self.request("/document.txt", headers={"Range":"bytes=1-2,5-7,6-10"}) self.assertEqual(206, resp.getcode()) @@ -76,6 +82,7 @@ class TestFileHandler(TestUsingServer): self.assertEqual(headers["Content-Range"], "bytes %s/%i" % (expected_part[0], len(expected))) self.assertEqual(expected_part[1] + "\r\n", body) + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_range_invalid(self): with self.assertRaises(HTTPError) as cm: self.request("/document.txt", headers={"Range":"bytes=11-10"}) @@ -86,16 +93,19 @@ class TestFileHandler(TestUsingServer): self.request("/document.txt", headers={"Range":"bytes=%i-%i" % (len(expected), len(expected) + 10)}) self.assertEqual(cm.exception.code, 416) + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_sub_config(self): resp = self.request("/sub.sub.txt") expected = b"localhost localhost %i" % self.server.port assert resp.read().rstrip() == expected + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_sub_headers(self): resp = self.request("/sub_headers.sub.txt", headers={"X-Test": "PASS"}) expected = b"PASS" assert resp.read().rstrip() == expected + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_sub_params(self): resp = self.request("/sub_params.sub.txt", query="test=PASS") expected = b"PASS" @@ -103,6 +113,7 @@ class TestFileHandler(TestUsingServer): class TestFunctionHandler(TestUsingServer): + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_string_rv(self): @wptserve.handlers.handler def handler(request, response): @@ -115,6 +126,7 @@ class TestFunctionHandler(TestUsingServer): self.assertEqual("9", resp.info()["Content-Length"]) self.assertEqual("test data", resp.read()) + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_tuple_1_rv(self): @wptserve.handlers.handler def handler(request, response): @@ -128,6 +140,7 @@ class TestFunctionHandler(TestUsingServer): assert cm.value.code == 500 + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_tuple_2_rv(self): @wptserve.handlers.handler def handler(request, response): @@ -141,6 +154,7 @@ class TestFunctionHandler(TestUsingServer): self.assertEqual("test-value", resp.info()["test-header"]) self.assertEqual("test", resp.read()) + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_tuple_3_rv(self): @wptserve.handlers.handler def handler(request, response): @@ -153,6 +167,7 @@ class TestFunctionHandler(TestUsingServer): self.assertEqual("test-value", resp.info()["test-header"]) self.assertEqual("test data", resp.read()) + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_tuple_3_rv_1(self): @wptserve.handlers.handler def handler(request, response): @@ -166,6 +181,7 @@ class TestFunctionHandler(TestUsingServer): self.assertEqual("test-value", resp.info()["test-header"]) self.assertEqual("test data", resp.read()) + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_tuple_4_rv(self): @wptserve.handlers.handler def handler(request, response): @@ -179,6 +195,7 @@ class TestFunctionHandler(TestUsingServer): assert cm.value.code == 500 + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_none_rv(self): @wptserve.handlers.handler def handler(request, response): @@ -193,6 +210,7 @@ class TestFunctionHandler(TestUsingServer): class TestJSONHandler(TestUsingServer): + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_json_0(self): @wptserve.handlers.json_handler def handler(request, response): @@ -204,6 +222,7 @@ class TestJSONHandler(TestUsingServer): self.assertEqual(200, resp.getcode()) self.assertEqual({"data": "test data"}, json.load(resp)) + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_json_tuple_2(self): @wptserve.handlers.json_handler def handler(request, response): @@ -216,6 +235,7 @@ class TestJSONHandler(TestUsingServer): self.assertEqual("test-value", resp.info()["test-header"]) self.assertEqual({"data": "test data"}, json.load(resp)) + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_json_tuple_3(self): @wptserve.handlers.json_handler def handler(request, response): @@ -231,12 +251,14 @@ class TestJSONHandler(TestUsingServer): class TestPythonHandler(TestUsingServer): + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_string(self): resp = self.request("/test_string.py") self.assertEqual(200, resp.getcode()) self.assertEqual("text/plain", resp.info()["Content-Type"]) self.assertEqual("PASS", resp.read()) + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_tuple_2(self): resp = self.request("/test_tuple_2.py") self.assertEqual(200, resp.getcode()) @@ -244,6 +266,7 @@ class TestPythonHandler(TestUsingServer): self.assertEqual("PASS", resp.info()["X-Test"]) self.assertEqual("PASS", resp.read()) + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_tuple_3(self): resp = self.request("/test_tuple_3.py") self.assertEqual(202, resp.getcode()) @@ -252,6 +275,7 @@ class TestPythonHandler(TestUsingServer): self.assertEqual("PASS", resp.info()["X-Test"]) self.assertEqual("PASS", resp.read()) + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_import(self): dir_name = os.path.join(doc_root, "subdir") assert dir_name not in sys.path @@ -263,18 +287,21 @@ class TestPythonHandler(TestUsingServer): self.assertEqual("text/plain", resp.info()["Content-Type"]) self.assertEqual("PASS", resp.read()) + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_no_main(self): with pytest.raises(HTTPError) as cm: self.request("/no_main.py") assert cm.value.code == 500 + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_invalid(self): with pytest.raises(HTTPError) as cm: self.request("/invalid.py") assert cm.value.code == 500 + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_missing(self): with pytest.raises(HTTPError) as cm: self.request("/missing.py") @@ -283,17 +310,20 @@ class TestPythonHandler(TestUsingServer): class TestDirectoryHandler(TestUsingServer): + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_directory(self): resp = self.request("/") self.assertEqual(200, resp.getcode()) self.assertEqual("text/html", resp.info()["Content-Type"]) #Add a check that the response is actually sane + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_subdirectory_trailing_slash(self): resp = self.request("/subdir/") assert resp.getcode() == 200 assert resp.info()["Content-Type"] == "text/html" + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_subdirectory_no_trailing_slash(self): # This seems to resolve the 301 transparently, so test for 200 resp = self.request("/subdir") @@ -302,6 +332,7 @@ class TestDirectoryHandler(TestUsingServer): class TestAsIsHandler(TestUsingServer): + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_as_is(self): resp = self.request("/test.asis") self.assertEqual(202, resp.getcode()) diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_input_file.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_input_file.py index be7ba4291be..e2d8761ed7a 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_input_file.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_input_file.py @@ -1,3 +1,5 @@ +import sys + from wptserve.request import InputFile from io import BytesIO import pytest @@ -21,6 +23,7 @@ def teardown_function(function): test_file.close() +@pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_seek(): input_file.seek(2) test_file.seek(2) @@ -31,6 +34,7 @@ def test_seek(): assert input_file.read(1) == test_file.read(1) +@pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_seek_backwards(): input_file.seek(2) test_file.seek(2) @@ -48,6 +52,7 @@ def test_seek_negative_offset(): input_file.seek(-1) +@pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_seek_file_bigger_than_buffer(): old_max_buf = InputFile.max_buffer_size InputFile.max_buffer_size = 10 @@ -66,10 +71,12 @@ def test_seek_file_bigger_than_buffer(): InputFile.max_buffer_size = old_max_buf +@pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_read(): assert input_file.read() == test_file.read() +@pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_read_file_bigger_than_buffer(): old_max_buf = InputFile.max_buffer_size InputFile.max_buffer_size = 10 @@ -81,6 +88,7 @@ def test_read_file_bigger_than_buffer(): InputFile.max_buffer_size = old_max_buf +@pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_readline(): assert input_file.readline() == test_file.readline() assert input_file.readline() == test_file.readline() @@ -90,17 +98,20 @@ def test_readline(): assert input_file.readline() == test_file.readline() +@pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_readline_max_byte(): line = test_file.readline() assert input_file.readline(max_bytes=len(line)/2) == line[:len(line)/2] assert input_file.readline(max_bytes=len(line)) == line[len(line)/2:] +@pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_readline_max_byte_longer_than_file(): assert input_file.readline(max_bytes=1000) == test_file.readline() assert input_file.readline(max_bytes=1000) == test_file.readline() +@pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_readline_file_bigger_than_buffer(): old_max_buf = InputFile.max_buffer_size InputFile.max_buffer_size = 10 @@ -114,10 +125,12 @@ def test_readline_file_bigger_than_buffer(): InputFile.max_buffer_size = old_max_buf +@pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_readlines(): assert input_file.readlines() == test_file.readlines() +@pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_readlines_file_bigger_than_buffer(): old_max_buf = InputFile.max_buffer_size InputFile.max_buffer_size = 10 @@ -130,11 +143,13 @@ def test_readlines_file_bigger_than_buffer(): InputFile.max_buffer_size = old_max_buf +@pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_iter(): for a, b in zip(input_file, test_file): assert a == b +@pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_iter_file_bigger_than_buffer(): old_max_buf = InputFile.max_buffer_size InputFile.max_buffer_size = 10 diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_pipes.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_pipes.py index 069bd760510..571e170a5cd 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_pipes.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_pipes.py @@ -1,8 +1,10 @@ import os import unittest -import urllib2 import time import json +import sys + +from six.moves import urllib import pytest @@ -11,54 +13,65 @@ from .base import TestUsingServer, doc_root class TestStatus(TestUsingServer): + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_status(self): resp = self.request("/document.txt", query="pipe=status(202)") self.assertEqual(resp.getcode(), 202) class TestHeader(TestUsingServer): + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_not_set(self): resp = self.request("/document.txt", query="pipe=header(X-TEST,PASS)") self.assertEqual(resp.info()["X-TEST"], "PASS") + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_set(self): resp = self.request("/document.txt", query="pipe=header(Content-Type,text/html)") self.assertEqual(resp.info()["Content-Type"], "text/html") + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_multiple(self): resp = self.request("/document.txt", query="pipe=header(X-Test,PASS)|header(Content-Type,text/html)") self.assertEqual(resp.info()["X-TEST"], "PASS") self.assertEqual(resp.info()["Content-Type"], "text/html") + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_multiple_same(self): resp = self.request("/document.txt", query="pipe=header(Content-Type,FAIL)|header(Content-Type,text/html)") self.assertEqual(resp.info()["Content-Type"], "text/html") + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_multiple_append(self): resp = self.request("/document.txt", query="pipe=header(X-Test,1)|header(X-Test,2,True)") self.assertEqual(resp.info()["X-Test"], "1, 2") class TestSlice(TestUsingServer): + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_both_bounds(self): resp = self.request("/document.txt", query="pipe=slice(1,10)") expected = open(os.path.join(doc_root, "document.txt"), 'rb').read() self.assertEqual(resp.read(), expected[1:10]) + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_no_upper(self): resp = self.request("/document.txt", query="pipe=slice(1)") expected = open(os.path.join(doc_root, "document.txt"), 'rb').read() self.assertEqual(resp.read(), expected[1:]) + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_no_lower(self): resp = self.request("/document.txt", query="pipe=slice(null,10)") expected = open(os.path.join(doc_root, "document.txt"), 'rb').read() self.assertEqual(resp.read(), expected[:10]) class TestSub(TestUsingServer): + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_sub_config(self): resp = self.request("/sub.txt", query="pipe=sub") expected = "localhost localhost %i" % self.server.port self.assertEqual(resp.read().rstrip(), expected) + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_sub_file_hash(self): resp = self.request("/sub_file_hash.sub.txt") expected = """ @@ -71,15 +84,18 @@ sha512: r8eLGRTc7ZznZkFjeVLyo6/FyQdra9qmlYCwKKxm3kfQAswRS9+3HsYk3thLUhcFmmWhK4dX JwGFonfXwg==""" self.assertEqual(resp.read().rstrip(), expected.strip()) + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_sub_file_hash_unrecognized(self): - with self.assertRaises(urllib2.HTTPError): + with self.assertRaises(urllib.error.HTTPError): self.request("/sub_file_hash_unrecognized.sub.txt") + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_sub_headers(self): resp = self.request("/sub_headers.txt", query="pipe=sub", headers={"X-Test": "PASS"}) expected = "PASS" self.assertEqual(resp.read().rstrip(), expected) + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_sub_location(self): resp = self.request("/sub_location.sub.txt?query_string") expected = """ @@ -93,19 +109,23 @@ scheme: http server: http://localhost:{0}""".format(self.server.port) self.assertEqual(resp.read().rstrip(), expected.strip()) + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_sub_params(self): resp = self.request("/sub_params.txt", query="test=PASS&pipe=sub") expected = "PASS" self.assertEqual(resp.read().rstrip(), expected) + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_sub_url_base(self): resp = self.request("/sub_url_base.sub.txt") self.assertEqual(resp.read().rstrip(), "Before / After") + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_sub_uuid(self): resp = self.request("/sub_uuid.sub.txt") self.assertRegexpMatches(resp.read().rstrip(), r"Before [a-f0-9-]+ After") + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_sub_var(self): resp = self.request("/sub_var.sub.txt") port = self.server.port @@ -113,6 +133,7 @@ server: http://localhost:{0}""".format(self.server.port) self.assertEqual(resp.read().rstrip(), expected) class TestTrickle(TestUsingServer): + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_trickle(self): #Actually testing that the response trickles in is not that easy t0 = time.time() @@ -122,6 +143,7 @@ class TestTrickle(TestUsingServer): self.assertEqual(resp.read(), expected) self.assertGreater(6, t1-t0) + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_headers(self): resp = self.request("/document.txt", query="pipe=trickle(d0.01)") self.assertEqual(resp.info()["Cache-Control"], "no-cache, no-store, must-revalidate") @@ -129,10 +151,12 @@ class TestTrickle(TestUsingServer): self.assertEqual(resp.info()["Expires"], "0") class TestPipesWithVariousHandlers(TestUsingServer): + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_with_python_file_handler(self): resp = self.request("/test_string.py", query="pipe=slice(null,2)") self.assertEqual(resp.read(), "PA") + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_with_python_func_handler(self): @wptserve.handlers.handler def handler(request, response): @@ -142,6 +166,7 @@ class TestPipesWithVariousHandlers(TestUsingServer): resp = self.request(route[1], query="pipe=slice(null,2)") self.assertEqual(resp.read(), "PA") + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_with_python_func_handler_using_response_writer(self): @wptserve.handlers.handler def handler(request, response): @@ -152,6 +177,7 @@ class TestPipesWithVariousHandlers(TestUsingServer): # slice has not been applied to the response, because response.writer was used. self.assertEqual(resp.read(), "PASS") + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_header_pipe_with_python_func_using_response_writer(self): @wptserve.handlers.handler def handler(request, response): @@ -163,6 +189,7 @@ class TestPipesWithVariousHandlers(TestUsingServer): self.assertFalse(resp.info().get("X-TEST")) self.assertEqual(resp.read(), "CONTENT") + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_with_json_handler(self): @wptserve.handlers.json_handler def handler(request, response): @@ -172,6 +199,7 @@ class TestPipesWithVariousHandlers(TestUsingServer): resp = self.request(route[1], query="pipe=slice(null,2)") self.assertEqual(resp.read(), '"{') + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_slice_with_as_is_handler(self): resp = self.request("/test.asis", query="pipe=slice(null,2)") self.assertEqual(202, resp.getcode()) @@ -180,6 +208,7 @@ class TestPipesWithVariousHandlers(TestUsingServer): # slice has not been applied to the response, because response.writer was used. self.assertEqual("Content", resp.read()) + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_headers_with_as_is_handler(self): resp = self.request("/test.asis", query="pipe=header(X-TEST,FAIL)") self.assertEqual(202, resp.getcode()) @@ -188,6 +217,7 @@ class TestPipesWithVariousHandlers(TestUsingServer): self.assertEqual("PASS", resp.info()["X-TEST"]) self.assertEqual("Content", resp.read()) + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_trickle_with_as_is_handler(self): t0 = time.time() resp = self.request("/test.asis", query="pipe=trickle(1:d2:5:d1:r2)") diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_request.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_request.py index 24eedbc4a78..de29638f6c1 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_request.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_request.py @@ -1,3 +1,5 @@ +import sys + import pytest wptserve = pytest.importorskip("wptserve") @@ -6,6 +8,7 @@ from wptserve.request import InputFile class TestInputFile(TestUsingServer): + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_seek(self): @wptserve.handlers.handler def handler(request, response): @@ -34,6 +37,7 @@ class TestInputFile(TestUsingServer): "12345ab\ncdef", "12345ab\n", "cdef"], resp.read().split(" ")) + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_seek_input_longer_than_buffer(self): @wptserve.handlers.handler def handler(request, response): @@ -60,6 +64,7 @@ class TestInputFile(TestUsingServer): finally: InputFile.max_buffer_size = old_max_buf + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_iter(self): @wptserve.handlers.handler def handler(request, response): @@ -72,6 +77,7 @@ class TestInputFile(TestUsingServer): self.assertEqual(200, resp.getcode()) self.assertEqual(["12345\n", "abcdef\r\n", "zyxwv"], resp.read().split(" ")) + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_iter_input_longer_than_buffer(self): @wptserve.handlers.handler def handler(request, response): @@ -92,6 +98,7 @@ class TestInputFile(TestUsingServer): class TestRequest(TestUsingServer): + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_body(self): @wptserve.handlers.handler def handler(request, response): @@ -103,6 +110,7 @@ class TestRequest(TestUsingServer): resp = self.request(route[1], method="POST", body="12345ab\ncdef") self.assertEqual("12345ab\ncdef", resp.read()) + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_route_match(self): @wptserve.handlers.handler def handler(request, response): @@ -115,6 +123,7 @@ class TestRequest(TestUsingServer): class TestAuth(TestUsingServer): + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_auth(self): @wptserve.handlers.handler def handler(request, response): diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_response.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_response.py index d60127560f6..23b340d14f7 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_response.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_response.py @@ -1,3 +1,4 @@ +import sys import unittest from types import MethodType @@ -15,6 +16,7 @@ def send_body_as_header(self): self._headers_complete = True class TestResponse(TestUsingServer): + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_head_without_body(self): @wptserve.handlers.handler def handler(request, response): @@ -30,6 +32,7 @@ class TestResponse(TestUsingServer): self.assertEqual("TEST", resp.info()['x-Test']) self.assertEqual("", resp.info()['x-body']) + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_head_with_body(self): @wptserve.handlers.handler def handler(request, response): diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_server.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_server.py index 7ae31be7130..3b8cc1ce4cd 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_server.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_server.py @@ -1,3 +1,4 @@ +import sys import unittest import pytest @@ -8,6 +9,7 @@ from .base import TestUsingServer class TestFileHandler(TestUsingServer): + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_not_handled(self): with self.assertRaises(HTTPError) as cm: self.request("/not_existing") @@ -15,6 +17,7 @@ class TestFileHandler(TestUsingServer): self.assertEqual(cm.exception.code, 404) class TestRewriter(TestUsingServer): + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_rewrite(self): @wptserve.handlers.handler def handler(request, response): @@ -28,6 +31,7 @@ class TestRewriter(TestUsingServer): self.assertEqual("/test/rewritten", resp.read()) class TestRequestHandler(TestUsingServer): + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_exception(self): @wptserve.handlers.handler def handler(request, response): diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_stash.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_stash.py index 97591cbb007..32be1d33bd8 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_stash.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_stash.py @@ -1,3 +1,4 @@ +import sys import unittest import uuid @@ -14,6 +15,7 @@ class TestResponseSetCookie(TestUsingServer): with StashServer(None, authkey=str(uuid.uuid4())): super(TestResponseSetCookie, self).run(result) + @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_put_take(self): @wptserve.handlers.handler def handler(request, response): diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/test_config.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/test_config.py index 2c5f3f9fc6a..0fba3ff9357 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/tests/test_config.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/test_config.py @@ -8,11 +8,11 @@ config = pytest.importorskip("wptserve.config") def test_renamed_are_renamed(): - assert len(set(config._renamed_props.viewkeys()) & set(config.Config._default.viewkeys())) == 0 + assert len(set(config._renamed_props.keys()) & set(config.Config._default.keys())) == 0 def test_renamed_exist(): - assert set(config._renamed_props.viewvalues()).issubset(set(config.Config._default.viewkeys())) + assert set(config._renamed_props.values()).issubset(set(config.Config._default.keys())) @pytest.mark.parametrize("base, override, expected", [ @@ -68,8 +68,9 @@ def test_init_renamed_host(): def test_init_bogus(): with pytest.raises(TypeError) as e: config.Config(foo=1, bar=2) - assert "foo" in e.value.message - assert "bar" in e.value.message + message = e.value.args[0] + assert "foo" in message + assert "bar" in message def test_getitem(): @@ -282,12 +283,12 @@ def test_domains_not_domains_intersection(): not_subdomains={"x", "y"}) domains = c.domains not_domains = c.not_domains - assert len(set(domains.iterkeys()) ^ set(not_domains.iterkeys())) == 0 - for host in domains.iterkeys(): + assert len(set(domains.keys()) ^ set(not_domains.keys())) == 0 + for host in domains.keys(): host_domains = domains[host] host_not_domains = not_domains[host] - assert len(set(host_domains.iterkeys()) & set(host_not_domains.iterkeys())) == 0 - assert len(set(host_domains.itervalues()) & set(host_not_domains.itervalues())) == 0 + assert len(set(host_domains.keys()) & set(host_not_domains.keys())) == 0 + assert len(set(host_domains.values()) & set(host_not_domains.values())) == 0 def test_all_domains(): diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/test_replacement_tokenizer.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/test_replacement_tokenizer.py index ea0c0c283ea..75f504ea33a 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/tests/test_replacement_tokenizer.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/test_replacement_tokenizer.py @@ -1,3 +1,5 @@ +import sys + import pytest from wptserve.pipes import ReplacementTokenizer @@ -10,10 +12,26 @@ from wptserve.pipes import ReplacementTokenizer ["$ccc:ddd", [('var', '$ccc'), ('ident', 'ddd')]], ["$eee", [('ident', '$eee')]], ["fff[0]", [('ident', 'fff'), ('index', 0)]], - ["ggg[hhh]", [('ident', 'ggg'), ('index', u'hhh')]], - ["[iii]", [('index', u'iii')]], - ["jjj['kkk']", [('ident', 'jjj'), ('index', u"'kkk'")]], - ["lll[]", [('ident', 'lll'), ('index', u"")]], + pytest.param( + "ggg[hhh]", [('ident', 'ggg'), ('index', u'hhh')], + marks=pytest.mark.xfail(sys.version_info >= (3,), + reason="wptserve only works on Py2") + ), + pytest.param( + "[iii]", [('index', u'iii')], + marks=pytest.mark.xfail(sys.version_info >= (3,), + reason="wptserve only works on Py2") + ), + pytest.param( + "jjj['kkk']", [('ident', 'jjj'), ('index', u"'kkk'")], + marks=pytest.mark.xfail(sys.version_info >= (3,), + reason="wptserve only works on Py2") + ), + pytest.param( + "lll[]", [('ident', 'lll'), ('index', u"")], + marks=pytest.mark.xfail(sys.version_info >= (3,), + reason="wptserve only works on Py2") + ), ["111", [('ident', u'111')]], ["$111", [('ident', u'$111')]], ] diff --git a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/config.py b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/config.py index 3e4729a7f03..88954a96969 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/config.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/config.py @@ -2,8 +2,9 @@ import logging import os from collections import defaultdict, Mapping +from six import iteritems, itervalues -import sslutils +from .sslutils import environments from .utils import get_port @@ -17,7 +18,7 @@ _renamed_props = { def _merge_dict(base_dict, override_dict): rv = base_dict.copy() - for key, value in base_dict.iteritems(): + for key, value in iteritems(base_dict): if key in override_dict: if isinstance(value, dict): rv[key] = _merge_dict(value, override_dict[key]) @@ -73,13 +74,13 @@ class Config(Mapping): self.log_level = level_name self._logger_name = logger.name - for k, v in self._default.iteritems(): + for k, v in iteritems(self._default): setattr(self, k, kwargs.pop(k, v)) self.subdomains = subdomains self.not_subdomains = not_subdomains - for k, new_k in _renamed_props.iteritems(): + for k, new_k in iteritems(_renamed_props): if k in kwargs: self.logger.warning( "%s in config is deprecated; use %s instead" % ( @@ -114,7 +115,7 @@ class Config(Mapping): if k in override: self._set_override(k, override.pop(k)) - for k, new_k in _renamed_props.iteritems(): + for k, new_k in iteritems(_renamed_props): if k in override: self.logger.warning( "%s in config is deprecated; use %s instead" % ( @@ -146,7 +147,7 @@ class Config(Mapping): except AttributeError: old_ports = {} - for scheme, ports in self._ports.iteritems(): + for scheme, ports in iteritems(self._ports): for i, port in enumerate(ports): if scheme in ["wss", "https"] and not self.ssl_env.ssl_enabled: port = None @@ -189,8 +190,8 @@ class Config(Mapping): hosts[""] = self.browser_host rv = {} - for name, host in hosts.iteritems(): - rv[name] = {subdomain: (subdomain.encode("idna") + u"." + host) + for name, host in iteritems(hosts): + rv[name] = {subdomain: (subdomain.encode("idna").decode("ascii") + u"." + host) for subdomain in self.subdomains} rv[name][""] = host return rv @@ -202,8 +203,8 @@ class Config(Mapping): hosts[""] = self.browser_host rv = {} - for name, host in hosts.iteritems(): - rv[name] = {subdomain: (subdomain.encode("idna") + u"." + host) + for name, host in iteritems(hosts): + rv[name] = {subdomain: (subdomain.encode("idna").decode("ascii") + u"." + host) for subdomain in self.not_subdomains} return rv @@ -218,14 +219,14 @@ class Config(Mapping): @property def domains_set(self): return {domain - for per_host_domains in self.domains.itervalues() - for domain in per_host_domains.itervalues()} + for per_host_domains in itervalues(self.domains) + for domain in itervalues(per_host_domains)} @property def not_domains_set(self): return {domain - for per_host_domains in self.not_domains.itervalues() - for domain in per_host_domains.itervalues()} + for per_host_domains in itervalues(self.not_domains) + for domain in itervalues(per_host_domains)} @property def all_domains_set(self): @@ -246,7 +247,7 @@ class Config(Mapping): implementation_type = self.ssl["type"] try: - cls = sslutils.environments[implementation_type] + cls = environments[implementation_type] except KeyError: raise ValueError("%s is not a vaid ssl type." % implementation_type) kwargs = self.ssl.get(implementation_type, {}).copy() diff --git a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/pipes.py b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/pipes.py index 9c13965cb3e..28743d36476 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/pipes.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/pipes.py @@ -7,7 +7,7 @@ import re import time import types import uuid -from cStringIO import StringIO +from six.moves import StringIO from six import text_type diff --git a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/request.py b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/request.py index ce7965a1242..07467c6f4dc 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/request.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/request.py @@ -1,7 +1,7 @@ import base64 import cgi -import Cookie -import StringIO +from six.moves.http_cookies import BaseCookie +from six.moves import StringIO import tempfile from six.moves.urllib.parse import parse_qsl, urlsplit @@ -52,7 +52,7 @@ class InputFile(object): if length > self.max_buffer_size: self._buf = tempfile.TemporaryFile() else: - self._buf = StringIO.StringIO() + self._buf = StringIO() @property def _buf_position(self): @@ -314,7 +314,7 @@ class Request(object): @property def cookies(self): if self._cookies is None: - parser = Cookie.BaseCookie() + parser = BaseCookie() cookie_headers = self.headers.get("cookie", "") parser.load(cookie_headers) cookies = Cookies() diff --git a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/response.py b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/response.py index 20b7b426996..314d99768b2 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/response.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/response.py @@ -1,6 +1,6 @@ from collections import OrderedDict from datetime import datetime, timedelta -import Cookie +from six.moves.http_cookies import BaseCookie, Morsel import json import types import uuid @@ -134,7 +134,7 @@ class Response(object): max_age = int(max_age.total_seconds()) max_age = "%.0d" % max_age - m = Cookie.Morsel() + m = Morsel() def maybe_set(key, value): if value is not None and value is not False: @@ -154,7 +154,7 @@ class Response(object): def unset_cookie(self, name): """Remove a cookie from those that are being sent with the response""" cookies = self.headers.get("Set-Cookie") - parser = Cookie.BaseCookie() + parser = BaseCookie() for cookie in cookies: parser.load(cookie) diff --git a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/server.py b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/server.py index 95d2320f41c..2bbbaa970fa 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/server.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/server.py @@ -1,8 +1,8 @@ -import BaseHTTPServer +from six.moves import BaseHTTPServer import errno import os import socket -from SocketServer import ThreadingMixIn +from six.moves.socketserver import ThreadingMixIn import ssl import sys import threading diff --git a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/sslutils/__init__.py b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/sslutils/__init__.py index 0c0ea43e21e..2ae94b8d670 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/sslutils/__init__.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/sslutils/__init__.py @@ -1,9 +1,6 @@ -# flake8: noqa (not ideal, but nicer than adding noqa: F401 to every line!) -import openssl -import pregenerated -from base import NoSSLEnvironment -from openssl import OpenSSLEnvironment -from pregenerated import PregeneratedSSLEnvironment +from .base import NoSSLEnvironment +from .openssl import OpenSSLEnvironment +from .pregenerated import PregeneratedSSLEnvironment environments = {"none": NoSSLEnvironment, "openssl": OpenSSLEnvironment, diff --git a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/utils.py b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/utils.py index 75f7c308276..1a6abc1fe25 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/utils.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/utils.py @@ -2,7 +2,7 @@ import socket def invert_dict(dict): rv = {} - for key, values in dict.iteritems(): + for key, values in dict.items(): for value in values: if value in rv: raise ValueError diff --git a/tests/wpt/web-platform-tests/web-animations/animation-model/animation-types/property-list.js b/tests/wpt/web-platform-tests/web-animations/animation-model/animation-types/property-list.js index f0b2a640c79..cb6e2c810e8 100644 --- a/tests/wpt/web-platform-tests/web-animations/animation-model/animation-types/property-list.js +++ b/tests/wpt/web-platform-tests/web-animations/animation-model/animation-types/property-list.js @@ -997,23 +997,23 @@ const gCSSProperties = { types: [ ] }, - 'offset-block-end': { - // https://drafts.csswg.org/css-logical-props/#propdef-offset-block-end + 'inset-block-end': { + // https://drafts.csswg.org/css-logical-props/#propdef-inset-block-end types: [ ] }, - 'offset-block-start': { - // https://drafts.csswg.org/css-logical-props/#propdef-offset-block-start + 'inset-block-start': { + // https://drafts.csswg.org/css-logical-props/#propdef-inset-block-start types: [ ] }, - 'offset-inline-end': { - // https://drafts.csswg.org/css-logical-props/#propdef-offset-inline-end + 'inset-inline-end': { + // https://drafts.csswg.org/css-logical-props/#propdef-inset-inline-end types: [ ] }, - 'offset-inline-start': { - // https://drafts.csswg.org/css-logical-props/#propdef-offset-inline-start + 'inset-inline-start': { + // https://drafts.csswg.org/css-logical-props/#propdef-inset-inline-start types: [ ] }, diff --git a/tests/wpt/web-platform-tests/webaudio/resources/audiobuffersource-testing.js b/tests/wpt/web-platform-tests/webaudio/resources/audiobuffersource-testing.js new file mode 100644 index 00000000000..22336419145 --- /dev/null +++ b/tests/wpt/web-platform-tests/webaudio/resources/audiobuffersource-testing.js @@ -0,0 +1,102 @@ +function createTestBuffer(context, sampleFrameLength) { + let audioBuffer = + context.createBuffer(1, sampleFrameLength, context.sampleRate); + let channelData = audioBuffer.getChannelData(0); + + // Create a simple linear ramp starting at zero, with each value in the buffer + // equal to its index position. + for (let i = 0; i < sampleFrameLength; ++i) + channelData[i] = i; + + return audioBuffer; +} + +function checkSingleTest(renderedBuffer, i, should) { + let renderedData = renderedBuffer.getChannelData(0); + let offsetFrame = i * testSpacingFrames; + + let test = tests[i]; + let expected = test.expected; + let description; + + if (test.description) { + description = test.description; + } else { + // No description given, so create a basic one from the given test + // parameters. + description = + 'loop from ' + test.loopStartFrame + ' -> ' + test.loopEndFrame; + if (test.offsetFrame) + description += ' with offset ' + test.offsetFrame; + if (test.playbackRate && test.playbackRate != 1) + description += ' with playbackRate of ' + test.playbackRate; + } + + let framesToTest; + + if (test.renderFrames) + framesToTest = test.renderFrames; + else if (test.durationFrames) + framesToTest = test.durationFrames; + + // Verify that the output matches + let prefix = 'Case ' + i + ': '; + should( + renderedData.slice(offsetFrame, offsetFrame + framesToTest), + prefix + description) + .beEqualToArray(expected); + + // Verify that we get all zeroes after the buffer (or duration) has passed. + should( + renderedData.slice( + offsetFrame + framesToTest, offsetFrame + testSpacingFrames), + prefix + description + ': tail') + .beConstantValueOf(0); +} + +function checkAllTests(renderedBuffer, should) { + for (let i = 0; i < tests.length; ++i) + checkSingleTest(renderedBuffer, i, should); +} + + +// Create the actual result by modulating playbackRate or detune AudioParam of +// ABSN. |modTarget| is a string of AudioParam name, |modOffset| is the offset +// (anchor) point of modulation, and |modRange| is the range of modulation. +// +// createSawtoothWithModulation(context, 'detune', 440, 1200); +// +// The above will perform a modulation on detune within the range of +// [1200, -1200] around the sawtooth waveform on 440Hz. +function createSawtoothWithModulation(context, modTarget, modOffset, modRange) { + let lfo = context.createOscillator(); + let amp = context.createGain(); + + // Create a sawtooth generator with the signal range of [0, 1]. + let phasor = context.createBufferSource(); + let phasorBuffer = context.createBuffer(1, sampleRate, sampleRate); + let phasorArray = phasorBuffer.getChannelData(0); + let phase = 0, phaseStep = 1 / sampleRate; + for (let i = 0; i < phasorArray.length; i++) { + phasorArray[i] = phase % 1.0; + phase += phaseStep; + } + phasor.buffer = phasorBuffer; + phasor.loop = true; + + // 1Hz for audible (human-perceivable) parameter modulation by LFO. + lfo.frequency.value = 1.0; + + amp.gain.value = modRange; + phasor.playbackRate.value = modOffset; + + // The oscillator output should be amplified accordingly to drive the + // modulation within the desired range. + lfo.connect(amp); + amp.connect(phasor[modTarget]); + + phasor.connect(context.destination); + + lfo.start(); + phasor.start(); +} diff --git a/tests/wpt/web-platform-tests/webaudio/resources/audit.js b/tests/wpt/web-platform-tests/webaudio/resources/audit.js index 4f4c6b7aed8..c56e4d1012f 100644 --- a/tests/wpt/web-platform-tests/webaudio/resources/audit.js +++ b/tests/wpt/web-platform-tests/webaudio/resources/audit.js @@ -33,6 +33,12 @@ window.Audit = (function() { 'use strict'; + // NOTE: Moving this method (or any other code above) will change the location + // of 'CONSOLE ERROR...' message in the expected text files. + function _logError(message) { + console.error('[audit.js] ' + message); + } + function _logPassed(message) { test(function(arg) { assert_true(true); @@ -70,13 +76,9 @@ window.Audit = (function() { String(target.slice(0, options.numberOfArrayElements)) + '...'; targetString = '[' + arrayElements + ']'; } else if (target === null) { - // null is an object, so we need to handle this specially. targetString = String(target); } else { - // We're expecting String() to return something like "[object Foo]", - // so we split the string to get the object type "Foo". This is - // pretty fragile. - targetString = '' + String(targetString).split(/[\s\]]/)[1]; + targetString = '' + String(target).split(/[\s\]]/)[1]; } break; default: @@ -350,7 +352,7 @@ window.Audit = (function() { * * @example * should('My promise', promise).beResolve().then((result) => { - * // log(result); + * log(result); * }); * * @result @@ -1289,6 +1291,56 @@ window.Audit = (function() { } /** + * Load file from a given URL and pass ArrayBuffer to the following promise. + * @param {String} fileUrl file URL. + * @return {Promise} + * + * @example + * Audit.loadFileFromUrl('resources/my-sound.ogg').then((response) => { + * audioContext.decodeAudioData(response).then((audioBuffer) => { + * // Do something with AudioBuffer. + * }); + * }); + */ + function loadFileFromUrl(fileUrl) { + return new Promise((resolve, reject) => { + let xhr = new XMLHttpRequest(); + xhr.open('GET', fileUrl, true); + xhr.responseType = 'arraybuffer'; + + xhr.onload = () => { + // |status = 0| is a workaround for the run_web_test.py server. We are + // speculating the server quits the transaction prematurely without + // completing the request. + if (xhr.status === 200 || xhr.status === 0) { + resolve(xhr.response); + } else { + let errorMessage = 'loadFile: Request failed when loading ' + + fileUrl + '. ' + xhr.statusText + '. (status = ' + xhr.status + + ')'; + if (reject) { + reject(errorMessage); + } else { + new Error(errorMessage); + } + } + }; + + xhr.onerror = (event) => { + let errorMessage = + 'loadFile: Network failure when loading ' + fileUrl + '.'; + if (reject) { + reject(errorMessage); + } else { + new Error(errorMessage); + } + }; + + xhr.send(); + }); + } + + /** * @class Audit * @description A WebAudio layout test task manager. * @example @@ -1313,12 +1365,18 @@ window.Audit = (function() { if (options && options.requireResultFile == true) { _logError( 'this test requires the explicit comparison with the ' + - 'expected result when it runs with run-webkit-tests.'); + 'expected result when it runs with run_web_tests.py.'); } return new TaskRunner(); }, + /** + * Load file from a given URL and pass ArrayBuffer to the following promise. + * See |loadFileFromUrl| method for the detail. + */ + loadFileFromUrl: loadFileFromUrl + }; })(); diff --git a/tests/wpt/web-platform-tests/webaudio/resources/note-grain-on-testing.js b/tests/wpt/web-platform-tests/webaudio/resources/note-grain-on-testing.js new file mode 100644 index 00000000000..1e941897161 --- /dev/null +++ b/tests/wpt/web-platform-tests/webaudio/resources/note-grain-on-testing.js @@ -0,0 +1,159 @@ +let sampleRate = 44100.0; + +// How many grains to play. +let numberOfTests = 100; + +// Duration of each grain to be played +let duration = 0.01; + +// Time step between the start of each grain. We need to add a little +// bit of silence so we can detect grain boundaries +let timeStep = duration + .005; + +// Time step between the start for each grain. +let grainOffsetStep = 0.001; + +// How long to render to cover all of the grains. +let renderTime = (numberOfTests + 1) * timeStep; + +let context; +let renderedData; + +// Create a buffer containing the data that we want. The function f +// returns the desired value at sample frame k. +function createSignalBuffer(context, f) { + // Make sure the buffer has enough data for all of the possible + // grain offsets and durations. The additional 1 is for any + // round-off errors. + let signalLength = + Math.floor(1 + sampleRate * (numberOfTests * grainOffsetStep + duration)); + + let buffer = context.createBuffer(2, signalLength, sampleRate); + let data = buffer.getChannelData(0); + + for (let k = 0; k < signalLength; ++k) { + data[k] = f(k); + } + + return buffer; +} + +// From the data array, find the start and end sample frame for each +// grain. This depends on the data having 0's between grain, and +// that the grain is always strictly non-zero. +function findStartAndEndSamples(data) { + let nSamples = data.length; + + let startTime = []; + let endTime = []; + let lookForStart = true; + + // Look through the rendered data to find the start and stop + // times of each grain. + for (let k = 0; k < nSamples; ++k) { + if (lookForStart) { + // Find a non-zero point and record the start. We're not + // concerned with the value in this test, only that the + // grain started here. + if (renderedData[k]) { + startTime.push(k); + lookForStart = false; + } + } else { + // Find a zero and record the end of the grain. + if (!renderedData[k]) { + endTime.push(k); + lookForStart = true; + } + } + } + + return {start: startTime, end: endTime}; +} + +function playGrain(context, source, time, offset, duration) { + let bufferSource = context.createBufferSource(); + + bufferSource.buffer = source; + bufferSource.connect(context.destination); + bufferSource.start(time, offset, duration); +} + +// Play out all grains. Returns a object containing two arrays, one +// for the start time and one for the grain offset time. +function playAllGrains(context, source, numberOfNotes) { + let startTimes = new Array(numberOfNotes); + let offsets = new Array(numberOfNotes); + + for (let k = 0; k < numberOfNotes; ++k) { + let timeOffset = k * timeStep; + let grainOffset = k * grainOffsetStep; + + playGrain(context, source, timeOffset, grainOffset, duration); + startTimes[k] = timeOffset; + offsets[k] = grainOffset; + } + + return {startTimes: startTimes, grainOffsetTimes: offsets}; +} + +// Verify that the start and end frames for each grain match our +// expected start and end frames. +function verifyStartAndEndFrames(startEndFrames, should) { + let startFrames = startEndFrames.start; + let endFrames = startEndFrames.end; + + // Count of how many grains started at the incorrect time. + let errorCountStart = 0; + + // Count of how many grains ended at the incorrect time. + let errorCountEnd = 0; + + should( + startFrames.length == endFrames.length, 'Found all grain starts and ends') + .beTrue(); + + should(startFrames.length, 'Number of start frames').beEqualTo(numberOfTests); + should(endFrames.length, 'Number of end frames').beEqualTo(numberOfTests); + + // Examine the start and stop times to see if they match our + // expectations. + for (let k = 0; k < startFrames.length; ++k) { + let expectedStart = timeToSampleFrame(k * timeStep, sampleRate); + // The end point is the duration. + let expectedEnd = expectedStart + + grainLengthInSampleFrames(k * grainOffsetStep, duration, sampleRate); + + if (startFrames[k] != expectedStart) + ++errorCountStart; + if (endFrames[k] != expectedEnd) + ++errorCountEnd; + + should([startFrames[k], endFrames[k]], 'Pulse ' + k + ' boundary') + .beEqualToArray([expectedStart, expectedEnd]); + } + + // Check that all the grains started or ended at the correct time. + if (!errorCountStart) { + should( + startFrames.length, 'Number of grains that started at the correct time') + .beEqualTo(numberOfTests); + } else { + should( + errorCountStart, + 'Number of grains out of ' + numberOfTests + + 'that started at the wrong time') + .beEqualTo(0); + } + + if (!errorCountEnd) { + should(endFrames.length, 'Number of grains that ended at the correct time') + .beEqualTo(numberOfTests); + } else { + should( + errorCountEnd, + 'Number of grains out of ' + numberOfTests + + ' that ended at the wrong time') + .beEqualTo(0); + } +} diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-basic.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-basic.html new file mode 100644 index 00000000000..54e2d4dc25a --- /dev/null +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-basic.html @@ -0,0 +1,37 @@ +<!doctype html> +<html> + <head> + <title> + Basic Test of AudioBufferSourceNode + </title> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/webaudio/resources/audit-util.js"></script> + <script src="/webaudio/resources/audit.js"></script> + <script src="/webaudio/resources/start-stop-exceptions.js"></script> + </head> + <script id="layout-test-code"> + let sampleRate = 44100; + let renderLengthSeconds = 0.25; + + let oscTypes = ['sine', 'square', 'sawtooth', 'triangle', 'custom']; + + let audit = Audit.createTaskRunner(); + + audit.define('start/stop exceptions', (task, should) => { + // We're not going to render anything, so make it simple + let context = new OfflineAudioContext(1, 1, sampleRate); + let node = new AudioBufferSourceNode(context); + + testStartStop(should, node, [ + {args: [0, -1], errorType: 'RangeError'}, + {args: [0, 0, -1], errorType: 'RangeError'} + ]); + task.done(); + }); + + audit.run(); + </script> + <body> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-channels.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-channels.html new file mode 100644 index 00000000000..0af05d3a8e8 --- /dev/null +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-channels.html @@ -0,0 +1,97 @@ +<!DOCTYPE html> +<html> + <head> + <title> + audiobuffersource-channels.html + </title> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/webaudio/resources/audit-util.js"></script> + <script src="/webaudio/resources/audit.js"></script> + </head> + <body> + <script id="layout-test-code"> + let audit = Audit.createTaskRunner(); + let context; + let source; + + audit.define( + { + label: 'validate .buffer', + description: + 'Validatation of AudioBuffer in .buffer attribute setter' + }, + function(task, should) { + context = new AudioContext(); + source = context.createBufferSource(); + + // Make sure we can't set to something which isn't an AudioBuffer. + should(function() { + source.buffer = 57; + }, 'source.buffer = 57').throw('TypeError'); + + // It's ok to set the buffer to null. + should(function() { + source.buffer = null; + }, 'source.buffer = null').notThrow(); + + // Set the buffer to a valid AudioBuffer + let buffer = + new AudioBuffer({length: 128, sampleRate: context.sampleRate}); + + should(function() { + source.buffer = buffer; + }, 'source.buffer = buffer').notThrow(); + + // The buffer has been set; we can't set it again. + should(function() { + source.buffer = + new AudioBuffer({length: 128, sampleRate: context.sampleRate}) + }, 'source.buffer = new buffer').throw('InvalidStateError'); + + // The buffer has been set; it's ok to set it to null. + should(function() { + source.buffer = null; + }, 'source.buffer = null again').notThrow(); + + // The buffer was already set (and set to null). Can't set it + // again. + should(function() { + source.buffer = buffer; + }, 'source.buffer = buffer again').throw('InvalidStateError'); + + // But setting to null is ok. + should(function() { + }, 'source.buffer = null after setting to null').notThrow(); + + // Check that mono buffer can be set. + should(function() { + let monoBuffer = + context.createBuffer(1, 1024, context.sampleRate); + let testSource = context.createBufferSource(); + testSource.buffer = monoBuffer; + }, 'Setting source with mono buffer').notThrow(); + + // Check that stereo buffer can be set. + should(function() { + let stereoBuffer = + context.createBuffer(2, 1024, context.sampleRate); + let testSource = context.createBufferSource(); + testSource.buffer = stereoBuffer; + }, 'Setting source with stereo buffer').notThrow(); + + // Check buffers with more than two channels. + for (let i = 3; i < 10; ++i) { + should(function() { + let buffer = context.createBuffer(i, 1024, context.sampleRate); + let testSource = context.createBufferSource(); + testSource.buffer = buffer; + }, 'Setting source with ' + i + ' channels buffer').notThrow(); + } + task.done(); + }); + + audit.run(); + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-ended.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-ended.html new file mode 100644 index 00000000000..b9922f61ef3 --- /dev/null +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-ended.html @@ -0,0 +1,40 @@ +<!DOCTYPE html> +<html> + <head> + <title> + audiobuffersource-ended.html + </title> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/webaudio/resources/audit-util.js"></script> + <script src="/webaudio/resources/audit.js"></script> + <script src="/webaudio/resources/audiobuffersource-testing.js"></script> + </head> + <body> + <script id="layout-test-code"> + let audit = Audit.createTaskRunner(); + + let context; + let source; + + audit.define( + 'AudioBufferSourceNode calls its onended EventListener', + function(task, should) { + let sampleRate = 44100.0; + let numberOfFrames = 32; + context = new OfflineAudioContext(1, numberOfFrames, sampleRate); + source = context.createBufferSource(); + source.buffer = createTestBuffer(context, numberOfFrames); + source.connect(context.destination); + source.onended = function() { + should(true, 'source.onended called').beTrue(); + task.done(); + }; + source.start(0); + context.startRendering(); + }); + + audit.run(); + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-grain.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-grain.html new file mode 100644 index 00000000000..f554304a21e --- /dev/null +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-grain.html @@ -0,0 +1,71 @@ +<!DOCTYPE html> +<html> + <head> + <title> + Test Start Grain with Delayed Buffer Setting + </title> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/webaudio/resources/audit-util.js"></script> + <script src="/webaudio/resources/audit.js"></script> + </head> + <body> + <script id="layout-test-code"> + let audit = Audit.createTaskRunner(); + let context; + let source; + let buffer; + let renderedData; + + let sampleRate = 44100; + + let testDurationSec = 1; + let testDurationSamples = testDurationSec * sampleRate; + let startTime = 0.9 * testDurationSec; + + audit.define( + 'Test setting the source buffer after starting the grain', + function(task, should) { + context = + new OfflineAudioContext(1, testDurationSamples, sampleRate); + + buffer = createConstantBuffer(context, testDurationSamples, 1); + source = context.createBufferSource(); + source.connect(context.destination); + + // Start the source BEFORE we set the buffer. The grain offset and + // duration aren't important, as long as we specify some offset. + source.start(startTime, .1); + source.buffer = buffer; + + // Render it! + context.startRendering() + .then(function(buffer) { + checkResult(buffer, should); + }) + .then(task.done.bind(task)); + ; + }); + + function checkResult(buffer, should) { + let success = false; + + renderedData = buffer.getChannelData(0); + + // Check that the rendered data is not all zeroes. Any non-zero data + // means the test passed. + let startFrame = Math.round(startTime * sampleRate); + for (k = 0; k < renderedData.length; ++k) { + if (renderedData[k]) { + success = true; + break; + } + } + + should(success, 'Buffer was played').beTrue(); + } + + audit.run(); + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-multi-channels-expected.wav b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-multi-channels-expected.wav Binary files differnew file mode 100644 index 00000000000..ab9d5fe5a9d --- /dev/null +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-multi-channels-expected.wav diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-multi-channels.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-multi-channels.html new file mode 100644 index 00000000000..01ba3b122d8 --- /dev/null +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-multi-channels.html @@ -0,0 +1,78 @@ +<!DOCTYPE html> +<!-- +Test AudioBufferSourceNode supports 5.1 channel. +--> +<html> + <head> + <title> + audiobuffersource-multi-channels.html + </title> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/webaudio/resources/audit-util.js"></script> + <script src="/webaudio/resources/audit.js"></script> + <script src="/webaudio/resources/mix-testing.js"></script> + </head> + <body> + <script id="layout-test-code"> + let audit = Audit.createTaskRunner(); + let context; + let expectedAudio; + + audit.define('initialize', (task, should) => { + // Create offline audio context + let sampleRate = 44100.0; + should(() => { + context = new OfflineAudioContext( + 6, sampleRate * toneLengthSeconds, sampleRate); + }, 'Creating context for testing').notThrow(); + should( + Audit + .loadFileFromUrl( + 'audiobuffersource-multi-channels-expected.wav') + .then(arrayBuffer => { + context.decodeAudioData(arrayBuffer).then(audioBuffer => { + expectedAudio = audioBuffer; + task.done(); + }); + }), + 'Fetching expected audio') + .beResolved(); + }); + + audit.define( + {label: 'test', description: 'AudioBufferSource with 5.1 buffer'}, + (task, should) => { + let toneBuffer = + createToneBuffer(context, 440, toneLengthSeconds, 6); + + let source = context.createBufferSource(); + source.buffer = toneBuffer; + + source.connect(context.destination); + source.start(0); + + context.startRendering() + .then(renderedAudio => { + // Compute a threshold based on the maximum error, |maxUlp|, + // in ULP. This is experimentally determined. Assuming that + // the reference file is a 16-bit wav file, the max values in + // the wave file are +/- 32768. + let maxUlp = 1; + let threshold = maxUlp / 32768; + for (let k = 0; k < renderedAudio.numberOfChannels; ++k) { + should( + renderedAudio.getChannelData(k), + 'Rendered audio for channel ' + k) + .beCloseToArray( + expectedAudio.getChannelData(k), + {absoluteThreshold: threshold}); + } + }) + .then(() => task.done()); + }); + + audit.run(); + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-one-sample-loop.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-one-sample-loop.html new file mode 100644 index 00000000000..af1454a5a9f --- /dev/null +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-one-sample-loop.html @@ -0,0 +1,47 @@ +<!DOCTYPE html> +<html> + <head> + <title> + Test AudioBufferSourceNode With Looping a Single-Sample Buffer + </title> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/webaudio/resources/audit-util.js"></script> + <script src="/webaudio/resources/audit.js"></script> + </head> + <body> + <script id="layout-test-code"> + let audit = Audit.createTaskRunner(); + + let sampleRate = 44100; + let testDurationSamples = 1000; + + audit.define('one-sample-loop', function(task, should) { + // Create the offline context for the test. + let context = + new OfflineAudioContext(1, testDurationSamples, sampleRate); + + // Create the single sample buffer + let buffer = createConstantBuffer(context, 1, 1); + + // Create the source and connect it to the destination + let source = context.createBufferSource(); + source.buffer = buffer; + source.loop = true; + source.connect(context.destination); + source.start(); + + // Render it! + context.startRendering() + .then(function(audioBuffer) { + should(audioBuffer.getChannelData(0), 'Rendered data') + .beConstantValueOf(1); + }) + .then(task.done.bind(task)); + ; + }); + + audit.run(); + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-playbackrate-zero.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-playbackrate-zero.html new file mode 100644 index 00000000000..58ee49e42d2 --- /dev/null +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-playbackrate-zero.html @@ -0,0 +1,80 @@ +<!DOCTYPE html> +<html> + <head> + <title> + audiobuffersource-playbackrate-zero.html + </title> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/webaudio/resources/audit-util.js"></script> + <script src="/webaudio/resources/audit.js"></script> + </head> + <body> + <script id="layout-test-code"> + // Sample rate should be power of 128 to observe the change of AudioParam + // at the beginning of rendering quantum. (playbackRate is k-rate) This is + // the minimum sample rate in the valid sample rate range. + let sampleRate = 8192; + + // The render duration in seconds, and the length in samples. + let renderDuration = 1.0; + let renderLength = renderDuration * sampleRate; + + let context = new OfflineAudioContext(1, renderLength, sampleRate); + let audit = Audit.createTaskRunner(); + + + // Task: Render the actual buffer and compare with the reference. + audit.define('synthesize-verify', (task, should) => { + let ramp = context.createBufferSource(); + let rampBuffer = createLinearRampBuffer(context, renderLength); + ramp.buffer = rampBuffer; + + ramp.connect(context.destination); + ramp.start(); + + // Leave the playbackRate as 1 for the first half, then change it + // to zero at the exact half. The zero playback rate should hold the + // sample value of the buffer index at the moment. (sample-and-hold) + ramp.playbackRate.setValueAtTime(1.0, 0.0); + ramp.playbackRate.setValueAtTime(0.0, renderDuration / 2); + + context.startRendering() + .then(function(renderedBuffer) { + let data = renderedBuffer.getChannelData(0); + let rampData = rampBuffer.getChannelData(0); + let half = rampData.length / 2; + let passed = true; + let i; + + for (i = 1; i < rampData.length; i++) { + if (i < half) { + // Before the half position, the actual should match with the + // original ramp data. + if (data[i] !== rampData[i]) { + passed = false; + break; + } + } else { + // From the half position, the actual value should not change. + if (data[i] !== rampData[half]) { + passed = false; + break; + } + } + } + + should(passed, 'The zero playbackRate') + .message( + 'held the sample value correctly', + 'should hold the sample value. ' + + 'Expected ' + rampData[half] + ' but got ' + data[i] + + ' at the index ' + i); + }) + .then(() => task.done()); + }); + + audit.run(); + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-start.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-start.html new file mode 100644 index 00000000000..19331954b0b --- /dev/null +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-start.html @@ -0,0 +1,174 @@ +<!DOCTYPE html> +<html> + <head> + <title> + audiobuffersource-start.html + </title> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/webaudio/resources/audit-util.js"></script> + <script src="/webaudio/resources/audit.js"></script> + <script src="/webaudio/resources/audiobuffersource-testing.js"></script> + </head> + <body> + <script id="layout-test-code"> + let audit = Audit.createTaskRunner(); + + // The following test cases assume an AudioBuffer of length 8 whose PCM + // data is a linear ramp, 0, 1, 2, 3,... + + let tests = [ + + { + description: + 'start(when): implicitly play whole buffer from beginning to end', + offsetFrame: 'none', + durationFrames: 'none', + renderFrames: 16, + playbackRate: 1, + expected: [0, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0] + }, + + { + description: + 'start(when, 0): play whole buffer from beginning to end explicitly giving offset of 0', + offsetFrame: 0, + durationFrames: 'none', + renderFrames: 16, + playbackRate: 1, + expected: [0, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0] + }, + + { + description: + 'start(when, 0, 8_frames): play whole buffer from beginning to end explicitly giving offset of 0 and duration of 8 frames', + offsetFrame: 0, + durationFrames: 8, + renderFrames: 16, + playbackRate: 1, + expected: [0, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0] + }, + + { + description: + 'start(when, 4_frames): play with explicit non-zero offset', + offsetFrame: 4, + durationFrames: 'none', + renderFrames: 16, + playbackRate: 1, + expected: [4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + }, + + { + description: + 'start(when, 4_frames, 4_frames): play with explicit non-zero offset and duration', + offsetFrame: 4, + durationFrames: 4, + renderFrames: 16, + playbackRate: 1, + expected: [4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + }, + + { + description: + 'start(when, 7_frames): play with explicit non-zero offset near end of buffer', + offsetFrame: 7, + durationFrames: 1, + renderFrames: 16, + playbackRate: 1, + expected: [7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + }, + + { + description: + 'start(when, 8_frames): play with explicit offset at end of buffer', + offsetFrame: 8, + durationFrames: 0, + renderFrames: 16, + playbackRate: 1, + expected: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + }, + + { + description: + 'start(when, 9_frames): play with explicit offset past end of buffer', + offsetFrame: 8, + durationFrames: 0, + renderFrames: 16, + playbackRate: 1, + expected: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + }, + + // When the duration exceeds the buffer, just play to the end of the + // buffer. (This is different from the case when we're looping, which is + // tested in loop-comprehensive.) + { + description: + 'start(when, 0, 15_frames): play with whole buffer, with long duration (clipped)', + offsetFrame: 0, + durationFrames: 15, + renderFrames: 16, + playbackRate: 1, + expected: [0, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0] + }, + + // Enable test when AudioBufferSourceNode hack is fixed: + // https://bugs.webkit.org/show_bug.cgi?id=77224 { description: + // "start(when, 3_frames, 3_frames): play a middle section with explicit + // offset and duration", + // offsetFrame: 3, durationFrames: 3, renderFrames: 16, playbackRate: + // 1, expected: [4,5,6,7,0,0,0,0,0,0,0,0,0,0,0,0] }, + + ]; + + let sampleRate = 44100; + let buffer; + let bufferFrameLength = 8; + let testSpacingFrames = 32; + let testSpacingSeconds = testSpacingFrames / sampleRate; + let totalRenderLengthFrames = tests.length * testSpacingFrames; + + function runLoopTest(context, testNumber, test) { + let source = context.createBufferSource(); + + source.buffer = buffer; + source.playbackRate.value = test.playbackRate; + + source.connect(context.destination); + + // Render each test one after the other, spaced apart by + // testSpacingSeconds. + let startTime = testNumber * testSpacingSeconds; + + if (test.offsetFrame == 'none' && test.durationFrames == 'none') { + source.start(startTime); + } else if (test.durationFrames == 'none') { + let offset = test.offsetFrame / context.sampleRate; + source.start(startTime, offset); + } else { + let offset = test.offsetFrame / context.sampleRate; + let duration = test.durationFrames / context.sampleRate; + source.start(startTime, offset, duration); + } + } + + audit.define( + 'Tests AudioBufferSourceNode start()', function(task, should) { + // Create offline audio context. + let context = + new OfflineAudioContext(1, totalRenderLengthFrames, sampleRate); + buffer = createTestBuffer(context, bufferFrameLength); + + for (let i = 0; i < tests.length; ++i) + runLoopTest(context, i, tests[i]); + + context.startRendering().then(function(audioBuffer) { + checkAllTests(audioBuffer, should); + task.done(); + }); + }); + + audit.run(); + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiosource-onended.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiosource-onended.html new file mode 100644 index 00000000000..20ef4a1c638 --- /dev/null +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiosource-onended.html @@ -0,0 +1,101 @@ +<!DOCTYPE html> +<html> + <head> + <title> + Test Onended Event Listener + </title> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/webaudio/resources/audit-util.js"></script> + <script src="/webaudio/resources/audit.js"></script> + </head> + <body> + <script id="layout-test-code"> + let sampleRate = 44100; + let renderLengthSeconds = 1; + let renderLengthFrames = renderLengthSeconds * sampleRate; + + // Length of the source buffer. Anything less than the render length is + // fine. + let sourceBufferLengthFrames = renderLengthFrames / 8; + // When to stop the oscillator. Anything less than the render time is + // fine. + let stopTime = renderLengthSeconds / 8; + + let audit = Audit.createTaskRunner(); + + audit.define('absn-set-onended', (task, should) => { + // Test that the onended event for an AudioBufferSourceNode is fired + // when it is set directly. + let context = + new OfflineAudioContext(1, renderLengthFrames, sampleRate); + let buffer = context.createBuffer( + 1, sourceBufferLengthFrames, context.sampleRate); + let source = context.createBufferSource(); + source.buffer = buffer; + source.connect(context.destination); + source.onended = function(e) { + should( + true, 'AudioBufferSource.onended called when ended set directly') + .beEqualTo(true); + }; + source.start(); + context.startRendering().then(() => task.done()); + }); + + audit.define('absn-add-listener', (task, should) => { + // Test that the onended event for an AudioBufferSourceNode is fired + // when addEventListener is used to set the handler. + let context = + new OfflineAudioContext(1, renderLengthFrames, sampleRate); + let buffer = context.createBuffer( + 1, sourceBufferLengthFrames, context.sampleRate); + let source = context.createBufferSource(); + source.buffer = buffer; + source.connect(context.destination); + source.addEventListener('ended', function(e) { + should( + true, + 'AudioBufferSource.onended called when using addEventListener') + .beEqualTo(true); + }); + source.start(); + context.startRendering().then(() => task.done()); + }); + + audit.define('osc-set-onended', (task, should) => { + // Test that the onended event for an OscillatorNode is fired when it is + // set directly. + let context = + new OfflineAudioContext(1, renderLengthFrames, sampleRate); + let source = context.createOscillator(); + source.connect(context.destination); + source.onended = function(e) { + should(true, 'Oscillator.onended called when ended set directly') + .beEqualTo(true); + }; + source.start(); + source.stop(stopTime); + context.startRendering().then(() => task.done()); + }); + + audit.define('osc-add-listener', (task, should) => { + // Test that the onended event for an OscillatorNode is fired when + // addEventListener is used to set the handler. + let context = + new OfflineAudioContext(1, renderLengthFrames, sampleRate); + let source = context.createOscillator(); + source.connect(context.destination); + source.addEventListener('ended', function(e) { + should(true, 'Oscillator.onended called when using addEventListener') + .beEqualTo(true); + }); + source.start(); + source.stop(stopTime); + context.startRendering().then(() => task.done()); + }); + + audit.run(); + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiosource-time-limits.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiosource-time-limits.html new file mode 100644 index 00000000000..3ac9c05938c --- /dev/null +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiosource-time-limits.html @@ -0,0 +1,74 @@ +<!DOCTYPE html> +<html> + <head> + <title> + Test Scheduled Sources with Huge Time Limits + </title> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/webaudio/resources/audit-util.js"></script> + <script src="/webaudio/resources/audit.js"></script> + <script src="/webaudio/resources/audioparam-testing.js"></script> + </head> + <body> + <script id="layout-test-code"> + let sampleRate = 48000; + let renderFrames = 1000; + + let audit = Audit.createTaskRunner(); + + audit.define('buffersource: huge stop time', (task, should) => { + // We only need to generate a small number of frames for this test. + let context = new OfflineAudioContext(1, renderFrames, sampleRate); + let src = context.createBufferSource(); + + // Constant source of amplitude 1, looping. + src.buffer = createConstantBuffer(context, 1, 1); + src.loop = true; + + // Create the graph and go! + let endTime = 1e300; + src.connect(context.destination); + src.start(); + src.stop(endTime); + + context.startRendering() + .then(function(resultBuffer) { + let result = resultBuffer.getChannelData(0); + should( + result, 'Output from AudioBufferSource.stop(' + endTime + ')') + .beConstantValueOf(1); + }) + .then(() => task.done()); + }); + + + audit.define('oscillator: huge stop time', (task, should) => { + // We only need to generate a small number of frames for this test. + let context = new OfflineAudioContext(1, renderFrames, sampleRate); + let src = context.createOscillator(); + + // Create the graph and go! + let endTime = 1e300; + src.connect(context.destination); + src.start(); + src.stop(endTime); + + context.startRendering() + .then(function(resultBuffer) { + let result = resultBuffer.getChannelData(0); + // The buffer should not be empty. Just find the max and verify + // that it's not zero. + let max = Math.max.apply(null, result); + should( + max, 'Peak amplitude from oscillator.stop(' + endTime + ')') + .beGreaterThan(0); + }) + .then(() => task.done()); + }); + + + audit.run(); + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/note-grain-on-play.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/note-grain-on-play.html new file mode 100644 index 00000000000..37c4462addb --- /dev/null +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/note-grain-on-play.html @@ -0,0 +1,121 @@ +<!DOCTYPE html> +<html> + <head> + <title> + note-grain-on-play.html + </title> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/webaudio/resources/audit-util.js"></script> + <script src="/webaudio/resources/audit.js"></script> + <script src="/webaudio/resources/note-grain-on-testing.js"></script> + </head> + <body> + <div id="description"></div> + <div id="console"></div> + <script id="layout-test-code"> + let audit = Audit.createTaskRunner(); + + // To test noteGrainOn, a single ramp signal is created. + // Various sections of the ramp are rendered by noteGrainOn() at + // different times, and we verify that the actual output + // consists of the correct section of the ramp at the correct + // time. + + let linearRampBuffer; + + // Array of the grain offset used for each ramp played. + let grainOffsetTime = []; + + // Verify the received signal is a ramp from the correct section + // of our ramp signal. + function verifyGrain(renderedData, startFrame, endFrame, grainIndex) { + let grainOffsetFrame = + timeToSampleFrame(grainOffsetTime[grainIndex], sampleRate); + let grainFrameLength = endFrame - startFrame; + let ramp = linearRampBuffer.getChannelData(0); + let isCorrect = true; + + let expected; + let actual; + let frame; + + for (let k = 0; k < grainFrameLength; ++k) { + if (renderedData[startFrame + k] != ramp[grainOffsetFrame + k]) { + expected = ramp[grainOffsetFrame + k]; + actual = renderedData[startFrame + k]; + frame = startFrame + k; + isCorrect = false; + break; + } + } + return { + verified: isCorrect, + expected: expected, + actual: actual, + frame: frame + }; + } + + function checkResult(buffer, should) { + renderedData = buffer.getChannelData(0); + let nSamples = renderedData.length; + + // Number of grains that we found that have incorrect data. + let invalidGrainDataCount = 0; + + let startEndFrames = findStartAndEndSamples(renderedData); + + // Verify the start and stop times. Not strictly needed for + // this test, but it's useful to know that if the ramp data + // appears to be incorrect. + verifyStartAndEndFrames(startEndFrames, should); + + // Loop through each of the rendered grains and check that + // each grain contains our expected ramp. + for (let k = 0; k < startEndFrames.start.length; ++k) { + // Verify that the rendered data matches the expected + // section of our ramp signal. + let result = verifyGrain( + renderedData, startEndFrames.start[k], startEndFrames.end[k], k); + should(result.verified, 'Pulse ' + k + ' contained the expected data') + .beTrue(); + } + should( + invalidGrainDataCount, + 'Number of grains that did not contain the expected data') + .beEqualTo(0); + } + + audit.define( + { + label: 'note-grain-on-play', + description: 'Test noteGrainOn offset rendering' + }, + function(task, should) { + // Create offline audio context. + context = + new OfflineAudioContext(2, sampleRate * renderTime, sampleRate); + + // Create a linear ramp for testing noteGrainOn. + linearRampBuffer = createSignalBuffer(context, function(k) { + // Want the ramp to start + // with 1, not 0. + return k + 1; + }); + + let grainInfo = + playAllGrains(context, linearRampBuffer, numberOfTests); + + grainOffsetTime = grainInfo.grainOffsetTimes; + + context.startRendering().then(function(audioBuffer) { + checkResult(audioBuffer, should); + task.done(); + }); + }); + + audit.run(); + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/note-grain-on-timing.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/note-grain-on-timing.html new file mode 100644 index 00000000000..0db297b42cc --- /dev/null +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/note-grain-on-timing.html @@ -0,0 +1,47 @@ +<!DOCTYPE html> +<html> + <head> + <title> + note-grain-on-timing.html + </title> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/webaudio/resources/audit-util.js"></script> + <script src="/webaudio/resources/audit.js"></script> + <script src="/webaudio/resources/note-grain-on-testing.js"></script> + </head> + <body> + <script id="layout-test-code"> + let audit = Audit.createTaskRunner(); + + let squarePulseBuffer; + + function checkResult(buffer, should) { + renderedData = buffer.getChannelData(0); + let nSamples = renderedData.length; + let startEndFrames = findStartAndEndSamples(renderedData); + + verifyStartAndEndFrames(startEndFrames, should); + } + + audit.define('Test timing of noteGrainOn', function(task, should) { + // Create offline audio context. + context = + new OfflineAudioContext(2, sampleRate * renderTime, sampleRate); + + squarePulseBuffer = createSignalBuffer(context, function(k) { + return 1 + }); + + playAllGrains(context, squarePulseBuffer, numberOfTests); + + context.startRendering().then(function(audioBuffer) { + checkResult(audioBuffer, should); + task.done(); + }); + }); + + audit.run(); + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sample-accurate-scheduling.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sample-accurate-scheduling.html new file mode 100644 index 00000000000..5fafd024eef --- /dev/null +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sample-accurate-scheduling.html @@ -0,0 +1,110 @@ +<!DOCTYPE html> +<!-- +Tests that we are able to schedule a series of notes to playback with sample-accuracy. +We use an impulse so we can tell exactly where the rendering is happening. +--> +<html> + <head> + <title> + sample-accurate-scheduling.html + </title> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/webaudio/resources/audit-util.js"></script> + <script src="/webaudio/resources/audit.js"></script> + <script src="/webaudio/resources/buffer-loader.js"></script> + </head> + <body> + <script id="layout-test-code"> + let audit = Audit.createTaskRunner(); + + let sampleRate = 44100.0; + let lengthInSeconds = 4; + + let context = 0; + let bufferLoader = 0; + let impulse; + + // See if we can render at exactly these sample offsets. + let sampleOffsets = [0, 3, 512, 517, 1000, 1005, 20000, 21234, 37590]; + + function createImpulse() { + // An impulse has a value of 1 at time 0, and is otherwise 0. + impulse = context.createBuffer(2, 512, sampleRate); + let sampleDataL = impulse.getChannelData(0); + let sampleDataR = impulse.getChannelData(1); + sampleDataL[0] = 1.0; + sampleDataR[0] = 1.0; + } + + function playNote(time) { + let bufferSource = context.createBufferSource(); + bufferSource.buffer = impulse; + bufferSource.connect(context.destination); + bufferSource.start(time); + } + + function checkSampleAccuracy(buffer, should) { + let bufferDataL = buffer.getChannelData(0); + let bufferDataR = buffer.getChannelData(1); + + let impulseCount = 0; + let badOffsetCount = 0; + + // Left and right channels must be the same. + should(bufferDataL, 'Content of left and right channels match and') + .beEqualToArray(bufferDataR); + + // Go through every sample and make sure it's 0, except at positions in + // sampleOffsets. + for (let i = 0; i < buffer.length; ++i) { + if (bufferDataL[i] != 0) { + // Make sure this index is in sampleOffsets + let found = false; + for (let j = 0; j < sampleOffsets.length; ++j) { + if (sampleOffsets[j] == i) { + found = true; + break; + } + } + ++impulseCount; + should(found, 'Non-zero sample found at sample offset ' + i) + .beTrue(); + if (!found) { + ++badOffsetCount; + } + } + } + + should(impulseCount, 'Number of impulses found') + .beEqualTo(sampleOffsets.length); + + if (impulseCount == sampleOffsets.length) { + should(badOffsetCount, 'bad offset').beEqualTo(0); + } + } + + audit.define( + {label: 'test', description: 'Test sample-accurate scheduling'}, + function(task, should) { + + // Create offline audio context. + context = new OfflineAudioContext( + 2, sampleRate * lengthInSeconds, sampleRate); + createImpulse(); + + for (let i = 0; i < sampleOffsets.length; ++i) { + let timeInSeconds = sampleOffsets[i] / sampleRate; + playNote(timeInSeconds); + } + + context.startRendering().then(function(buffer) { + checkSampleAccuracy(buffer, should); + task.done(); + }); + }); + + audit.run(); + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-getoutputtimestamp.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-getoutputtimestamp.html index cd09696e689..952f38b1edc 100644 --- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-getoutputtimestamp.html +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-getoutputtimestamp.html @@ -19,9 +19,10 @@ should(timestamp.contextTime, 'timestamp.contextTime').exist(); should(timestamp.performanceTime, 'timestamp.performanceTime').exist(); - should(timestamp.contextTime, 'timestamp.contextTime').beEqualTo(0); + should(timestamp.contextTime, 'timestamp.contextTime') + .beGreaterThanOrEqualTo(0); should(timestamp.performanceTime, 'timestamp.performanceTime') - .beEqualTo(0); + .beGreaterThanOrEqualTo(0); task.done(); }); diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/convolver-setBuffer-already-has-value.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/convolver-setBuffer-already-has-value.html new file mode 100644 index 00000000000..31f115da532 --- /dev/null +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/convolver-setBuffer-already-has-value.html @@ -0,0 +1,51 @@ +<!DOCTYPE html> +<html> + <head> + <title> + convolver-setBuffer-already-has-value.html + </title> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/webaudio/resources/audit.js"></script> + </head> + <body> + <script id="layout-test-code"> + let audit = Audit.createTaskRunner(); + + audit.define('test', (task, should) => { + let context = new AudioContext(); + let audioBuffer = new AudioBuffer( + {numberOfChannels: 1, length: 1, sampleRate: context.sampleRate}); + let convolver = context.createConvolver(); + should(() => { + convolver.buffer = null; + }, 'Set buffer to null before set non-null').notThrow(); + + should(() => { + convolver.buffer = audioBuffer; + }, 'Set buffer first normally').notThrow(); + + should(() => { + convolver.buffer = audioBuffer; + }, 'Set buffer a second time').throw('InvalidStateError'); + + should(() => { + convolver.buffer = null; + }, 'Set buffer to null').notThrow(); + + should(() => { + convolver.buffer = null; + }, 'Set buffer to null again, to make sure').notThrow(); + + should(() => { + convolver.buffer = audioBuffer; + }, 'Set buffer to non-null to verify to throw an error') + .throw('InvalidStateError'); + + task.done(); + }); + + audit.run(); + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/webauthn/interfaces.https.any.js b/tests/wpt/web-platform-tests/webauthn/interfaces.https.any.js index 22766e650ce..97c3020189c 100644 --- a/tests/wpt/web-platform-tests/webauthn/interfaces.https.any.js +++ b/tests/wpt/web-platform-tests/webauthn/interfaces.https.any.js @@ -1,28 +1,17 @@ // META: script=/resources/WebIDLParser.js // META: script=/resources/idlharness.js -'use strict'; - -if (self.importScripts) { - importScripts('/resources/testharness.js'); - importScripts('/resources/WebIDLParser.js', '/resources/idlharness.js'); -} - // https://w3c.github.io/webauthn/ +'use strict'; + promise_test(async () => { const webauthnIdl = await fetch('/interfaces/webauthn.idl').then(r => r.text()); + const creds = await fetch('/interfaces/credential-management.idl').then(r => r.text()); const idlArray = new IdlArray(); idlArray.add_idls(webauthnIdl); - - // static IDL tests - idlArray.add_untested_idls('interface CredentialCreationOptions {};'); - idlArray.add_untested_idls('interface CredentialRequestOptions {};'); - idlArray.add_untested_idls("interface Navigator { };"); - idlArray.add_untested_idls("interface Credential { };"); - // TODO: change to "tested" for real browsers? - idlArray.add_untested_idls("partial interface Navigator { readonly attribute WebAuthentication authentication; };"); + idlArray.add_dependency_idls(creds); idlArray.add_objects({ WebAuthentication: ["navigator.authentication"] }); diff --git a/tests/wpt/web-platform-tests/webdriver/tests/element_click/interactability.py b/tests/wpt/web-platform-tests/webdriver/tests/element_click/interactability.py index a94bc197af3..7af1197ac71 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/element_click/interactability.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/element_click/interactability.py @@ -59,4 +59,4 @@ def test_element_not_visible_overflow_hidden(session): element = session.find.css("input", all=False) response = element_click(session, element) - assert_error(response, "element not visible") + assert_error(response, "element not interactable") diff --git a/tests/wpt/web-platform-tests/webdriver/tests/element_click/navigate.py b/tests/wpt/web-platform-tests/webdriver/tests/element_click/navigate.py index 34c71f09eb2..ead4f5aa04b 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/element_click/navigate.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/element_click/navigate.py @@ -44,11 +44,12 @@ def test_link_unload_event(session, server_config): <a href={url}>click here</a> <input type=checkbox> <script> - function checkUnload() { + function checkUnload() {{ document.getElementsByTagName("input")[0].checked = true; - } + }} </script> </body>""".format(url=link)) + element = session.find.css("a", all=False) response = element_click(session, element) assert_success(response) @@ -61,7 +62,7 @@ def test_link_unload_event(session, server_config): element = session.find.css("input", all=False) response = session.execute_script(""" - let [input] = arguments; + let input = arguments[0]; return input.checked; """, args=(element,)) assert response is True @@ -84,7 +85,7 @@ def test_link_hash(session): element = session.find.css("p", all=False) assert session.execute_script(""" - let [input] = arguments; + let input = arguments[0]; rect = input.getBoundingClientRect(); return rect["top"] >= 0 && rect["left"] >= 0 && (rect["top"] + rect["height"]) <= window.innerHeight && diff --git a/tests/wpt/web-platform-tests/webdriver/tests/element_click/scroll_into_view.py b/tests/wpt/web-platform-tests/webdriver/tests/element_click/scroll_into_view.py index d7eda81207d..dde83a4244c 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/element_click/scroll_into_view.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/element_click/scroll_into_view.py @@ -21,7 +21,7 @@ def test_scroll_into_view(session): # Check if element clicked is scrolled into view assert session.execute_script(""" - let [input] = arguments; + let input = arguments[0]; rect = input.getBoundingClientRect(); return rect["top"] >= 0 && rect["left"] >= 0 && (rect["top"] + rect["height"]) <= window.innerHeight && diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-add-track-no-deadlock.https.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-add-track-no-deadlock.https.html index 0bf58d947ca..0a69431edc0 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-add-track-no-deadlock.https.html +++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-add-track-no-deadlock.https.html @@ -14,8 +14,8 @@ t.add_cleanup(() => pc1.close()); const stream = await navigator.mediaDevices.getUserMedia( {audio: false, video: true}); + t.add_cleanup(() => stream.getTracks().forEach(track => track.stop())); const videoTrack = stream.getVideoTracks()[0]; - t.add_cleanup(() => videoTrack.stop()); pc1.addTrack(videoTrack, stream); const offer = await pc1.createOffer(); await pc1.setLocalDescription(offer); diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addTrack.https.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addTrack.https.html index 4e56e667c3a..6864f091255 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addTrack.https.html +++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addTrack.https.html @@ -42,6 +42,7 @@ t.add_cleanup(() => pc.close()); const stream = await navigator.mediaDevices.getUserMedia({ audio: true }); + t.add_cleanup(() => stream.getTracks().forEach(track => track.stop())); const [track] = stream.getTracks(); pc.close(); @@ -64,6 +65,7 @@ t.add_cleanup(() => pc.close()); const stream = await navigator.mediaDevices.getUserMedia({ audio: true }); + t.add_cleanup(() => stream.getTracks().forEach(track => track.stop())); const [track] = stream.getTracks(); const sender = pc.addTrack(track); @@ -95,6 +97,7 @@ t.add_cleanup(() => pc.close()); const stream = await navigator.mediaDevices.getUserMedia({ audio: true }); + t.add_cleanup(() => stream.getTracks().forEach(track => track.stop())); const [track] = stream.getTracks(); const sender = pc.addTrack(track, stream); @@ -111,6 +114,7 @@ t.add_cleanup(() => pc.close()); const stream = await navigator.mediaDevices.getUserMedia({ audio: true }); + t.add_cleanup(() => stream.getTracks().forEach(track => track.stop())); const [track] = stream.getTracks(); const stream2 = new MediaStream([track]); @@ -134,6 +138,7 @@ t.add_cleanup(() => pc.close()); const stream = await navigator.mediaDevices.getUserMedia({ audio: true }); + t.add_cleanup(() => stream.getTracks().forEach(track => track.stop())); const [track] = stream.getTracks(); pc.addTrack(track, stream); diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-removeTrack.https.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-removeTrack.https.html index c6e2d43336d..51d199d53ed 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-removeTrack.https.html +++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-removeTrack.https.html @@ -46,19 +46,17 @@ }, 'addTransceiver - Calling removeTrack when connection is closed should throw InvalidStateError'); - promise_test(t => { + promise_test(async t => { const pc = new RTCPeerConnection(); - t.add_cleanup(() => pc.close()); - return navigator.mediaDevices.getUserMedia({ audio: true }) - .then(mediaStream => { - const [track] = mediaStream.getTracks(); - const sender = pc.addTrack(track, mediaStream); + const stream = await navigator.mediaDevices.getUserMedia({ audio: true }); + t.add_cleanup(() => stream.getTracks().forEach(track => track.stop())); + const [track] = stream.getTracks(); + const sender = pc.addTrack(track, stream); - pc.close(); - assert_throws('InvalidStateError', () => pc.removeTrack(sender)); - }); + pc.close(); + assert_throws('InvalidStateError', () => pc.removeTrack(sender)); }, 'addTrack - Calling removeTrack when connection is closed should throw InvalidStateError'); test(t => { @@ -73,20 +71,18 @@ }, 'addTransceiver - Calling removeTrack on different connection that is closed should throw InvalidStateError'); - promise_test(t => { + promise_test(async t => { const pc = new RTCPeerConnection(); - t.add_cleanup(() => pc.close()); - return navigator.mediaDevices.getUserMedia({ audio: true }) - .then(mediaStream => { - const [track] = mediaStream.getTracks(); - const sender = pc.addTrack(track, mediaStream); + const stream = await navigator.mediaDevices.getUserMedia({ audio: true }); + t.add_cleanup(() => stream.getTracks().forEach(track => track.stop())); + const [track] = stream.getTracks(); + const sender = pc.addTrack(track, stream); - const pc2 = new RTCPeerConnection(); - pc2.close(); - assert_throws('InvalidStateError', () => pc2.removeTrack(sender)); - }); + const pc2 = new RTCPeerConnection(); + pc2.close(); + assert_throws('InvalidStateError', () => pc2.removeTrack(sender)); }, 'addTrack - Calling removeTrack on different connection that is closed should throw InvalidStateError'); /* @@ -104,19 +100,17 @@ }, 'addTransceiver - Calling removeTrack on different connection should throw InvalidAccessError'); - promise_test(t => { + promise_test(async t => { const pc = new RTCPeerConnection(); - t.add_cleanup(() => pc.close()); - return navigator.mediaDevices.getUserMedia({ audio: true }) - .then(mediaStream => { - const [track] = mediaStream.getTracks(); - const sender = pc.addTrack(track, mediaStream); + const stream = await navigator.mediaDevices.getUserMedia({ audio: true }); + t.add_cleanup(() => stream.getTracks().forEach(track => track.stop())); + const [track] = stream.getTracks(); + const sender = pc.addTrack(track, stream); - const pc2 = new RTCPeerConnection(); - assert_throws('InvalidAccessError', () => pc2.removeTrack(sender)); - }); + const pc2 = new RTCPeerConnection(); + assert_throws('InvalidAccessError', () => pc2.removeTrack(sender)); }, 'addTrack - Calling removeTrack on different connection should throw InvalidAccessError') /* @@ -139,21 +133,19 @@ }, 'addTransceiver - Calling removeTrack with valid sender should set sender.track to null'); - promise_test(t => { + promise_test(async t => { const pc = new RTCPeerConnection(); - t.add_cleanup(() => pc.close()); - return navigator.mediaDevices.getUserMedia({ audio: true }) - .then(mediaStream => { - const [track] = mediaStream.getTracks(); - const sender = pc.addTrack(track, mediaStream); + const stream = await navigator.mediaDevices.getUserMedia({ audio: true }); + t.add_cleanup(() => stream.getTracks().forEach(track => track.stop())); + const [track] = stream.getTracks(); + const sender = pc.addTrack(track, stream); - assert_equals(sender.track, track); + assert_equals(sender.track, track); - pc.removeTrack(sender); - assert_equals(sender.track, null); - }); + pc.removeTrack(sender); + assert_equals(sender.track, null); }, 'addTrack - Calling removeTrack with valid sender should set sender.track to null'); /* diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html index 251d28243ed..eb2510dd499 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html +++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html @@ -24,6 +24,7 @@ t.add_cleanup(() => callee.close()); const localStream = await navigator.mediaDevices.getUserMedia({audio: true}); + t.add_cleanup(() => localStream.getTracks().forEach(track => track.stop())); caller.addTrack(localStream.getTracks()[0]); const ontrackPromise = addEventListenerPromise(t, callee, 'track', e => { assert_equals(e.track.id, localStream.getTracks()[0].id, @@ -41,6 +42,7 @@ t.add_cleanup(() => callee.close()); const localStream = await navigator.mediaDevices.getUserMedia({audio: true}); + t.add_cleanup(() => localStream.getTracks().forEach(track => track.stop())); caller.addTrack(localStream.getTracks()[0], localStream); const ontrackPromise = addEventListenerPromise(t, callee, 'track', e => { assert_equals(e.track.id, localStream.getTracks()[0].id, @@ -63,6 +65,7 @@ let eventSequence = ''; const localStream = await navigator.mediaDevices.getUserMedia({audio: true}); + t.add_cleanup(() => localStream.getTracks().forEach(track => track.stop())); caller.addTrack(localStream.getTracks()[0], localStream); const ontrackPromise = addEventListenerPromise(t, callee, 'track', e => { eventSequence += 'ontrack;'; @@ -213,6 +216,7 @@ t.add_cleanup(() => callee.close()); const localStream = await navigator.mediaDevices.getUserMedia({audio: true}); + t.add_cleanup(() => localStream.getTracks().forEach(track => track.stop())); caller.addTrack(localStream.getTracks()[0]); const ontrackPromise = addEventListenerPromise(t, callee, 'track', e => { assert_array_equals(callee.getReceivers(), [e.receiver], @@ -229,6 +233,7 @@ t.add_cleanup(() => callee.close()); const localStream = await navigator.mediaDevices.getUserMedia({audio: true}); + t.add_cleanup(() => localStream.getTracks().forEach(track => track.stop())); const sender = caller.addTrack(localStream.getTracks()[0]); const ontrackPromise = addEventListenerPromise(t, callee, 'track'); await exchangeOfferAnswer(caller, callee); @@ -246,7 +251,9 @@ t.add_cleanup(() => callee.close()); const localStream = await navigator.mediaDevices.getUserMedia({audio: true}); - const sender = caller.addTrack(localStream.getTracks()[0], localStream); + t.add_cleanup(() => localStream.getTracks().forEach(track => track.stop())); + const [track] = localStream.getTracks(); + const sender = caller.addTrack(track, localStream); const ontrackPromise = addEventListenerPromise(t, callee, 'track', e => { assert_equals(e.streams.length, 1); return e.streams[0]; @@ -273,6 +280,7 @@ let eventSequence = ''; const localStream = await navigator.mediaDevices.getUserMedia({audio: true}); + t.add_cleanup(() => localStream.getTracks().forEach(track => track.stop())); const sender = caller.addTrack(localStream.getTracks()[0], localStream); const ontrackPromise = addEventListenerPromise(t, callee, 'track', e => { assert_equals(e.streams.length, 1); @@ -299,6 +307,7 @@ t.add_cleanup(() => callee.close()); const localStream = await navigator.mediaDevices.getUserMedia({audio: true}); + t.add_cleanup(() => localStream.getTracks().forEach(track => track.stop())); const sender = caller.addTrack(localStream.getTracks()[0], localStream); const ontrackPromise = addEventListenerPromise(t, callee, 'track', e => { assert_equals(e.streams.length, 1); @@ -324,6 +333,7 @@ let eventSequence = ''; const localStream = await navigator.mediaDevices.getUserMedia({audio: true}); + t.add_cleanup(() => localStream.getTracks().forEach(track => track.stop())); const sender = caller.addTrack(localStream.getTracks()[0], localStream); const ontrackPromise = addEventListenerPromise(t, callee, 'track', e => { assert_equals(e.streams.length, 1); @@ -347,6 +357,7 @@ const pc = new RTCPeerConnection(); t.add_cleanup(() => pc.close()); const stream = await navigator.mediaDevices.getUserMedia({audio: true}); + t.add_cleanup(() => stream.getTracks().forEach(track => track.stop())); const sender = pc.addTrack(stream.getTracks()[0]); pc.removeTrack(sender); pc.removeTrack(sender); diff --git a/tests/wpt/web-platform-tests/webrtc/RTCRtpReceiver-getStats.https.html b/tests/wpt/web-platform-tests/webrtc/RTCRtpReceiver-getStats.https.html index 30b15851fd6..083f9e12245 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCRtpReceiver-getStats.https.html +++ b/tests/wpt/web-platform-tests/webrtc/RTCRtpReceiver-getStats.https.html @@ -63,6 +63,7 @@ const callee = new RTCPeerConnection(); t.add_cleanup(() => callee.close()); const stream = await navigator.mediaDevices.getUserMedia({audio:true}); + t.add_cleanup(() => stream.getTracks().forEach(track => track.stop())); const [track] = stream.getTracks(); caller.addTrack(track, stream); 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 a0e2b9dbcf2..dc403bbe6cd 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCRtpSender-getStats.https.html +++ b/tests/wpt/web-platform-tests/webrtc/RTCRtpSender-getStats.https.html @@ -58,6 +58,7 @@ const callee = new RTCPeerConnection(); t.add_cleanup(() => callee.close()); const stream = await navigator.mediaDevices.getUserMedia({audio:true}); + t.add_cleanup(() => stream.getTracks().forEach(track => track.stop())); const [track] = stream.getTracks(); const sender = caller.addTrack(track, stream); diff --git a/tests/wpt/web-platform-tests/webrtc/tools/codemod-peerconnection-addcleanup b/tests/wpt/web-platform-tests/webrtc/tools/codemod-peerconnection-addcleanup new file mode 100644 index 00000000000..920921d2e4e --- /dev/null +++ b/tests/wpt/web-platform-tests/webrtc/tools/codemod-peerconnection-addcleanup @@ -0,0 +1,58 @@ +/* a codemod for ensuring RTCPeerConnection is cleaned up in tests. + * For each `new RTCPeerConnection` add a + * `test.add_cleanup(() => pc.close())` + * Only applies in promise_tests if there is no add_cleanup in the + * test function body. + */ +export default function transformer(file, api) { + const j = api.jscodeshift; + return j(file.source) + // find each RTCPeerConnection constructor + .find(j.NewExpression, {callee: {type: 'Identifier', name: 'RTCPeerConnection'}}) + + // check it is inside a promise_test + .filter(path => { + // iterate parentPath until you find a CallExpression + let nextPath = path.parentPath; + while (nextPath && nextPath.value.type !== 'CallExpression') { + nextPath = nextPath.parentPath; + } + return nextPath && nextPath.value.callee.name === 'promise_test'; + }) + // check there is no add_cleanup in the function body + .filter(path => { + let nextPath = path.parentPath; + while (nextPath && nextPath.value.type !== 'CallExpression') { + nextPath = nextPath.parentPath; + } + const body = nextPath.value.arguments[0].body; + return j(body).find(j.Identifier, {name: 'add_cleanup'}).length === 0; + }) + .forEach(path => { + // iterate parentPath until you find a CallExpression + let nextPath = path.parentPath; + while (nextPath && nextPath.value.type !== 'CallExpression') { + nextPath = nextPath.parentPath; + } + const declaration = path.parentPath.parentPath.parentPath; + const pc = path.parentPath.value.id; + + declaration.insertAfter( + j.expressionStatement( + j.callExpression( + j.memberExpression( + nextPath.node.arguments[0].params[0], + j.identifier('add_cleanup') + ), + [j.arrowFunctionExpression([], + j.callExpression( + j.memberExpression(pc, j.identifier('close'), false), + [] + ) + )] + ) + ) + ); + }) + .toSource(); +}; diff --git a/tests/wpt/web-platform-tests/webrtc/tools/html-codemod.js b/tests/wpt/web-platform-tests/webrtc/tools/html-codemod.js new file mode 100644 index 00000000000..6a31e8c4c60 --- /dev/null +++ b/tests/wpt/web-platform-tests/webrtc/tools/html-codemod.js @@ -0,0 +1,34 @@ +/* + * extract script content from a series of html files, run a + * jscodeshift codemod on them and overwrite the original file. + * + * Usage: node html-codemod.js codemod-file list of files to process + */ +const { JSDOM } = require('jsdom'); +const fs = require('fs'); +const {execFileSync} = require('child_process'); + +const codemod = process.argv[2]; +const filenames = process.argv.slice(3); +filenames.forEach((filename) => { + const originalContent = fs.readFileSync(filename, 'utf-8'); + const dom = new JSDOM(originalContent); + const document = dom.window.document; + const scriptTags = document.querySelectorAll('script'); + const lastTag = scriptTags[scriptTags.length - 1]; + const script = lastTag.innerHTML; + if (!script) { + console.log('NO SCRIPT FOUND', filename); + return; + } + const scriptFilename = filename + '.codemod.js'; + const scriptFile = fs.writeFileSync(scriptFilename, script); + // exec jscodeshift + const output = execFileSync('./node_modules/.bin/jscodeshift', ['-t', codemod, scriptFilename]); + console.log(filename, output.toString()); // output jscodeshift output. + // read back file, resubstitute + const newScript = fs.readFileSync(scriptFilename, 'utf-8').toString(); + const modifiedContent = originalContent.split(script).join(newScript); + fs.writeFileSync(filename, modifiedContent); + fs.unlinkSync(scriptFilename); +}); diff --git a/tests/wpt/web-platform-tests/webrtc/tools/package-lock.json b/tests/wpt/web-platform-tests/webrtc/tools/package-lock.json deleted file mode 100644 index 79e603949cf..00000000000 --- a/tests/wpt/web-platform-tests/webrtc/tools/package-lock.json +++ /dev/null @@ -1,1213 +0,0 @@ -{ - "name": "webrtc-testing-tools", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "acorn": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.2.1.tgz", - "integrity": "sha512-jG0u7c4Ly+3QkkW18V+NRDN+4bWHdln30NL1ZL2AvFZZmQe/BfopYCtghCKKVBUSetZ4QKcyA0pY6/4Gw8Pv8w==", - "dev": true - }, - "acorn-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", - "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", - "dev": true, - "requires": { - "acorn": "3.3.0" - }, - "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", - "dev": true - } - } - }, - "ajv": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.3.0.tgz", - "integrity": "sha1-RBT/dKUIecII7l/cgm4ywwNUnto=", - "dev": true, - "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.0.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" - } - }, - "ajv-keywords": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", - "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", - "dev": true - }, - "ansi-escapes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.0.0.tgz", - "integrity": "sha512-O/klc27mWNUigtv0F8NJWbLF00OcegQalkqKURWdosW08YZKi4m6CnSUSvIZG1otNJbTWhN01Hhz389DW7mvDQ==", - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "argparse": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", - "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", - "dev": true, - "requires": { - "sprintf-js": "1.0.3" - } - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "1.0.3" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - } - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", - "dev": true, - "requires": { - "balanced-match": "1.0.0", - "concat-map": "0.0.1" - } - }, - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "dev": true, - "requires": { - "callsites": "0.2.0" - } - }, - "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", - "dev": true - }, - "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } - } - }, - "chardet": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.0.tgz", - "integrity": "sha1-C74TVaxE16PtSpJXB8TvcPgZD2w=", - "dev": true - }, - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", - "dev": true - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "requires": { - "restore-cursor": "2.0.0" - } - }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "color-convert": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", - "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "concat-stream": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", - "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "typedarray": "0.0.6" - } - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "4.1.1", - "shebang-command": "1.2.0", - "which": "1.3.0" - } - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "del": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", - "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", - "dev": true, - "requires": { - "globby": "5.0.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.0", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "rimraf": "2.6.2" - } - }, - "doctrine": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz", - "integrity": "sha1-xz2NKQnSIpHhoAejlYBNqLZl/mM=", - "dev": true, - "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" - } - }, - "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", - "dev": true, - "requires": { - "domelementtype": "1.1.3", - "entities": "1.1.1" - }, - "dependencies": { - "domelementtype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", - "dev": true - } - } - }, - "domelementtype": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", - "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", - "dev": true - }, - "domhandler": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.1.tgz", - "integrity": "sha1-iS5HAAqZvlW783dP/qBWHYh5wlk=", - "dev": true, - "requires": { - "domelementtype": "1.3.0" - } - }, - "domutils": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.6.2.tgz", - "integrity": "sha1-GVjMC0yUJuntNn+xyOhUiRsPo/8=", - "dev": true, - "requires": { - "dom-serializer": "0.1.0", - "domelementtype": "1.3.0" - } - }, - "entities": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", - "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "eslint": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.11.0.tgz", - "integrity": "sha512-UWbhQpaKlm8h5x/VLwm0S1kheMrDj8jPwhnBMjr/Dlo3qqT7MvcN/UfKAR3E1N4lr4YNtOvS4m3hwsrVc/ky7g==", - "dev": true, - "requires": { - "ajv": "5.3.0", - "babel-code-frame": "6.26.0", - "chalk": "2.3.0", - "concat-stream": "1.6.0", - "cross-spawn": "5.1.0", - "debug": "3.1.0", - "doctrine": "2.0.0", - "eslint-scope": "3.7.1", - "espree": "3.5.2", - "esquery": "1.0.0", - "estraverse": "4.2.0", - "esutils": "2.0.2", - "file-entry-cache": "2.0.0", - "functional-red-black-tree": "1.0.1", - "glob": "7.1.2", - "globals": "9.18.0", - "ignore": "3.3.7", - "imurmurhash": "0.1.4", - "inquirer": "3.3.0", - "is-resolvable": "1.0.0", - "js-yaml": "3.10.0", - "json-stable-stringify-without-jsonify": "1.0.1", - "levn": "0.3.0", - "lodash": "4.17.4", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "natural-compare": "1.4.0", - "optionator": "0.8.2", - "path-is-inside": "1.0.2", - "pluralize": "7.0.0", - "progress": "2.0.0", - "require-uncached": "1.0.3", - "semver": "5.4.1", - "strip-ansi": "4.0.0", - "strip-json-comments": "2.0.1", - "table": "4.0.2", - "text-table": "0.2.0" - } - }, - "eslint-plugin-html": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-html/-/eslint-plugin-html-4.0.0.tgz", - "integrity": "sha512-xK/909qOTq5JVzuO2jo4a24nQcWhkOBz9dOIkORvB7RxC75a4b6B9wFpBXAl8WDhwJGFDj5gBDRN+/L3kK/ghw==", - "dev": true, - "requires": { - "htmlparser2": "3.9.2" - } - }, - "eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", - "dev": true, - "requires": { - "esrecurse": "4.2.0", - "estraverse": "4.2.0" - } - }, - "espree": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.2.tgz", - "integrity": "sha512-sadKeYwaR/aJ3stC2CdvgXu1T16TdYN+qwCpcWbMnGJ8s0zNWemzrvb2GbD4OhmJ/fwpJjudThAlLobGbWZbCQ==", - "dev": true, - "requires": { - "acorn": "5.2.1", - "acorn-jsx": "3.0.1" - } - }, - "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", - "dev": true - }, - "esquery": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", - "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", - "dev": true, - "requires": { - "estraverse": "4.2.0" - } - }, - "esrecurse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", - "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", - "dev": true, - "requires": { - "estraverse": "4.2.0", - "object-assign": "4.1.1" - } - }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "external-editor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.1.0.tgz", - "integrity": "sha512-E44iT5QVOUJBKij4IIV3uvxuNlbKS38Tw1HiupxEIHPv9qtC2PrDYohbXV5U+1jnfIXttny8gUhj+oZvflFlzA==", - "dev": true, - "requires": { - "chardet": "0.4.0", - "iconv-lite": "0.4.19", - "tmp": "0.0.33" - } - }, - "fast-deep-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", - "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "requires": { - "escape-string-regexp": "1.0.5" - } - }, - "file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", - "dev": true, - "requires": { - "flat-cache": "1.3.0", - "object-assign": "4.1.1" - } - }, - "flat-cache": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", - "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", - "dev": true, - "requires": { - "circular-json": "0.3.3", - "del": "2.2.2", - "graceful-fs": "4.1.11", - "write": "0.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true - }, - "globby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", - "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", - "dev": true, - "requires": { - "array-union": "1.0.2", - "arrify": "1.0.1", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "htmlparser2": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", - "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", - "dev": true, - "requires": { - "domelementtype": "1.3.0", - "domhandler": "2.4.1", - "domutils": "1.6.2", - "entities": "1.1.1", - "inherits": "2.0.3", - "readable-stream": "2.3.3" - } - }, - "iconv-lite": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", - "dev": true - }, - "ignore": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", - "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==", - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "inquirer": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", - "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", - "dev": true, - "requires": { - "ansi-escapes": "3.0.0", - "chalk": "2.3.0", - "cli-cursor": "2.1.0", - "cli-width": "2.2.0", - "external-editor": "2.1.0", - "figures": "2.0.0", - "lodash": "4.17.4", - "mute-stream": "0.0.7", - "run-async": "2.3.0", - "rx-lite": "4.0.8", - "rx-lite-aggregates": "4.0.8", - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "through": "2.3.8" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", - "dev": true - }, - "is-path-in-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", - "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", - "dev": true, - "requires": { - "is-path-inside": "1.0.0" - } - }, - "is-path-inside": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", - "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", - "dev": true, - "requires": { - "path-is-inside": "1.0.2" - } - }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true - }, - "is-resolvable": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz", - "integrity": "sha1-jfV8YeouPFAUCNEA+wE8+NbgzGI=", - "dev": true, - "requires": { - "tryit": "1.0.3" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "js-yaml": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", - "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", - "dev": true, - "requires": { - "argparse": "1.0.9", - "esprima": "4.0.0" - } - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "1.1.2", - "type-check": "0.3.2" - } - }, - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", - "dev": true - }, - "lru-cache": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", - "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", - "dev": true, - "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" - } - }, - "mimic-fn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", - "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "1.1.8" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1.0.2" - } - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "1.1.0" - } - }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dev": true, - "requires": { - "deep-is": "0.1.3", - "fast-levenshtein": "2.0.6", - "levn": "0.3.0", - "prelude-ls": "1.1.2", - "type-check": "0.3.2", - "wordwrap": "1.0.0" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "2.0.4" - } - }, - "pluralize": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", - "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", - "dev": true - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true - }, - "progress": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", - "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", - "dev": true - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "require-uncached": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "dev": true, - "requires": { - "caller-path": "0.1.0", - "resolve-from": "1.0.1" - } - }, - "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", - "dev": true - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "2.0.1", - "signal-exit": "3.0.2" - } - }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "dev": true, - "requires": { - "glob": "7.1.2" - } - }, - "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "dev": true, - "requires": { - "is-promise": "2.1.0" - } - }, - "rx-lite": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", - "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", - "dev": true - }, - "rx-lite-aggregates": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", - "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", - "dev": true, - "requires": { - "rx-lite": "4.0.8" - } - }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", - "dev": true - }, - "semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "2.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - } - } - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "table": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", - "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", - "dev": true, - "requires": { - "ajv": "5.3.0", - "ajv-keywords": "2.1.1", - "chalk": "2.3.0", - "lodash": "4.17.4", - "slice-ansi": "1.0.0", - "string-width": "2.1.1" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "1.0.2" - } - }, - "tryit": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz", - "integrity": "sha1-OTvnMKlEb9Hq1tpZoBQwjzbCics=", - "dev": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "1.1.2" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "which": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", - "dev": true, - "requires": { - "isexe": "2.0.0" - } - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", - "dev": true, - "requires": { - "mkdirp": "0.5.1" - } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - } - } -} diff --git a/tests/wpt/web-platform-tests/webrtc/tools/package.json b/tests/wpt/web-platform-tests/webrtc/tools/package.json index 70515d8b715..e0c1cfda3e8 100644 --- a/tests/wpt/web-platform-tests/webrtc/tools/package.json +++ b/tests/wpt/web-platform-tests/webrtc/tools/package.json @@ -7,7 +7,9 @@ }, "devDependencies": { "eslint": "^4.11.0", - "eslint-plugin-html": "^4.0.0" + "eslint-plugin-html": "^4.0.0", + "jscodeshift": "^0.5.1", + "jsdom": "^11.11.0" }, "license": "BSD", "private": true diff --git a/tests/wpt/web-platform-tests/workers/modules/dedicated-worker-import-referrer.html b/tests/wpt/web-platform-tests/workers/modules/dedicated-worker-import-referrer.html index bed66d81ff6..e84b0ad39fe 100644 --- a/tests/wpt/web-platform-tests/workers/modules/dedicated-worker-import-referrer.html +++ b/tests/wpt/web-platform-tests/workers/modules/dedicated-worker-import-referrer.html @@ -36,7 +36,7 @@ function removeParams(url_string) { // scriptURL: 'resources/referrer-checker.sub.js', // windowReferrerPolicy: 'no-referrer', // workerReferrerPolicy: 'same-origin', -// expectedReferrer: 'https://example.com/referrer-checker.py' +// moduleGraphLevel: 'top-level' (or 'descendant') // }; // // - |scriptURL| is used for starting a new worker. @@ -45,8 +45,7 @@ function removeParams(url_string) { // loading and static imports. // - |workerReferrerPolicy| is set to the ReferrerPolicy HTTP header of the // worker. This policy should be applied to dynamic imports. -// - |expectedReferrer| is compared with the actual referrer. URL parameters are -// ignored. +// - |moduleGraphLevel| indicates a script whose referrer will be tested. function import_referrer_test(settings, description) { promise_test(async () => { let windowURL = 'resources/new-worker-window.html'; @@ -69,141 +68,144 @@ function import_referrer_test(settings, description) { win.postMessage(scriptURL, '*'); const msgEvent = await new Promise(resolve => window.onmessage = resolve); - // Delete query parameters from the referrers to make it easy to match the - // actual referrer with the expected referrer. - const expectedReferrer = removeParams(settings.expectedReferrer); + let expectedReferrer; + if (settings.moduleGraphLevel == 'top-level') + expectedReferrer = createURLString('resources/new-worker-window.html'); + else + expectedReferrer = createURLString('resources/' + settings.scriptURL); + + // Delete query parameters from the actual referrer to make it easy to match + // it with the expected referrer. const actualReferrer = removeParams(msgEvent.data); + assert_equals(actualReferrer, expectedReferrer); }, description); } // Tests for top-level worker module script loading. // -// Top-level worker module script loading should obey the window's -// ReferrerPolicy, and send the window's URL as a referrer. +// Top-level worker module script loading should obey the default referrer +// policy (not the window's referrer policy), and send the window's URL as a +// referrer. // // [Current document] // --(open)--> [Window] whose referrer policy is |windowReferrerPolicy|. // --(new Worker)--> [Worker] should be loaded with [Window]'s URL as a -// referrer if it's allowed by |windowReferrerPolicy|. +// referrer regardless of |windowReferrerPolicy|. import_referrer_test( { scriptURL: 'referrer-checker.py', windowReferrerPolicy: 'no-referrer', - expectedReferrer: '' }, + moduleGraphLevel: 'top-level' }, 'Same-origin top-level module script loading with "no-referrer" referrer ' + 'policy'); import_referrer_test( { scriptURL: 'referrer-checker.py', windowReferrerPolicy: 'origin', - expectedReferrer: window.location.origin + '/' }, + moduleGraphLevel: 'top-level' }, 'Same-origin top-level module script loading with "origin" referrer ' + 'policy'); import_referrer_test( { scriptURL: 'referrer-checker.py', windowReferrerPolicy: 'same-origin', - expectedReferrer: createURLString('resources/new-worker-window.html') }, + moduleGraphLevel: 'top-level' }, 'Same-origin top-level module script loading with "same-origin" referrer ' + 'policy'); // Tests for static imports. // -// Static imports should obey the window's ReferrerPolicy, and send the worker's +// Static imports should obey the default referrer policy, and send the worker's // URL as a referrer. // // [Current document] // --(open)--> [Window] whose referrer policy is |windowReferrerPolicy|. // --(new Worker)--> [Worker] // --(static import)--> [Script] should be loaded with [Worker]'s URL as a -// referrer if it's allowed by |windowReferrerPolicy|. +// referrer regardless of |windowReferrerPolicy|. import_referrer_test( { scriptURL: 'static-import-same-origin-referrer-checker-worker.js', windowReferrerPolicy: 'no-referrer', - expectedReferrer: '' }, + moduleGraphLevel: 'descendant' }, 'Same-origin static import with "no-referrer" referrer policy.'); import_referrer_test( { scriptURL: 'static-import-same-origin-referrer-checker-worker.js', windowReferrerPolicy: 'origin', - expectedReferrer: window.location.origin + '/' }, + moduleGraphLevel: 'descendant' }, 'Same-origin static import with "origin" referrer policy.'); import_referrer_test( { scriptURL: 'static-import-same-origin-referrer-checker-worker.js', windowReferrerPolicy: 'same-origin', - expectedReferrer: createURLString( - 'resources/static-import-same-origin-referrer-checker-worker.js') }, + moduleGraphLevel: 'descendant' }, 'Same-origin static import with "same-origin" referrer policy.'); import_referrer_test( { scriptURL: 'static-import-remote-origin-referrer-checker-worker.sub.js', windowReferrerPolicy: 'no-referrer', - expectedReferrer: '' }, + moduleGraphLevel: 'descendant' }, 'Cross-origin static import with "no-referrer" referrer policy.'); import_referrer_test( { scriptURL: 'static-import-remote-origin-referrer-checker-worker.sub.js', windowReferrerPolicy: 'origin', - expectedReferrer: window.location.origin + '/' }, + moduleGraphLevel: 'descendant' }, 'Cross-origin static import with "origin" referrer policy.'); import_referrer_test( { scriptURL: 'static-import-remote-origin-referrer-checker-worker.sub.js', windowReferrerPolicy: 'same-origin', - expectedReferrer: '' }, + moduleGraphLevel: 'descendant' }, 'Cross-origin static import with "same-origin" referrer policy.'); // Tests for dynamic imports. // -// Dynamic imports should obey the worker's ReferrerPolicy, and send the -// worker's URL as a referrer. Note that the worker doesn't inherit the window's -// referrer policy and it's set by the ReferrerPolicy HTTP header on the -// response of the top-level worker module script. +// Dynamic imports should obey the default referrer policy (not the worker's +// referrer policy), and send the worker's URL as a referrer. // // [Current document] // --(open)--> [Window] // --(new Worker)--> [Worker] whose referrer policy is |workerReferrerPolicy|. // --(dynamic import)--> [Script] should be loaded with [Worker]'s URL as a -// referrer if it's allowed by |workerReferrerPolicy|. +// referrer regardless of |workerReferrerPolicy|. import_referrer_test( { scriptURL: 'dynamic-import-same-origin-referrer-checker-worker.js', workerReferrerPolicy: 'no-referrer', - expectedReferrer: '' }, + moduleGraphLevel: 'descendant' }, 'Same-origin dynamic import with "no-referrer" referrer policy.'); import_referrer_test( { scriptURL: 'dynamic-import-same-origin-referrer-checker-worker.js', workerReferrerPolicy: 'origin', - expectedReferrer: window.location.origin + '/' }, + moduleGraphLevel: 'descendant' }, 'Same-origin dynamic import with "origin" referrer policy.'); import_referrer_test( { scriptURL: 'dynamic-import-same-origin-referrer-checker-worker.js', workerReferrerPolicy: 'same-origin', - expectedReferrer: createURLString( - 'resources/dynamic-import-same-origin-referrer-checker-worker.js') }, + moduleGraphLevel: 'descendant' }, 'Same-origin dynamic import with "same-origin" referrer policy.'); import_referrer_test( { scriptURL: 'dynamic-import-remote-origin-referrer-checker-worker.sub.js', workerReferrerPolicy: 'no-referrer', - expectedReferrer: '' }, + moduleGraphLevel: 'descendant' }, 'Cross-origin dynamic import with "no-referrer" referrer policy.'); import_referrer_test( { scriptURL: 'dynamic-import-remote-origin-referrer-checker-worker.sub.js', workerReferrerPolicy: 'origin', - expectedReferrer: window.location.origin + '/' }, + moduleGraphLevel: 'descendant' }, 'Cross-origin dynamic import with "origin" referrer policy.'); import_referrer_test( { scriptURL: 'dynamic-import-remote-origin-referrer-checker-worker.sub.js', workerReferrerPolicy: 'same-origin', - expectedReferrer: '' }, + moduleGraphLevel: 'descendant' }, 'Cross-origin dynamic import with "same-origin" referrer policy.'); </script> diff --git a/tests/wpt/web-platform-tests/worklets/resources/referrer-checker.py b/tests/wpt/web-platform-tests/worklets/resources/referrer-checker.py index 184d547f493..3d9afb4ab89 100644 --- a/tests/wpt/web-platform-tests/worklets/resources/referrer-checker.py +++ b/tests/wpt/web-platform-tests/worklets/resources/referrer-checker.py @@ -2,25 +2,14 @@ # |expected_referrer|. def main(request, response): referrer = request.headers.get("referer", "") - referrer_policy = request.GET.first("referrer_policy") expected_referrer = request.GET.first("expected_referrer", "") response_headers = [("Content-Type", "text/javascript"), ("Access-Control-Allow-Origin", "*")] - if referrer_policy == "no-referrer" or referrer_policy == "origin": - if referrer == expected_referrer: - return (200, response_headers, "") - return (404, response_headers) - - if referrer_policy == "same-origin": - if referrer == expected_referrer: - return (200, response_headers, "") - # The expected referrer doesn't contain query params for simplification, - # so we check the referrer by startswith() here. - if (expected_referrer != "" and - referrer.startswith(expected_referrer + "?")): - return (200, response_headers, "") - return (404, response_headers) - + # The expected referrer doesn't contain query params for simplification, so + # we check the referrer by startswith() here. + if (expected_referrer != "" and + referrer.startswith(expected_referrer + "?")): + return (200, response_headers, "") return (404, response_headers) diff --git a/tests/wpt/web-platform-tests/worklets/resources/referrer-tests.js b/tests/wpt/web-platform-tests/worklets/resources/referrer-tests.js index 01b8e2ab57a..e46f93dbc3f 100644 --- a/tests/wpt/web-platform-tests/worklets/resources/referrer-tests.js +++ b/tests/wpt/web-platform-tests/worklets/resources/referrer-tests.js @@ -29,7 +29,9 @@ function runReferrerTest(settings) { }).then(msg_event => assert_equals(msg_event.data, 'RESOLVED')); } -// Runs a series of tests related to the referrer policy on a worklet. +// Runs a series of tests related to the referrer policy on a worklet. Referrer +// on worklet module loading should always be handled with the default referrer +// policy. // // Usage: // runReferrerTests("paint"); @@ -44,7 +46,7 @@ function runReferrerTests(workletType) { referrerPolicy: 'no-referrer', scriptOrigins: { topLevel: 'same' } }); }, 'Importing a same-origin script from a page that has "no-referrer" ' + - 'referrer policy should not send referrer.'); + 'referrer policy.'); promise_test(() => { return runReferrerTest({ workletType: workletType, @@ -52,7 +54,7 @@ function runReferrerTests(workletType) { referrerPolicy: 'no-referrer', scriptOrigins: { topLevel: 'remote' } }); }, 'Importing a remote-origin script from a page that has "no-referrer" ' + - 'referrer policy should not send referrer.'); + 'referrer policy.'); promise_test(() => { return runReferrerTest({ workletType: workletType, @@ -60,7 +62,7 @@ function runReferrerTests(workletType) { referrerPolicy: 'origin', scriptOrigins: { topLevel: 'same' } }); }, 'Importing a same-origin script from a page that has "origin" ' + - 'referrer policy should send only an origin as referrer.'); + 'referrer policy.'); promise_test(() => { return runReferrerTest({ workletType: workletType, @@ -68,7 +70,7 @@ function runReferrerTests(workletType) { referrerPolicy: 'origin', scriptOrigins: { topLevel: 'remote' } }); }, 'Importing a remote-origin script from a page that has "origin" ' + - 'referrer policy should send only an origin as referrer.'); + 'referrer policy.'); promise_test(() => { return runReferrerTest({ workletType: workletType, @@ -76,7 +78,7 @@ function runReferrerTests(workletType) { referrerPolicy: 'same-origin', scriptOrigins: { topLevel: 'same' } }); }, 'Importing a same-origin script from a page that has "same-origin" ' + - 'referrer policy should send referrer.'); + 'referrer policy.'); promise_test(() => { return runReferrerTest({ workletType: workletType, @@ -84,7 +86,7 @@ function runReferrerTests(workletType) { referrerPolicy: 'same-origin', scriptOrigins: { topLevel: 'remote' } }); }, 'Importing a remote-origin script from a page that has "same-origin" ' + - 'referrer policy should not send referrer.'); + 'referrer policy.'); // Tests for descendant script fetch ----------------------------------------- @@ -95,7 +97,7 @@ function runReferrerTests(workletType) { scriptOrigins: { topLevel: 'same', descendant: 'same' } }); }, 'Importing a same-origin script from a same-origin worklet script that ' + - 'has "no-referrer" referrer policy should not send referrer.'); + 'has "no-referrer" referrer policy.'); promise_test(() => { return runReferrerTest({ workletType: workletType, @@ -104,7 +106,7 @@ function runReferrerTests(workletType) { scriptOrigins: { topLevel: 'same', descendant: 'remote' } }); }, 'Importing a remote-origin script from a same-origin worklet script ' + - 'that has "no-referrer" referrer policy should not send referrer.'); + 'that has "no-referrer" referrer policy.'); promise_test(() => { return runReferrerTest({ workletType: workletType, @@ -113,7 +115,7 @@ function runReferrerTests(workletType) { scriptOrigins: { topLevel: 'remote', descendant: 'remote' } }); }, 'Importing a remote-origin script from a remote-origin worklet script ' + - 'that has "no-referrer" referrer policy should not send referrer.'); + 'that has "no-referrer" referrer policy.'); promise_test(() => { return runReferrerTest({ workletType: workletType, @@ -122,7 +124,7 @@ function runReferrerTests(workletType) { scriptOrigins: { topLevel: 'same', descendant: 'same' } }); }, 'Importing a same-origin script from a same-origin worklet script that ' + - 'has "origin" referrer policy should send referrer.'); + 'has "origin" referrer policy.'); promise_test(() => { return runReferrerTest({ workletType: workletType, @@ -131,7 +133,7 @@ function runReferrerTests(workletType) { scriptOrigins: { topLevel: 'same', descendant: 'remote' } }); }, 'Importing a remote-origin script from a same-origin worklet script ' + - 'that has "origin" referrer policy should send referrer.'); + 'that has "origin" referrer policy.'); promise_test(() => { return runReferrerTest({ workletType: workletType, @@ -140,7 +142,7 @@ function runReferrerTests(workletType) { scriptOrigins: { topLevel: 'remote', descendant: 'remote' } }); }, 'Importing a remote-origin script from a remote-origin worklet script ' + - 'that has "origin" referrer policy should send referrer.'); + 'that has "origin" referrer policy.'); promise_test(() => { return runReferrerTest({ workletType: workletType, @@ -149,7 +151,7 @@ function runReferrerTests(workletType) { scriptOrigins: { topLevel: 'same', descendant: 'same' } }); }, 'Importing a same-origin script from a same-origin worklet script that ' + - 'has "same-origin" referrer policy should send referrer.'); + 'has "same-origin" referrer policy.'); promise_test(() => { return runReferrerTest({ workletType: workletType, @@ -158,7 +160,7 @@ function runReferrerTests(workletType) { scriptOrigins: { topLevel: 'same', descendant: 'remote' } }); }, 'Importing a remote-origin script from a same-origin worklet script ' + - 'that has "same-origin" referrer policy should not send referrer.'); + 'that has "same-origin" referrer policy.'); promise_test(() => { return runReferrerTest({ workletType: workletType, @@ -167,5 +169,5 @@ function runReferrerTests(workletType) { scriptOrigins: { topLevel: 'remote', descendant: 'remote' } }); }, 'Importing a remote-origin script from a remote-origin worklet script ' + - 'that has "same-origin" referrer policy should not send referrer.'); + 'that has "same-origin" referrer policy.'); } diff --git a/tests/wpt/web-platform-tests/worklets/resources/referrer-window.html b/tests/wpt/web-platform-tests/worklets/resources/referrer-window.html index 4817f0452a2..331db07935a 100644 --- a/tests/wpt/web-platform-tests/worklets/resources/referrer-window.html +++ b/tests/wpt/web-platform-tests/worklets/resources/referrer-window.html @@ -48,47 +48,30 @@ function isDestinationCrossOrigin(fetchType, scriptOrigins) { assert_unreached('fetchType has an invalid value.'); } -function createExpectedReferrer( - importerURL, fetchType, referrerPolicy, scriptOrigins) { - if (referrerPolicy === 'no-referrer') - return ""; - if (referrerPolicy === 'same-origin') { - if (isDestinationCrossOrigin(fetchType, scriptOrigins)) - return ""; - // Delete query params to make it easier to match with an actual referrer in - // the referrer-checker.py. - const expectedReferrer = new URL(importerURL); - for (var key of expectedReferrer.searchParams.keys()) - expectedReferrer.searchParams.delete(key); - return expectedReferrer; - } - if (referrerPolicy === 'origin') - return (new URL(importerURL)).origin + '/'; - assert_unreached('referrerPolicy has an invalid value.'); -} - window.onmessage = e => { const workletType = e.data.workletType; const fetchType = e.data.fetchType; - const referrerPolicy = e.data.referrerPolicy; const scriptOrigins = e.data.scriptOrigins; let scriptURL; let expectedReferrer; if (fetchType === 'top-level') { scriptURL = createScriptURLForTopLevel(scriptOrigins.topLevel); - expectedReferrer = createExpectedReferrer( - location.href, fetchType, referrerPolicy, scriptOrigins); + // The referrer of the top-level script should be this file. + // Delete query params to make it easier to match with an actual referrer in + // the referrer-checker.py. + expectedReferrer = new URL(location.href); + for (var key of expectedReferrer.searchParams.keys()) + expectedReferrer.searchParams.delete(key); } else if (fetchType === 'descendant') { scriptURL = createScriptURLForDecendant(scriptOrigins); - expectedReferrer = createExpectedReferrer( - scriptURL, fetchType, referrerPolicy, scriptOrigins); + // The referrer of the imported script should be the importer script. + expectedReferrer = scriptURL; } else { assert_unreached('fetchType should be \'top-level\' or \'descendant\''); } const params = new URLSearchParams; - params.append('referrer_policy', referrerPolicy); params.append('expected_referrer', expectedReferrer); get_worklet(workletType).addModule(scriptURL + '?' + params) |