From 578498ba247078187df13b7293a9768057d96d28 Mon Sep 17 00:00:00 2001 From: Josh Matthews Date: Mon, 19 Jun 2017 19:07:14 -0400 Subject: [PATCH] Update web-platform-tests to revision a46616a5b18e83587ddbbed756c7b96cbb4b015d --- tests/wpt/metadata/MANIFEST.json | 36685 ++++++++++++---- .../derive_bits_keys/test_ecdh_bits.html.ini | 5 - .../derive_bits_keys/test_ecdh_keys.html.ini | 5 - .../derive_bits_keys/test_hkdf.html.ini | 5 - .../derive_bits_keys/test_pbkdf2.html.ini | 5 - .../WebCryptoAPI/digest/test_digest.html.ini | 242 - .../encrypt_decrypt/test_aes_cbc.html.ini | 5 - .../encrypt_decrypt/test_aes_ctr.html.ini | 5 - .../encrypt_decrypt/test_aes_gcm.html.ini | 5 - .../encrypt_decrypt/test_rsa_oaep.html.ini | 5 - .../generateKey/test_aes-cbc.html.ini | 5 - .../generateKey/test_aes-ctr.html.ini | 5 - .../generateKey/test_failures.html.ini | 5 - .../test_failures_AES-CBC.html.ini | 5 - .../test_failures_AES-CTR.html.ini | 5 - .../test_failures_AES-GCM.html.ini | 5 - .../generateKey/test_failures_AES-KW.html.ini | 5 - .../generateKey/test_failures_ECDH.html.ini | 5 - .../generateKey/test_failures_ECDSA.html.ini | 5 - .../generateKey/test_failures_HMAC.html.ini | 5 - .../test_failures_RSA-OAEP.html.ini | 5 - .../test_failures_RSA-PSS.html.ini | 5 - .../test_failures_RSASSA-PKCS1-v1_5.html.ini | 5 - .../generateKey/test_successes.html.ini | 5 - .../test_successes_AES-CBC.html.ini | 5 - .../test_successes_AES-CTR.html.ini | 5 - .../test_successes_AES-GCM.html.ini | 5 - .../test_successes_AES-KW.html.ini | 5 - .../generateKey/test_successes_ECDH.html.ini | 5 - .../generateKey/test_successes_ECDSA.html.ini | 5 - .../generateKey/test_successes_HMAC.html.ini | 5 - .../test_successes_RSA-OAEP.html.ini | 5 - .../test_successes_RSA-PSS.html.ini | 5 - .../test_successes_RSASSA-PKCS1-v1_5.html.ini | 5 - .../import_export/test_ec_importKey.html.ini | 218 - .../import_export/test_rsa_importKey.html.ini | 1442 - .../test_symmetric_importKey.html.ini | 704 - .../sign_verify/test_ecdsa.html.ini | 5 - .../sign_verify/test_hmac.html.ini | 5 - .../sign_verify/test_rsa_pkcs.html.ini | 5 - .../sign_verify/test_rsa_pss.html.ini | 5 - .../test_wrapKey_unwrapKey.html.ini | 5 - .../encoding/legacy-mb-japanese/__dir__.ini | 1 + .../encoding/legacy-mb-korean/__dir__.ini | 1 + .../encoding/legacy-mb-tchinese/__dir__.ini | 1 + .../events/event-handler-onauxclick.html.ini | 11 - tests/wpt/metadata/mozilla-sync | 4 +- tests/wpt/metadata/url/interfaces.html.ini | 11 - tests/wpt/web-platform-tests/.codecov.yml | 6 + tests/wpt/web-platform-tests/.gitignore | 1 + tests/wpt/web-platform-tests/.gitmodules | 14 +- tests/wpt/web-platform-tests/.travis.yml | 32 + .../drawimage_html_image_1.html | 1 - .../drawimage_html_image_10.html | 1 - .../drawimage_html_image_11.html | 1 - .../drawimage_html_image_12.html | 1 - .../drawimage_html_image_2.html | 1 - .../drawimage_html_image_3.html | 1 - .../drawimage_html_image_4.html | 1 - .../drawimage_html_image_5.html | 1 - .../drawimage_html_image_6.html | 1 - .../drawimage_html_image_7.html | 1 - .../drawimage_html_image_8.html | 1 - .../canvas_transformations_scale_001.htm | 1 + .../DOM-parsing/todo/internalSubset.html | 16 - .../IndexedDB/idb_webworkers.htm | 4 +- .../idbcursor-advance-continue-async.htm | 297 +- .../IndexedDB/idbcursor-advance-invalid.htm | 226 +- .../IndexedDB/idbcursor-advance.htm | 394 +- .../IndexedDB/idbcursor-continue.htm | 404 +- ...sor-continuePrimaryKey-exception-order.htm | 6 +- ...dbcursor-continuePrimaryKey-exceptions.htm | 8 + .../idbcursor-direction-index-keyrange.htm | 99 +- .../IndexedDB/idbcursor-direction-index.htm | 100 +- ...bcursor-direction-objectstore-keyrange.htm | 98 +- .../idbcursor-direction-objectstore.htm | 100 +- .../IndexedDB/idbcursor-direction.htm | 7 +- .../IndexedDB/idbcursor-source.htm | 100 +- .../IndexedDB/idbcursor_iterating.htm | 3 +- .../idbcursor_iterating_objectstore.htm | 3 +- .../idbcursor_iterating_objectstore2.htm | 3 +- .../IndexedDB/idbdatabase_close.htm | 1 + ...actory-deleteDatabase-request-success.html | 28 + .../idbfactory-open-request-error.html | 66 + .../idbfactory-open-request-success.html | 54 + .../IndexedDB/idbfactory_open10.htm | 2 + .../IndexedDB/idbfactory_open11.htm | 2 + .../IndexedDB/idbfactory_open3.htm | 1 + .../IndexedDB/idbfactory_open6.htm | 4 +- .../IndexedDB/idbfactory_open7.htm | 5 +- .../IndexedDB/idbindex_getAll.html | 58 +- .../IndexedDB/idbindex_getAllKeys.html | 57 +- .../IndexedDB/idbobjectstore_deleteIndex.htm | 1 + .../IndexedDB/idbobjectstore_getAll.html | 55 +- .../IndexedDB/idbobjectstore_getAllKeys.html | 55 +- .../IndexedDB/idbobjectstore_getKey.html | 21 +- .../idbobjectstore_openCursor_invalid.htm | 33 +- .../idbobjectstore_openKeyCursor.htm | 30 +- .../IndexedDB/idbrequest-onupgradeneeded.htm | 6 + .../IndexedDB/idbtransaction.htm | 71 +- .../idbtransaction_objectStoreNames.html | 3 +- .../IndexedDB/large-nested-cloning.html | 288 + .../IndexedDB/large-requests-abort.html | 244 + .../IndexedDB/request-abort-ordering.html | 83 + .../IndexedDB/request-event-ordering.html | 369 + .../IndexedDB/support-promises.js | 20 + .../web-platform-tests/IndexedDB/support.js | 30 +- tests/wpt/web-platform-tests/README.md | 113 +- .../WebCryptoAPI/derive_bits_keys/pbkdf2.js | 5 +- ...dh_bits.html => test_ecdh_bits.https.html} | 0 ...dh_keys.html => test_ecdh_keys.https.html} | 0 .../{test_hkdf.html => test_hkdf.https.html} | 0 .../test_pbkdf2_empty_empty.https.html | 22 + .../test_pbkdf2_empty_long.https.html | 22 + .../test_pbkdf2_empty_short.https.html | 22 + .../test_pbkdf2_long_empty.https.html | 22 + ....html => test_pbkdf2_long_long.https.html} | 5 +- .../test_pbkdf2_long_short.https.html | 22 + .../test_pbkdf2_short_empty.https.html | 22 + .../test_pbkdf2_short_long.https.html | 22 + .../test_pbkdf2_short_short.https.html | 22 + ...est_digest.html => test_digest.https.html} | 0 ...t_aes_cbc.html => test_aes_cbc.https.html} | 0 ...t_aes_ctr.html => test_aes_ctr.https.html} | 0 ...t_aes_gcm.html => test_aes_gcm.https.html} | 0 ...rsa_oaep.html => test_rsa_oaep.https.html} | 0 .../WebCryptoAPI/generateKey/successes.js | 4 +- ...t_aes-cbc.html => test_aes-cbc.https.html} | 0 ...t_aes-ctr.html => test_aes-ctr.https.html} | 0 ...failures.html => test_failures.https.html} | 0 ....html => test_failures_AES-CBC.https.html} | 0 ....html => test_failures_AES-CTR.https.html} | 0 ....html => test_failures_AES-GCM.https.html} | 0 ...W.html => test_failures_AES-KW.https.html} | 0 ...CDH.html => test_failures_ECDH.https.html} | 0 ...SA.html => test_failures_ECDSA.https.html} | 0 ...MAC.html => test_failures_HMAC.https.html} | 0 ...html => test_failures_RSA-OAEP.https.html} | 0 ....html => test_failures_RSA-PSS.https.html} | 0 ...est_failures_RSASSA-PKCS1-v1_5.https.html} | 0 ...html => test_successes_AES-CBC.https.html} | 0 ...html => test_successes_AES-CTR.https.html} | 0 ...html => test_successes_AES-GCM.https.html} | 0 ....html => test_successes_AES-KW.https.html} | 0 ...DH.html => test_successes_ECDH.https.html} | 0 ...A.html => test_successes_ECDSA.https.html} | 0 ...AC.html => test_successes_HMAC.https.html} | 0 .../generateKey/test_successes_RSA-OAEP.html | 23 - ...tml => test_successes_RSA-OAEP.https.html} | 2 +- ...html => test_successes_RSA-PSS.https.html} | 0 ...st_successes_RSASSA-PKCS1-v1_5.https.html} | 0 .../WebCryptoAPI/idlharness.https.html | 45 + ...tKey.html => test_ec_importKey.https.html} | 0 ...Key.html => test_rsa_importKey.https.html} | 0 ...ml => test_symmetric_importKey.https.html} | 0 ...-non-secure-context-not-available.sub.html | 26 + ...le-secure-context-available.https.sub.html | 26 + ...{test_ecdsa.html => test_ecdsa.https.html} | 0 .../{test_hmac.html => test_hmac.https.html} | 0 ...rsa_pkcs.html => test_rsa_pkcs.https.html} | 0 ...t_rsa_pss.html => test_rsa_pss.https.html} | 0 .../WebCryptoAPI/util/helpers.js | 7 +- .../worker-report-crypto-subtle-presence.js | 3 + ...html => test_wrapKey_unwrapKey.https.html} | 0 tests/wpt/web-platform-tests/WebIDL/OWNERS | 4 + .../ecmascript-binding/has-instance.html | 15 +- .../interface-prototype-object.html | 19 + .../legacy-callback-interface-object.html | 69 + .../ecmascript-binding/put-forwards.html | 117 + .../sequence-conversion.html | 131 + .../XMLHttpRequest/formdata-foreach.html | 8 +- .../XMLHttpRequest/interfaces.html | 59 +- .../open-url-redirected-worker-origin.htm | 2 +- .../XMLHttpRequest/open-url-worker-origin.htm | 2 +- .../XMLHttpRequest/resources/base.xml | 1 + .../resources/infinite-redirects.py | 8 +- .../responsexml-document-properties.htm | 40 +- .../send-data-arraybufferview.htm | 36 + .../accelerometer/Accelerometer.https.html | 16 + .../Accelerometer_insecure_context.html | 20 + .../Accelerometer_onerror-manual.https.html | 20 + .../accelerometer/idlharness.https.html | 65 +- .../accelerometer/support-iframe.html | 10 + .../AmbientLightSensor.https.html | 16 + .../ambient-light/AmbientLightSensor.js | 5 - ...entLightSensor_browsing_context.https.html | 33 - .../AmbientLightSensor_insecure_context.html | 9 +- .../AmbientLightSensor_onchange.https.html | 26 - ...bientLightSensor_onerror-manual.https.html | 18 +- .../AmbientLightSensor_reading.https.html | 64 - .../AmbientLightSensor_start.https.html | 43 - .../AmbientLightSensor_stop.https.html | 35 - .../AmbientLightSensor_tests.html | 11 - .../ambient-light/idlharness.https.html | 50 +- .../ambient-light/support-iframe.html | 4 +- .../assumptions/ahem-ref.html | 300 + .../web-platform-tests/assumptions/ahem.html | 297 + .../assumptions/tools/ahem-generate-table.py | 102 + .../assumptions/tools/build.sh | 7 + ...tml => battery-charging-manual.https.html} | 2 + ... => battery-discharging-manual.https.html} | 2 + ...al.html => battery-full-manual.https.html} | 2 + .../battery-status/battery-iframe.https.html | 27 + .../battery-insecure-context.html | 27 + ...> battery-interface-idlharness.https.html} | 2 + ... => battery-plugging-in-manual.https.html} | 2 + .../battery-promise-iframe.html | 80 - ...html => battery-promise-window.https.html} | 2 + ...romise.html => battery-promise.https.html} | 3 +- ...l => battery-unplugging-manual.https.html} | 2 + .../support-iframe-initial.html | 5 - .../beacon/headers/header-content-type.html | 64 + .../beacon/resources/content-type.py | 14 + .../web-platform-tests/check_stability.ini | 9 + .../wpt/web-platform-tests/check_stability.py | 193 +- tests/wpt/web-platform-tests/ci_unittest.sh | 27 + tests/wpt/web-platform-tests/clipboard/OWNERS | 1 + .../common/css-paint-tests.js | 18 + .../common/object-association.js | 64 + .../common/performance-timeline-utils.js | 40 + ...id.html => animate-elem-77-t-isvalid.html} | 0 ...valid.html => linking-a-10-f-isvalid.html} | 0 .../conformance-checkers/messages.json | 8 +- .../conformance-checkers/tools/url.py | 1 - .../xhtml/elements/menu/001-haswarn.xhtml | 21 - .../xhtml/elements/menu/001-novalid.xhtml | 14 - .../menu/embed-contextmenu-isvalid.xhtml | 12 + .../menu/menu-containing-hr-novalid.xhtml | 10 + .../menu/menu-containing-menu-novalid.xhtml | 10 + .../menu/menu-containing-text-novalid.xhtml | 10 + .../menu/menu-type-context-novalid.xhtml | 8 + .../menu/menu-type-popup-novalid.xhtml | 8 + .../menu/menu-type-toolbar-novalid.xhtml | 8 + .../xhtml/elements/menu/menu-valid.xhtml | 23 + .../menu/menuitem-children-novalid.xhtml | 10 + .../menu/menuitem-label-novalid.xhtml | 10 + .../elements/menu/p-contextmenu-novalid.xhtml | 8 + .../base-uri/base-uri-allow.sub.html | 24 + .../base-uri/base-uri-deny.sub.html | 25 + .../base-uri/base-uri_iframe_sandbox.sub.html | 33 +- .../base-uri_iframe_sandbox.sub.html.headers | 5 - .../embedding_csp-header-invalid-format.html | 70 - .../embedding_csp-header.html | 75 - .../required_csp-header.html | 108 + .../subsumption_algorithm-nonces.html | 59 + ...-embedding-csp.py => echo-required-csp.py} | 4 +- .../support/testharness-helper.sub.js | 10 +- .../frame-src/frame-src-redirect.html | 35 + .../frame-src/frame-src-redirect.html.headers | 2 + .../frame-src-self-unique-origin.html | 49 + .../frame-src/support/frame.html | 2 + .../support/testharness-helper.sub.js | 5 + .../img-src/img-src-self-unique-origin.html | 49 + .../to-javascript-url-frame-src.html | 16 + ...html => to-javascript-url-script-src.html} | 0 .../script-nonces-hidden-meta.tentative.html | 130 + .../script-nonces-hidden.tentative.html | 131 + ...cript-nonces-hidden.tentative.html.headers | 1 + ...vgscript-nonces-hidden-meta.tentative.html | 116 + .../svgscript-nonces-hidden.tentative.html | 116 + ...cript-nonces-hidden.tentative.html.headers | 1 + ...-src-redirect-upgrade-reporting.https.html | 31 + ...irect-upgrade-reporting.https.html.headers | 2 + .../support/testharness-helper.sub.js | 5 + ...ade-insecure-requests-reporting.https.html | 92 + ...cure-requests-reporting.https.html.headers | 2 + ...s-control-expose-headers-parsing.window.js | 13 + .../cors/preflight-failure.htm | 13 +- ...cess-control-expose-headers-parsing-2.asis | 8 + ...access-control-expose-headers-parsing.asis | 7 + ...dentialscontainer-create-basics.https.html | 105 + .../credential-management/idl.https.html | 104 + .../css-font-display/font-display-ref.html | 85 + .../css-font-display/font-display.html | 72 + .../resources/slow-ahem-loading.py | 16 + .../fontfacesetloadevent-constructor.html | 20 + .../web-platform-tests/css-paint-api/OWNERS | 3 + .../background-image-alpha-ref.html | 41 + .../css-paint-api/background-image-alpha.html | 55 + .../background-image-multiple-ref.html | 16 + .../background-image-multiple.html | 33 + .../background-image-tiled-ref.html | 35 + .../css-paint-api/background-image-tiled.html | 47 + .../invalid-image-constructor-error-ref.html | 6 + .../invalid-image-constructor-error.html | 32 + .../invalid-image-paint-error-ref.html | 6 + .../invalid-image-paint-error.html | 31 + .../invalid-image-pending-script-ref.html | 6 + .../invalid-image-pending-script.html | 20 + .../css-paint-api/overdraw-ref.html | 6 + .../css-paint-api/overdraw.html | 30 + .../css-paint-api/paint-arguments-ref.html | 41 + .../css-paint-api/paint-arguments.html | 49 + .../paint-function-arguments-ref.html | 41 + .../paint-function-arguments.html | 49 + .../css-paint-api/paint2d-composite-ref.html | 50 + .../css-paint-api/paint2d-composite.html | 73 + .../css-paint-api/paint2d-filter-ref.html | 60 + .../css-paint-api/paint2d-filter.html | 106 + .../css-paint-api/paint2d-gradient-ref.html | 24 + .../css-paint-api/paint2d-gradient.html | 40 + .../css-paint-api/paint2d-image-ref.html | 12 + .../css-paint-api/paint2d-image.html | 28 + .../css-paint-api/paint2d-paths-ref.html | 32 + .../css-paint-api/paint2d-paths.html | 48 + .../css-paint-api/paint2d-rects-ref.html | 19 + .../css-paint-api/paint2d-rects.html | 36 + .../css-paint-api/paint2d-shadows-ref.html | 23 + .../css-paint-api/paint2d-shadows.html | 39 + .../css-paint-api/paint2d-transform-ref.html | 22 + .../css-paint-api/paint2d-transform.html | 38 + .../valid-image-after-load-ref.html | 6 + .../css-paint-api/valid-image-after-load.html | 42 + .../valid-image-before-load-ref.html | 6 + .../valid-image-before-load.html | 43 + .../{css-timing-1 => css-timing}/OWNERS | 0 .../cubic-bezier-timing-functions-output.html | 0 .../frames-timing-functions-output.html | 0 .../frames-timing-functions-syntax.html | 0 .../step-timing-functions-output.html | 0 .../testcommon.js | 0 .../declared-styleMap-accepts-inherit.html | 2 +- .../styleMap-update-function.html | 2 +- tests/wpt/web-platform-tests/css/README.md | 4 +- .../css/WOFF2/support/valid-009.woff2 | Bin 1604 -> 0 bytes .../css/WOFF2/valid-009-ref.xht | 31 - .../css/WOFF2/valid-009.xht | 35 - .../place-items-shorthand-006.html | 2 +- ...display-contents-state-change-001-ref.html | 12 + .../display-contents-state-change-001.html | 30 + .../css/css-flexbox-1/Flexible-order.html | 2 +- .../css/css-flexbox-1/align-items-001.htm | 2 +- .../css/css-flexbox-1/align-items-002.htm | 2 +- .../css/css-flexbox-1/align-items-003.htm | 2 +- .../css/css-flexbox-1/align-items-004.htm | 2 +- .../css/css-flexbox-1/align-items-005.htm | 2 +- .../css/css-flexbox-1/align-items-006.html | 37 + .../css/css-flexbox-1/align-self-001.html | 2 +- .../css/css-flexbox-1/align-self-002.html | 2 +- .../css/css-flexbox-1/align-self-003.html | 2 +- .../css/css-flexbox-1/align-self-004.html | 2 +- .../css/css-flexbox-1/align-self-005.html | 2 +- .../css/css-flexbox-1/align-self-006.html | 2 +- .../css/css-flexbox-1/align-self-007.html | 4 +- .../css/css-flexbox-1/align-self-008.html | 2 +- .../css/css-flexbox-1/align-self-009.html | 2 +- .../css/css-flexbox-1/align-self-010.html | 2 +- .../css/css-flexbox-1/align-self-011.html | 2 +- .../css/css-flexbox-1/align-self-012.html | 2 +- .../css/css-flexbox-1/align-self-013.html | 2 +- .../css-box-justify-content.html | 4 +- ...s-flexbox-column-reverse-wrap-reverse.html | 2 +- .../css-flexbox-column-reverse-wrap.html | 2 +- .../css-flexbox-column-reverse.html | 2 +- .../css-flexbox-column-wrap-reverse.html | 2 +- .../css-flexbox-column-wrap.html | 2 +- .../css/css-flexbox-1/css-flexbox-column.html | 2 +- .../css-flexbox-height-animation-stretch.html | 6 +- .../css-flexbox-img-expand-evenly.html | 2 +- .../css-flexbox-row-reverse-wrap-reverse.html | 4 +- .../css-flexbox-row-reverse-wrap.html | 4 +- .../css-flexbox-row-reverse.html | 4 +- .../css-flexbox-row-wrap-reverse.html | 4 +- .../css-flexbox-1/css-flexbox-row-wrap.html | 4 +- .../css/css-flexbox-1/css-flexbox-row.html | 4 +- .../css/css-flexbox-1/css-flexbox-test1.html | 2 +- .../css/css-flexbox-1/flex-basis-001.html | 2 +- .../css/css-flexbox-1/flex-basis-002.html | 2 +- .../css/css-flexbox-1/flex-basis-003.html | 2 +- .../css/css-flexbox-1/flex-basis-004.html | 2 +- .../css/css-flexbox-1/flex-basis-005.html | 2 +- .../css/css-flexbox-1/flex-basis-006.html | 2 +- .../css/css-flexbox-1/flex-basis-007.html | 2 +- .../css/css-flexbox-1/flex-basis-008.html | 2 +- .../css/css-flexbox-1/flex-box-wrap.html | 2 +- .../css/css-flexbox-1/flex-flow-001.html | 4 +- .../css/css-flexbox-1/flex-flow-002.html | 4 +- .../css/css-flexbox-1/flex-flow-003.html | 4 +- .../css/css-flexbox-1/flex-flow-004.html | 4 +- .../css/css-flexbox-1/flex-flow-005.html | 4 +- .../css/css-flexbox-1/flex-flow-006.html | 4 +- .../css/css-flexbox-1/flex-flow-007.html | 4 +- .../css/css-flexbox-1/flex-flow-008.html | 4 +- .../css/css-flexbox-1/flex-flow-009.html | 4 +- .../css/css-flexbox-1/flex-flow-010.html | 4 +- .../css/css-flexbox-1/flex-flow-011.html | 4 +- .../css/css-flexbox-1/flex-flow-012.html | 4 +- .../css/css-flexbox-1/flex-grow-001.xht | 2 +- .../css/css-flexbox-1/flex-grow-002.html | 2 +- .../css/css-flexbox-1/flex-grow-003.html | 2 +- .../css/css-flexbox-1/flex-grow-004.html | 2 +- .../css/css-flexbox-1/flex-grow-005.html | 2 +- .../css/css-flexbox-1/flex-grow-006.html | 2 +- .../css/css-flexbox-1/flex-grow-007.html | 2 +- ...ulti-line-wrap-reverse-column-reverse.html | 2 +- .../multi-line-wrap-reverse-row-reverse.html | 2 +- .../multi-line-wrap-with-column-reverse.html | 2 +- .../multi-line-wrap-with-row-reverse.html | 2 +- .../flex-margin-no-collapse.html | 2 +- .../css/css-flexbox-1/flex-shrink-001.html | 2 +- .../css/css-flexbox-1/flex-shrink-002.html | 2 +- .../css/css-flexbox-1/flex-shrink-003.html | 2 +- .../css/css-flexbox-1/flex-shrink-004.html | 2 +- .../css/css-flexbox-1/flex-shrink-005.html | 2 +- .../css/css-flexbox-1/flex-shrink-006.html | 2 +- .../css/css-flexbox-1/flex-shrink-007.html | 2 +- .../css/css-flexbox-1/flex-shrink-008.html | 2 +- .../css/css-flexbox-1/flex-wrap-001.htm | 2 +- .../css/css-flexbox-1/flex-wrap_nowrap.html | 2 +- .../css-flexbox-1/flex-wrap_wrap-reverse.html | 2 +- .../css/css-flexbox-1/flex-wrap_wrap.html | 2 +- .../flexbox-flex-wrap-default.htm | 2 +- .../flexbox-flex-wrap-flexing.html | 2 +- .../flexbox-flex-wrap-nowrap.htm | 2 +- .../flexbox-flex-wrap-wrap-reverse.htm | 2 +- .../css-flexbox-1/flexbox-flex-wrap-wrap.htm | 2 +- .../flexbox-order-from-lowest.html | 2 +- .../flexbox-order-only-flexitems.html | 2 +- .../flexbox_align-items-baseline.html | 2 +- .../flexbox_align-items-center-2.html | 2 +- .../flexbox_align-items-center.html | 2 +- .../flexbox_align-items-flexend-2.html | 2 +- .../flexbox_align-items-flexend.html | 2 +- .../flexbox_align-items-flexstart-2.html | 2 +- .../flexbox_align-items-flexstart.html | 2 +- .../flexbox_align-items-stretch-2.html | 2 +- .../flexbox_align-items-stretch.html | 2 +- .../flexbox_align-self-auto.html | 2 +- .../flexbox_align-self-baseline.html | 2 +- .../flexbox_align-self-center.html | 2 +- .../flexbox_align-self-flexend.html | 2 +- .../flexbox_align-self-flexstart.html | 2 +- .../flexbox_align-self-stretch.html | 2 +- ...xbox_flex-natural-variable-zero-basis.html | 2 +- ...xbox_flow-column-reverse-wrap-reverse.html | 2 +- .../flexbox_flow-column-reverse-wrap.html | 2 +- .../flexbox_flow-column-wrap-reverse.html | 2 +- .../flexbox_flow-column-wrap.html | 2 +- .../flexbox_flow-row-wrap-reverse.html | 2 +- .../css-flexbox-1/flexbox_flow-row-wrap.html | 2 +- ...lexbox_justifycontent-center-overflow.html | 2 +- .../flexbox_justifycontent-center.html | 2 +- .../flexbox_justifycontent-flex-end.html | 2 +- .../flexbox_justifycontent-flex-start.html | 2 +- ...x_justifycontent-spacearound-negative.html | 2 +- ...exbox_justifycontent-spacearound-only.html | 2 +- .../flexbox_justifycontent-spacearound.html | 2 +- ..._justifycontent-spacebetween-negative.html | 2 +- ...xbox_justifycontent-spacebetween-only.html | 2 +- .../flexbox_justifycontent-spacebetween.html | 2 +- .../css/css-flexbox-1/flexbox_object.html | 2 +- .../flexbox_order-abspos-space-around.html | 2 +- .../css/css-flexbox-1/flexbox_order-box.html | 2 +- .../flexbox_order-noninteger-invalid.html | 2 +- .../css/css-flexbox-1/flexbox_order.html | 2 +- .../css/css-flexbox-1/flexbox_rowspan.html | 2 +- .../flexbox_rtl-flow-reverse.html | 2 +- .../css/css-flexbox-1/flexbox_rtl-flow.html | 2 +- .../css/css-flexbox-1/flexbox_rtl-order.html | 2 +- .../css-flexbox-1/flexbox_width-overflow.html | 2 +- .../css/css-flexbox-1/flexbox_wrap-long.html | 2 +- .../css-flexbox-1/flexbox_wrap-reverse.html | 2 +- .../css/css-flexbox-1/flexbox_wrap.html | 2 +- ...ox_computedstyle_align-items-baseline.html | 2 +- ...xbox_computedstyle_align-items-center.html | 2 +- ...ox_computedstyle_align-items-flex-end.html | 2 +- ..._computedstyle_align-items-flex-start.html | 2 +- ...box_computedstyle_align-items-invalid.html | 2 +- ...box_computedstyle_align-items-stretch.html | 2 +- ...box_computedstyle_align-self-baseline.html | 2 +- ...exbox_computedstyle_align-self-center.html | 2 +- ...box_computedstyle_align-self-flex-end.html | 2 +- ...x_computedstyle_align-self-flex-start.html | 2 +- ...xbox_computedstyle_align-self-invalid.html | 2 +- ...xbox_computedstyle_align-self-stretch.html | 2 +- ...computedstyle_flex-flow-column-nowrap.html | 2 +- ...style_flex-flow-column-reverse-nowrap.html | 2 +- ...edstyle_flex-flow-column-reverse-wrap.html | 2 +- ...omputedstyle_flex-flow-column-reverse.html | 2 +- ...edstyle_flex-flow-column-wrap-reverse.html | 2 +- ...x_computedstyle_flex-flow-column-wrap.html | 2 +- ...lexbox_computedstyle_flex-flow-column.html | 2 +- ...lexbox_computedstyle_flex-flow-nowrap.html | 2 +- ...ox_computedstyle_flex-flow-row-nowrap.html | 2 +- ...tedstyle_flex-flow-row-reverse-nowrap.html | 2 +- ...le_flex-flow-row-reverse-wrap-reverse.html | 2 +- ...putedstyle_flex-flow-row-reverse-wrap.html | 2 +- ...x_computedstyle_flex-flow-row-reverse.html | 2 +- ...putedstyle_flex-flow-row-wrap-reverse.html | 2 +- ...xbox_computedstyle_flex-flow-row-wrap.html | 2 +- .../flexbox_computedstyle_flex-flow-row.html | 2 +- .../flexbox_computedstyle_flex-flow-wrap.html | 2 +- .../flexbox_computedstyle_flex-grow-0.html | 2 +- ...exbox_computedstyle_flex-grow-invalid.html | 2 +- ...lexbox_computedstyle_flex-grow-number.html | 2 +- ...x_computedstyle_flex-shorthand-0-auto.html | 2 +- ...box_computedstyle_flex-shorthand-auto.html | 2 +- ..._computedstyle_flex-shorthand-initial.html | 2 +- ..._computedstyle_flex-shorthand-invalid.html | 2 +- ...box_computedstyle_flex-shorthand-none.html | 2 +- ...x_computedstyle_flex-shorthand-number.html | 2 +- .../flexbox_computedstyle_flex-shorthand.html | 2 +- .../flexbox_computedstyle_flex-shrink-0.html | 2 +- ...box_computedstyle_flex-shrink-invalid.html | 2 +- ...xbox_computedstyle_flex-shrink-number.html | 2 +- ...exbox_computedstyle_flex-wrap-invalid.html | 2 +- ...lexbox_computedstyle_flex-wrap-nowrap.html | 2 +- ..._computedstyle_flex-wrap-wrap-reverse.html | 2 +- .../flexbox_computedstyle_flex-wrap-wrap.html | 2 +- ..._computedstyle_justify-content-center.html | 2 +- ...omputedstyle_justify-content-flex-end.html | 2 +- ...putedstyle_justify-content-flex-start.html | 2 +- ...tedstyle_justify-content-space-around.html | 2 +- ...edstyle_justify-content-space-between.html | 2 +- .../flexbox_computedstyle_order-inherit.html | 2 +- .../flexbox_computedstyle_order-integer.html | 2 +- .../flexbox_computedstyle_order-invalid.html | 2 +- .../flexbox_computedstyle_order-negative.html | 2 +- .../flexbox_computedstyle_order.html | 2 +- ...box_interactive_flex-grow-transitions.html | 2 +- ...ctive_flex-shrink-transitions-invalid.html | 2 +- ...x_interactive_flex-shrink-transitions.html | 2 +- .../css/css-flexbox-1/justify-content-001.htm | 2 +- .../css/css-flexbox-1/justify-content-002.htm | 2 +- .../css/css-flexbox-1/justify-content-003.htm | 2 +- .../css/css-flexbox-1/justify-content-004.htm | 2 +- .../css/css-flexbox-1/justify-content-005.htm | 2 +- .../css-flexbox-1/justify-content_center.html | 2 +- .../justify-content_flex-end.html | 2 +- .../justify-content_flex-start.html | 2 +- .../justify-content_space-around.html | 2 +- .../justify-content_space-between.html | 2 +- .../css/css-flexbox-1/order-001.htm | 2 +- .../order/order-with-column-reverse.html | 2 +- .../order/order-with-row-reverse.html | 2 +- .../css/css-flexbox-1/order_value.html | 2 +- .../ttwf-reftest-flex-order.html | 2 +- .../ttwf-reftest-flex-wrap-reverse.html | 2 +- .../css-flexbox-1/ttwf-reftest-flex-wrap.html | 2 +- .../web-platform-tests/css/css-fonts-3/OWNERS | 1 - .../css/css-fonts-3/font-kerning-01-ref.html | 19 + .../css/css-fonts-3/font-kerning-01.html | 25 + .../css/css-fonts-3/font-kerning-02-ref.html | 24 + .../css/css-fonts-3/font-kerning-02.html | 35 + .../css/css-fonts-3/font-kerning-03-ref.html | 26 + .../css/css-fonts-3/font-kerning-03.html | 37 + .../css/css-fonts-3/font-kerning-04-ref.html | 24 + .../css/css-fonts-3/font-kerning-04.html | 35 + .../css/css-fonts-3/font-kerning-05-ref.html | 26 + .../css/css-fonts-3/font-kerning-05.html | 37 + .../css/css-fonts-3/font-variant-01-ref.html | 28 + .../css/css-fonts-3/font-variant-01.html | 41 + .../css/css-fonts-3/font-variant-02-ref.html | 28 + .../css/css-fonts-3/font-variant-02.html | 41 + .../css/css-fonts-3/font-variant-03-ref.html | 28 + .../css/css-fonts-3/font-variant-03.html | 38 + .../css/css-fonts-3/font-variant-04-ref.html | 28 + .../css/css-fonts-3/font-variant-04.html | 38 + .../font-variant-alternates-01-ref.html | 26 + .../font-variant-alternates-01.html | 37 + .../font-variant-alternates-02-ref.html | 26 + .../font-variant-alternates-02.html | 35 + .../font-variant-alternates-03-ref.html | 31 + .../font-variant-alternates-03.html | 43 + .../font-variant-alternates-04-ref.html | 24 + .../font-variant-alternates-04.html | 43 + .../font-variant-alternates-05-ref.html | 24 + .../font-variant-alternates-05.html | 43 + .../font-variant-alternates-06-ref.html | 24 + .../font-variant-alternates-06.html | 43 + .../font-variant-alternates-07-ref.html | 24 + .../font-variant-alternates-07.html | 43 + .../font-variant-alternates-08-ref.html | 24 + .../font-variant-alternates-08.html | 43 + .../font-variant-alternates-09-ref.html | 24 + .../font-variant-alternates-09.html | 43 + .../font-variant-alternates-10-ref.html | 24 + .../font-variant-alternates-10.html | 43 + .../font-variant-alternates-11-ref.html | 24 + .../font-variant-alternates-11.html | 43 + .../font-variant-alternates-12-ref.html | 24 + .../font-variant-alternates-12.html | 43 + .../font-variant-alternates-13-ref.html | 24 + .../font-variant-alternates-13.html | 43 + .../font-variant-alternates-14-ref.html | 24 + .../font-variant-alternates-14.html | 43 + .../font-variant-alternates-15-ref.html | 24 + .../font-variant-alternates-15.html | 43 + .../font-variant-alternates-16-ref.html | 24 + .../font-variant-alternates-16.html | 43 + .../font-variant-alternates-17-ref.html | 24 + .../font-variant-alternates-17.html | 43 + .../font-variant-alternates-18-ref.html | 24 + .../font-variant-alternates-18.html | 43 + .../css-fonts-3/font-variant-caps-01-ref.html | 23 + .../css/css-fonts-3/font-variant-caps-01.html | 33 + .../css-fonts-3/font-variant-caps-02-ref.html | 23 + .../css/css-fonts-3/font-variant-caps-02.html | 36 + .../css-fonts-3/font-variant-caps-03-ref.html | 23 + .../css/css-fonts-3/font-variant-caps-03.html | 33 + .../css-fonts-3/font-variant-caps-04-ref.html | 23 + .../css/css-fonts-3/font-variant-caps-04.html | 36 + .../css-fonts-3/font-variant-caps-05-ref.html | 23 + .../css/css-fonts-3/font-variant-caps-05.html | 36 + .../css-fonts-3/font-variant-caps-06-ref.html | 23 + .../css/css-fonts-3/font-variant-caps-06.html | 36 + .../css-fonts-3/font-variant-caps-07-ref.html | 23 + .../css/css-fonts-3/font-variant-caps-07.html | 36 + .../font-variant-east-asian-01-ref.html | 23 + .../font-variant-east-asian-01.html | 33 + .../font-variant-east-asian-02-ref.html | 23 + .../font-variant-east-asian-02.html | 33 + .../font-variant-east-asian-03-ref.html | 23 + .../font-variant-east-asian-03.html | 33 + .../font-variant-east-asian-04-ref.html | 23 + .../font-variant-east-asian-04.html | 33 + .../font-variant-east-asian-05-ref.html | 23 + .../font-variant-east-asian-05.html | 33 + .../font-variant-east-asian-06-ref.html | 23 + .../font-variant-east-asian-06.html | 33 + .../font-variant-east-asian-07-ref.html | 23 + .../font-variant-east-asian-07.html | 33 + .../font-variant-east-asian-08-ref.html | 23 + .../font-variant-east-asian-08.html | 33 + .../font-variant-east-asian-09-ref.html | 23 + .../font-variant-east-asian-09.html | 33 + .../font-variant-east-asian-10-ref.html | 23 + .../font-variant-east-asian-10.html | 33 + .../font-variant-ligatures-01-ref.html | 23 + .../font-variant-ligatures-01.html | 33 + .../font-variant-ligatures-02-ref.html | 23 + .../font-variant-ligatures-02.html | 33 + .../font-variant-ligatures-03-ref.html | 23 + .../font-variant-ligatures-03.html | 33 + .../font-variant-ligatures-04-ref.html | 23 + .../font-variant-ligatures-04.html | 33 + .../font-variant-ligatures-05-ref.html | 23 + .../font-variant-ligatures-05.html | 33 + .../font-variant-ligatures-06-ref.html | 23 + .../font-variant-ligatures-06.html | 33 + .../font-variant-ligatures-07-ref.html | 23 + .../font-variant-ligatures-07.html | 33 + .../font-variant-ligatures-08-ref.html | 23 + .../font-variant-ligatures-08.html | 33 + .../font-variant-ligatures-09-ref.html | 23 + .../font-variant-ligatures-09.html | 33 + .../font-variant-ligatures-10-ref.html | 23 + .../font-variant-ligatures-10.html | 33 + .../font-variant-ligatures-11-ref.html | 21 + .../font-variant-ligatures-11.html | 37 + .../font-variant-numeric-01-ref.html | 24 + .../css-fonts-3/font-variant-numeric-01.html | 37 + .../font-variant-numeric-02-ref.html | 23 + .../css-fonts-3/font-variant-numeric-02.html | 33 + .../font-variant-numeric-03-ref.html | 23 + .../css-fonts-3/font-variant-numeric-03.html | 35 + .../font-variant-numeric-04-ref.html | 23 + .../css-fonts-3/font-variant-numeric-04.html | 33 + .../font-variant-numeric-05-ref.html | 23 + .../css-fonts-3/font-variant-numeric-05.html | 33 + .../font-variant-numeric-06-ref.html | 23 + .../css-fonts-3/font-variant-numeric-06.html | 33 + .../font-variant-numeric-07-ref.html | 23 + .../css-fonts-3/font-variant-numeric-07.html | 33 + .../font-variant-numeric-08-ref.html | 23 + .../css-fonts-3/font-variant-numeric-08.html | 33 + .../font-variant-numeric-09-ref.html | 23 + .../css-fonts-3/font-variant-numeric-09.html | 33 + .../font-variant-position-01-ref.html | 23 + .../css-fonts-3/font-variant-position-01.html | 40 + .../font-variant-position-02-ref.html | 23 + .../css-fonts-3/font-variant-position-02.html | 40 + .../font-variant-position-03-ref.html | 25 + .../css-fonts-3/font-variant-position-03.html | 41 + .../css/css-fonts-3/language-specific-01.html | 34 + .../support/fonts/FontWithFancyFeatures.otf | Bin 0 -> 40432 bytes .../css-fonts-3/support/fonts/Lato-Medium.ttf | Bin 0 -> 637068 bytes .../web-platform-tests/css/css-grid-1/OWNERS | 2 + ...hogonal-positioned-grid-items-001-ref.html | 47 + .../orthogonal-positioned-grid-items-001.html | 58 + .../orthogonal-positioned-grid-items-002.html | 59 + .../orthogonal-positioned-grid-items-003.html | 59 + .../orthogonal-positioned-grid-items-004.html | 60 + ...hogonal-positioned-grid-items-005-ref.html | 48 + .../orthogonal-positioned-grid-items-005.html | 59 + ...hogonal-positioned-grid-items-006-ref.html | 48 + .../orthogonal-positioned-grid-items-006.html | 59 + ...hogonal-positioned-grid-items-007-ref.html | 47 + .../orthogonal-positioned-grid-items-007.html | 60 + ...hogonal-positioned-grid-items-008-ref.html | 47 + .../orthogonal-positioned-grid-items-008.html | 60 + ...hogonal-positioned-grid-items-009-ref.html | 46 + .../orthogonal-positioned-grid-items-009.html | 62 + .../orthogonal-positioned-grid-items-010.html | 60 + ...hogonal-positioned-grid-items-011-ref.html | 48 + .../orthogonal-positioned-grid-items-011.html | 59 + ...hogonal-positioned-grid-items-012-ref.html | 49 + .../orthogonal-positioned-grid-items-012.html | 59 + ...hogonal-positioned-grid-items-013-ref.html | 49 + .../orthogonal-positioned-grid-items-013.html | 60 + ...hogonal-positioned-grid-items-014-ref.html | 47 + .../orthogonal-positioned-grid-items-014.html | 59 + ...hogonal-positioned-grid-items-015-ref.html | 48 + .../orthogonal-positioned-grid-items-015.html | 59 + ...hogonal-positioned-grid-items-016-ref.html | 48 + .../orthogonal-positioned-grid-items-016.html | 60 + ...hogonal-positioned-grid-items-017-ref.html | 49 + .../orthogonal-positioned-grid-items-017.html | 62 + .../abspos/positioned-grid-items-001-ref.html | 43 + .../abspos/positioned-grid-items-001.html | 57 + .../abspos/positioned-grid-items-002.html | 58 + .../abspos/positioned-grid-items-003.html | 58 + .../abspos/positioned-grid-items-004.html | 59 + .../abspos/positioned-grid-items-005-ref.html | 44 + .../abspos/positioned-grid-items-005.html | 58 + .../abspos/positioned-grid-items-006-ref.html | 44 + .../abspos/positioned-grid-items-006.html | 58 + .../abspos/positioned-grid-items-007-ref.html | 43 + .../abspos/positioned-grid-items-007.html | 59 + .../abspos/positioned-grid-items-008-ref.html | 43 + .../abspos/positioned-grid-items-008.html | 59 + .../abspos/positioned-grid-items-009-ref.html | 42 + .../abspos/positioned-grid-items-009.html | 61 + .../abspos/positioned-grid-items-010.html | 59 + .../abspos/positioned-grid-items-011-ref.html | 47 + .../abspos/positioned-grid-items-011.html | 58 + .../abspos/positioned-grid-items-012-ref.html | 48 + .../abspos/positioned-grid-items-012.html | 58 + .../abspos/positioned-grid-items-013-ref.html | 48 + .../abspos/positioned-grid-items-013.html | 59 + .../abspos/positioned-grid-items-014-ref.html | 46 + .../abspos/positioned-grid-items-014.html | 58 + .../abspos/positioned-grid-items-015-ref.html | 47 + .../abspos/positioned-grid-items-015.html | 58 + .../abspos/positioned-grid-items-016-ref.html | 47 + .../abspos/positioned-grid-items-016.html | 59 + .../abspos/positioned-grid-items-017-ref.html | 48 + .../abspos/positioned-grid-items-017.html | 61 + .../grid-content-distribution-001.html | 43 + .../grid-content-distribution-002.html | 43 + .../grid-content-distribution-003.html | 43 + .../grid-content-distribution-004.html | 43 + .../grid-content-distribution-005.html | 41 + .../grid-content-distribution-006.html | 45 + .../grid-content-distribution-007.html | 47 + .../grid-content-distribution-008.html | 49 + .../grid-content-distribution-009.html | 51 + .../grid-content-distribution-010.html | 53 + .../grid-content-distribution-011.html | 45 + .../grid-content-distribution-012.html | 47 + .../grid-content-distribution-013.html | 49 + .../grid-content-distribution-014.html | 51 + .../grid-content-distribution-015.html | 53 + .../grid-content-distribution-016.html | 45 + .../grid-content-distribution-017.html | 47 + .../grid-content-distribution-018.html | 49 + .../grid-content-distribution-019.html | 51 + .../grid-content-distribution-020.html | 53 + .../grid-content-distribution-021.html | 45 + .../grid-content-distribution-022.html | 47 + .../grid-content-distribution-023.html | 49 + .../grid-content-distribution-024.html | 51 + .../grid-content-distribution-025.html | 53 + ...istribution-with-collapsed-tracks-001.html | 44 + ...istribution-with-collapsed-tracks-002.html | 43 + ...istribution-with-collapsed-tracks-003.html | 43 + ...istribution-with-collapsed-tracks-004.html | 43 + ...istribution-with-collapsed-tracks-005.html | 45 + ...istribution-with-collapsed-tracks-006.html | 47 + ...istribution-with-collapsed-tracks-007.html | 49 + ...istribution-with-collapsed-tracks-008.html | 51 + ...istribution-with-collapsed-tracks-009.html | 53 + ...istribution-with-collapsed-tracks-010.html | 45 + ...istribution-with-collapsed-tracks-011.html | 47 + ...istribution-with-collapsed-tracks-012.html | 49 + ...istribution-with-collapsed-tracks-013.html | 51 + ...istribution-with-collapsed-tracks-014.html | 53 + ...istribution-with-collapsed-tracks-015.html | 45 + ...istribution-with-collapsed-tracks-016.html | 47 + ...istribution-with-collapsed-tracks-017.html | 49 + ...istribution-with-collapsed-tracks-018.html | 51 + ...istribution-with-collapsed-tracks-019.html | 53 + ...istribution-with-collapsed-tracks-020.html | 45 + ...istribution-with-collapsed-tracks-021.html | 47 + ...istribution-with-collapsed-tracks-022.html | 49 + ...istribution-with-collapsed-tracks-023.html | 51 + ...istribution-with-collapsed-tracks-024.html | 53 + .../grid-self-alignment-stretch-001.html | 57 + .../grid-self-alignment-stretch-002.html | 61 + .../grid-self-alignment-stretch-003.html | 62 + .../grid-self-alignment-stretch-004.html | 61 + .../grid-self-alignment-stretch-005.html | 58 + .../grid-self-alignment-stretch-006.html | 62 + .../grid-self-alignment-stretch-007.html | 63 + .../grid-self-alignment-stretch-008.html | 62 + .../grid-self-alignment-stretch-009.html | 57 + .../grid-self-alignment-stretch-010.html | 61 + .../grid-self-alignment-stretch-011.html | 62 + .../grid-self-alignment-stretch-012.html | 61 + .../grid-self-alignment-stretch-013.html | 58 + .../grid-self-alignment-stretch-014.html | 62 + .../grid-self-alignment-stretch-015.html | 63 + .../grid-self-alignment-stretch-016.html | 61 + ...elf-alignment-stretch-vertical-lr-001.html | 58 + ...elf-alignment-stretch-vertical-lr-002.html | 62 + ...elf-alignment-stretch-vertical-lr-003.html | 63 + ...elf-alignment-stretch-vertical-lr-004.html | 62 + ...elf-alignment-stretch-vertical-lr-005.html | 59 + ...elf-alignment-stretch-vertical-lr-006.html | 63 + ...elf-alignment-stretch-vertical-lr-007.html | 64 + ...elf-alignment-stretch-vertical-lr-008.html | 63 + ...elf-alignment-stretch-vertical-lr-009.html | 58 + ...elf-alignment-stretch-vertical-lr-010.html | 62 + ...elf-alignment-stretch-vertical-lr-011.html | 63 + ...elf-alignment-stretch-vertical-lr-012.html | 62 + ...elf-alignment-stretch-vertical-lr-013.html | 59 + ...elf-alignment-stretch-vertical-lr-014.html | 63 + ...elf-alignment-stretch-vertical-lr-015.html | 64 + ...elf-alignment-stretch-vertical-lr-016.html | 62 + ...elf-alignment-stretch-vertical-rl-001.html | 58 + ...elf-alignment-stretch-vertical-rl-002.html | 62 + ...elf-alignment-stretch-vertical-rl-003.html | 63 + ...elf-alignment-stretch-vertical-rl-004.html | 62 + ...elf-alignment-stretch-vertical-rl-005.html | 59 + ...elf-alignment-stretch-vertical-rl-006.html | 63 + ...elf-alignment-stretch-vertical-rl-007.html | 64 + ...elf-alignment-stretch-vertical-rl-008.html | 63 + ...elf-alignment-stretch-vertical-rl-009.html | 58 + ...elf-alignment-stretch-vertical-rl-010.html | 62 + ...elf-alignment-stretch-vertical-rl-011.html | 63 + ...elf-alignment-stretch-vertical-rl-012.html | 62 + ...elf-alignment-stretch-vertical-rl-013.html | 59 + ...elf-alignment-stretch-vertical-rl-014.html | 63 + ...elf-alignment-stretch-vertical-rl-015.html | 64 + ...elf-alignment-stretch-vertical-rl-016.html | 62 + ...d-inline-support-flexible-lengths-001.html | 100 + ...id-inline-support-flexible-lengths-001.xht | 105 - ...nline-support-grid-template-areas-001.html | 72 + ...inline-support-grid-template-areas-001.xht | 77 - ...upport-grid-template-columns-rows-001.html | 84 + ...support-grid-template-columns-rows-001.xht | 89 - ...d-inline-support-named-grid-lines-001.html | 118 + ...id-inline-support-named-grid-lines-001.xht | 123 - .../grid-inline-support-repeat-001.html | 78 + .../grid-inline-support-repeat-001.xht | 83 - ...late-columns-rows-resolved-values-001.html | 102 + ...plate-columns-rows-resolved-values-001.xht | 107 - .../grid-support-flexible-lengths-001.html | 100 + .../grid-support-flexible-lengths-001.xht | 105 - .../grid-support-grid-template-areas-001.html | 72 + .../grid-support-grid-template-areas-001.xht | 77 - ...upport-grid-template-columns-rows-001.html | 84 + ...support-grid-template-columns-rows-001.xht | 89 - .../grid-support-named-grid-lines-001.html | 118 + .../grid-support-named-grid-lines-001.xht | 123 - .../grid-support-repeat-001.html | 78 + .../grid-support-repeat-001.xht | 83 - ...late-columns-rows-resolved-values-001.html | 102 + ...plate-columns-rows-resolved-values-001.xht | 107 - .../grid-items/grid-inline-items-001.html | 38 + .../grid-items/grid-inline-items-001.xht | 43 - .../grid-items/grid-inline-items-002.html | 50 + .../grid-items/grid-inline-items-002.xht | 55 - .../grid-items/grid-inline-items-003.html | 36 + .../grid-items/grid-inline-items-003.xht | 41 - .../grid-inline-items-inline-blocks-001.html | 33 + .../grid-inline-items-inline-blocks-001.xht | 38 - ...ine-order-property-auto-placement-001.html | 52 + ...line-order-property-auto-placement-001.xht | 57 - ...ine-order-property-auto-placement-002.html | 52 + ...line-order-property-auto-placement-002.xht | 57 - ...ine-order-property-auto-placement-003.html | 52 + ...line-order-property-auto-placement-003.xht | 57 - ...ine-order-property-auto-placement-004.html | 53 + ...line-order-property-auto-placement-004.xht | 58 - ...ine-order-property-auto-placement-005.html | 53 + ...line-order-property-auto-placement-005.xht | 58 - ...id-inline-order-property-painting-001.html | 33 + ...rid-inline-order-property-painting-001.xht | 38 - ...id-inline-order-property-painting-002.html | 33 + ...rid-inline-order-property-painting-002.xht | 38 - ...id-inline-order-property-painting-003.html | 34 + ...rid-inline-order-property-painting-003.xht | 39 - ...id-inline-order-property-painting-004.html | 34 + ...rid-inline-order-property-painting-004.xht | 39 - ...id-inline-order-property-painting-005.html | 34 + ...rid-inline-order-property-painting-005.xht | 39 - .../grid-inline-z-axis-ordering-001.html | 32 + .../grid-inline-z-axis-ordering-001.xht | 37 - .../grid-inline-z-axis-ordering-002.html | 32 + .../grid-inline-z-axis-ordering-002.xht | 37 - .../grid-inline-z-axis-ordering-003.html | 33 + .../grid-inline-z-axis-ordering-003.xht | 38 - .../grid-inline-z-axis-ordering-004.html | 33 + .../grid-inline-z-axis-ordering-004.xht | 38 - .../grid-inline-z-axis-ordering-005.html | 33 + .../grid-inline-z-axis-ordering-005.xht | 38 - ...-z-axis-ordering-overlapped-items-001.html | 42 + ...e-z-axis-ordering-overlapped-items-001.xht | 47 - ...-z-axis-ordering-overlapped-items-002.html | 43 + ...e-z-axis-ordering-overlapped-items-002.xht | 48 - ...-z-axis-ordering-overlapped-items-003.html | 43 + ...e-z-axis-ordering-overlapped-items-003.xht | 48 - ...-z-axis-ordering-overlapped-items-004.html | 42 + ...e-z-axis-ordering-overlapped-items-004.xht | 47 - ...-z-axis-ordering-overlapped-items-005.html | 42 + ...e-z-axis-ordering-overlapped-items-005.xht | 47 - ...-z-axis-ordering-overlapped-items-006.html | 48 + ...e-z-axis-ordering-overlapped-items-006.xht | 53 - .../css-grid-1/grid-items/grid-items-001.html | 42 + .../css-grid-1/grid-items/grid-items-001.xht | 47 - .../css-grid-1/grid-items/grid-items-002.html | 51 + .../css-grid-1/grid-items/grid-items-002.xht | 56 - .../css-grid-1/grid-items/grid-items-003.html | 36 + .../css-grid-1/grid-items/grid-items-003.xht | 41 - .../grid-items-inline-blocks-001.html | 33 + .../grid-items-inline-blocks-001.xht | 38 - .../grid-minimum-size-grid-items-001.html | 36 + .../grid-minimum-size-grid-items-001.xht | 41 - .../grid-minimum-size-grid-items-002.html | 40 + .../grid-minimum-size-grid-items-002.xht | 45 - .../grid-minimum-size-grid-items-003.html | 42 + .../grid-minimum-size-grid-items-003.xht | 47 - .../grid-minimum-size-grid-items-004.html | 42 + .../grid-minimum-size-grid-items-004.xht | 47 - .../grid-minimum-size-grid-items-005.html | 30 + .../grid-minimum-size-grid-items-005.xht | 35 - .../grid-minimum-size-grid-items-006.html | 34 + .../grid-minimum-size-grid-items-006.xht | 39 - .../grid-minimum-size-grid-items-007.html | 36 + .../grid-minimum-size-grid-items-007.xht | 41 - .../grid-minimum-size-grid-items-008.html | 34 + .../grid-minimum-size-grid-items-008.xht | 39 - .../grid-minimum-size-grid-items-009.html | 36 + .../grid-minimum-size-grid-items-009.xht | 41 - .../grid-minimum-size-grid-items-021.html | 214 + ...rid-order-property-auto-placement-001.html | 54 + ...grid-order-property-auto-placement-001.xht | 59 - ...rid-order-property-auto-placement-002.html | 54 + ...grid-order-property-auto-placement-002.xht | 59 - ...rid-order-property-auto-placement-003.html | 54 + ...grid-order-property-auto-placement-003.xht | 59 - ...rid-order-property-auto-placement-004.html | 55 + ...grid-order-property-auto-placement-004.xht | 60 - ...rid-order-property-auto-placement-005.html | 55 + ...grid-order-property-auto-placement-005.xht | 60 - .../grid-order-property-painting-001.html | 33 + .../grid-order-property-painting-001.xht | 38 - .../grid-order-property-painting-002.html | 33 + .../grid-order-property-painting-002.xht | 38 - .../grid-order-property-painting-003.html | 34 + .../grid-order-property-painting-003.xht | 39 - .../grid-order-property-painting-004.html | 34 + .../grid-order-property-painting-004.xht | 39 - .../grid-order-property-painting-005.html | 34 + .../grid-order-property-painting-005.xht | 39 - .../grid-items/grid-z-axis-ordering-001.html | 32 + .../grid-items/grid-z-axis-ordering-001.xht | 37 - .../grid-items/grid-z-axis-ordering-002.html | 32 + .../grid-items/grid-z-axis-ordering-002.xht | 37 - .../grid-items/grid-z-axis-ordering-003.html | 33 + .../grid-items/grid-z-axis-ordering-003.xht | 38 - .../grid-items/grid-z-axis-ordering-004.html | 33 + .../grid-items/grid-z-axis-ordering-004.xht | 38 - .../grid-items/grid-z-axis-ordering-005.html | 33 + .../grid-items/grid-z-axis-ordering-005.xht | 38 - ...-z-axis-ordering-overlapped-items-001.html | 42 + ...d-z-axis-ordering-overlapped-items-001.xht | 47 - ...-z-axis-ordering-overlapped-items-002.html | 43 + ...d-z-axis-ordering-overlapped-items-002.xht | 48 - ...-z-axis-ordering-overlapped-items-003.html | 43 + ...d-z-axis-ordering-overlapped-items-003.xht | 48 - ...-z-axis-ordering-overlapped-items-004.html | 42 + ...d-z-axis-ordering-overlapped-items-004.xht | 47 - ...-z-axis-ordering-overlapped-items-005.html | 42 + ...d-z-axis-ordering-overlapped-items-005.xht | 47 - ...-z-axis-ordering-overlapped-items-006.html | 48 + ...d-z-axis-ordering-overlapped-items-006.xht | 53 - .../grid-items/support/500x500-green.png | Bin 0 -> 1520 bytes ...puted-value-display-floated-items-001.html | 82 + ...mputed-value-display-floated-items-001.xht | 87 - .../grid-model/grid-display-grid-001.html | 35 + .../grid-model/grid-display-grid-001.xht | 40 - .../grid-display-inline-grid-001.html | 28 + .../grid-display-inline-grid-001.xht | 33 - .../grid-model/grid-first-letter-001.html | 23 + .../grid-model/grid-first-letter-001.xht | 28 - .../grid-model/grid-first-letter-002.html | 23 + .../grid-model/grid-first-letter-002.xht | 28 - .../grid-model/grid-first-letter-003.html | 25 + .../grid-model/grid-first-letter-003.xht | 30 - .../grid-model/grid-first-line-001.html | 23 + .../grid-model/grid-first-line-001.xht | 28 - .../grid-model/grid-first-line-002.html | 23 + .../grid-model/grid-first-line-002.xht | 28 - .../grid-model/grid-first-line-003.html | 23 + .../grid-model/grid-first-line-003.xht | 28 - .../css-grid-1/grid-model/grid-float-001.html | 39 + .../css-grid-1/grid-model/grid-float-001.xht | 44 - .../grid-floats-no-intrude-001.html | 35 + .../grid-model/grid-floats-no-intrude-001.xht | 40 - .../grid-inline-first-letter-001.html | 23 + .../grid-inline-first-letter-001.xht | 28 - .../grid-inline-first-letter-002.html | 23 + .../grid-inline-first-letter-002.xht | 28 - .../grid-inline-first-letter-003.html | 25 + .../grid-inline-first-letter-003.xht | 30 - .../grid-inline-first-line-001.html | 23 + .../grid-model/grid-inline-first-line-001.xht | 28 - .../grid-inline-first-line-002.html | 23 + .../grid-model/grid-inline-first-line-002.xht | 28 - .../grid-inline-first-line-003.html | 23 + .../grid-model/grid-inline-first-line-003.xht | 28 - .../grid-model/grid-inline-float-001.html | 39 + .../grid-model/grid-inline-float-001.xht | 44 - .../grid-inline-floats-no-intrude-001.html | 35 + .../grid-inline-floats-no-intrude-001.xht | 40 - .../grid-inline-margins-no-collapse-001.html | 17 + .../grid-inline-margins-no-collapse-001.xht | 22 - .../grid-model/grid-inline-multicol-001.html | 36 + .../grid-model/grid-inline-multicol-001.xht | 41 - .../grid-inline-vertical-align-001.html | 36 + .../grid-inline-vertical-align-001.xht | 41 - .../grid-margins-no-collapse-001.html | 17 + .../grid-margins-no-collapse-001.xht | 22 - .../grid-model/grid-multicol-001.html | 36 + .../grid-model/grid-multicol-001.xht | 41 - .../grid-model/grid-support-display-001.html | 75 + .../grid-model/grid-support-display-001.xht | 80 - .../grid-model/grid-vertical-align-001.html | 36 + .../grid-model/grid-vertical-align-001.xht | 41 - .../grid-2x2-blue-yellow-lime-magenta.html | 33 + .../grid-2x2-blue-yellow-lime-magenta.xht | 38 - ...yellow-green-overlapped-100px-squares.html | 42 + ...-yellow-green-overlapped-100px-squares.xht | 47 - ...t-letter-green-margin-no-collapse-ref.html | 18 + ...st-letter-green-margin-no-collapse-ref.xht | 23 - ...rid-text-green-margin-no-collapse-ref.html | 12 + ...grid-text-green-margin-no-collapse-ref.xht | 17 - .../css/css-grid-1/support/check-layout-th.js | 190 + .../gradients-with-border-ref.html | 50 + .../css-images-3/gradients-with-border.html | 40 + .../position-sticky-bottom-ref.html | 69 + .../position-sticky-bottom.html | 104 + ...ition-sticky-get-bounding-client-rect.html | 54 + .../position-sticky-left-ref.html | 68 + .../css-position-3/position-sticky-left.html | 103 + .../position-sticky-parsing.html | 73 + .../position-sticky-right-ref.html | 68 + .../css-position-3/position-sticky-right.html | 102 + ...osition-sticky-table-tfoot-bottom-ref.html | 62 + .../position-sticky-table-tfoot-bottom.html | 121 + .../position-sticky-table-th-bottom-ref.html | 62 + .../position-sticky-table-th-bottom.html | 127 + .../position-sticky-table-th-left-ref.html | 62 + .../position-sticky-table-th-left.html | 115 + .../position-sticky-table-th-right-ref.html | 62 + .../position-sticky-table-th-right.html | 115 + .../position-sticky-table-th-top-ref.html | 62 + .../position-sticky-table-th-top.html | 127 + .../position-sticky-table-thead-top-ref.html | 62 + .../position-sticky-table-thead-top.html | 121 + .../position-sticky-table-tr-bottom-ref.html | 62 + .../position-sticky-table-tr-bottom.html | 118 + .../position-sticky-table-tr-top-ref.html | 62 + .../position-sticky-table-tr-top.html | 119 + .../position-sticky-top-ref.html | 68 + .../css-position-3/position-sticky-top.html | 104 + .../css-scoping-shadow-host-namespace.html | 82 + .../values/support/parsing-utils.js | 6 +- .../floats/floats-wrap-bfc-006b-ref.xht | 26 +- .../floats/floats-wrap-bfc-006b.xht | 34 +- .../floats/floats-wrap-bfc-006c-ref.xht | 26 +- .../floats/floats-wrap-bfc-006c.xht | 34 +- .../css3-text-line-break-baspglwj-001.html | 2 +- .../css3-text-line-break-baspglwj-002.html | 2 +- .../css3-text-line-break-baspglwj-003.html | 2 +- .../css3-text-line-break-baspglwj-004.html | 2 +- .../css3-text-line-break-baspglwj-005.html | 2 +- .../css3-text-line-break-baspglwj-006.html | 2 +- .../css3-text-line-break-baspglwj-007.html | 2 +- .../css3-text-line-break-baspglwj-008.html | 2 +- .../css3-text-line-break-baspglwj-009.html | 2 +- .../css3-text-line-break-baspglwj-010.html | 2 +- .../css3-text-line-break-baspglwj-011.html | 2 +- .../css3-text-line-break-baspglwj-012.html | 2 +- .../css3-text-line-break-baspglwj-014.html | 2 +- .../css3-text-line-break-baspglwj-015.html | 2 +- .../css3-text-line-break-baspglwj-016.html | 2 +- .../css3-text-line-break-baspglwj-017.html | 2 +- .../css3-text-line-break-baspglwj-018.html | 2 +- .../css3-text-line-break-baspglwj-019.html | 2 +- .../css3-text-line-break-baspglwj-020.html | 2 +- .../css3-text-line-break-baspglwj-021.html | 2 +- .../css3-text-line-break-baspglwj-022.html | 2 +- .../css3-text-line-break-baspglwj-023.html | 2 +- .../css3-text-line-break-baspglwj-024.html | 2 +- .../css3-text-line-break-baspglwj-025.html | 2 +- .../css3-text-line-break-baspglwj-026.html | 2 +- .../css3-text-line-break-baspglwj-030.html | 2 +- .../css3-text-line-break-baspglwj-031.html | 2 +- .../css3-text-line-break-baspglwj-032.html | 2 +- .../css3-text-line-break-baspglwj-033.html | 2 +- .../css3-text-line-break-baspglwj-034.html | 2 +- .../css3-text-line-break-baspglwj-035.html | 2 +- .../css3-text-line-break-baspglwj-036.html | 2 +- .../css3-text-line-break-baspglwj-037.html | 2 +- .../css3-text-line-break-baspglwj-038.html | 2 +- .../css3-text-line-break-baspglwj-039.html | 2 +- .../css3-text-line-break-baspglwj-040.html | 2 +- .../css3-text-line-break-baspglwj-041.html | 2 +- .../css3-text-line-break-baspglwj-042.html | 2 +- .../css3-text-line-break-baspglwj-043.html | 2 +- .../css3-text-line-break-baspglwj-044.html | 2 +- .../css3-text-line-break-baspglwj-045.html | 2 +- .../css3-text-line-break-baspglwj-046.html | 2 +- .../css3-text-line-break-baspglwj-047.html | 2 +- .../css3-text-line-break-baspglwj-048.html | 2 +- .../css3-text-line-break-baspglwj-049.html | 2 +- .../css3-text-line-break-baspglwj-050.html | 2 +- .../css3-text-line-break-baspglwj-051.html | 2 +- .../css3-text-line-break-baspglwj-052.html | 2 +- .../css3-text-line-break-baspglwj-060.html | 2 +- .../css3-text-line-break-baspglwj-061.html | 2 +- .../css3-text-line-break-baspglwj-062.html | 2 +- .../css3-text-line-break-baspglwj-063.html | 2 +- .../css3-text-line-break-baspglwj-064.html | 2 +- .../css3-text-line-break-baspglwj-065.html | 2 +- .../css3-text-line-break-baspglwj-066.html | 2 +- .../css3-text-line-break-baspglwj-067.html | 2 +- .../css3-text-line-break-baspglwj-068.html | 2 +- .../css3-text-line-break-baspglwj-069.html | 2 +- .../css3-text-line-break-baspglwj-070.html | 2 +- .../css3-text-line-break-baspglwj-071.html | 2 +- .../css3-text-line-break-baspglwj-072.html | 2 +- .../css3-text-line-break-baspglwj-073.html | 2 +- .../css3-text-line-break-baspglwj-074.html | 2 +- .../css3-text-line-break-baspglwj-075.html | 2 +- .../css3-text-line-break-baspglwj-076.html | 2 +- .../css3-text-line-break-baspglwj-077.html | 2 +- .../css3-text-line-break-baspglwj-078.html | 2 +- .../css3-text-line-break-baspglwj-080.html | 2 +- .../css3-text-line-break-baspglwj-081.html | 2 +- .../css3-text-line-break-baspglwj-082.html | 2 +- .../css3-text-line-break-baspglwj-083.html | 2 +- .../css3-text-line-break-baspglwj-084.html | 2 +- .../css3-text-line-break-baspglwj-085.html | 2 +- .../css3-text-line-break-baspglwj-086.html | 2 +- .../css3-text-line-break-baspglwj-090.html | 2 +- .../css3-text-line-break-baspglwj-091.html | 2 +- .../css3-text-line-break-baspglwj-092.html | 2 +- .../css3-text-line-break-baspglwj-093.html | 2 +- .../css3-text-line-break-baspglwj-094.html | 2 +- .../css3-text-line-break-baspglwj-095.html | 2 +- .../css3-text-line-break-baspglwj-096.html | 2 +- .../css3-text-line-break-baspglwj-097.html | 2 +- .../css3-text-line-break-baspglwj-098.html | 2 +- .../css3-text-line-break-baspglwj-099.html | 2 +- .../css3-text-line-break-baspglwj-100.html | 2 +- .../css3-text-line-break-baspglwj-101.html | 2 +- .../css3-text-line-break-baspglwj-102.html | 2 +- .../css3-text-line-break-baspglwj-103.html | 2 +- .../css3-text-line-break-baspglwj-104.html | 2 +- .../css3-text-line-break-baspglwj-105.html | 2 +- .../css3-text-line-break-baspglwj-106.html | 2 +- .../css3-text-line-break-baspglwj-107.html | 2 +- .../css3-text-line-break-baspglwj-108.html | 2 +- .../css3-text-line-break-baspglwj-109.html | 2 +- .../css3-text-line-break-baspglwj-110.html | 2 +- .../css3-text-line-break-baspglwj-111.html | 2 +- .../css3-text-line-break-baspglwj-112.html | 2 +- .../css3-text-line-break-baspglwj-113.html | 2 +- .../css3-text-line-break-baspglwj-114.html | 2 +- .../css3-text-line-break-baspglwj-115.html | 2 +- .../css3-text-line-break-baspglwj-116.html | 2 +- .../css3-text-line-break-baspglwj-117.html | 2 +- .../css3-text-line-break-baspglwj-118.html | 2 +- .../css3-text-line-break-baspglwj-120.html | 2 +- .../css3-text-line-break-baspglwj-121.html | 2 +- .../css3-text-line-break-baspglwj-122.html | 2 +- .../css3-text-line-break-baspglwj-123.html | 2 +- .../css3-text-line-break-baspglwj-124.html | 2 +- .../css3-text-line-break-baspglwj-125.html | 2 +- .../css3-text-line-break-baspglwj-126.html | 2 +- .../css3-text-line-break-baspglwj-127.html | 2 +- .../css3-text-line-break-baspglwj-128.html | 2 +- .../css3-text-line-break-baspglwj-130.html | 2 +- .../css3-text-line-break-baspglwj-131.html | 2 +- .../i18n/css3-text-line-break-jazh-001.html | 2 +- .../i18n/css3-text-line-break-jazh-002.html | 2 +- .../i18n/css3-text-line-break-jazh-003.html | 2 +- .../i18n/css3-text-line-break-jazh-004.html | 2 +- .../i18n/css3-text-line-break-jazh-005.html | 2 +- .../i18n/css3-text-line-break-jazh-006.html | 2 +- .../i18n/css3-text-line-break-jazh-007.html | 2 +- .../i18n/css3-text-line-break-jazh-008.html | 2 +- .../i18n/css3-text-line-break-jazh-009.html | 2 +- .../i18n/css3-text-line-break-jazh-010.html | 2 +- .../i18n/css3-text-line-break-jazh-011.html | 2 +- .../i18n/css3-text-line-break-jazh-012.html | 2 +- .../i18n/css3-text-line-break-jazh-013.html | 2 +- .../i18n/css3-text-line-break-jazh-014.html | 2 +- .../i18n/css3-text-line-break-jazh-015.html | 2 +- .../i18n/css3-text-line-break-jazh-016.html | 2 +- .../i18n/css3-text-line-break-jazh-017.html | 2 +- .../i18n/css3-text-line-break-jazh-018.html | 2 +- .../i18n/css3-text-line-break-jazh-019.html | 2 +- .../i18n/css3-text-line-break-jazh-020.html | 2 +- .../i18n/css3-text-line-break-jazh-021.html | 2 +- .../i18n/css3-text-line-break-jazh-022.html | 2 +- .../i18n/css3-text-line-break-jazh-023.html | 2 +- .../i18n/css3-text-line-break-jazh-024.html | 2 +- .../i18n/css3-text-line-break-jazh-025.html | 2 +- .../i18n/css3-text-line-break-jazh-026.html | 2 +- .../i18n/css3-text-line-break-jazh-027.html | 2 +- .../i18n/css3-text-line-break-jazh-028.html | 2 +- .../i18n/css3-text-line-break-jazh-029.html | 2 +- .../i18n/css3-text-line-break-jazh-030.html | 2 +- .../i18n/css3-text-line-break-jazh-031.html | 2 +- .../i18n/css3-text-line-break-jazh-032.html | 2 +- .../i18n/css3-text-line-break-jazh-033.html | 2 +- .../i18n/css3-text-line-break-jazh-034.html | 2 +- .../i18n/css3-text-line-break-jazh-035.html | 2 +- .../i18n/css3-text-line-break-jazh-036.html | 2 +- .../i18n/css3-text-line-break-jazh-037.html | 2 +- .../i18n/css3-text-line-break-jazh-038.html | 2 +- .../i18n/css3-text-line-break-jazh-039.html | 2 +- .../i18n/css3-text-line-break-jazh-040.html | 2 +- .../i18n/css3-text-line-break-jazh-041.html | 2 +- .../i18n/css3-text-line-break-jazh-042.html | 2 +- .../i18n/css3-text-line-break-jazh-043.html | 2 +- .../i18n/css3-text-line-break-jazh-044.html | 2 +- .../i18n/css3-text-line-break-jazh-045.html | 2 +- .../i18n/css3-text-line-break-jazh-046.html | 2 +- .../i18n/css3-text-line-break-jazh-047.html | 2 +- .../i18n/css3-text-line-break-jazh-048.html | 2 +- .../i18n/css3-text-line-break-jazh-049.html | 2 +- .../i18n/css3-text-line-break-jazh-050.html | 2 +- .../i18n/css3-text-line-break-jazh-051.html | 2 +- .../i18n/css3-text-line-break-jazh-052.html | 2 +- .../i18n/css3-text-line-break-jazh-054.html | 2 +- .../i18n/css3-text-line-break-jazh-055.html | 2 +- .../i18n/css3-text-line-break-jazh-056.html | 2 +- .../i18n/css3-text-line-break-jazh-057.html | 2 +- .../i18n/css3-text-line-break-jazh-058.html | 2 +- .../i18n/css3-text-line-break-jazh-059.html | 2 +- .../i18n/css3-text-line-break-jazh-060.html | 2 +- .../i18n/css3-text-line-break-jazh-101.html | 2 +- .../i18n/css3-text-line-break-jazh-102.html | 2 +- .../i18n/css3-text-line-break-jazh-103.html | 2 +- .../i18n/css3-text-line-break-jazh-104.html | 2 +- .../i18n/css3-text-line-break-jazh-105.html | 2 +- .../i18n/css3-text-line-break-jazh-106.html | 2 +- .../i18n/css3-text-line-break-jazh-107.html | 2 +- .../i18n/css3-text-line-break-jazh-108.html | 2 +- .../i18n/css3-text-line-break-jazh-109.html | 2 +- .../i18n/css3-text-line-break-jazh-110.html | 2 +- .../i18n/css3-text-line-break-jazh-111.html | 2 +- .../i18n/css3-text-line-break-jazh-112.html | 2 +- .../i18n/css3-text-line-break-jazh-113.html | 2 +- .../i18n/css3-text-line-break-jazh-114.html | 2 +- .../i18n/css3-text-line-break-jazh-115.html | 2 +- .../i18n/css3-text-line-break-jazh-116.html | 2 +- .../i18n/css3-text-line-break-jazh-117.html | 2 +- .../i18n/css3-text-line-break-jazh-118.html | 2 +- .../i18n/css3-text-line-break-jazh-119.html | 2 +- .../i18n/css3-text-line-break-jazh-120.html | 2 +- .../i18n/css3-text-line-break-jazh-121.html | 2 +- .../i18n/css3-text-line-break-jazh-122.html | 2 +- .../i18n/css3-text-line-break-jazh-123.html | 2 +- .../i18n/css3-text-line-break-jazh-124.html | 2 +- .../i18n/css3-text-line-break-jazh-125.html | 2 +- .../i18n/css3-text-line-break-jazh-126.html | 2 +- .../i18n/css3-text-line-break-jazh-127.html | 2 +- .../i18n/css3-text-line-break-jazh-128.html | 2 +- .../i18n/css3-text-line-break-jazh-129.html | 2 +- .../i18n/css3-text-line-break-jazh-130.html | 2 +- .../i18n/css3-text-line-break-jazh-131.html | 2 +- .../i18n/css3-text-line-break-jazh-132.html | 2 +- .../i18n/css3-text-line-break-jazh-133.html | 2 +- .../i18n/css3-text-line-break-jazh-134.html | 2 +- .../i18n/css3-text-line-break-jazh-135.html | 2 +- .../i18n/css3-text-line-break-jazh-136.html | 2 +- .../i18n/css3-text-line-break-jazh-137.html | 2 +- .../i18n/css3-text-line-break-jazh-138.html | 2 +- .../i18n/css3-text-line-break-jazh-139.html | 2 +- .../i18n/css3-text-line-break-jazh-140.html | 2 +- .../i18n/css3-text-line-break-jazh-141.html | 2 +- .../i18n/css3-text-line-break-jazh-142.html | 2 +- .../i18n/css3-text-line-break-jazh-143.html | 2 +- .../i18n/css3-text-line-break-jazh-144.html | 2 +- .../i18n/css3-text-line-break-jazh-145.html | 2 +- .../i18n/css3-text-line-break-jazh-146.html | 2 +- .../i18n/css3-text-line-break-jazh-147.html | 2 +- .../i18n/css3-text-line-break-jazh-148.html | 2 +- .../i18n/css3-text-line-break-jazh-149.html | 2 +- .../i18n/css3-text-line-break-jazh-150.html | 2 +- .../i18n/css3-text-line-break-jazh-151.html | 2 +- .../i18n/css3-text-line-break-jazh-152.html | 2 +- .../i18n/css3-text-line-break-jazh-154.html | 2 +- .../i18n/css3-text-line-break-jazh-155.html | 2 +- .../i18n/css3-text-line-break-jazh-156.html | 2 +- .../i18n/css3-text-line-break-jazh-157.html | 2 +- .../i18n/css3-text-line-break-jazh-158.html | 2 +- .../i18n/css3-text-line-break-jazh-159.html | 2 +- .../i18n/css3-text-line-break-jazh-160.html | 2 +- .../i18n/css3-text-line-break-jazh-201.html | 2 +- .../i18n/css3-text-line-break-jazh-202.html | 2 +- .../i18n/css3-text-line-break-jazh-203.html | 2 +- .../i18n/css3-text-line-break-jazh-204.html | 2 +- .../i18n/css3-text-line-break-jazh-205.html | 2 +- .../i18n/css3-text-line-break-jazh-206.html | 2 +- .../i18n/css3-text-line-break-jazh-207.html | 2 +- .../i18n/css3-text-line-break-jazh-208.html | 2 +- .../i18n/css3-text-line-break-jazh-209.html | 2 +- .../i18n/css3-text-line-break-jazh-210.html | 2 +- .../i18n/css3-text-line-break-jazh-211.html | 2 +- .../i18n/css3-text-line-break-jazh-212.html | 2 +- .../i18n/css3-text-line-break-jazh-213.html | 2 +- .../i18n/css3-text-line-break-jazh-214.html | 2 +- .../i18n/css3-text-line-break-jazh-215.html | 2 +- .../i18n/css3-text-line-break-jazh-216.html | 2 +- .../i18n/css3-text-line-break-jazh-217.html | 2 +- .../i18n/css3-text-line-break-jazh-218.html | 2 +- .../i18n/css3-text-line-break-jazh-219.html | 2 +- .../i18n/css3-text-line-break-jazh-220.html | 2 +- .../i18n/css3-text-line-break-jazh-221.html | 2 +- .../i18n/css3-text-line-break-jazh-222.html | 2 +- .../i18n/css3-text-line-break-jazh-223.html | 2 +- .../i18n/css3-text-line-break-jazh-224.html | 2 +- .../i18n/css3-text-line-break-jazh-225.html | 2 +- .../i18n/css3-text-line-break-jazh-226.html | 2 +- .../i18n/css3-text-line-break-jazh-227.html | 2 +- .../i18n/css3-text-line-break-jazh-228.html | 2 +- .../i18n/css3-text-line-break-jazh-229.html | 2 +- .../i18n/css3-text-line-break-jazh-230.html | 2 +- .../i18n/css3-text-line-break-jazh-231.html | 2 +- .../i18n/css3-text-line-break-jazh-232.html | 2 +- .../i18n/css3-text-line-break-jazh-233.html | 2 +- .../i18n/css3-text-line-break-jazh-234.html | 2 +- .../i18n/css3-text-line-break-jazh-235.html | 2 +- .../i18n/css3-text-line-break-jazh-236.html | 2 +- .../i18n/css3-text-line-break-jazh-237.html | 2 +- .../i18n/css3-text-line-break-jazh-238.html | 2 +- .../i18n/css3-text-line-break-jazh-239.html | 2 +- .../i18n/css3-text-line-break-jazh-240.html | 2 +- .../i18n/css3-text-line-break-jazh-241.html | 2 +- .../i18n/css3-text-line-break-jazh-242.html | 2 +- .../i18n/css3-text-line-break-jazh-243.html | 2 +- .../i18n/css3-text-line-break-jazh-244.html | 2 +- .../i18n/css3-text-line-break-jazh-245.html | 2 +- .../i18n/css3-text-line-break-jazh-246.html | 2 +- .../i18n/css3-text-line-break-jazh-247.html | 2 +- .../i18n/css3-text-line-break-jazh-248.html | 2 +- .../i18n/css3-text-line-break-jazh-249.html | 2 +- .../i18n/css3-text-line-break-jazh-250.html | 2 +- .../i18n/css3-text-line-break-jazh-251.html | 2 +- .../i18n/css3-text-line-break-jazh-252.html | 2 +- .../i18n/css3-text-line-break-jazh-254.html | 2 +- .../i18n/css3-text-line-break-jazh-255.html | 2 +- .../i18n/css3-text-line-break-jazh-256.html | 2 +- .../i18n/css3-text-line-break-jazh-257.html | 2 +- .../i18n/css3-text-line-break-jazh-258.html | 2 +- .../i18n/css3-text-line-break-jazh-259.html | 2 +- .../i18n/css3-text-line-break-jazh-260.html | 2 +- .../i18n/css3-text-line-break-jazh-301.html | 2 +- .../i18n/css3-text-line-break-jazh-302.html | 2 +- .../i18n/css3-text-line-break-jazh-303.html | 2 +- .../i18n/css3-text-line-break-jazh-304.html | 2 +- .../i18n/css3-text-line-break-jazh-305.html | 2 +- .../i18n/css3-text-line-break-jazh-306.html | 2 +- .../i18n/css3-text-line-break-jazh-307.html | 2 +- .../i18n/css3-text-line-break-jazh-308.html | 2 +- .../i18n/css3-text-line-break-jazh-309.html | 2 +- .../i18n/css3-text-line-break-jazh-310.html | 2 +- .../i18n/css3-text-line-break-jazh-311.html | 2 +- .../i18n/css3-text-line-break-jazh-312.html | 2 +- .../i18n/css3-text-line-break-jazh-313.html | 2 +- .../i18n/css3-text-line-break-jazh-314.html | 2 +- .../i18n/css3-text-line-break-jazh-315.html | 2 +- .../i18n/css3-text-line-break-jazh-316.html | 2 +- .../i18n/css3-text-line-break-jazh-317.html | 2 +- .../i18n/css3-text-line-break-jazh-318.html | 2 +- .../i18n/css3-text-line-break-jazh-319.html | 2 +- .../i18n/css3-text-line-break-jazh-320.html | 2 +- .../i18n/css3-text-line-break-jazh-321.html | 2 +- .../i18n/css3-text-line-break-jazh-322.html | 2 +- .../i18n/css3-text-line-break-jazh-323.html | 2 +- .../i18n/css3-text-line-break-jazh-324.html | 2 +- .../i18n/css3-text-line-break-jazh-325.html | 2 +- .../i18n/css3-text-line-break-jazh-326.html | 2 +- .../i18n/css3-text-line-break-jazh-327.html | 2 +- .../i18n/css3-text-line-break-jazh-351.html | 2 +- .../i18n/css3-text-line-break-jazh-352.html | 2 +- .../i18n/css3-text-line-break-jazh-353.html | 2 +- .../i18n/css3-text-line-break-jazh-354.html | 2 +- .../i18n/css3-text-line-break-jazh-355.html | 2 +- .../i18n/css3-text-line-break-jazh-356.html | 2 +- .../i18n/css3-text-line-break-jazh-357.html | 2 +- .../i18n/css3-text-line-break-jazh-358.html | 2 +- .../i18n/css3-text-line-break-jazh-359.html | 2 +- .../i18n/css3-text-line-break-jazh-360.html | 2 +- .../i18n/css3-text-line-break-jazh-361.html | 2 +- .../i18n/css3-text-line-break-jazh-362.html | 2 +- .../i18n/css3-text-line-break-jazh-363.html | 2 +- .../i18n/css3-text-line-break-jazh-364.html | 2 +- .../i18n/css3-text-line-break-jazh-365.html | 2 +- .../i18n/css3-text-line-break-jazh-366.html | 2 +- .../i18n/css3-text-line-break-jazh-367.html | 2 +- .../i18n/css3-text-line-break-jazh-368.html | 2 +- .../i18n/css3-text-line-break-jazh-369.html | 2 +- .../i18n/css3-text-line-break-jazh-370.html | 2 +- .../i18n/css3-text-line-break-jazh-371.html | 2 +- .../i18n/css3-text-line-break-jazh-372.html | 2 +- .../i18n/css3-text-line-break-jazh-373.html | 2 +- .../i18n/css3-text-line-break-jazh-374.html | 2 +- .../i18n/css3-text-line-break-jazh-375.html | 2 +- .../i18n/css3-text-line-break-jazh-376.html | 2 +- .../i18n/css3-text-line-break-jazh-377.html | 2 +- .../i18n/css3-text-line-break-jazh-401.html | 2 +- .../i18n/css3-text-line-break-jazh-402.html | 2 +- .../i18n/css3-text-line-break-jazh-403.html | 2 +- .../i18n/css3-text-line-break-jazh-404.html | 2 +- .../i18n/css3-text-line-break-jazh-405.html | 2 +- .../i18n/css3-text-line-break-jazh-406.html | 2 +- .../i18n/css3-text-line-break-jazh-407.html | 2 +- .../i18n/css3-text-line-break-jazh-408.html | 2 +- .../i18n/css3-text-line-break-jazh-409.html | 2 +- .../i18n/css3-text-line-break-jazh-410.html | 2 +- .../i18n/css3-text-line-break-jazh-411.html | 2 +- .../i18n/css3-text-line-break-jazh-412.html | 2 +- .../i18n/css3-text-line-break-jazh-413.html | 2 +- .../i18n/css3-text-line-break-jazh-414.html | 2 +- .../i18n/css3-text-line-break-jazh-415.html | 2 +- .../i18n/css3-text-line-break-jazh-416.html | 2 +- .../i18n/css3-text-line-break-jazh-417.html | 2 +- .../i18n/css3-text-line-break-jazh-418.html | 2 +- .../i18n/css3-text-line-break-jazh-419.html | 2 +- .../i18n/css3-text-line-break-jazh-420.html | 2 +- .../i18n/css3-text-line-break-jazh-421.html | 2 +- .../i18n/css3-text-line-break-jazh-422.html | 2 +- .../i18n/css3-text-line-break-jazh-423.html | 2 +- .../i18n/css3-text-line-break-jazh-424.html | 2 +- .../i18n/css3-text-line-break-jazh-425.html | 2 +- .../i18n/css3-text-line-break-jazh-426.html | 2 +- .../i18n/css3-text-line-break-jazh-427.html | 2 +- .../i18n/css3-text-line-break-opclns-001.html | 2 +- .../i18n/css3-text-line-break-opclns-002.html | 2 +- .../i18n/css3-text-line-break-opclns-003.html | 2 +- .../i18n/css3-text-line-break-opclns-004.html | 2 +- .../i18n/css3-text-line-break-opclns-005.html | 2 +- .../i18n/css3-text-line-break-opclns-006.html | 2 +- .../i18n/css3-text-line-break-opclns-007.html | 2 +- .../i18n/css3-text-line-break-opclns-008.html | 2 +- .../i18n/css3-text-line-break-opclns-009.html | 2 +- .../i18n/css3-text-line-break-opclns-010.html | 2 +- .../i18n/css3-text-line-break-opclns-011.html | 2 +- .../i18n/css3-text-line-break-opclns-012.html | 2 +- .../i18n/css3-text-line-break-opclns-013.html | 2 +- .../i18n/css3-text-line-break-opclns-014.html | 2 +- .../i18n/css3-text-line-break-opclns-015.html | 2 +- .../i18n/css3-text-line-break-opclns-016.html | 2 +- .../i18n/css3-text-line-break-opclns-017.html | 2 +- .../i18n/css3-text-line-break-opclns-018.html | 2 +- .../i18n/css3-text-line-break-opclns-019.html | 2 +- .../i18n/css3-text-line-break-opclns-020.html | 2 +- .../i18n/css3-text-line-break-opclns-021.html | 2 +- .../i18n/css3-text-line-break-opclns-022.html | 2 +- .../i18n/css3-text-line-break-opclns-023.html | 2 +- .../i18n/css3-text-line-break-opclns-024.html | 2 +- .../i18n/css3-text-line-break-opclns-025.html | 2 +- .../i18n/css3-text-line-break-opclns-026.html | 2 +- .../i18n/css3-text-line-break-opclns-027.html | 2 +- .../i18n/css3-text-line-break-opclns-028.html | 2 +- .../i18n/css3-text-line-break-opclns-029.html | 2 +- .../i18n/css3-text-line-break-opclns-030.html | 2 +- .../i18n/css3-text-line-break-opclns-031.html | 2 +- .../i18n/css3-text-line-break-opclns-032.html | 2 +- .../i18n/css3-text-line-break-opclns-033.html | 2 +- .../i18n/css3-text-line-break-opclns-034.html | 2 +- .../i18n/css3-text-line-break-opclns-035.html | 2 +- .../i18n/css3-text-line-break-opclns-036.html | 2 +- .../i18n/css3-text-line-break-opclns-037.html | 2 +- .../i18n/css3-text-line-break-opclns-038.html | 2 +- .../i18n/css3-text-line-break-opclns-039.html | 2 +- .../i18n/css3-text-line-break-opclns-040.html | 2 +- .../i18n/css3-text-line-break-opclns-041.html | 2 +- .../i18n/css3-text-line-break-opclns-042.html | 2 +- .../i18n/css3-text-line-break-opclns-043.html | 2 +- .../i18n/css3-text-line-break-opclns-044.html | 2 +- .../i18n/css3-text-line-break-opclns-045.html | 2 +- .../i18n/css3-text-line-break-opclns-046.html | 2 +- .../i18n/css3-text-line-break-opclns-047.html | 2 +- .../i18n/css3-text-line-break-opclns-048.html | 2 +- .../i18n/css3-text-line-break-opclns-049.html | 2 +- .../i18n/css3-text-line-break-opclns-050.html | 2 +- .../i18n/css3-text-line-break-opclns-051.html | 2 +- .../i18n/css3-text-line-break-opclns-052.html | 2 +- .../i18n/css3-text-line-break-opclns-053.html | 2 +- .../i18n/css3-text-line-break-opclns-054.html | 2 +- .../i18n/css3-text-line-break-opclns-055.html | 2 +- .../i18n/css3-text-line-break-opclns-056.html | 2 +- .../i18n/css3-text-line-break-opclns-057.html | 2 +- .../i18n/css3-text-line-break-opclns-058.html | 2 +- .../i18n/css3-text-line-break-opclns-059.html | 2 +- .../i18n/css3-text-line-break-opclns-060.html | 2 +- .../i18n/css3-text-line-break-opclns-061.html | 2 +- .../i18n/css3-text-line-break-opclns-062.html | 2 +- .../i18n/css3-text-line-break-opclns-063.html | 2 +- .../i18n/css3-text-line-break-opclns-064.html | 2 +- .../i18n/css3-text-line-break-opclns-065.html | 2 +- .../i18n/css3-text-line-break-opclns-100.html | 2 +- .../i18n/css3-text-line-break-opclns-101.html | 2 +- .../i18n/css3-text-line-break-opclns-102.html | 2 +- .../i18n/css3-text-line-break-opclns-103.html | 2 +- .../i18n/css3-text-line-break-opclns-104.html | 2 +- .../i18n/css3-text-line-break-opclns-105.html | 2 +- .../i18n/css3-text-line-break-opclns-106.html | 2 +- .../i18n/css3-text-line-break-opclns-107.html | 2 +- .../i18n/css3-text-line-break-opclns-108.html | 2 +- .../i18n/css3-text-line-break-opclns-109.html | 2 +- .../i18n/css3-text-line-break-opclns-110.html | 2 +- .../i18n/css3-text-line-break-opclns-111.html | 2 +- .../i18n/css3-text-line-break-opclns-112.html | 2 +- .../i18n/css3-text-line-break-opclns-113.html | 2 +- .../i18n/css3-text-line-break-opclns-114.html | 2 +- .../i18n/css3-text-line-break-opclns-115.html | 2 +- .../i18n/css3-text-line-break-opclns-116.html | 2 +- .../i18n/css3-text-line-break-opclns-117.html | 2 +- .../i18n/css3-text-line-break-opclns-118.html | 2 +- .../i18n/css3-text-line-break-opclns-119.html | 2 +- .../i18n/css3-text-line-break-opclns-120.html | 2 +- .../i18n/css3-text-line-break-opclns-121.html | 2 +- .../i18n/css3-text-line-break-opclns-122.html | 2 +- .../i18n/css3-text-line-break-opclns-123.html | 2 +- .../i18n/css3-text-line-break-opclns-124.html | 2 +- .../i18n/css3-text-line-break-opclns-125.html | 2 +- .../i18n/css3-text-line-break-opclns-126.html | 2 +- .../i18n/css3-text-line-break-opclns-127.html | 2 +- .../i18n/css3-text-line-break-opclns-128.html | 2 +- .../i18n/css3-text-line-break-opclns-129.html | 2 +- .../i18n/css3-text-line-break-opclns-130.html | 2 +- .../i18n/css3-text-line-break-opclns-131.html | 2 +- .../i18n/css3-text-line-break-opclns-132.html | 2 +- .../i18n/css3-text-line-break-opclns-133.html | 2 +- .../i18n/css3-text-line-break-opclns-134.html | 2 +- .../i18n/css3-text-line-break-opclns-135.html | 2 +- .../i18n/css3-text-line-break-opclns-136.html | 2 +- .../i18n/css3-text-line-break-opclns-137.html | 2 +- .../i18n/css3-text-line-break-opclns-138.html | 2 +- .../i18n/css3-text-line-break-opclns-139.html | 2 +- .../i18n/css3-text-line-break-opclns-140.html | 2 +- .../i18n/css3-text-line-break-opclns-141.html | 2 +- .../i18n/css3-text-line-break-opclns-142.html | 2 +- .../i18n/css3-text-line-break-opclns-143.html | 2 +- .../i18n/css3-text-line-break-opclns-144.html | 2 +- .../i18n/css3-text-line-break-opclns-145.html | 2 +- .../i18n/css3-text-line-break-opclns-146.html | 2 +- .../i18n/css3-text-line-break-opclns-147.html | 2 +- .../i18n/css3-text-line-break-opclns-148.html | 2 +- .../i18n/css3-text-line-break-opclns-149.html | 2 +- .../i18n/css3-text-line-break-opclns-150.html | 2 +- .../i18n/css3-text-line-break-opclns-151.html | 2 +- .../i18n/css3-text-line-break-opclns-152.html | 2 +- .../i18n/css3-text-line-break-opclns-153.html | 2 +- .../i18n/css3-text-line-break-opclns-154.html | 2 +- .../i18n/css3-text-line-break-opclns-155.html | 2 +- .../i18n/css3-text-line-break-opclns-156.html | 2 +- .../i18n/css3-text-line-break-opclns-157.html | 2 +- .../i18n/css3-text-line-break-opclns-158.html | 2 +- .../i18n/css3-text-line-break-opclns-159.html | 2 +- .../i18n/css3-text-line-break-opclns-160.html | 2 +- .../i18n/css3-text-line-break-opclns-161.html | 2 +- .../i18n/css3-text-line-break-opclns-162.html | 2 +- .../i18n/css3-text-line-break-opclns-163.html | 2 +- .../i18n/css3-text-line-break-opclns-164.html | 2 +- .../i18n/css3-text-line-break-opclns-165.html | 2 +- .../i18n/css3-text-line-break-opclns-166.html | 2 +- .../i18n/css3-text-line-break-opclns-167.html | 2 +- .../i18n/css3-text-line-break-opclns-168.html | 2 +- .../i18n/css3-text-line-break-opclns-169.html | 2 +- .../i18n/css3-text-line-break-opclns-170.html | 2 +- .../i18n/css3-text-line-break-opclns-171.html | 2 +- .../i18n/css3-text-line-break-opclns-200.html | 2 +- .../i18n/css3-text-line-break-opclns-201.html | 2 +- .../i18n/css3-text-line-break-opclns-202.html | 2 +- .../i18n/css3-text-line-break-opclns-203.html | 2 +- .../i18n/css3-text-line-break-opclns-204.html | 2 +- .../i18n/css3-text-line-break-opclns-205.html | 2 +- .../i18n/css3-text-line-break-opclns-206.html | 2 +- .../i18n/css3-text-line-break-opclns-207.html | 2 +- .../i18n/css3-text-line-break-opclns-208.html | 2 +- .../i18n/css3-text-line-break-opclns-209.html | 2 +- .../i18n/css3-text-line-break-opclns-210.html | 2 +- .../i18n/css3-text-line-break-opclns-211.html | 2 +- .../i18n/css3-text-line-break-opclns-212.html | 2 +- .../i18n/css3-text-line-break-opclns-213.html | 2 +- .../i18n/css3-text-line-break-opclns-214.html | 2 +- .../i18n/css3-text-line-break-opclns-215.html | 2 +- .../i18n/css3-text-line-break-opclns-216.html | 2 +- .../i18n/css3-text-line-break-opclns-217.html | 2 +- .../i18n/css3-text-line-break-opclns-218.html | 2 +- .../i18n/css3-text-line-break-opclns-219.html | 2 +- .../i18n/css3-text-line-break-opclns-220.html | 2 +- .../i18n/css3-text-line-break-opclns-221.html | 2 +- .../i18n/css3-text-line-break-opclns-222.html | 2 +- .../i18n/css3-text-line-break-opclns-223.html | 2 +- .../i18n/css3-text-line-break-opclns-224.html | 2 +- .../i18n/css3-text-line-break-opclns-225.html | 2 +- .../i18n/css3-text-line-break-opclns-226.html | 2 +- .../i18n/css3-text-line-break-opclns-250.html | 2 +- .../i18n/css3-text-line-break-opclns-251.html | 2 +- .../i18n/css3-text-line-break-opclns-252.html | 2 +- .../i18n/css3-text-line-break-opclns-253.html | 2 +- .../i18n/css3-text-line-break-opclns-254.html | 2 +- .../i18n/css3-text-line-break-opclns-255.html | 2 +- .../i18n/css3-text-line-break-opclns-256.html | 2 +- .../i18n/css3-text-line-break-opclns-257.html | 2 +- .../i18n/css3-text-line-break-opclns-258.html | 2 +- .../i18n/css3-text-line-break-opclns-259.html | 2 +- .../i18n/css3-text-line-break-opclns-260.html | 2 +- .../i18n/css3-text-line-break-opclns-261.html | 2 +- .../i18n/css3-text-line-break-opclns-262.html | 2 +- .../i18n/css3-text-line-break-opclns-263.html | 2 +- .../i18n/css3-text-line-break-opclns-264.html | 2 +- .../i18n/css3-text-line-break-opclns-265.html | 2 +- .../i18n/css3-text-line-break-opclns-266.html | 2 +- .../i18n/css3-text-line-break-opclns-267.html | 2 +- .../i18n/css3-text-line-break-opclns-268.html | 2 +- .../i18n/css3-text-line-break-opclns-269.html | 2 +- .../css3-text-line-break-jazh-001-ref.html | 2 +- .../css3-text-line-break-jazh-002-ref.html | 2 +- .../css3-text-line-break-jazh-003-ref.html | 2 +- .../css3-text-line-break-jazh-004-ref.html | 2 +- .../css3-text-line-break-jazh-005-ref.html | 2 +- .../css3-text-line-break-jazh-006-ref.html | 2 +- .../css3-text-line-break-jazh-007-ref.html | 2 +- .../css3-text-line-break-jazh-008-ref.html | 2 +- .../css3-text-line-break-jazh-009-ref.html | 2 +- .../css3-text-line-break-jazh-010-ref.html | 2 +- .../css3-text-line-break-jazh-011-ref.html | 2 +- .../css3-text-line-break-jazh-012-ref.html | 2 +- .../css3-text-line-break-jazh-013-ref.html | 2 +- .../css3-text-line-break-jazh-014-ref.html | 2 +- .../css3-text-line-break-jazh-015-ref.html | 2 +- .../css3-text-line-break-jazh-016-ref.html | 2 +- .../css3-text-line-break-jazh-017-ref.html | 2 +- .../css3-text-line-break-jazh-018-ref.html | 2 +- .../css3-text-line-break-jazh-019-ref.html | 2 +- .../css3-text-line-break-jazh-020-ref.html | 2 +- .../css3-text-line-break-jazh-021-ref.html | 2 +- .../css3-text-line-break-jazh-022-ref.html | 2 +- .../css3-text-line-break-jazh-023-ref.html | 2 +- .../css3-text-line-break-jazh-024-ref.html | 2 +- .../css3-text-line-break-jazh-025-ref.html | 2 +- .../css3-text-line-break-jazh-026-ref.html | 2 +- .../css3-text-line-break-jazh-027-ref.html | 2 +- .../css3-text-line-break-jazh-028-ref.html | 2 +- .../css3-text-line-break-jazh-029-ref.html | 2 +- .../css3-text-line-break-jazh-030-ref.html | 2 +- .../css3-text-line-break-jazh-031-ref.html | 2 +- .../css3-text-line-break-jazh-032-ref.html | 2 +- .../css3-text-line-break-jazh-033-ref.html | 2 +- .../css3-text-line-break-jazh-034-ref.html | 2 +- .../css3-text-line-break-jazh-035-ref.html | 2 +- .../css3-text-line-break-jazh-036-ref.html | 2 +- .../css3-text-line-break-jazh-037-ref.html | 2 +- .../css3-text-line-break-jazh-038-ref.html | 2 +- .../css3-text-line-break-jazh-039-ref.html | 2 +- .../css3-text-line-break-jazh-040-ref.html | 2 +- .../css3-text-line-break-jazh-041-ref.html | 2 +- .../css3-text-line-break-jazh-042-ref.html | 2 +- .../css3-text-line-break-jazh-043-ref.html | 2 +- .../css3-text-line-break-jazh-044-ref.html | 2 +- .../css3-text-line-break-jazh-045-ref.html | 2 +- .../css3-text-line-break-jazh-046-ref.html | 2 +- .../css3-text-line-break-jazh-047-ref.html | 2 +- .../css3-text-line-break-jazh-048-ref.html | 2 +- .../css3-text-line-break-jazh-049-ref.html | 2 +- .../css3-text-line-break-jazh-050-ref.html | 2 +- .../css3-text-line-break-jazh-051-ref.html | 2 +- .../css3-text-line-break-jazh-052-ref.html | 2 +- .../css3-text-line-break-jazh-054-ref.html | 2 +- .../css3-text-line-break-jazh-055-ref.html | 2 +- .../css3-text-line-break-jazh-056-ref.html | 2 +- .../css3-text-line-break-jazh-057-ref.html | 2 +- .../css3-text-line-break-jazh-058-ref.html | 2 +- .../css3-text-line-break-jazh-059-ref.html | 2 +- .../css3-text-line-break-jazh-060-ref.html | 2 +- .../css3-text-line-break-jazh-101-ref.html | 2 +- .../css3-text-line-break-jazh-102-ref.html | 2 +- .../css3-text-line-break-jazh-103-ref.html | 2 +- .../css3-text-line-break-jazh-104-ref.html | 2 +- .../css3-text-line-break-jazh-105-ref.html | 2 +- .../css3-text-line-break-jazh-106-ref.html | 2 +- .../css3-text-line-break-jazh-107-ref.html | 2 +- .../css3-text-line-break-jazh-108-ref.html | 2 +- .../css3-text-line-break-jazh-109-ref.html | 2 +- .../css3-text-line-break-jazh-110-ref.html | 2 +- .../css3-text-line-break-jazh-111-ref.html | 2 +- .../css3-text-line-break-jazh-112-ref.html | 2 +- .../css3-text-line-break-jazh-113-ref.html | 2 +- .../css3-text-line-break-jazh-114-ref.html | 2 +- .../css3-text-line-break-jazh-115-ref.html | 2 +- .../css3-text-line-break-jazh-116-ref.html | 2 +- .../css3-text-line-break-jazh-117-ref.html | 2 +- .../css3-text-line-break-jazh-118-ref.html | 2 +- .../css3-text-line-break-jazh-119-ref.html | 2 +- .../css3-text-line-break-jazh-120-ref.html | 2 +- .../css3-text-line-break-jazh-121-ref.html | 2 +- .../css3-text-line-break-jazh-122-ref.html | 2 +- .../css3-text-line-break-jazh-123-ref.html | 2 +- .../css3-text-line-break-jazh-124-ref.html | 2 +- .../css3-text-line-break-jazh-125-ref.html | 2 +- .../css3-text-line-break-jazh-126-ref.html | 2 +- .../css3-text-line-break-jazh-127-ref.html | 2 +- .../css3-text-line-break-jazh-128-ref.html | 2 +- .../css3-text-line-break-jazh-129-ref.html | 2 +- .../css3-text-line-break-jazh-130-ref.html | 2 +- .../css3-text-line-break-jazh-131-ref.html | 2 +- .../css3-text-line-break-jazh-132-ref.html | 2 +- .../css3-text-line-break-jazh-133-ref.html | 2 +- .../css3-text-line-break-jazh-134-ref.html | 2 +- .../css3-text-line-break-jazh-135-ref.html | 2 +- .../css3-text-line-break-jazh-136-ref.html | 2 +- .../css3-text-line-break-jazh-137-ref.html | 2 +- .../css3-text-line-break-jazh-138-ref.html | 2 +- .../css3-text-line-break-jazh-139-ref.html | 2 +- .../css3-text-line-break-jazh-140-ref.html | 2 +- .../css3-text-line-break-jazh-141-ref.html | 2 +- .../css3-text-line-break-jazh-142-ref.html | 2 +- .../css3-text-line-break-jazh-143-ref.html | 2 +- .../css3-text-line-break-jazh-144-ref.html | 2 +- .../css3-text-line-break-jazh-145-ref.html | 2 +- .../css3-text-line-break-jazh-146-ref.html | 2 +- .../css3-text-line-break-jazh-147-ref.html | 2 +- .../css3-text-line-break-jazh-148-ref.html | 2 +- .../css3-text-line-break-jazh-149-ref.html | 2 +- .../css3-text-line-break-jazh-150-ref.html | 2 +- .../css3-text-line-break-jazh-151-ref.html | 2 +- .../css3-text-line-break-jazh-152-ref.html | 2 +- .../css3-text-line-break-jazh-154-ref.html | 2 +- .../css3-text-line-break-jazh-155-ref.html | 2 +- .../css3-text-line-break-jazh-156-ref.html | 2 +- .../css3-text-line-break-jazh-157-ref.html | 2 +- .../css3-text-line-break-jazh-158-ref.html | 2 +- .../css3-text-line-break-jazh-159-ref.html | 2 +- .../css3-text-line-break-jazh-160-ref.html | 2 +- .../css3-text-line-break-jazh-201-ref.html | 2 +- .../css3-text-line-break-jazh-202-ref.html | 2 +- .../css3-text-line-break-jazh-203-ref.html | 2 +- .../css3-text-line-break-jazh-204-ref.html | 2 +- .../css3-text-line-break-jazh-205-ref.html | 2 +- .../css3-text-line-break-jazh-206-ref.html | 2 +- .../css3-text-line-break-jazh-207-ref.html | 2 +- .../css3-text-line-break-jazh-208-ref.html | 2 +- .../css3-text-line-break-jazh-209-ref.html | 2 +- .../css3-text-line-break-jazh-210-ref.html | 2 +- .../css3-text-line-break-jazh-211-ref.html | 2 +- .../css3-text-line-break-jazh-212-ref.html | 2 +- .../css3-text-line-break-jazh-213-ref.html | 2 +- .../css3-text-line-break-jazh-214-ref.html | 2 +- .../css3-text-line-break-jazh-215-ref.html | 2 +- .../css3-text-line-break-jazh-216-ref.html | 2 +- .../css3-text-line-break-jazh-217-ref.html | 2 +- .../css3-text-line-break-jazh-218-ref.html | 2 +- .../css3-text-line-break-jazh-219-ref.html | 2 +- .../css3-text-line-break-jazh-220-ref.html | 2 +- .../css3-text-line-break-jazh-221-ref.html | 2 +- .../css3-text-line-break-jazh-222-ref.html | 2 +- .../css3-text-line-break-jazh-223-ref.html | 2 +- .../css3-text-line-break-jazh-224-ref.html | 2 +- .../css3-text-line-break-jazh-225-ref.html | 2 +- .../css3-text-line-break-jazh-226-ref.html | 2 +- .../css3-text-line-break-jazh-227-ref.html | 2 +- .../css3-text-line-break-jazh-228-ref.html | 2 +- .../css3-text-line-break-jazh-229-ref.html | 2 +- .../css3-text-line-break-jazh-230-ref.html | 2 +- .../css3-text-line-break-jazh-231-ref.html | 2 +- .../css3-text-line-break-jazh-232-ref.html | 2 +- .../css3-text-line-break-jazh-233-ref.html | 2 +- .../css3-text-line-break-jazh-234-ref.html | 2 +- .../css3-text-line-break-jazh-235-ref.html | 2 +- .../css3-text-line-break-jazh-236-ref.html | 2 +- .../css3-text-line-break-jazh-237-ref.html | 2 +- .../css3-text-line-break-jazh-238-ref.html | 2 +- .../css3-text-line-break-jazh-239-ref.html | 2 +- .../css3-text-line-break-jazh-240-ref.html | 2 +- .../css3-text-line-break-jazh-241-ref.html | 2 +- .../css3-text-line-break-jazh-242-ref.html | 2 +- .../css3-text-line-break-jazh-243-ref.html | 2 +- .../css3-text-line-break-jazh-244-ref.html | 2 +- .../css3-text-line-break-jazh-245-ref.html | 2 +- .../css3-text-line-break-jazh-246-ref.html | 2 +- .../css3-text-line-break-jazh-247-ref.html | 2 +- .../css3-text-line-break-jazh-248-ref.html | 2 +- .../css3-text-line-break-jazh-249-ref.html | 2 +- .../css3-text-line-break-jazh-250-ref.html | 2 +- .../css3-text-line-break-jazh-251-ref.html | 2 +- .../css3-text-line-break-jazh-252-ref.html | 2 +- .../css3-text-line-break-jazh-254-ref.html | 2 +- .../css3-text-line-break-jazh-255-ref.html | 2 +- .../css3-text-line-break-jazh-256-ref.html | 2 +- .../css3-text-line-break-jazh-257-ref.html | 2 +- .../css3-text-line-break-jazh-258-ref.html | 2 +- .../css3-text-line-break-jazh-259-ref.html | 2 +- .../css3-text-line-break-jazh-260-ref.html | 2 +- .../css3-text-line-break-jazh-301-ref.html | 2 +- .../css3-text-line-break-jazh-302-ref.html | 2 +- .../css3-text-line-break-jazh-303-ref.html | 2 +- .../css3-text-line-break-jazh-304-ref.html | 2 +- .../css3-text-line-break-jazh-305-ref.html | 2 +- .../css3-text-line-break-jazh-306-ref.html | 2 +- .../css3-text-line-break-jazh-307-ref.html | 2 +- .../css3-text-line-break-jazh-308-ref.html | 2 +- .../css3-text-line-break-jazh-309-ref.html | 2 +- .../css3-text-line-break-jazh-310-ref.html | 2 +- .../css3-text-line-break-jazh-311-ref.html | 2 +- .../css3-text-line-break-jazh-312-ref.html | 2 +- .../css3-text-line-break-jazh-313-ref.html | 2 +- .../css3-text-line-break-jazh-314-ref.html | 2 +- .../css3-text-line-break-jazh-315-ref.html | 2 +- .../css3-text-line-break-jazh-316-ref.html | 2 +- .../css3-text-line-break-jazh-317-ref.html | 2 +- .../css3-text-line-break-jazh-318-ref.html | 2 +- .../css3-text-line-break-jazh-319-ref.html | 2 +- .../css3-text-line-break-jazh-320-ref.html | 2 +- .../css3-text-line-break-jazh-321-ref.html | 2 +- .../css3-text-line-break-jazh-322-ref.html | 2 +- .../css3-text-line-break-jazh-323-ref.html | 2 +- .../css3-text-line-break-jazh-324-ref.html | 2 +- .../css3-text-line-break-jazh-325-ref.html | 2 +- .../css3-text-line-break-jazh-326-ref.html | 2 +- .../css3-text-line-break-jazh-327-ref.html | 2 +- .../css3-text-line-break-jazh-351-ref.html | 2 +- .../css3-text-line-break-jazh-352-ref.html | 2 +- .../css3-text-line-break-jazh-353-ref.html | 2 +- .../css3-text-line-break-jazh-354-ref.html | 2 +- .../css3-text-line-break-jazh-355-ref.html | 2 +- .../css3-text-line-break-jazh-356-ref.html | 2 +- .../css3-text-line-break-jazh-357-ref.html | 2 +- .../css3-text-line-break-jazh-358-ref.html | 2 +- .../css3-text-line-break-jazh-359-ref.html | 2 +- .../css3-text-line-break-jazh-360-ref.html | 2 +- .../css3-text-line-break-jazh-361-ref.html | 2 +- .../css3-text-line-break-jazh-362-ref.html | 2 +- .../css3-text-line-break-jazh-363-ref.html | 2 +- .../css3-text-line-break-jazh-364-ref.html | 2 +- .../css3-text-line-break-jazh-365-ref.html | 2 +- .../css3-text-line-break-jazh-366-ref.html | 2 +- .../css3-text-line-break-jazh-367-ref.html | 2 +- .../css3-text-line-break-jazh-368-ref.html | 2 +- .../css3-text-line-break-jazh-369-ref.html | 2 +- .../css3-text-line-break-jazh-370-ref.html | 2 +- .../css3-text-line-break-jazh-371-ref.html | 2 +- .../css3-text-line-break-jazh-372-ref.html | 2 +- .../css3-text-line-break-jazh-373-ref.html | 2 +- .../css3-text-line-break-jazh-374-ref.html | 2 +- .../css3-text-line-break-jazh-375-ref.html | 2 +- .../css3-text-line-break-jazh-376-ref.html | 2 +- .../css3-text-line-break-jazh-377-ref.html | 2 +- .../css3-text-line-break-jazh-401-ref.html | 2 +- .../css3-text-line-break-jazh-402-ref.html | 2 +- .../css3-text-line-break-jazh-403-ref.html | 2 +- .../css3-text-line-break-jazh-404-ref.html | 2 +- .../css3-text-line-break-jazh-405-ref.html | 2 +- .../css3-text-line-break-jazh-406-ref.html | 2 +- .../css3-text-line-break-jazh-407-ref.html | 2 +- .../css3-text-line-break-jazh-408-ref.html | 2 +- .../css3-text-line-break-jazh-409-ref.html | 2 +- .../css3-text-line-break-jazh-410-ref.html | 2 +- .../css3-text-line-break-jazh-411-ref.html | 2 +- .../css3-text-line-break-jazh-412-ref.html | 2 +- .../css3-text-line-break-jazh-413-ref.html | 2 +- .../css3-text-line-break-jazh-414-ref.html | 2 +- .../css3-text-line-break-jazh-415-ref.html | 2 +- .../css3-text-line-break-jazh-416-ref.html | 2 +- .../css3-text-line-break-jazh-417-ref.html | 2 +- .../css3-text-line-break-jazh-418-ref.html | 2 +- .../css3-text-line-break-jazh-419-ref.html | 2 +- .../css3-text-line-break-jazh-420-ref.html | 2 +- .../css3-text-line-break-jazh-421-ref.html | 2 +- .../css3-text-line-break-jazh-422-ref.html | 2 +- .../css3-text-line-break-jazh-423-ref.html | 2 +- .../css3-text-line-break-jazh-424-ref.html | 2 +- .../css3-text-line-break-jazh-425-ref.html | 2 +- .../css3-text-line-break-jazh-426-ref.html | 2 +- .../css3-text-line-break-jazh-427-ref.html | 2 +- .../css3-text-line-break-opclns-001-ref.html | 2 +- .../css3-text-line-break-opclns-002-ref.html | 2 +- .../css3-text-line-break-opclns-003-ref.html | 2 +- .../css3-text-line-break-opclns-004-ref.html | 2 +- .../css3-text-line-break-opclns-005-ref.html | 2 +- .../css3-text-line-break-opclns-006-ref.html | 2 +- .../css3-text-line-break-opclns-007-ref.html | 2 +- .../css3-text-line-break-opclns-008-ref.html | 2 +- .../css3-text-line-break-opclns-009-ref.html | 2 +- .../css3-text-line-break-opclns-010-ref.html | 2 +- .../css3-text-line-break-opclns-011-ref.html | 2 +- .../css3-text-line-break-opclns-012-ref.html | 2 +- .../css3-text-line-break-opclns-013-ref.html | 2 +- .../css3-text-line-break-opclns-014-ref.html | 2 +- .../css3-text-line-break-opclns-015-ref.html | 2 +- .../css3-text-line-break-opclns-016-ref.html | 2 +- .../css3-text-line-break-opclns-017-ref.html | 2 +- .../css3-text-line-break-opclns-018-ref.html | 2 +- .../css3-text-line-break-opclns-019-ref.html | 2 +- .../css3-text-line-break-opclns-020-ref.html | 2 +- .../css3-text-line-break-opclns-021-ref.html | 2 +- .../css3-text-line-break-opclns-022-ref.html | 2 +- .../css3-text-line-break-opclns-023-ref.html | 2 +- .../css3-text-line-break-opclns-024-ref.html | 2 +- .../css3-text-line-break-opclns-025-ref.html | 2 +- .../css3-text-line-break-opclns-026-ref.html | 2 +- .../css3-text-line-break-opclns-027-ref.html | 2 +- .../css3-text-line-break-opclns-028-ref.html | 2 +- .../css3-text-line-break-opclns-029-ref.html | 2 +- .../css3-text-line-break-opclns-030-ref.html | 2 +- .../css3-text-line-break-opclns-031-ref.html | 2 +- .../css3-text-line-break-opclns-032-ref.html | 2 +- .../css3-text-line-break-opclns-033-ref.html | 2 +- .../css3-text-line-break-opclns-034-ref.html | 2 +- .../css3-text-line-break-opclns-035-ref.html | 2 +- .../css3-text-line-break-opclns-036-ref.html | 2 +- .../css3-text-line-break-opclns-037-ref.html | 2 +- .../css3-text-line-break-opclns-038-ref.html | 2 +- .../css3-text-line-break-opclns-039-ref.html | 2 +- .../css3-text-line-break-opclns-040-ref.html | 2 +- .../css3-text-line-break-opclns-041-ref.html | 2 +- .../css3-text-line-break-opclns-042-ref.html | 2 +- .../css3-text-line-break-opclns-043-ref.html | 2 +- .../css3-text-line-break-opclns-044-ref.html | 2 +- .../css3-text-line-break-opclns-045-ref.html | 2 +- .../css3-text-line-break-opclns-046-ref.html | 2 +- .../css3-text-line-break-opclns-047-ref.html | 2 +- .../css3-text-line-break-opclns-048-ref.html | 2 +- .../css3-text-line-break-opclns-049-ref.html | 2 +- .../css3-text-line-break-opclns-050-ref.html | 2 +- .../css3-text-line-break-opclns-051-ref.html | 2 +- .../css3-text-line-break-opclns-052-ref.html | 2 +- .../css3-text-line-break-opclns-053-ref.html | 2 +- .../css3-text-line-break-opclns-054-ref.html | 2 +- .../css3-text-line-break-opclns-055-ref.html | 2 +- .../css3-text-line-break-opclns-056-ref.html | 2 +- .../css3-text-line-break-opclns-057-ref.html | 2 +- .../css3-text-line-break-opclns-058-ref.html | 2 +- .../css3-text-line-break-opclns-059-ref.html | 2 +- .../css3-text-line-break-opclns-060-ref.html | 2 +- .../css3-text-line-break-opclns-061-ref.html | 2 +- .../css3-text-line-break-opclns-062-ref.html | 2 +- .../css3-text-line-break-opclns-063-ref.html | 2 +- .../css3-text-line-break-opclns-064-ref.html | 2 +- .../css3-text-line-break-opclns-065-ref.html | 2 +- .../css3-text-line-break-opclns-100-ref.html | 2 +- .../css3-text-line-break-opclns-101-ref.html | 2 +- .../css3-text-line-break-opclns-102-ref.html | 2 +- .../css3-text-line-break-opclns-103-ref.html | 2 +- .../css3-text-line-break-opclns-104-ref.html | 2 +- .../css3-text-line-break-opclns-105-ref.html | 2 +- .../css3-text-line-break-opclns-106-ref.html | 2 +- .../css3-text-line-break-opclns-107-ref.html | 2 +- .../css3-text-line-break-opclns-108-ref.html | 2 +- .../css3-text-line-break-opclns-109-ref.html | 2 +- .../css3-text-line-break-opclns-110-ref.html | 2 +- .../css3-text-line-break-opclns-111-ref.html | 2 +- .../css3-text-line-break-opclns-112-ref.html | 2 +- .../css3-text-line-break-opclns-113-ref.html | 2 +- .../css3-text-line-break-opclns-114-ref.html | 2 +- .../css3-text-line-break-opclns-115-ref.html | 2 +- .../css3-text-line-break-opclns-116-ref.html | 2 +- .../css3-text-line-break-opclns-117-ref.html | 2 +- .../css3-text-line-break-opclns-118-ref.html | 2 +- .../css3-text-line-break-opclns-119-ref.html | 2 +- .../css3-text-line-break-opclns-120-ref.html | 2 +- .../css3-text-line-break-opclns-121-ref.html | 2 +- .../css3-text-line-break-opclns-122-ref.html | 2 +- .../css3-text-line-break-opclns-123-ref.html | 2 +- .../css3-text-line-break-opclns-124-ref.html | 2 +- .../css3-text-line-break-opclns-125-ref.html | 2 +- .../css3-text-line-break-opclns-126-ref.html | 2 +- .../css3-text-line-break-opclns-127-ref.html | 2 +- .../css3-text-line-break-opclns-128-ref.html | 2 +- .../css3-text-line-break-opclns-129-ref.html | 2 +- .../css3-text-line-break-opclns-130-ref.html | 2 +- .../css3-text-line-break-opclns-131-ref.html | 2 +- .../css3-text-line-break-opclns-132-ref.html | 2 +- .../css3-text-line-break-opclns-133-ref.html | 2 +- .../css3-text-line-break-opclns-134-ref.html | 2 +- .../css3-text-line-break-opclns-135-ref.html | 2 +- .../css3-text-line-break-opclns-136-ref.html | 2 +- .../css3-text-line-break-opclns-137-ref.html | 2 +- .../css3-text-line-break-opclns-138-ref.html | 2 +- .../css3-text-line-break-opclns-139-ref.html | 2 +- .../css3-text-line-break-opclns-140-ref.html | 2 +- .../css3-text-line-break-opclns-141-ref.html | 2 +- .../css3-text-line-break-opclns-142-ref.html | 2 +- .../css3-text-line-break-opclns-143-ref.html | 2 +- .../css3-text-line-break-opclns-144-ref.html | 2 +- .../css3-text-line-break-opclns-145-ref.html | 2 +- .../css3-text-line-break-opclns-146-ref.html | 2 +- .../css3-text-line-break-opclns-147-ref.html | 2 +- .../css3-text-line-break-opclns-148-ref.html | 2 +- .../css3-text-line-break-opclns-149-ref.html | 2 +- .../css3-text-line-break-opclns-150-ref.html | 2 +- .../css3-text-line-break-opclns-151-ref.html | 2 +- .../css3-text-line-break-opclns-152-ref.html | 2 +- .../css3-text-line-break-opclns-153-ref.html | 2 +- .../css3-text-line-break-opclns-154-ref.html | 2 +- .../css3-text-line-break-opclns-155-ref.html | 2 +- .../css3-text-line-break-opclns-156-ref.html | 2 +- .../css3-text-line-break-opclns-157-ref.html | 2 +- .../css3-text-line-break-opclns-158-ref.html | 2 +- .../css3-text-line-break-opclns-159-ref.html | 2 +- .../css3-text-line-break-opclns-160-ref.html | 2 +- .../css3-text-line-break-opclns-161-ref.html | 2 +- .../css3-text-line-break-opclns-162-ref.html | 2 +- .../css3-text-line-break-opclns-163-ref.html | 2 +- .../css3-text-line-break-opclns-164-ref.html | 2 +- .../css3-text-line-break-opclns-165-ref.html | 2 +- .../css3-text-line-break-opclns-166-ref.html | 2 +- .../css3-text-line-break-opclns-167-ref.html | 2 +- .../css3-text-line-break-opclns-168-ref.html | 2 +- .../css3-text-line-break-opclns-169-ref.html | 2 +- .../css3-text-line-break-opclns-170-ref.html | 2 +- .../css3-text-line-break-opclns-171-ref.html | 2 +- .../css3-text-line-break-opclns-200-ref.html | 2 +- .../css3-text-line-break-opclns-201-ref.html | 2 +- .../css3-text-line-break-opclns-202-ref.html | 2 +- .../css3-text-line-break-opclns-203-ref.html | 2 +- .../css3-text-line-break-opclns-204-ref.html | 2 +- .../css3-text-line-break-opclns-205-ref.html | 2 +- .../css3-text-line-break-opclns-206-ref.html | 2 +- .../css3-text-line-break-opclns-207-ref.html | 2 +- .../css3-text-line-break-opclns-208-ref.html | 2 +- .../css3-text-line-break-opclns-209-ref.html | 2 +- .../css3-text-line-break-opclns-210-ref.html | 2 +- .../css3-text-line-break-opclns-211-ref.html | 2 +- .../css3-text-line-break-opclns-212-ref.html | 2 +- .../css3-text-line-break-opclns-213-ref.html | 2 +- .../css3-text-line-break-opclns-214-ref.html | 2 +- .../css3-text-line-break-opclns-215-ref.html | 2 +- .../css3-text-line-break-opclns-216-ref.html | 2 +- .../css3-text-line-break-opclns-217-ref.html | 2 +- .../css3-text-line-break-opclns-218-ref.html | 2 +- .../css3-text-line-break-opclns-219-ref.html | 2 +- .../css3-text-line-break-opclns-220-ref.html | 2 +- .../css3-text-line-break-opclns-221-ref.html | 2 +- .../css3-text-line-break-opclns-222-ref.html | 2 +- .../css3-text-line-break-opclns-223-ref.html | 2 +- .../css3-text-line-break-opclns-224-ref.html | 2 +- .../css3-text-line-break-opclns-225-ref.html | 2 +- .../css3-text-line-break-opclns-226-ref.html | 2 +- .../css3-text-line-break-opclns-250-ref.html | 2 +- .../css3-text-line-break-opclns-251-ref.html | 2 +- .../css3-text-line-break-opclns-252-ref.html | 2 +- .../css3-text-line-break-opclns-253-ref.html | 2 +- .../css3-text-line-break-opclns-254-ref.html | 2 +- .../css3-text-line-break-opclns-255-ref.html | 2 +- .../css3-text-line-break-opclns-256-ref.html | 2 +- .../css3-text-line-break-opclns-257-ref.html | 2 +- .../css3-text-line-break-opclns-258-ref.html | 2 +- .../css3-text-line-break-opclns-259-ref.html | 2 +- .../css3-text-line-break-opclns-260-ref.html | 2 +- .../css3-text-line-break-opclns-261-ref.html | 2 +- .../css3-text-line-break-opclns-262-ref.html | 2 +- .../css3-text-line-break-opclns-263-ref.html | 2 +- .../css3-text-line-break-opclns-264-ref.html | 2 +- .../css3-text-line-break-opclns-265-ref.html | 2 +- .../css3-text-line-break-opclns-266-ref.html | 2 +- .../css3-text-line-break-opclns-267-ref.html | 2 +- .../css3-text-line-break-opclns-268-ref.html | 2 +- .../css3-text-line-break-opclns-269-ref.html | 2 +- .../line-break/line-break-normal-021.xht | 1 - .../line-break/line-break-normal-022.xht | 1 - .../line-break/line-break-normal-023.xht | 1 - .../line-break/line-break-normal-024.xht | 1 - .../line-break/line-break-normal-025.xht | 1 - .../line-break/line-break-strict-011.xht | 1 - .../line-break/line-break-strict-012.xht | 1 - .../line-break/line-break-strict-013.xht | 1 - .../line-break/line-break-strict-014.xht | 1 - .../line-break/line-break-strict-015.xht | 1 - .../line-break/line-break-strict-016.xht | 1 - .../line-break/line-break-strict-017.xht | 1 - .../line-break/line-break-strict-018.xht | 1 - .../text-transform-capitalize-022-ref.html | 3 +- .../text-transform-capitalize-024-ref.html | 3 +- .../text-transform-capitalize-026-ref.html | 3 +- .../text-transform-capitalize-028-ref.html | 3 +- .../text-transform-capitalize-030-ref.html | 3 +- .../text-transform-upperlower-022-ref.html | 3 +- .../text-transform-upperlower-023-ref.html | 3 +- .../text-transform-upperlower-024-ref.html | 3 +- .../text-transform-upperlower-025-ref.html | 3 +- .../text-transform-upperlower-026-ref.html | 3 +- .../text-transform-upperlower-027-ref.html | 3 +- .../text-transform-upperlower-028-ref.html | 3 +- .../text-transform-upperlower-029-ref.html | 3 +- .../text-transform-upperlower-030-ref.html | 3 +- .../text-transform-upperlower-031-ref.html | 3 +- .../text-transform-upperlower-039-ref.html | 3 +- .../text-transform-upperlower-040-ref.html | 3 +- .../text-transform-upperlower-041-ref.html | 3 +- .../text-transform-upperlower-042-ref.html | 3 +- .../text-transform-upperlower-043-ref.html | 3 +- .../text-transform-upperlower-102-ref.html | 3 +- .../text-transform-upperlower-103-ref.html | 3 +- .../text-transform-upperlower-104-ref.html | 3 +- .../text-transform-capitalize-022.html | 3 +- .../text-transform-capitalize-024.html | 3 +- .../text-transform-capitalize-026.html | 3 +- .../text-transform-capitalize-028.html | 3 +- .../text-transform-capitalize-030.html | 3 +- .../text-transform-upperlower-022.html | 3 +- .../text-transform-upperlower-023.html | 3 +- .../text-transform-upperlower-024.html | 3 +- .../text-transform-upperlower-025.html | 3 +- .../text-transform-upperlower-026.html | 3 +- .../text-transform-upperlower-027.html | 3 +- .../text-transform-upperlower-028.html | 3 +- .../text-transform-upperlower-029.html | 3 +- .../text-transform-upperlower-030.html | 3 +- .../text-transform-upperlower-031.html | 3 +- .../text-transform-upperlower-039.html | 3 +- .../text-transform-upperlower-040.html | 3 +- .../text-transform-upperlower-041.html | 3 +- .../text-transform-upperlower-042.html | 3 +- .../text-transform-upperlower-043.html | 3 +- .../text-transform-upperlower-102.html | 3 +- .../text-transform-upperlower-103.html | 3 +- .../text-transform-upperlower-104.html | 3 +- .../text-decoration-line-010.xht | 1 - .../text-decoration-line-011.xht | 1 - .../text-decoration-line-012.xht | 1 - .../text-decoration-line-013.xht | 1 - .../text-decoration-line-014.xht | 4 +- .../backface-visibility-hidden-001.html | 2 +- .../css-rotate-2d-3d-001-ref.html | 0 .../css-rotate-2d-3d-001.html | 4 +- .../css-transform-3d-rotate3d-X-negative.html | 2 +- .../css-transform-3d-rotate3d-X-positive.html | 2 +- .../css-transform-3d-rotate3d-Y-negative.html | 2 +- .../css-transform-3d-rotate3d-Y-positive.html | 2 +- .../css-transform-3d-rotate3d-Z-negative.html | 2 +- .../css-transform-3d-rotate3d-Z-positive.html | 2 +- .../css-transform-3d-rotateX-negative.html | 2 +- .../css-transform-3d-rotateX-positive.html | 2 +- .../css-transform-3d-rotateY-negative.html | 2 +- .../css-transform-3d-rotateY-positive.html | 2 +- .../css-transform-3d-rotateZ-negative.html | 2 +- .../css-transform-3d-rotateZ-positive.html | 2 +- .../css-transform-3d-transform-style.html | 4 +- ...-transforms-3d-on-anonymous-block-001.html | 4 +- .../css3-transform-perspective.html | 2 +- .../css3-transform-rotateY-ref.html | 0 .../css3-transform-rotateY.html | 4 +- .../parsing/resources/parsing-testcommon.js | 33 + .../parsing/rotate-parsing-invalid.html | 22 + .../parsing/rotate-parsing-valid.html | 22 + .../parsing/scale-parsing-invalid.html | 20 + .../parsing/scale-parsing-valid.html | 24 + .../parsing/translate-parsing-invalid.html | 21 + .../parsing/translate-parsing-valid.html | 32 + .../perspective-origin-001.html | 2 +- .../perspective-origin-002.html | 2 +- .../perspective-origin-003.html | 2 +- .../perspective-origin-004.html | 2 +- .../perspective-origin-005.html | 2 +- .../perspective-origin-006.html | 2 +- .../perspective-origin-x.html | 4 +- .../perspective-origin-xy.html | 2 +- .../perspective-translateZ-0.html | 2 +- .../perspective-translateZ-negative.html | 2 +- .../perspective-translateZ-positive.html | 2 +- .../backface-visibility-hidden-ref.html | 0 .../css-transform-3d-rotateX-ref.html | 0 .../css-transform-3d-rotateZ-ref.html | 0 .../css-transform-3d-transform-style-ref.html | 0 ...css-transforms-3d-anonymous-block-ref.html | 0 .../css3-transform-perspective-ref.html | 0 .../reference/perspective-origin-reftest.html | 0 .../reference/perspective-reftest.html | 0 .../reference/rotateY-ref.html | 0 .../transforms-rotateY-degree-60-ref.html | 0 .../transofrmed-preserve-3d-1-ref.html | 0 .../reference/transofrmed-rotateX-3-ref.html | 0 .../reference/transofrmed-rotateY-1-ref.html | 0 .../ttwf-css-3d-polygon-cycle-ref.html | 0 ...ansform-3d-rotateY-stair-above-ref-001.xht | 0 .../rotateY.html | 2 +- .../rotate_x_45deg-ref.html | 0 .../rotate_x_45deg.html | 2 +- .../rotate_y_45deg-ref.html | 0 .../rotate_y_45deg.html | 2 +- .../transform-3d-rotateY-stair-above-001.xht | 2 +- .../transform-3d-rotateY-stair-below-001.xht | 2 +- .../css-transforms-2/transform-blank-ref.html | 10 + .../transform-lime-square-ref.html | 17 + .../transform3d-backface-visibility-001.html | 2 +- .../transform3d-backface-visibility-002.html | 2 +- .../transform3d-backface-visibility-003.html | 2 +- .../transform3d-backface-visibility-004.html | 2 +- .../transform3d-backface-visibility-005.html | 2 +- .../transform3d-backface-visibility-006.html | 2 +- .../transform3d-backface-visibility-007.html | 2 +- .../transform3d-backface-visibility-008.html | 2 +- .../transform3d-image-scale-001.html | 4 +- .../transform3d-image-scale-002.html | 4 +- .../transform3d-matrix3d-001-ref.html | 0 .../transform3d-matrix3d-001.html | 4 +- .../transform3d-matrix3d-002-ref.html | 0 .../transform3d-matrix3d-002.html | 4 +- .../transform3d-matrix3d-003-ref.html | 0 .../transform3d-matrix3d-003.html | 4 +- .../transform3d-matrix3d-004-ref.html | 0 .../transform3d-matrix3d-004.html | 4 +- .../transform3d-matrix3d-005-ref.html | 0 .../transform3d-matrix3d-005.html | 4 +- .../transform3d-perspective-001-ref.html | 0 .../transform3d-perspective-001.html | 2 +- .../transform3d-perspective-002.html | 2 +- .../transform3d-perspective-003.html | 2 +- .../transform3d-perspective-004.html | 2 +- .../transform3d-perspective-005.html | 2 +- .../transform3d-perspective-006.html | 2 +- .../transform3d-perspective-007.html | 2 +- .../transform3d-perspective-008.html | 2 +- .../transform3d-perspective-009-ref.html | 0 .../transform3d-perspective-009.html | 2 +- .../transform3d-perspective-origin-001.html | 2 +- .../transform3d-perspective-origin-ref.html | 0 .../transform3d-preserve3d-001-ref.html | 0 .../transform3d-preserve3d-001.html | 2 +- .../transform3d-preserve3d-002.html | 2 +- .../transform3d-preserve3d-003.html | 2 +- .../transform3d-preserve3d-004.html | 2 +- .../transform3d-preserve3d-005.html | 2 +- .../transform3d-preserve3d-006.html | 2 +- .../transform3d-preserve3d-007.html | 2 +- .../transform3d-preserve3d-008.html | 2 +- .../transform3d-preserve3d-009.html | 2 +- .../transform3d-preserve3d-010.html | 2 +- .../transform3d-preserve3d-011.html | 2 +- .../transform3d-preserve3d-012.html | 2 +- .../transform3d-preserve3d-013-ref.html | 0 .../transform3d-preserve3d-013.html | 2 +- .../transform3d-rotate3d-001.html | 4 +- .../transform3d-rotate3d-002.html | 4 +- .../transform3d-rotatex-001.html | 4 +- .../transform3d-rotatex-perspective-001.html | 6 +- .../transform3d-rotatex-perspective-002.html | 6 +- .../transform3d-rotatex-perspective-003.html | 2 +- ...ransform3d-rotatex-perspective-notref.html | 0 .../transform3d-rotatex-perspective-ref.html | 0 .../transform3d-rotatex-ref.html | 0 ...ansform3d-rotatex-transformorigin-001.html | 4 +- ...ansform3d-rotatex-transformorigin-ref.html | 0 .../transform3d-rotatey-001.html | 4 +- .../transform3d-rotatey-ref.html | 0 .../transform3d-scale-001-notref.html | 0 .../transform3d-scale-001-ref.html | 0 .../transform3d-scale-001.html | 4 +- .../transform3d-scale-002.html | 4 +- .../transform3d-scale-003.html | 4 +- .../transform3d-scale-004.html | 6 +- .../transform3d-scale-005-ref.html | 0 .../transform3d-scale-005.html | 4 +- .../transform3d-scale-006.html | 4 +- .../transform3d-scale-007-ref.html | 0 .../transform3d-scale-007.html | 2 +- .../transform3d-sorting-001.html | 4 +- .../transform3d-sorting-002.html | 4 +- .../transform3d-sorting-003.html | 4 +- .../transform3d-sorting-004.html | 4 +- .../transform3d-sorting-005.html | 4 +- .../transform3d-sorting-006-ref.html | 0 .../transform3d-sorting-006.html | 4 +- .../transform3d-translate3d-001.html | 4 +- .../transform3d-translate3d-ref.html | 0 .../transform3d-translatez-001.html | 4 +- .../transform3d-translatez-notref.html | 0 .../transform3d-translatez-ref.html | 0 .../transforms-rotateY-degree-60.html | 2 +- .../transofrmed-preserve-3d-1.html | 0 .../transofrmed-rotateX-3.html | 0 .../transofrmed-rotateY-1.html | 0 .../ttwf-css-3d-polygon-cycle-mismatch.html | 2 +- .../ttwf-css-3d-polygon-cycle.html | 2 +- .../css/css-ui-3/outline-004.html | 2 +- .../variable-reference-refresh-iframe.css | 5 + .../variable-reference-refresh-iframe.html | 16 + .../variable-animation-from-to.html | 64 + .../variable-animation-over-transition.html | 72 + ...on-substitute-into-keyframe-shorthand.html | 69 + ...on-substitute-into-keyframe-transform.html | 65 + ...le-animation-substitute-into-keyframe.html | 69 + ...n-substitute-within-keyframe-fallback.html | 71 + ...n-substitute-within-keyframe-multiple.html | 70 + ...-animation-substitute-within-keyframe.html | 69 + .../variable-animation-to-only.html | 66 + .../variable-created-document.html | 35 + .../variable-created-element.html | 40 + .../css/css-variables-1/variable-cssText.html | 53 + ...definition-border-shorthand-serialize.html | 27 + .../variable-definition-cascading.html | 74 + .../variable-definition-keywords.html | 68 + .../css-variables-1/variable-definition.html | 104 + .../variable-first-letter.html | 77 + .../css-variables-1/variable-first-line.html | 87 + .../variable-invalidation.html | 106 + .../variable-presentation-attribute.html | 125 + .../variable-pseudo-element.html | 108 + .../variable-reference-cssom.html | 54 + .../variable-reference-refresh.html | 56 + .../variable-reference-shorthands-cssom.html | 37 + .../variable-reference-shorthands.html | 56 + .../variable-reference-variable.html | 36 + .../css-variables-1/variable-reference.html | 67 + ...le-substitution-background-properties.html | 108 + .../variable-substitution-basic.html | 118 + .../variable-substitution-filters.html | 77 + ...variable-substitution-plus-box-shadow.html | 52 + .../variable-substitution-replaced-size.html | 48 + ...riable-substitution-shadow-properties.html | 50 + .../variable-substitution-shorthands.html | 117 + ...ble-substitution-variable-declaration.html | 155 + .../variable-transitions-from-no-value.html | 66 + .../variable-transitions-to-no-value.html | 66 + ...-transition-property-all-before-value.html | 72 + ...sition-property-variable-before-value.html | 71 + ...-value-before-transition-property-all.html | 71 + ...e-before-transition-property-variable.html | 66 + .../vars-font-shorthand-001.html | 2 +- ...ombine-upright-value-single-character.html | 1 - .../sizing-orthog-htb-in-vlr-008-ref.xht | 1 + .../sizing-orthog-htb-in-vlr-008.xht | 1 + .../sizing-orthog-htb-in-vlr-020-ref.xht | 1 + .../sizing-orthog-htb-in-vlr-020.xht | 1 + .../sizing-orthog-htb-in-vrl-008-ref.xht | 1 + .../sizing-orthog-htb-in-vrl-008.xht | 1 + .../sizing-orthog-htb-in-vrl-020-ref.xht | 1 + .../sizing-orthog-htb-in-vrl-020.xht | 1 + .../sizing-orthog-vlr-in-htb-008-ref.xht | 1 + .../sizing-orthog-vlr-in-htb-008.xht | 1 + .../sizing-orthog-vlr-in-htb-020-ref.xht | 1 + .../sizing-orthog-vlr-in-htb-020.xht | 1 + .../sizing-orthog-vrl-in-htb-008-ref.xht | 1 + .../sizing-orthog-vrl-in-htb-008.xht | 1 + .../sizing-orthog-vrl-in-htb-020-ref.xht | 1 + .../sizing-orthog-vrl-in-htb-020.xht | 1 + .../text-orientation-mixed-vlr-100-ref.html | 1 - .../text-orientation-mixed-vlr-100.html | 1 - .../text-orientation-mixed-vrl-100-ref.html | 1 - .../text-orientation-mixed-vrl-100.html | 1 - .../text-orientation-script-001.html | 2 +- .../text-orientation-script-001a.html | 2 +- .../text-orientation-script-001b.html | 2 +- .../text-orientation-script-001c.html | 2 +- .../text-orientation-script-001d.html | 2 +- .../text-orientation-script-001e.html | 2 +- .../text-orientation-script-001f.html | 2 +- .../text-orientation-script-001g.html | 2 +- .../text-orientation-script-001h.html | 2 +- .../text-orientation-script-001i.html | 2 +- .../text-orientation-script-001j.html | 2 +- .../text-orientation-script-001k.html | 2 +- .../text-orientation-script-001l.html | 2 +- .../text-orientation-script-001m.html | 2 +- .../text-orientation-script-001n.html | 2 +- .../text-orientation-script-001o.html | 2 +- .../text-orientation-script-001p.html | 2 +- .../text-orientation-script-001q.html | 2 +- ...text-orientation-sideways-vlr-100-ref.html | 1 - .../text-orientation-sideways-vlr-100.html | 1 - ...text-orientation-sideways-vrl-100-ref.html | 1 - .../text-orientation-sideways-vrl-100.html | 1 - .../text-orientation-upright-vlr-100-ref.html | 1 - .../text-orientation-upright-vlr-100.html | 1 - .../text-orientation-upright-vrl-100-ref.html | 1 - .../text-orientation-upright-vrl-100.html | 1 - .../generators/text-orientation-generator.js | 23 +- .../tools/generators/text-orientation-ref.ejs | 3 +- .../tools/generators/unicode-data.js | 15 +- .../css/geometry-1/DOMMatrix-001.html | 282 +- .../css/geometry-1/DOMMatrix-003.html | 30 + .../css/geometry-1/DOMMatrix-a-f-alias.html | 57 + .../geometry-1/DOMMatrix-css-string.worker.js | 38 + .../css/geometry-1/DOMMatrix-newobject.html | 44 + .../css/geometry-1/DOMMatrix-stringifier.html | 79 + .../DOMMatrixInit-validate-fixup.html | 168 + .../css/geometry-1/DOMPoint-002.html | 2 +- .../css/geometry-1/DOMQuad-002.html | 173 + .../css/geometry-1/WebKitCSSMatrix.html | 25 + .../css/geometry-1/WebKitCSSMatrix.worker.js | 9 + .../css/geometry-1/historical.html | 90 + .../css/geometry-1/interfaces.html | 12 + .../css/geometry-1/interfaces.worker.js | 9 + .../geometry-1/structured-serialization.html | 159 + .../css/geometry-1/support/interfaces.js | 23 + .../css/motion-1/offset-path-ray-ref.html | 22 + .../css/motion-1/offset-path-ray.html | 26 + .../css/motion-1/offset-path-string-ref.html | 22 + .../css/motion-1/offset-path-string.html | 26 + .../css/motion-1/offset-rotate-001.html | 26 + .../css/motion-1/offset-rotate-002.html | 26 + .../css/motion-1/offset-rotate-ref.html | 22 + .../offset-anchor-parsing-invalid.html | 20 + .../parsing/offset-anchor-parsing-valid.html | 29 + .../offset-distance-parsing-invalid.html | 19 + .../offset-distance-parsing-valid.html | 21 + .../parsing/offset-parsing-invalid.html | 30 + .../parsing/offset-parsing-valid.html | 43 + .../parsing/offset-path-parsing-invalid.html | 28 + .../parsing/offset-path-parsing-valid.html | 35 + .../offset-position-parsing-invalid.html | 20 + .../offset-position-parsing-valid.html | 29 + .../offset-rotate-parsing-invalid.html | 21 + .../parsing/offset-rotate-parsing-valid.html | 24 + .../parsing/resources/parsing-testcommon.js | 33 + .../ref-filled-green-200px-square.html | 13 + .../ref-filled-green-300px-square.html | 13 + .../selectors4/focus-display-none-001.html | 50 + .../css/selectors4/focus-within-006-ref.html | 32 + .../css/selectors4/focus-within-006.html | 4 +- .../css/selectors4/focus-within-009.html | 48 - .../css/selectors4/focus-within-010.html | 38 + .../focus-within-display-none-001.html | 58 + .../selectors4/focus-within-shadow-001.html | 8 +- .../selectors4/focus-within-shadow-002.html | 8 +- .../selectors4/focus-within-shadow-003.html | 8 +- .../selectors4/focus-within-shadow-004.html | 8 +- .../selectors4/focus-within-shadow-005.html | 10 +- .../masking/mask-composite-1d.html | 61 + .../masking/mask-mode-d.html | 60 + .../masking/reftest.list | 2 + ...-id-attr-selector-invalidation-01-ref.html | 9 + ...lass-id-attr-selector-invalidation-01.html | 24 + .../selectors4/reftest.list | 1 + ...rspective-containing-block-dynamic-1a.html | 2 +- ...rspective-containing-block-dynamic-1b.html | 2 +- .../work-in-progress/hixie/comments-010.xht | 13 - .../microsoft/css-tables/base.css | 2 +- .../bounding-box-computation-1.html | 58 +- .../bounding-box-computation-2.html | 58 +- .../bounding-box-computation-3.html | 50 +- .../microsoft/css-tables/caption-side-1.html | 18 +- .../microsoft/css-tables/fixed-layout-1.html | 36 +- .../microsoft/css-tables/fixed-layout-2.html | 34 +- .../computing-row-measure-0.html | 3 +- .../computing-row-measure-1.html | 3 +- ...centage-sizing-of-table-cell-children.html | 87 +- .../css-tables/html-to-css-mapping-1.html | 35 +- .../css-tables/html-to-css-mapping-2.html | 114 +- .../css-tables/html5-table-formatting-1.html | 38 +- .../css-tables/html5-table-formatting-2.html | 67 +- .../css-tables/html5-table-formatting-3.html | 43 +- ...html5-table-formatting-fixed-layout-1.html | 18 +- .../css-tables/markup-generator.html | 102 +- .../css-tables/table-model-fixup-2.html | 180 +- .../css-tables/table-model-fixup.html | 64 +- .../visibility-collapse-col-001.html | 1 - .../visibility-collapse-row-001.html | 1 - .../computing-column-measure-0.html | 3 +- .../computing-column-measure-1.html | 5 +- .../computing-table-width-0.html | 79 +- .../computing-table-width-1.html | 103 +- .../distribution-algo-1.html | 5 +- .../distribution-algo-2.html | 5 +- .../distribution-algo-min-content-guess.html | 5 +- ...bution-algo-min-content-percent-guess.html | 3 +- ...on-algo-min-content-specified-guess.1.html | 5 +- ...tion-algo-min-content-specified-guess.html | 5 +- .../cssom-view/MediaQueryList-001.html | 5 +- .../cssom-view-window-screen-interface.html | 2 +- .../cssom-view/media-query-list-interface.xht | 12 +- .../cssom-view/window-interface.xht | 16 +- .../cssom-view/elementScroll.html | 124 +- .../htmlelement-offset-width-001.html | 4 +- .../cssom-view/offsetParent_element_test.html | 2 +- .../cssom-view/scrollIntoView-empty-args.html | 50 + .../cssom-view/scrollIntoView-shadow.html | 33 + .../cssom-view/scrollIntoView-smooth.html | 101 + .../scrolling-quirks-vs-nonquirks.html | 220 + .../cssom/CSSKeyframeRule.html | 7 + .../cssom/CSSStyleRule.html | 7 + .../cssom/getComputedStyle-pseudo.html | 43 + .../cssom/insertRule-charset-no-index.html | 32 + .../cssom/insertRule-import-no-index.html | 33 + .../cssom/insertRule-namespace-no-index.html | 40 + .../cssom/insertRule-no-index.html | 35 + .../cssom/support/import-charset.css | 1 + .../cssom/variable-names.html | 47 + .../custom-element-registry/per-global.html | 14 + .../microtasks-and-constructors.html | 123 + .../docs/_writing-tests/css-metadata.md | 5 +- .../docs/_writing-tests/idlharness.html | 11 - .../_writing-tests}/idlharness.md | 6 + .../docs/_writing-tests/testharness-api.html | 11 - .../_writing-tests/testharness-api.md} | 12 +- .../docs/_writing-tests/testharness.md | 10 +- .../docs/assets/_reftest_graph_example.dot | 2 + .../web-platform-tests/docs/assets/main.scss | 12 - .../dom/events/Event-dispatch-click.html | 2 +- .../web-platform-tests/dom/historical.html | 1 + .../web-platform-tests/dom/interfaces.html | 580 +- .../DOMImplementation-createDocumentType.html | 6 +- .../dom/nodes/Document-constructor-svg.svg | 47 + .../dom/nodes/Document-constructor-xml.xml | 50 + .../dom/nodes/Document-constructor.html | 1 + .../dom/nodes/Document-createElementNS.js | 48 +- .../dom/nodes/Document-createEvent.html | 1 - .../dom/nodes/Element-classlist.html | 853 +- .../ParentNode-querySelector-All-content.html | 2 +- .../ParentNode-querySelector-All-content.xht | 2 +- .../ParentNode-querySelector-All-xht.xht | 12 +- .../nodes/ParentNode-querySelector-All.html | 12 +- .../dom/nodes/ParentNode-querySelector-All.js | 3 + .../dom/nodes/attributes.html | 4 +- .../dom/nodes/getElementsByClassName-14.htm | 18 +- .../dom/nodes/mutationobservers.js | 2 +- .../web-platform-tests/dom/nodes/selectors.js | 24 +- ...r-parseFromString-xml-internal-subset.html | 24 + tests/wpt/web-platform-tests/dpub-aam/OWNERS | 1 + .../dpub-aam/doc-abstract-manual.html | 101 + .../dpub-aam/doc-acknowledgments-manual.html | 113 + .../dpub-aam/doc-afterword-manual.html | 113 + .../dpub-aam/doc-appendix-manual.html | 113 + .../dpub-aam/doc-backlink-manual.html | 133 + .../dpub-aam/doc-biblioentry-manual.html | 109 + .../dpub-aam/doc-bibliography-manual.html | 113 + .../dpub-aam/doc-biblioref-manual.html | 133 + .../dpub-aam/doc-chapter-manual.html | 113 + .../dpub-aam/doc-colophon-manual.html | 101 + .../dpub-aam/doc-conclusion-manual.html | 113 + .../dpub-aam/doc-cover-manual.html | 97 + .../dpub-aam/doc-credit-manual.html | 101 + .../dpub-aam/doc-credits-manual.html | 113 + .../dpub-aam/doc-dedication-manual.html | 101 + .../dpub-aam/doc-endnote-manual.html | 109 + .../dpub-aam/doc-endnotes-manual.html | 113 + .../dpub-aam/doc-epigraph-manual.html | 101 + .../dpub-aam/doc-epilogue-manual.html | 113 + .../dpub-aam/doc-errata-manual.html | 113 + .../dpub-aam/doc-example-manual.html | 101 + .../dpub-aam/doc-footnote-manual.html | 101 + .../dpub-aam/doc-foreword-manual.html | 113 + .../dpub-aam/doc-glossary-manual.html | 113 + .../dpub-aam/doc-glossref-manual.html | 133 + .../dpub-aam/doc-index-manual.html | 113 + .../dpub-aam/doc-introduction-manual.html | 113 + .../dpub-aam/doc-noteref-manual.html | 133 + .../dpub-aam/doc-notice-manual.html | 101 + .../dpub-aam/doc-pagebreak-manual.html | 103 + .../dpub-aam/doc-pagelist-manual.html | 113 + .../dpub-aam/doc-part-manual.html | 113 + .../dpub-aam/doc-preface-manual.html | 113 + .../dpub-aam/doc-prologue-manual.html | 113 + .../dpub-aam/doc-pullquote-manual.html | 101 + .../dpub-aam/doc-qna-manual.html | 101 + .../dpub-aam/doc-subtitle-manual.html | 101 + .../dpub-aam/doc-tip-manual.html | 101 + .../dpub-aam/doc-toc-manual.html | 113 + .../web-platform-tests/editing/data/README.md | 166 + .../editing/data/backcolor.js | 1 + .../web-platform-tests/editing/data/bold.js | 1 + .../editing/data/createlink.js | 1 + .../data/delete-list-items-in-table-cells.js | 23 + .../web-platform-tests/editing/data/delete.js | 1 + .../editing/data/fontname.js | 1 + .../editing/data/fontsize.js | 1 + .../editing/data/forecolor.js | 1 + .../editing/data/formatblock.js | 1 + .../editing/data/forwarddelete.js | 1 + .../editing/data/hilitecolor.js | 1 + .../web-platform-tests/editing/data/indent.js | 1 + .../editing/data/inserthorizontalrule.js | 1 + .../editing/data/inserthtml.js | 1 + .../editing/data/insertimage.js | 1 + .../editing/data/insertlinebreak.js | 1 + .../editing/data/insertorderedlist.js | 1 + .../editing/data/insertparagraph.js | 1 + .../editing/data/inserttext.js | 1 + .../editing/data/insertunorderedlist.js | 1 + .../web-platform-tests/editing/data/italic.js | 1 + .../editing/data/justifycenter.js | 1 + .../editing/data/justifyfull.js | 1 + .../editing/data/justifyleft.js | 1 + .../editing/data/justifyright.js | 1 + .../web-platform-tests/editing/data/misc.js | 31 +- .../editing/data/multitest.js | 1 + .../editing/data/outdent.js | 1 + .../editing/data/removeformat.js | 1 + .../editing/data/strikethrough.js | 1 + .../editing/data/subscript.js | 1 + .../editing/data/superscript.js | 1 + .../editing/data/underline.js | 1 + .../web-platform-tests/editing/data/unlink.js | 1 + .../editing/other/extra-text-nodes.html | 43 + .../run/delete-list-items-in-table-cell.html | 51 + .../shift_jis/jis0208_index.js | 3 + .../shift_jis/sjis-decode-csshiftjis.html | 60 + .../shift_jis/sjis-decode-errors.html | 118 + .../shift_jis/sjis-decode-ms932.html | 60 + .../shift_jis/sjis-decode-ms_kanji.html | 60 + .../shift_jis/sjis-decode-shift-jis.html | 60 + .../shift_jis/sjis-decode-sjis.html | 60 + .../shift_jis/sjis-decode-windows-31j.html | 60 + .../shift_jis/sjis-decode-x-sjis.html | 60 + .../shift_jis/sjis-decode.html | 60 + .../shift_jis/sjis-decoder.js | 80 + .../sjis-encode-form-csshiftjis.html | 148 + .../sjis-encode-form-csshiftjis.html.headers | 1 + .../sjis-encode-form-errors-han.html | 182 + .../sjis-encode-form-errors-han.html.headers | 1 + .../sjis-encode-form-errors-hangul.html | 152 + ...jis-encode-form-errors-hangul.html.headers | 1 + .../sjis-encode-form-errors-misc.html | 192 + .../sjis-encode-form-errors-misc.html.headers | 1 + .../shift_jis/sjis-encode-form-ms932.html | 148 + .../sjis-encode-form-ms932.html.headers | 1 + .../shift_jis/sjis-encode-form-ms_kanji.html | 148 + .../sjis-encode-form-ms_kanji.html.headers | 1 + .../shift_jis/sjis-encode-form-shift-jis.html | 148 + .../sjis-encode-form-shift-jis.html.headers | 1 + .../shift_jis/sjis-encode-form-sjis.html | 148 + .../sjis-encode-form-sjis.html.headers | 1 + .../sjis-encode-form-windows-31j.html | 148 + .../sjis-encode-form-windows-31j.html.headers | 1 + .../shift_jis/sjis-encode-form-x-sjis.html | 148 + .../sjis-encode-form-x-sjis.html.headers | 1 + .../shift_jis/sjis-encode-form.html | 148 + .../shift_jis/sjis-encode-form.html.headers | 1 + .../sjis-encode-href-errors-han.html | 100 + .../sjis-encode-href-errors-han.html.headers | 1 + .../sjis-encode-href-errors-hangul.html | 65 + ...jis-encode-href-errors-hangul.html.headers | 1 + .../sjis-encode-href-errors-misc.html | 109 + .../sjis-encode-href-errors-misc.html.headers | 1 + .../shift_jis/sjis-encode-href.html | 62 + .../shift_jis/sjis-encode-href.html.headers | 1 + .../shift_jis/sjis-encoder.js | 131 + .../shift_jis/sjis_chars-csshiftjis.html | 1 + .../sjis_chars-csshiftjis.html.headers | 1 + .../shift_jis/sjis_chars-ms932.html | 1 + .../shift_jis/sjis_chars-ms932.html.headers | 1 + .../shift_jis/sjis_chars-ms_kanji.html | 1 + .../sjis_chars-ms_kanji.html.headers | 1 + .../shift_jis/sjis_chars-shift-jis.html | 1 + .../sjis_chars-shift-jis.html.headers | 1 + .../shift_jis/sjis_chars-sjis.html | 1 + .../shift_jis/sjis_chars-sjis.html.headers | 1 + .../shift_jis/sjis_chars-windows-31j.html | 1 + .../sjis_chars-windows-31j.html.headers | 1 + .../shift_jis/sjis_chars-x-sjis.html | 1 + .../shift_jis/sjis_chars-x-sjis.html.headers | 1 + .../shift_jis/sjis_chars.html | 1 + .../shift_jis/sjis_chars.html.headers | 1 + .../shift_jis/sjis_errors.html | 8 + .../shift_jis/sjis_errors.html.headers | 1 + .../euc-kr/euckr-decode-cseuckr.html | 60 + .../euc-kr/euckr-decode-csksc56011987.html | 60 + .../euc-kr/euckr-decode-errors.html | 101 + .../euc-kr/euckr-decode-iso-ir-149.html | 60 + .../euc-kr/euckr-decode-korean.html | 60 + .../euc-kr/euckr-decode-ks_c_5601-1987.html | 60 + .../euc-kr/euckr-decode-ks_c_5601-1989.html | 60 + .../euc-kr/euckr-decode-ksc5601.html | 60 + .../euc-kr/euckr-decode-ksc_5601.html | 60 + .../euc-kr/euckr-decode-windows-949.html | 60 + .../legacy-mb-korean/euc-kr/euckr-decode.html | 60 + .../legacy-mb-korean/euc-kr/euckr-decoder.js | 67 + .../euc-kr/euckr-encode-form-cseuckr.html | 148 + .../euckr-encode-form-cseuckr.html.headers | 1 + .../euckr-encode-form-csksc56011987.html | 148 + ...ckr-encode-form-csksc56011987.html.headers | 1 + .../euc-kr/euckr-encode-form-errors-han.html | 183 + .../euckr-encode-form-errors-han.html.headers | 1 + .../euckr-encode-form-errors-hangul.html | 181 + ...ckr-encode-form-errors-hangul.html.headers | 1 + .../euc-kr/euckr-encode-form-errors-misc.html | 192 + ...euckr-encode-form-errors-misc.html.headers | 1 + .../euc-kr/euckr-encode-form-iso-ir-149.html | 148 + .../euckr-encode-form-iso-ir-149.html.headers | 1 + .../euc-kr/euckr-encode-form-korean.html | 157 + .../euckr-encode-form-korean.html.headers | 1 + .../euckr-encode-form-ks_c_5601-1987.html | 148 + ...kr-encode-form-ks_c_5601-1987.html.headers | 1 + .../euckr-encode-form-ks_c_5601-1989.html | 157 + ...kr-encode-form-ks_c_5601-1989.html.headers | 1 + .../euc-kr/euckr-encode-form-ksc5601.html | 148 + .../euckr-encode-form-ksc5601.html.headers | 1 + .../euc-kr/euckr-encode-form-ksc_5601.html | 148 + .../euckr-encode-form-ksc_5601.html.headers | 1 + .../euc-kr/euckr-encode-form-windows-949.html | 148 + ...euckr-encode-form-windows-949.html.headers | 1 + .../euc-kr/euckr-encode-form.html | 148 + .../euc-kr/euckr-encode-form.html.headers | 1 + .../euc-kr/euckr-encode-href-errors-han.html | 100 + .../euckr-encode-href-errors-han.html.headers | 1 + .../euc-kr/euckr-encode-href-errors-misc.html | 109 + ...euckr-encode-href-errors-misc.html.headers | 1 + .../euc-kr/euckr-encode-href.html | 62 + .../euc-kr/euckr-encode-href.html.headers | 1 + .../legacy-mb-korean/euc-kr/euckr-encoder.js | 105 + .../euc-kr/euckr_chars-cseuckr.html | 1 + .../euc-kr/euckr_chars-cseuckr.html.headers | 1 + .../euc-kr/euckr_chars-csksc56011987.html | 1 + .../euckr_chars-csksc56011987.html.headers | 1 + .../euc-kr/euckr_chars-iso-ir-149.html | 1 + .../euckr_chars-iso-ir-149.html.headers | 1 + .../euc-kr/euckr_chars-korean.html | 1 + .../euc-kr/euckr_chars-korean.html.headers | 1 + .../euc-kr/euckr_chars-ks_c_5601-1987.html | 1 + .../euckr_chars-ks_c_5601-1987.html.headers | 1 + .../euc-kr/euckr_chars-ks_c_5601-1989.html | 1 + .../euckr_chars-ks_c_5601-1989.html.headers | 1 + .../euc-kr/euckr_chars-ksc5601.html | 1 + .../euc-kr/euckr_chars-ksc5601.html.headers | 1 + .../euc-kr/euckr_chars-ksc_5601.html | 1 + .../euc-kr/euckr_chars-ksc_5601.html.headers | 1 + .../euc-kr/euckr_chars-windows-949.html | 1 + .../euckr_chars-windows-949.html.headers | 1 + .../legacy-mb-korean/euc-kr/euckr_chars.html | 1 + .../euc-kr/euckr_chars.html.headers | 1 + .../legacy-mb-korean/euc-kr/euckr_errors.html | 8 + .../euc-kr/euckr_errors.html.headers | 1 + .../legacy-mb-korean/euc-kr/euckr_index.js | 3 + .../big5/big5-decode-big5-hkscs.html | 63 + .../big5/big5-decode-cn-big5.html | 63 + .../big5/big5-decode-csbig5.html | 63 + .../big5/big5-decode-errors.html | 102 + .../big5/big5-decode-extra.html | 62 + .../big5/big5-decode-x-x-big5.html | 63 + .../legacy-mb-tchinese/big5/big5-decode.html | 62 + .../legacy-mb-tchinese/big5/big5-decoder.js | 87 + .../big5/big5-enc-ascii.html | 51 + .../big5/big5-enc-ascii.html.headers | 1 + .../big5/big5-encode-form-big5-hkscs.html | 149 + .../big5-encode-form-big5-hkscs.html.headers | 1 + .../big5/big5-encode-form-cn-big5.html | 149 + .../big5-encode-form-cn-big5.html.headers | 1 + .../big5/big5-encode-form-csbig5.html | 149 + .../big5/big5-encode-form-csbig5.html.headers | 1 + .../big5/big5-encode-form-errors-extBa.html | 153 + ...big5-encode-form-errors-extBa.html.headers | 1 + .../big5/big5-encode-form-errors-extBb.html | 153 + ...big5-encode-form-errors-extBb.html.headers | 1 + .../big5/big5-encode-form-errors-han.html | 195 + .../big5-encode-form-errors-han.html.headers | 1 + .../big5/big5-encode-form-errors-hangul.html | 152 + ...ig5-encode-form-errors-hangul.html.headers | 1 + .../big5/big5-encode-form-errors-misc.html | 192 + .../big5-encode-form-errors-misc.html.headers | 1 + .../big5/big5-encode-form-errors-pua.html | 152 + .../big5/big5-encode-form-x-x-big5.html | 149 + .../big5-encode-form-x-x-big5.html.headers | 1 + .../big5/big5-encode-form.html | 148 + .../big5/big5-encode-form.html.headers | 1 + .../big5/big5-encode-href-errors-han.html | 100 + .../big5-encode-href-errors-han.html.headers | 1 + .../big5/big5-encode-href-errors-hangul.html | 65 + ...ig5-encode-href-errors-hangul.html.headers | 1 + .../big5/big5-encode-href-errors-misc.html | 108 + .../big5-encode-href-errors-misc.html.headers | 1 + .../big5/big5-encode-href.html | 62 + .../big5/big5-encode-href.html.headers | 1 + .../legacy-mb-tchinese/big5/big5-encoder.js | 122 + .../big5/big5_chars-big5-hkscs.html | 1 + .../big5/big5_chars-big5-hkscs.html.headers | 1 + .../big5/big5_chars-cn-big5.html | 1 + .../big5/big5_chars-cn-big5.html.headers | 1 + .../big5/big5_chars-csbig5.html | 1 + .../big5/big5_chars-csbig5.html.headers | 1 + .../big5/big5_chars-x-x-big5.html | 1 + .../big5/big5_chars-x-x-big5.html.headers | 1 + .../legacy-mb-tchinese/big5/big5_chars.html | 1 + .../big5/big5_chars.html.headers | 1 + .../big5/big5_chars_extra.html | 1 + .../big5/big5_chars_extra.html.headers | 1 + .../legacy-mb-tchinese/big5/big5_errors.html | 8 + .../big5/big5_errors.html.headers | 1 + .../legacy-mb-tchinese/big5/big5_index.js | 3 + .../drm-retrieve-persistent-license.html | 9 +- .../playback-persistent-license-events.js | 69 +- .../playback-retrieve-persistent-license.js | 12 +- .../scripts/requestmediakeysystemaccess.js | 31 +- .../eventsource/eventsource-cross-origin.htm | 14 +- .../fetch/api/headers/headers-idl.html | 4 +- .../fetch/api/headers/headers-record.html | 92 +- .../api/request/request-consume-empty.html | 31 +- .../api/response/response-consume-empty.html | 31 +- .../dangling-markup-mitigation.tentative.html | 158 + .../embedded-credentials.tentative.sub.html | 89 + .../embedded-credential-window.sub.html | 19 + .../web-platform-tests/fonts/CanvasTest.sfd | 321 - .../api/document-exit-fullscreen-manual.html | 8 +- ...ocument-exit-fullscreen-timing-manual.html | 2 +- ...document-exit-fullscreen-twice-manual.html | 24 +- ...nt-request-fullscreen-active-document.html | 38 + ...est-fullscreen-and-exit-iframe-manual.html | 4 +- ...-fullscreen-and-move-to-iframe-manual.html | 5 +- ...t-fullscreen-and-remove-iframe-manual.html | 2 +- ...-request-fullscreen-and-remove-manual.html | 5 +- .../element-request-fullscreen-manual.html | 5 +- ...lement-request-fullscreen-not-allowed.html | 5 +- ...ment-request-fullscreen-timing-manual.html | 4 +- ...ement-request-fullscreen-twice-manual.html | 2 +- .../fullscreen/interfaces.html | 31 + .../model/move-to-iframe-manual.html | 29 + .../fullscreen/model/remove-first-manual.html | 10 +- .../fullscreen/model/remove-last-manual.html | 10 +- .../model/remove-parent-manual.html | 7 +- .../model/remove-single-manual.html | 7 +- .../generic-sensor/generic-sensor-tests.js | 186 + .../web-platform-tests/geolocation-API/OWNERS | 3 +- .../PositionOptions.https.html | 29 +- .../geolocation-API/clearWatch_TypeError.html | 1 - ...urrentPosition_permission_allow.https.html | 32 +- ...CurrentPosition_permission_deny.https.html | 10 +- .../geolocation-API/support.js | 2 +- .../watchPosition_permission_deny.https.html | 7 +- .../gyroscope/Gyroscope.https.html | 16 + .../gyroscope/Gyroscope_insecure_context.html | 20 + .../Gyroscope_onerror-manual.https.html | 20 + .../gyroscope/idlharness.https.html | 58 +- .../gyroscope/support-iframe.html | 10 + .../capture_image_environment-manual.html | 2 + .../capture_image_user-manual.html | 2 + .../capture_video_environment-manual.html | 2 + .../capture_video_user-manual.html | 2 + ...ation-fragment-scrolling-cross-origin.html | 7 +- .../location-origin-idna.sub.window.js | 11 + .../per-global.window.js | 3 + .../resources/post-your-origin.html | 3 + ...document_domain_setter_null.tentative.html | 82 + .../document_domain_setter_srcdoc.html | 84 + .../support/document_domain_frame.html | 21 + .../open-features-tokenization-noopener.html | 5 +- .../the-window-object/historical.window.js | 4 + .../security-window/window-security.html | 1 - .../window-indexed-properties-strict.html | 9 + .../window-indexed-properties.html | 9 + .../the-window-object/window-properties.html | 7 - .../windows/noreferrer-window-name.html | 47 +- .../dom-tree-accessors/nameditem-07.html | 109 + .../dom-tree-accessors/nameditem-08.html | 42 + .../html/dom/elements-metadata.js | 7 +- .../html/dom/elements-misc.js | 14 - .../html/dom/elements-tabular.js | 12 +- .../elements-in-the-dom/historical.html | 2 - .../html/dom/interfaces.html | 13 +- .../web-platform-tests/html/dom/reflection.js | 89 +- .../dom/resources/untested-interfaces.idl | 830 - .../html/dom/self-origin.sub.html | 10 +- .../datatransfer-constructor-001.html | 1 + .../dnd/datastore/datatransfer-types.html | 115 + .../relatedTarget-attribute-manual.html | 65 + .../references/spelling-markers-001-ref.html | 7 + .../spelling-markers-001.html | 15 + .../spelling-markers-002.html | 16 + .../spelling-markers-003.html | 15 + .../spelling-markers-004.html | 16 + .../spelling-markers-005.html | 16 + .../spelling-markers-006.html | 18 + .../spelling-markers-007.html | 25 + .../spelling-markers-008.html | 25 + .../spelling-markers-009.html | 25 + .../spelling-markers-010.html | 25 + .../broadcastchannel-success-and-failure.html | 35 + .../broadcastchannel-success.html | 58 + .../identity-not-preserved.html | 64 + ...nested-worker-success-dedicatedworker.html | 14 + .../nested-worker-success-sharedworker.html | 14 + .../nested-worker-success.js | 11 + .../shared-array-buffers/no-transferring.html | 31 + .../shared-array-buffers/resources/blank.html | 2 + .../resources/broadcastchannel-iframe.html | 19 + .../broadcastchannel-sharedworker.js | 7 + .../resources/broadcastchannel-worker.js | 9 + .../resources/echo-iframe.html | 11 + .../resources/echo-worker.js | 5 + .../incrementer-iframe-domain.sub.html | 11 + .../resources/incrementer-iframe.html | 10 + .../resources/incrementer-popup.html | 10 + .../incrementer-worker-with-channel.js | 7 + .../resources/incrementer-worker.js | 4 + .../resources/nested-iframe-1.html | 5 + .../resources/nested-iframe-2.html | 5 + .../resources/nested-iframe-3.html | 5 + .../nested-iframe-4-incrementer.html | 10 + .../resources/serviceworker-failure.js | 32 + .../resources/sharedworker-failure.js | 17 + .../resources/test-incrementer.js | 73 + .../resources/test-sab.js | 15 + .../serialization-via-history.html | 36 + .../serialization-via-idb.any.js | 40 + ...serialization-via-notifications-api.any.js | 23 + .../window-domain-success.sub.html | 26 + .../window-messagechannel-success.html | 22 + .../window-serviceworker-failure.https.html | 54 + .../window-sharedworker-failure.html | 31 + ...-similar-but-cross-origin-success.sub.html | 26 + .../window-simple-success.html | 70 + .../query-encoding/resources/resolve-url.js | 3 +- .../legend-block-formatting-context.html | 81 + .../the-fieldset-element-0/legend.html | 62 + .../the-hr-element-0/hr.html | 55 + .../setting-overflow-visible.html | 64 + .../iframe-body-margin-attributes.html | 32 + .../iframe-marginwidth-marginheight.html | 11 + .../body-marginwidth-marginheight.html | 2 + .../support/body-topmargin-leftmargin.html | 2 + .../option-with-br-ref.html | 21 + .../the-option-element/option-with-br.html | 32 + .../img-ismap-coordinates-iframe-after.html | 21 + .../img-ismap-coordinates-iframe-before.html | 21 + .../img-ismap-coordinates-iframe-inside.html | 21 + .../ismap/img-ismap-coordinates-manual.html | 78 + .../forms/resetting-a-form/reset-form-2.html | 61 + .../selection-after-content-change.html | 148 +- .../button-click-submits.html | 149 + .../forms/the-button-element/button-type.html | 41 + .../form-action-reflection-with-base-url.html | 36 + .../form-action-reflection.html | 35 + .../form-action-submission-with-base-url.html | 56 + .../form-action-submission.html | 56 + .../the-form-element/form-action-url.html | 9 - .../the-form-element/form-autocomplete.html | 6 +- .../form-elements-filter.html | 172 + .../resources/form-action-url-iframe.html | 11 - .../resources/form-no-action-with-base.html | 19 + .../resources/form-no-action.html | 18 + .../form-with-action-and-base.sub.html | 19 + .../resources/form-with-action.sub.html | 18 + .../target/form-action-url-target.html | 3 +- .../checkbox-click-events.html | 109 + .../the-input-element/radio-input-cancel.html | 41 + .../forms/the-input-element/radio.html | 34 + .../forms/the-input-element/valueMode.html | 136 +- .../proxy-click-to-associated-element.html | 58 + .../option-element-constructor.html | 130 + .../the-option-element/option-index.html | 54 + .../the-select-element/select-multiple.html | 36 + .../select-selectedOptions.html | 127 + .../value-defaultValue-textContent.html | 92 + .../contextmenu-historical.html | 99 + .../the-menu-element/contains.json | 18 - .../html/semantics/interfaces.js | 1 - .../module/bad-module-specifier.js | 3 + .../module/compilation-error-1.html | 28 + .../module/compilation-error-2.html | 28 + .../crossorigin-import-different.sub.html | 2 +- .../crossorigin-root-different.sub.html | 2 +- .../module/crossorigin.html | 12 +- .../module/currentScript-null.html | 13 + .../module/currentscript.js | 1 + .../module/cycle-tdz-access-a.js | 3 + .../module/cycle-tdz-access.js | 3 + .../module/cycle-unresolvable-a.js | 2 + .../module/cycle-unresolvable.js | 2 + .../module/error-and-slow-dependency.html | 19 + .../module/evaluation-error-1.html | 27 + .../module/evaluation-error-2.html | 27 + .../module/evaluation-error-3.html | 28 + .../module/evaluation-error-4.html | 28 + .../the-script-element/module/execorder.html | 18 +- .../module/export-something-nested.js | 2 + .../module/export-something.js | 3 + .../module/fetch-error-1.html | 15 + .../module/fetch-error-2.html | 15 + .../module/fetch-error-2.js | 2 + .../module/import-something-namespace.js | 5 + .../module/import-subgraph-404.html | 14 + .../module/imports-cycle.js | 3 +- .../the-script-element/module/imports-self.js | 3 +- .../the-script-element/module/imports.html | 8 +- .../module/instantiation-error-1.html | 33 + .../module/instantiation-error-1.js | 1 + .../module/instantiation-error-2.html | 33 + .../module/instantiation-error-3.html | 29 + .../module/late-namespace-request.html | 20 + .../module/late-star-export-request.html | 25 + .../module/missing-export-nested.js | 2 + .../module/missing-export.js | 2 + .../module/module-vs-script-1.html | 17 + .../module/module-vs-script-2.html | 17 + .../module/nested-missing-export.js | 2 + .../module/nomodule-attribute.html | 18 + .../module/resources/delayed-modulescript.py | 7 + .../module/script-for-event.html | 93 + .../module/set-currentScript-on-window.js | 1 + .../module/single-evaluation-1.html | 20 + .../module/single-evaluation-2.html | 20 + .../the-script-element/module/slow-cycle.html | 11 + .../module/slow-module-graph-a.js | 3 + .../module/slow-module-graph-b.js | 1 + .../module/specifier-error.html | 22 + .../module/syntaxerror-nested.js | 2 + .../the-script-element/module/syntaxerror.js | 2 + .../the-script-element/module/this-nested.js | 2 + .../the-script-element/module/this.js | 1 + .../the-script-element/module/throw-nested.js | 2 + .../the-script-element/module/throw.js | 2 + .../nomodule-set-on-async-classic-script.html | 15 +- ...-synchronously-loaded-classic-scripts.html | 5 - .../selectors/pseudo-classes/checked.html | 9 +- .../selectors/pseudo-classes/enabled.html | 5 +- .../processing-model-1/col-span-limits.html | 59 + .../processing-model-1/span-limits.html | 65 + .../serializing.html | 2 +- .../xhtml-mathml-dtd-entity-1.htm | 13 + .../xhtml-mathml-dtd-entity-10.htm | 13 + .../xhtml-mathml-dtd-entity-2.htm | 13 + .../xhtml-mathml-dtd-entity-3.htm | 13 + .../xhtml-mathml-dtd-entity-4.htm | 13 + .../xhtml-mathml-dtd-entity-5.htm | 13 + .../xhtml-mathml-dtd-entity-6.htm | 13 + .../xhtml-mathml-dtd-entity-7.htm | 13 + .../xhtml-mathml-dtd-entity-8.htm | 13 + .../xhtml-mathml-dtd-entity-9.htm | 13 + .../xhtml-mathml-dtd-entity-support.htm | 46 +- .../callback-multiple-calls.html | 15 +- .../events}/contextmenu-event-manual.htm | 0 .../event-handler-all-global-events.html | 74 + .../events/event-handler-onauxclick.html | 58 - .../events/inline-event-handler-ordering.html | 1 + ...-uncompiled-raw-handler-compiled-late.html | 2 +- .../canblock-dedicatedworker.html | 13 + .../canblock-serviceworker.https.html | 14 + .../canblock-sharedworker.html | 13 + .../canblock-window.html | 21 + .../worker-that-requires-failure.js | 13 + .../worker-that-requires-success.js | 11 + .../NavigatorID.worker.js | 4 - .../navigator-pluginarray.html | 55 + .../{NavigatorID.js => navigator.any.js} | 6 +- .../image-decodes/image-decode-iframe.html | 55 + .../image-decode-path-changes.html | 112 + .../image-decodes/image-decode.html | 112 + .../input-events-typing-data-manual.html | 38 + .../wpt/web-platform-tests/interfaces/OWNERS | 4 + .../web-platform-tests/interfaces/cssom.idl | 294 + .../wpt/web-platform-tests/interfaces/dom.idl | 549 + .../interfaces/fullscreen.idl | 20 + .../interfaces/geometry.idl | 267 + .../interfaces.idl => interfaces/html.idl} | 199 +- .../interfaces/mediacapture-main.idl | 254 + .../interfaces/remoteplayback.idl | 23 + .../interfaces/touchevents.idl | 10 + .../interfaces/uievents.idl | 60 + .../interfaces/webrtc-pc.idl | 657 + .../js/builtins/Promise-subclassing.html | 4 +- .../keyboard-lock/idlharness.https.html | 41 + .../navigator-cancelKeyboardLock.https.html | 12 + ...boardLock-two-parallel-requests.https.html | 15 + ...ardLock-two-sequential-requests.https.html | 14 + .../navigator-requestKeyboardLock.https.html | 13 + tests/wpt/web-platform-tests/lint | 3 +- tests/wpt/web-platform-tests/lint.whitelist | 17 +- .../magnetometer/Magnetometer.https.html | 16 + .../Magnetometer_insecure_context.html | 20 + .../Magnetometer_onerror-manual.https.html | 20 + .../magnetometer/idlharness.https.html | 58 +- .../magnetometer/support-iframe.html | 10 + .../media-capabilities/decodingInfo.html | 125 + .../web-platform-tests/media/CanvasTest.ttf | Bin 2528 -> 0 bytes tests/wpt/web-platform-tests/media/OWNERS | 1 + .../mediacapture-image/idlharness.html | 185 + .../mediacapture-streams/GUM-api.https.html | 4 +- .../mediacapture-streams/GUM-deny.https.html | 59 +- .../MediaDevices-IDL-all.html | 45 + .../MediaDevices-IDL-enumerateDevices.html | 62 + .../mixed-content/imageset.https.sub.html | 31 + .../resources/webperftestharness.js | 37 - .../navigation-timing/test_document_open.html | 1 + .../test_navigate_within_document.html | 1 + .../test_navigation_attributes_exist.html | 1 + .../test_navigation_redirectCount_none.html | 1 + .../test_navigation_type_backforward.html | 1 + .../test_navigation_type_enums.html | 1 + .../test_navigation_type_reload.html | 1 + .../test_no_previous_document.html | 1 + .../test_performance_attributes_exist.html | 1 + ...erformance_attributes_exist_in_object.html | 1 + .../navigation-timing/test_readwrite.html | 1 + .../test_timing_attributes_exist.html | 1 + .../test_timing_attributes_order.html | 1 + .../test_timing_client_redirect.html | 1 + .../navigation-timing/test_timing_reload.html | 1 + .../test_timing_server_redirect.html | 1 + .../test_timing_xserver_redirect.html | 1 + .../test_unique_performance_objects.html | 1 + .../netinfo/netinfo-basics.html | 35 + .../Microsoft/sandbox/iframe_sandbox_009.htm | 9 - .../Microsoft/sandbox/sandbox_009-manual.htm | 37 - .../orientation-sensor/OWNERS | 5 + .../orientation-sensor/idlharness.https.html | 89 + .../web-platform-tests/payment-request/OWNERS | 3 +- .../payment-request-abort-method.https.html | 65 + ...t-request-canmakepayment-method.https.http | 148 + ...yment-request-constructor-crash.https.html | 269 + .../payment-request-constructor.https.html | 861 + .../payment-request-id.https.html | 18 + ...shippingaddresschange-attribute.https.html | 63 + ...nshippingoptionchange-attribute.https.html | 64 + .../payment-request-response-id.html | 140 + .../payment-request-show-method.https.html | 40 + ...request-update-event-constructor.http.html | 14 + ...equest-update-event-constructor.https.html | 51 + ...-update-event-updatewith-method.https.html | 66 + .../performance-timeline/po-observe.html | 82 + ...nt_coalesced_events_attributes-manual.html | 6 + .../extension/pointerevent_constructor.html | 6 +- .../pointerevent_pointerleave_pen-manual.html | 24 +- ...ss_compat_events_on_drag_mouse-manual.html | 18 +- ...ouch-action-rotated-divs_touch-manual.html | 92 + ...interlock_after_pointercapture-manual.html | 69 + ...pointerlock_supercedes_capture-manual.html | 93 + ...rlock_remove_target_on_mouseup-manual.html | 20 + .../preload/download-resources.html | 8 +- .../preload/onerror-event.html | 13 +- .../preload/onload-event.html | 9 +- .../preload/preload-with-type.html | 4 +- .../preload/reflected-as-value.html | 25 + .../preload/single-download-preload.html | 6 +- ...ionAvailability_onchange-manual.https.html | 67 +- ...tationConnection_onclose-manual.https.html | 145 + ...resentationConnection_onclosed-manual.html | 48 - ...tionConnection_onconnect-manual.https.html | 72 + ...entationConnection_onconnected-manual.html | 46 - ...tionConnection_onmessage-manual.https.html | 192 +- ...onConnection_onterminate-manual.https.html | 157 + ...ntationConnection_onterminated-manual.html | 54 - ...sentationConnection_send-manual.https.html | 167 +- ...st_onconnectionavailable-manual.https.html | 88 +- .../PresentationRequest_success.https.html | 47 +- .../controlling-ua/defaultRequest.https.html | 24 + .../controlling-ua/getAvailability.https.html | 35 +- ...ctToPresentation_success-manual.https.html | 197 +- .../controlling-ua/support/iframe.html | 99 + .../controlling-ua/support/presentation.html | 84 +- ...st_onconnectionavailable-manual.https.html | 78 + ...tationConnection_onclose-manual.https.html | 85 + ...tionConnection_terminate-manual.https.html | 71 + ...st_onconnectionavailable_receiving-ua.html | 92 + ...tationConnection_onclose_receiving-ua.html | 89 + ...tionConnection_onmessage_receiving-ua.html | 20 +- ...tionConnection_terminate_receiving-ua.html | 23 + .../receiving-ua/support/iframe.html | 22 + .../receiving-ua/support/stash.js | 17 +- .../quirks-mode/active-and-hover-manual.html | 9 +- .../remote-playback/README.md | 5 - .../cancel-watch-availability.html | 2 +- .../remote-playback/idlharness.html | 41 + .../resource-timing/resource-timing.js | 2 +- .../resource_TAO_match_origin.htm | 55 + .../resource_TAO_match_wildcard.htm | 55 + .../resource-timing/resource_TAO_multi.htm | 55 + .../resource-timing/resource_TAO_null.htm | 55 + .../resource-timing/resource_TAO_origin.htm | 55 + .../resource_TAO_origin_uppercase.htm | 55 + .../resource-timing/resource_TAO_space.htm | 55 + .../resource-timing/resource_TAO_wildcard.htm | 55 + .../resource-timing/resource_TAO_zero.htm | 55 + .../resource-timing/resources/TAOResponse.py | 38 + .../resources/iframe_TAO_match_origin.html | 21 + .../resources/iframe_TAO_match_wildcard.html | 21 + .../resources/iframe_TAO_multi.html | 21 + .../resources/iframe_TAO_null.html | 21 + .../resources/iframe_TAO_origin.html | 21 + .../iframe_TAO_origin_uppercase.html | 21 + .../resources/iframe_TAO_space.html | 21 + .../resources/iframe_TAO_wildcard.html | 21 + .../resources/iframe_TAO_zero.html | 21 + .../web-platform-tests/resources/.gitmodules | 3 - tests/wpt/web-platform-tests/resources/OWNERS | 2 + .../resources/examples/apisample.htm | 175 - .../resources/examples/apisample14.html | 29 - .../resources/examples/apisample15.html | 26 - .../resources/examples/apisample17.html | 59 - .../resources/examples/apisample19.html | 26 - .../resources/examples/apisample2.htm | 19 - .../resources/examples/apisample3.htm | 17 - .../resources/examples/apisample4.htm | 16 - .../resources/examples/apisample5.htm | 18 - .../resources/examples/apisample6.html | 10 - .../resources/examples/apisample7.html | 10 - .../resources/examples/apisample8.html | 8 - .../resources/examples/apisample9.html | 7 - .../resources/idlharness.js | 301 +- .../web-platform-tests/resources/readme.md | 3 +- .../resources/test/README.md | 61 + .../resources/test/config.test.json | 27 + .../resources/test/conftest.py | 134 + .../resources/test/harness.html | 26 + .../resources/test/tests/add_cleanup.html | 96 + .../resources/test/tests/add_cleanup_err.html | 48 + .../test/tests/add_cleanup_err_multi.html | 55 + .../resources/test/tests/api-tests-1.html | 384 + .../resources/test/tests/api-tests-2.html | 47 + .../resources/test/tests/api-tests-3.html | 36 + .../test/tests/generate-callback.html | 167 + .../test_primary_interface_of.html | 111 + .../tests/iframe-callback.html} | 27 +- .../tests/iframe-consolidate-errors.html} | 30 +- .../test/tests/iframe-consolidate-tests.html | 95 + .../tests/iframe-msg.html} | 27 +- .../resources/test/tests/order.html | 39 + .../tests/promise-async.html} | 65 +- .../tests/promise.html} | 93 +- .../test/tests/single-page-test-fail.html | 29 + .../tests/single-page-test-no-assertions.html | 26 + .../test/tests/single-page-test-no-body.html | 27 + .../test/tests/single-page-test-pass.html | 29 + .../test/tests/uncaught-exception-handle.html | 35 + .../test/tests/uncaught-exception-ignore.html | 37 + .../test/tests/worker-dedicated.html | 97 + .../tests/worker-error.js} | 2 +- .../tests/worker-service.html} | 69 +- .../resources/test/tests/worker-shared.html | 80 + .../tests/worker.js} | 2 +- .../web-platform-tests/resources/test/tox.ini | 13 + .../resources/test/wptserver.py | 48 + .../resources/testharness.js | 59 +- .../resources/webidl2/README.md | 726 +- .../resources/webidl2/lib/webidl2.js | 2068 +- .../resources/webidl2/lib/writer.js | 498 +- .../resources/webidl2/package.json | 10 +- .../resources/webidl2/test/invalid.js | 12 +- .../webidl2/test/invalid/idl/record-key.widl | 3 + .../webidl2/test/invalid/json/record-key.json | 4 + .../resources/webidl2/test/syntax.js | 6 +- .../test/syntax/idl/extended-attributes.widl | 7 +- .../webidl2/test/syntax/idl/map.widl | 5 - .../webidl2/test/syntax/idl/namespace.widl | 10 + .../webidl2/test/syntax/idl/record.widl | 8 + .../test/syntax/idl/typedef-nested.widl | 22 - .../webidl2/test/syntax/idl/typedef-union.idl | 4 + .../webidl2/test/syntax/idl/uniontype.widl | 1 + .../test/syntax/json/extended-attributes.json | 35 +- .../json/identifier-qualified-names.json | 3 +- .../webidl2/test/syntax/json/map.json | 29 - .../webidl2/test/syntax/json/namespace.json | 134 + .../webidl2/test/syntax/json/record.json | 184 + .../test/syntax/json/typedef-nested.json | 226 - .../test/syntax/json/typedef-union.json | 49 + .../webidl2/test/syntax/json/typedef.json | 17 +- .../webidl2/test/syntax/json/uniontype.json | 204 +- .../webidl2/test/web/make-web-tests.js | 5 +- .../resources/webidl2/test/web/run-tests.js | 10 +- .../scroll-anchoring/README.md | 8 + ...pos-containing-block-outside-scroller.html | 55 + ...s-contributes-to-static-parent-bounds.html | 40 + .../ancestor-change-heuristic.html | 81 + .../anchor-updates-after-explicit-scroll.html | 51 + .../anchoring-with-bounds-clamping-div.html | 38 + .../anchoring-with-bounds-clamping.html | 28 + .../scroll-anchoring/anonymous-block-box.html | 34 + .../scroll-anchoring/basic.html | 23 + .../clipped-scrollers-skipped.html | 38 + .../descend-into-container-with-float.html | 36 + .../descend-into-container-with-overflow.html | 30 + .../exclude-fixed-position.html | 26 + .../scroll-anchoring/inline-block.html | 26 + .../negative-layout-overflow.html | 44 + .../scroll-anchoring/opt-out.html | 74 + .../position-change-heuristic.html | 82 + .../start-edge-in-block-layout-direction.html | 136 + .../scroll-anchoring/subtree-exclusion.html | 45 + .../scroll-anchoring/wrapped-text.html | 28 + .../basic-popup-and-iframe-tests.https.js | 2 +- .../selection/collapse-00.html | 4 +- .../selection/collapse-15.html | 14 + .../selection/collapse-30.html | 2 +- .../selection/collapse-45.html | 14 + .../web-platform-tests/selection/collapse.js | 37 +- .../selection/interfaces.html | 2 +- .../selection/removeAllRanges.html | 33 +- .../selection/removeRange.html | 4 +- .../web-platform-tests/selection/type.html | 31 + .../Opera/ParentNode-query-queryAll.html | 89 - .../Opera/ParentNode-query-queryAll.js | 275 - .../server-timing/resources/blue.png | Bin 0 -> 485 bytes .../resources/blue.png.sub.headers | 1 + .../server-timing/resources/green.png | Bin 0 -> 87 bytes .../resources/green.png.sub.headers | 1 + .../server-timing/test_server_timing.html | 50 + .../test_server_timing.html.sub.headers | 1 + .../service-worker/client-navigate.https.html | 68 +- .../clients-get-client-types.https.html | 51 +- .../service-worker/clients-get.https.html | 6 +- .../clients-matchall-client-types.https.html | 24 +- ...ients-matchall-exact-controller.https.html | 2 +- ...s-matchall-include-uncontrolled.https.html | 4 +- .../clients-matchall.https.html | 2 +- ...xtendable-event-async-waituntil.https.html | 16 + .../service-worker/fetch-csp.https.html | 111 +- .../fetch-event-async-respond-with.https.html | 3 +- .../fetch-event-network-error.https.html | 1 - ...tch-event-respond-with-argument.https.html | 41 + ...nt-respond-with-readable-stream.https.html | 31 + ...esponse-body-with-invalid-chunk.https.html | 34 + ...-respond-with-stops-propagation.https.html | 3 +- .../service-worker/fetch-event.https.html | 54 +- .../fetch-mixed-content-to-inscope.https.html | 6 - ...fetch-mixed-content-to-outscope.https.html | 6 - ...est-css-cross-origin-mime-check.https.html | 50 + .../fetch-request-fallback.https.html | 353 +- .../fetch-request-html-imports.https.html | 64 + .../fetch-request-resources.https.html | 71 +- .../fetch-request-xhr-sync.https.html | 53 + .../fetch-request-xhr.https.html | 8 +- .../fetch-response-taint.https.html | 217 + .../fetch-response-xhr.https.html | 18 +- .../getregistrations.https.html | 22 +- ...-to-https-redirect-and-register.https.html | 47 + ...e-sandbox-register-link-element.https.html | 53 + .../import-scripts-resource-map.https.html | 23 + .../import-scripts-updated-flag.https.html | 83 + .../service-worker/indexeddb.https.html | 85 +- .../service-worker/interfaces.https.html | 4 +- .../invalid-blobtype.https.html | 2 +- .../service-worker/invalid-header.https.html | 2 +- .../iso-latin1-header.https.html | 32 + .../multiple-register.https.html | 2 +- .../resource-timing.https.html | 92 + .../resources/resource-timing-scope.py | 19 + .../resources/resource-timing-worker.js | 19 + .../navigation-redirect-body.https.html | 53 + .../navigation-redirect-to-http.https.html | 25 + .../navigation-redirect.https.html | 26 +- .../onactivate-script-error.https.html | 11 +- .../opaque-response-preloaded.https.html | 33 + .../postmessage-msgport-to-client.https.html | 76 +- .../postmessage-to-client.https.html | 82 +- .../service-worker/postmessage.https.html | 169 +- .../service-worker/ready.https.html | 169 +- .../redirected-response.https.html | 198 + .../referrer-policy-header.https.html | 43 + .../register-foreign-fetch-errors.https.html | 8 + ...same-scope-different-script-url.https.html | 15 +- ...ation-service-worker-attributes.https.html | 44 +- .../registration-useCache.https.html | 223 - .../request-body-blob.https.html | 31 + .../request-end-to-end.https.html | 97 +- .../service-worker/resource-timing.https.html | 2 +- .../resources/client-navigate-worker.js | 29 +- .../clients-get-client-types-frame-worker.js | 11 + .../clients-get-client-types-frame.html | 7 + .../clients-get-client-types-worker.js | 11 + .../resources/clients-get-worker.js | 1 + ...-matchall-client-types-dedicated-worker.js | 3 + .../extendable-event-async-waituntil.js | 24 +- .../resources/fetch-access-control-login.html | 2 +- .../resources/fetch-cors-xhr-iframe.html | 1 - .../resources/fetch-csp-iframe.html | 80 +- ...ch-event-respond-with-argument-iframe.html | 55 + ...etch-event-respond-with-argument-worker.js | 14 + ...t-respond-with-readable-stream-iframe.html | 9 + ...ent-respond-with-readable-stream-worker.js | 13 + ...sponse-body-with-invalid-chunk-iframe.html | 14 + ...response-body-with-invalid-chunk-worker.js | 12 + .../resources/fetch-event-test-worker.js | 6 + ...uest-css-cross-origin-mime-check-cross.css | 1 + ...est-css-cross-origin-mime-check-cross.html | 1 + ...st-css-cross-origin-mime-check-iframe.html | 17 + ...quest-css-cross-origin-mime-check-same.css | 1 + ...uest-css-cross-origin-mime-check-same.html | 1 + ...uest-css-cross-origin-mime-check-worker.js | 20 + .../fetch-request-fallback-iframe.html | 19 +- .../fetch-request-html-imports-iframe.html | 13 + .../fetch-request-html-imports-worker.js | 30 + .../fetch-request-resources-iframe.https.html | 8 + .../fetch-request-resources-worker.js | 1 + .../fetch-request-xhr-iframe.https.html | 79 +- .../fetch-request-xhr-sync-iframe.html | 13 + .../fetch-request-xhr-sync-worker.js | 7 + .../fetch-response-taint-iframe.html | 2 + .../fetch-response-xhr-iframe.https.html | 20 +- .../fetch-rewrite-worker-referrer-policy.js | 4 + ...-rewrite-worker-referrer-policy.js.headers | 2 + ...to-https-redirect-and-register-iframe.html | 21 + .../iframe-register-link-element.html | 16 + .../resources/import-scripts-echo.py | 6 + .../import-scripts-resource-map-worker.js | 15 + .../import-scripts-updated-flag-worker.js | 29 + .../resources/import-scripts-version.py | 17 + .../resources/indexeddb-worker.js | 73 +- .../resources/install-event-type-worker.js | 9 +- .../resources/interfaces-worker.sub.js | 12 +- .../invalid-blobtype-iframe.https.html | 3 +- .../invalid-header-iframe.https.html | 3 +- .../resources/iso-latin1-header-iframe.html | 23 + .../resources/iso-latin1-header-worker.js | 12 + .../navigation-redirect-body-worker.js | 11 + .../resources/navigation-redirect-body.py | 9 + .../navigation-redirect-out-scope.py | 7 +- .../resources/navigation-redirect-scope1.py | 7 +- .../resources/navigation-redirect-scope2.py | 7 +- .../navigation-redirect-to-http-iframe.html | 42 + .../navigation-redirect-to-http-worker.js | 22 + .../opaque-response-preloaded-iframe.html | 34 + .../opaque-response-preloaded-worker.js | 12 + .../postmessage-msgport-to-client-worker.js | 15 +- .../resources/postmessage-to-client-worker.js | 4 +- .../postmessage-transferables-worker.js | 24 + .../resources/referrer-policy-iframe.html | 32 + .../register-foreign-fetch-errors-worker.js | 134 + .../resources/register-iframe.html | 4 + .../resources/request-body-blob-iframe.html | 20 + .../resources/request-body-blob-worker.js | 11 + .../resources/request-end-to-end-worker.js | 55 +- .../skip-waiting-installed-worker.js | 15 +- .../update-max-aged-worker-imported-script.py | 22 - .../resources/update-max-aged-worker.py | 26 - .../resources/windowclient-navigate-worker.js | 66 + .../serviceworkerobject-scripturl.https.html | 31 +- .../skip-waiting-installed.https.html | 23 +- ...skip-waiting-using-registration.https.html | 39 +- .../skip-waiting-without-client.https.html | 1 - ...ting-without-using-registration.https.html | 13 +- .../service-worker/skip-waiting.https.html | 11 +- .../service-worker/synced-state.https.html | 125 +- .../unregister-then-register.https.html | 41 +- .../update-after-oneday.https.html | 2 - .../service-worker/update.https.html | 24 +- .../windowclient-navigate.https.html | 178 + .../Range-prototype-insertNode.html | 18 + .../shadow-dom/slotchange-event.html | 36 +- .../slots-fallback-in-document.html | 55 + .../shadow-dom/slots-fallback.html | 3 +- .../web-platform-tests/shadow-dom/slots.html | 6 +- .../persist-permission-manual.https.html | 27 + .../storage/persisted-worker.https.html | 16 + .../storage/persisted.https.html | 14 + .../storage/storage-persisted.js | 18 + .../streams/piping/flow-control.js | 126 +- .../streams/readable-byte-streams/general.js | 22 + .../floating-point-total-queue-size.js | 2 + .../floating-point-total-queue-size.js | 2 + .../web-platform-tests/svg/interfaces.html | 8 - .../wpt/web-platform-tests/tools/.gitmodules | 7 - .../wpt/web-platform-tests/tools/.travis.yml | 37 - tests/wpt/web-platform-tests/tools/OWNERS | 2 + .../browserutils/__init__.py} | 0 .../tools/browserutils/browser.py | 325 + .../tools/browserutils/install.py | 23 + .../tools/browserutils/requirements.txt | 1 + .../tools/browserutils/utils.py | 113 + .../tools/browserutils/virtualenv.py | 52 + .../wpt/web-platform-tests/tools/conftest.py | 5 +- .../wpt/web-platform-tests/tools/lint/lint.py | 7 +- .../web-platform-tests/tools/localpaths.py | 2 + tests/wpt/web-platform-tests/tools/pytest.ini | 2 +- .../tools/runner/index.html | 5 +- .../tools/runner/runner.css | 13 + .../web-platform-tests/tools/runner/runner.js | 87 +- tests/wpt/web-platform-tests/tools/tox.ini | 6 +- .../tools/webdriver/COPYING | 373 - .../tools/webdriver/README.md | 4 +- .../tools/webdriver/setup.py | 6 +- .../tools/webdriver/webdriver/__init__.py | 4 - .../tools/webdriver/webdriver/client.py | 45 +- .../tools/webdriver/webdriver/error.py | 5 - .../tools/webdriver/webdriver/servo.py | 4 - .../tools/webdriver/webdriver/transport.py | 5 +- tests/wpt/web-platform-tests/tools/wptrun.py | 308 + .../tools/wptrunner/.gitignore | 8 + .../tools/{ => wptrunner}/LICENSE | 0 .../tools/wptrunner/MANIFEST.in | 17 + .../web-platform-tests/tools/wptrunner/OWNERS | 1 + .../tools/wptrunner/README.rst | 242 + .../tools/wptrunner/docs/Makefile | 177 + .../tools/wptrunner/docs/architecture.svg | 1 + .../tools/wptrunner/docs/conf.py | 267 + .../tools/wptrunner/docs/design.rst | 106 + .../tools/wptrunner/docs/expectation.rst | 248 + .../tools/wptrunner/docs/index.rst | 24 + .../tools/wptrunner/docs/make.bat | 242 + .../tools/wptrunner/docs/usage.rst | 238 + .../tools/wptrunner/requirements.txt | 4 + .../tools/wptrunner/requirements_chrome.txt | 2 + .../tools/wptrunner/requirements_edge.txt | 2 + .../tools/wptrunner/requirements_firefox.txt | 6 + .../tools/wptrunner/requirements_sauce.txt | 2 + .../tools/wptrunner/requirements_servo.txt | 1 + .../tools/wptrunner/setup.py | 74 + .../reftest/reftest_and_fail.html.ini | 3 + .../reftest/reftest_cycle_fail.html.ini | 3 + .../reftest/reftest_match_fail.html.ini | 3 + .../reftest/reftest_mismatch_fail.html.ini | 3 + .../reftest/reftest_ref_timeout.html.ini | 3 + .../metadata/reftest/reftest_timeout.html.ini | 3 + .../metadata/testharness/firefox/__dir__.ini | 2 + .../firefox/subdir/test_pref_reset.html.ini | 2 + .../firefox/test_pref_set.html.ini | 3 + .../metadata/testharness/subdir/__dir__.ini | 1 + .../testharness/subdir/testharness_1.html.ini | 2 + .../metadata/testharness/tags/__dir__.ini | 1 + .../testharness/tags/testharness_0.html.ini | 4 + .../testharness/tags/testharness_1.html.ini | 2 + .../testharness/tags/testharness_2.html.ini | 4 + .../testharness/testharness_0.html.ini | 4 + .../testharness/testharness_error.html.ini | 3 + .../testharness/testharness_timeout.html.ini | 3 + .../tools/wptrunner/test/test.cfg.example | 20 + .../tools/wptrunner/test/test.py | 166 + .../test/testdata/reftest/green-ref.html | 4 + .../test/testdata/reftest/green.html | 3 + .../wptrunner/test/testdata/reftest/red.html | 3 + .../test/testdata/reftest/reftest.https.html | 9 + .../testdata/reftest/reftest_and_fail.html | 5 + .../reftest/reftest_and_fail_0-ref.html | 5 + .../test/testdata/reftest/reftest_cycle.html | 5 + .../testdata/reftest/reftest_cycle_0-ref.html | 5 + .../testdata/reftest/reftest_cycle_1-ref.html | 5 + .../testdata/reftest/reftest_cycle_fail.html | 5 + .../reftest/reftest_cycle_fail_0-ref.html | 5 + .../test/testdata/reftest/reftest_match.html | 5 + .../testdata/reftest/reftest_match_fail.html | 5 + .../testdata/reftest/reftest_mismatch.html | 5 + .../reftest/reftest_mismatch_fail.html | 5 + .../test/testdata/reftest/reftest_or_0.html | 6 + .../reftest/reftest_ref_timeout-ref.html | 6 + .../testdata/reftest/reftest_ref_timeout.html | 6 + .../testdata/reftest/reftest_timeout.html | 6 + .../test/testdata/reftest/reftest_wait_0.html | 13 + .../firefox/subdir/test_pref_inherit.html | 10 + .../firefox/subdir/test_pref_reset.html | 10 + .../testharness/firefox/test_pref_dir.html | 10 + .../testharness/firefox/test_pref_set.html | 10 + .../testharness/subdir/testharness_1.html} | 9 +- .../testharness/tags/testharness_0.html | 9 + .../testharness/tags/testharness_1.html | 9 + .../testharness/tags/testharness_2.html | 9 + .../testharness/testharness.https.html | 10 + .../testdata/testharness/testharness_0.html | 9 + .../testharness/testharness_error.html | 7 + .../testharness/testharness_long_timeout.html | 9 + .../testharness/testharness_timeout.html | 6 + .../tools/wptrunner/tox.ini | 17 + .../tools/wptrunner/wptrunner.default.ini | 11 + .../tools/wptrunner/wptrunner/__init__.py | 0 .../wptrunner/wptrunner/browsers/__init__.py | 30 + .../browsers/b2g_setup/certtest_app.zip | Bin 0 -> 1237 bytes .../wptrunner/wptrunner/browsers/base.py | 162 + .../wptrunner/wptrunner/browsers/chrome.py | 94 + .../wptrunner/wptrunner/browsers/edge.py | 74 + .../wptrunner/wptrunner/browsers/firefox.py | 357 + .../wptrunner/wptrunner/browsers/sauce.py | 208 + .../browsers/sauce_setup/edge-prerun.bat | 2 + .../browsers/sauce_setup/safari-prerun.sh | 2 + .../wptrunner/browsers/server-locations.txt | 31 + .../wptrunner/wptrunner/browsers/servo.py | 81 + .../wptrunner/browsers/servodriver.py | 165 + .../tools/wptrunner/wptrunner/config.json | 7 + .../tools/wptrunner/wptrunner/config.py | 60 + .../tools/wptrunner/wptrunner/environment.py | 223 + .../wptrunner/wptrunner/executors/__init__.py | 4 + .../wptrunner/wptrunner/executors/base.py | 325 + .../wptrunner/executors/executormarionette.py | 621 + .../wptrunner/executors/executorselenium.py | 260 + .../wptrunner/executors/executorservo.py | 367 + .../executors/executorservodriver.py | 257 + .../wptrunner/wptrunner/executors/process.py | 20 + .../executors/pytestrunner/__init__.py | 1 + .../executors/pytestrunner/runner.py | 115 + .../wptrunner/executors/reftest-wait.js | 18 + .../executors/reftest-wait_servodriver.js | 15 + .../executors/reftest-wait_webdriver.js | 33 + .../wptrunner/wptrunner/executors/reftest.js | 1 + .../executors/testharness_marionette.js | 32 + .../executors/testharness_servodriver.js | 2 + .../executors/testharness_webdriver.js | 29 + .../tools/wptrunner/wptrunner/expected.py | 14 + .../tools/wptrunner/wptrunner/hosts.py | 100 + .../wptrunner/wptrunner/manifestexpected.py | 262 + .../wptrunner/wptrunner/manifestinclude.py | 149 + .../wptrunner/wptrunner/manifestupdate.py | 460 + .../tools/wptrunner/wptrunner/metadata.py | 351 + .../tools/wptrunner/wptrunner/products.py | 69 + .../tools/wptrunner/wptrunner/reduce.py | 193 + .../wptrunner/testharness_runner.html | 6 + .../wptrunner/testharnessreport-servo.js | 17 + .../testharnessreport-servodriver.js | 23 + .../wptrunner/wptrunner/testharnessreport.js | 13 + .../tools/wptrunner/wptrunner/testloader.py | 637 + .../tools/wptrunner/wptrunner/testrunner.py | 784 + .../wptrunner/wptrunner/tests/__init__.py | 0 .../wptrunner/wptrunner/tests/test_chunker.py | 91 + .../wptrunner/wptrunner/tests/test_hosts.py | 56 + .../wptrunner/tests/test_testloader.py | 29 + .../wptrunner/wptrunner/tests/test_update.py | 328 + .../wptrunner/wptrunner/update/__init__.py | 47 + .../tools/wptrunner/wptrunner/update/base.py | 65 + .../wptrunner/wptrunner/update/metadata.py | 71 + .../tools/wptrunner/wptrunner/update/state.py | 133 + .../tools/wptrunner/wptrunner/update/sync.py | 197 + .../tools/wptrunner/wptrunner/update/tree.py | 382 + .../wptrunner/wptrunner/update/update.py | 159 + .../tools/wptrunner/wptrunner/vcs.py | 49 + .../wptrunner/wptrunner/webdriver_server.py | 233 + .../wptrunner/wptrunner/wptcommandline.py | 464 + .../tools/wptrunner/wptrunner/wptlogging.py | 121 + .../wptrunner/wptmanifest/__init__.py | 4 + .../wptmanifest/backends/__init__.py | 0 .../wptmanifest/backends/conditional.py | 330 + .../wptrunner/wptmanifest/backends/static.py | 220 + .../wptrunner/wptrunner/wptmanifest/node.py | 157 + .../wptrunner/wptrunner/wptmanifest/parser.py | 746 + .../wptrunner/wptmanifest/serializer.py | 136 + .../wptrunner/wptmanifest/tests/__init__.py | 0 .../wptmanifest/tests/test_conditional.py | 143 + .../wptmanifest/tests/test_parser.py | 75 + .../wptmanifest/tests/test_serializer.py | 227 + .../wptmanifest/tests/test_static.py | 98 + .../wptmanifest/tests/test_tokenizer.py | 357 + .../tools/wptrunner/wptrunner/wptrunner.py | 262 + .../tools/wptrunner/wptrunner/wpttest.py | 350 + .../tools/wptserve/setup.py | 2 +- .../tools/wptserve/tests/functional/base.py | 5 +- .../wptserve/tests/functional/test_cookies.py | 5 +- .../tests/functional/test_handlers.py | 5 +- .../wptserve/tests/functional/test_pipes.py | 3 + .../wptserve/tests/functional/test_request.py | 5 +- .../tests/functional/test_response.py | 5 +- .../wptserve/tests/functional/test_server.py | 4 +- .../wptserve/tests/functional/test_stash.py | 5 +- .../web-platform-tests/tools/wptserve/tox.ini | 18 - .../auxclick/auxclick_event-manual.html | 0 .../mouse/mouseevent_move_button-manual.html | 85 + .../web-platform-tests/update-built-tests.sh | 1 + tests/wpt/web-platform-tests/url/OWNERS | 1 + tests/wpt/web-platform-tests/url/README.md | 12 - tests/wpt/web-platform-tests/url/failure.html | 4 + ...historical.worker.js => historical.any.js} | 9 +- .../web-platform-tests/url/historical.html | 37 - .../web-platform-tests/url/interfaces.any.js | 51 + .../web-platform-tests/url/interfaces.html | 64 - tests/wpt/web-platform-tests/url/toascii.json | 149 + .../web-platform-tests/url/toascii.window.js | 62 + .../url/urlsearchparams-constructor.html | 14 +- .../web-platform-tests/url/urltestdata.json | 415 +- .../user-timing/measure.html | 1 + .../measure_navigation_timing.html | 1 + .../resources/webperftestharness.js | 37 - tests/wpt/web-platform-tests/viewport/OWNERS | 2 + ...t-dimensions-custom-scrollbars-manual.html | 146 + ...viewport-dimensions-scrollbars-manual.html | 132 + ...rt-no-resize-event-on-overflow-recalc.html | 49 + .../viewport/viewport-offset-manual.html | 151 + .../viewport/viewport-page-manual.html | 108 + .../viewport-read-size-causes-layout.html | 35 + ...ort-read-size-in-iframe-causes-layout.html | 36 + .../viewport-resize-event-manual.html | 92 + ...resize-event-on-load-overflowing-page.html | 60 + .../viewport-scale-iframe-manual.html | 77 + .../viewport/viewport-scale-manual.html | 81 + .../viewport-scroll-event-manual.html | 182 + .../viewport-scrollbars-cause-resize.html | 66 + .../viewport/viewport-type.html | 31 + .../viewport-unscaled-scale-iframe.html | 33 + .../viewport/viewport-unscaled-scale.html | 26 + .../viewport-unscaled-scroll-iframe.html | 54 + .../viewport/viewport-unscaled-scroll.html | 45 + .../viewport-unscaled-size-iframe.html | 53 + .../viewport/viewport-unscaled-size.html | 51 + .../viewport/viewport_support.js | 153 + tests/wpt/web-platform-tests/wai-aria/OWNERS | 1 + .../alertdialog_modal_false-manual.html | 123 + .../alertdialog_modal_true-manual.html | 123 + .../application_activedescendant-manual.html | 209 + ...activedescendant_value_changes-manual.html | 266 + .../aria-current_not_declared-manual.html | 117 + ...ria-current_with_value_changes-manual.html | 111 + .../aria-current_with_value_date-manual.html | 119 + ...ia-current_with_value_location-manual.html | 115 + .../aria-current_with_value_page-manual.html | 115 + .../aria-current_with_value_step-manual.html | 115 + .../aria-current_with_value_time-manual.html | 119 + .../aria-current_with_value_true-manual.html | 111 + ...current_with_value_unspecified-manual.html | 111 + ...ls_pointing_to_details_element-manual.html | 100 + ...etails_pointing_to_div_element-manual.html | 99 + ...e_in_feed_posinset_and_setsize-manual.html | 171 + .../article_in_feed_setsize_-1-manual.html | 141 + ...t_in_feed_posinset_and_setsize-manual.html | 169 + .../button_haspopup_dialog-manual.html | 133 + .../button_haspopup_emptystring-manual.html | 130 + .../button_haspopup_false-manual.html | 124 + .../wai-aria/button_haspopup_foo-manual.html | 130 + .../wai-aria/button_haspopup_grid-manual.html | 138 + .../button_haspopup_listbox-manual.html | 135 + .../wai-aria/button_haspopup_menu-manual.html | 135 + .../wai-aria/button_haspopup_tree-manual.html | 141 + .../wai-aria/button_haspopup_true-manual.html | 130 + .../button_haspopup_unspecified-manual.html | 130 + .../button_roledescription_empty-manual.html | 105 + .../button_roledescription_valid-manual.html | 103 + ...oledescription_whitespace_only-manual.html | 105 + .../wai-aria/cell-manual.html | 217 + .../cell_aria-colspan_2_on_div-manual.html | 119 + ...colspan_2_on_td_html_colspan_3-manual.html | 119 + ...span_3_with_headers_and_border-manual.html | 122 + ...an_3_with_three_actual_columns-manual.html | 116 + ...ith_html_colspan_not_specified-manual.html | 119 + .../cell_aria-rowspan_2_on_div-manual.html | 119 + ...rowspan_2_on_td_html_rowspan_3-manual.html | 119 + ...wspan_3_with_three_actual_rows-manual.html | 120 + ...ith_html_rowspan_not_specified-manual.html | 119 + .../wai-aria/cell_colindex_4-manual.html | 118 + .../wai-aria/cell_rowindex_4-manual.html | 119 + .../checkbox_readonly_false-manual.html | 115 + .../checkbox_readonly_true-manual.html | 127 + .../checkbox_readonly_unspecified-manual.html | 115 + ...mnheader_aria-colspan_2_on_div-manual.html | 119 + ...colspan_2_on_th_html_colspan_3-manual.html | 119 + ...an_3_with_three_actual_columns-manual.html | 116 + ...ith_html_colspan_not_specified-manual.html | 119 + ...mnheader_aria-rowspan_2_on_div-manual.html | 119 + ...rowspan_2_on_th_html_rowspan_3-manual.html | 119 + ...wspan_3_with_three_actual_rows-manual.html | 120 + ...ith_html_rowspan_not_specified-manual.html | 119 + .../columnheader_colindex_4-manual.html | 118 + .../columnheader_rowindex_4-manual.html | 119 + ...e_not_automatically_propagated-manual.html | 134 + ...e_not_automatically_propagated-manual.html | 134 + ...ombobox_controls_an_invalid_id-manual.html | 100 + .../combobox_haspopup_dialog-manual.html | 163 + .../combobox_haspopup_false-manual.html | 157 + .../combobox_haspopup_grid-manual.html | 171 + .../combobox_haspopup_listbox-manual.html | 161 + .../combobox_haspopup_menu-manual.html | 161 + .../combobox_haspopup_tree-manual.html | 178 + .../combobox_haspopup_true-manual.html | 163 + .../combobox_haspopup_unspecified-manual.html | 160 + ...ombobox_orientation_horizontal-manual.html | 124 + ...mbobox_orientation_unspecified-manual.html | 124 + .../combobox_orientation_vertical-manual.html | 124 + .../combobox_readonly_false-manual.html | 138 + .../combobox_readonly_true-manual.html | 144 + .../combobox_readonly_unspecified-manual.html | 138 + .../wai-aria/dialog_modal_false-manual.html | 123 + .../wai-aria/dialog_modal_true-manual.html | 124 + .../dialog_modal_unspecified-manual.html | 123 + ...out_role_roledescription_valid-manual.html | 123 + ...essage_object_in_invalid_state-manual.html | 102 + ...rmessage_object_in_valid_state-manual.html | 102 + .../wai-aria/feed-manual.html | 106 + .../wai-aria/figure-manual.html | 107 + ...false_automatically_propagated-manual.html | 250 + ..._true_automatically_propagated-manual.html | 250 + .../wai-aria/grid_busy_false-manual.html | 164 + .../wai-aria/grid_busy_true-manual.html | 158 + .../grid_busy_value_changes-manual.html | 201 + .../wai-aria/grid_colcount_8-manual.html | 130 + ...id_columnheader_readonly_false-manual.html | 99 + ...rid_columnheader_readonly_true-manual.html | 99 + ...umnheader_readonly_unspecified-manual.html | 99 + ...id_columnheader_required_false-manual.html | 113 + ...rid_columnheader_required_true-manual.html | 113 + ...umnheader_required_unspecified-manual.html | 113 + .../wai-aria/grid_rowcount_3-manual.html | 145 + .../grid_rowheader_readonly_false-manual.html | 99 + .../grid_rowheader_readonly_true-manual.html | 99 + ...rowheader_readonly_unspecified-manual.html | 99 + .../grid_rowheader_required_false-manual.html | 113 + .../grid_rowheader_required_true-manual.html | 113 + ...rowheader_required_unspecified-manual.html | 113 + ...gridcell_aria-colspan_2_on_div-manual.html | 119 + ...gridcell_aria-rowspan_2_on_div-manual.html | 119 + .../wai-aria/gridcell_colindex_4-manual.html | 118 + .../wai-aria/gridcell_rowindex_4-manual.html | 119 + ...undefined_element_not_rendered-manual.html | 81 + ...den_undefined_element_rendered-manual.html | 123 + .../heading_level_unspecified-manual.html | 121 + ...eyshortcuts_multiple_shortcuts-manual.html | 109 + .../keyshortcuts_one_shortcut-manual.html | 109 + .../wai-aria/listbox_busy_false-manual.html | 122 + .../wai-aria/listbox_busy_true-manual.html | 110 + ...listbox_orientation_horizontal-manual.html | 129 + ...istbox_orientation_unspecified-manual.html | 129 + .../listbox_orientation_vertical-manual.html | 129 + .../listbox_readonly_false-manual.html | 119 + .../listbox_readonly_true-manual.html | 125 + .../listbox_readonly_unspecified-manual.html | 119 + .../wai-aria/listitem_setsize_-1-manual.html | 135 + .../menu_orientation_horizontal-manual.html | 112 + .../menu_orientation_unspecified-manual.html | 123 + .../menu_orientation_vertical-manual.html | 112 + .../wai-aria/menubar_busy_false-manual.html | 131 + .../wai-aria/menubar_busy_true-manual.html | 131 + ...menubar_orientation_horizontal-manual.html | 112 + ...enubar_orientation_unspecified-manual.html | 112 + .../menubar_orientation_vertical-manual.html | 112 + .../menuitem_posinset_and_setsize-manual.html | 149 + ...mcheckbox_posinset_and_setsize-manual.html | 186 + ...enuitemcheckbox_readonly_false-manual.html | 129 + ...menuitemcheckbox_readonly_true-manual.html | 129 + ...mcheckbox_readonly_unspecified-manual.html | 123 + ...itemradio_posinset_and_setsize-manual.html | 197 + .../menuitemradio_readonly_false-manual.html | 129 + .../menuitemradio_readonly_true-manual.html | 141 + ...itemradio_readonly_unspecified-manual.html | 129 + .../wai-aria/none-manual.html | 79 + .../option_selected_false-manual.html | 132 + .../wai-aria/option_selected_true-manual.html | 132 + .../option_selected_undefined-manual.html | 132 + .../option_selected_value_changes-manual.html | 148 + ...iogroup_orientation_horizontal-manual.html | 112 + ...ogroup_orientation_unspecified-manual.html | 130 + ...adiogroup_orientation_vertical-manual.html | 112 + .../radiogroup_readonly_false-manual.html | 122 + .../radiogroup_readonly_true-manual.html | 122 + ...adiogroup_readonly_unspecified-manual.html | 122 + .../wai-aria/region_with_name-manual.html | 115 + .../wai-aria/region_without_name-manual.html | 129 + .../wai-aria/row_colindex_4-manual.html | 136 + .../wai-aria/row_rowindex_4-manual.html | 143 + ...owheader_aria-colspan_2_on_div-manual.html | 119 + ...owheader_aria-rowspan_2_on_div-manual.html | 119 + .../wai-aria/rowheader_colindex_4-manual.html | 118 + .../wai-aria/rowheader_rowindex_4-manual.html | 119 + ...e_not_automatically_propagated-manual.html | 134 + ...e_not_automatically_propagated-manual.html | 134 + .../wai-aria/scripts/ATTAcomm.js | 947 + .../wai-aria/scripts/manual.css | 70 + ...rollbar_all_values_unspecified-manual.html | 177 + ...lbar_only_valuenow_unspecified-manual.html | 177 + ...ollbar_orientation_unspecified-manual.html | 127 + .../wai-aria/searchbox-manual.html | 121 + .../searchbox_activedescendant-manual.html | 253 + ...activedescendant_value_changes-manual.html | 284 + .../searchbox_autocomplete_both-manual.html | 133 + .../searchbox_autocomplete_inline-manual.html | 134 + .../searchbox_autocomplete_list-manual.html | 133 + .../searchbox_autocomplete_none-manual.html | 133 + ...chbox_autocomplete_unspecified-manual.html | 127 + .../searchbox_multiline_false-manual.html | 109 + .../searchbox_multiline_true-manual.html | 133 + ...earchbox_multiline_unspecified-manual.html | 109 + .../searchbox_placeholder-manual.html | 141 + .../searchbox_readonly_false-manual.html | 152 + .../searchbox_readonly_true-manual.html | 152 + ...searchbox_readonly_unspecified-manual.html | 152 + .../searchbox_required_false-manual.html | 140 + .../searchbox_required_true-manual.html | 140 + ...searchbox_required_unspecified-manual.html | 140 + ...cusable_all_values_unspecified-manual.html | 177 + ...able_only_valuenow_unspecified-manual.html | 177 + .../separator_focusable_valuetext-manual.html | 207 + ...arator_orientation_unspecified-manual.html | 115 + ...cusable_all_values_unspecified-manual.html | 85 + ...eparator_unfocusable_valuetext-manual.html | 117 + .../slider_all_values_unspecified-manual.html | 177 + ...ider_only_valuenow_unspecified-manual.html | 177 + ...slider_orientation_unspecified-manual.html | 127 + .../slider_readonly_false-manual.html | 140 + .../wai-aria/slider_readonly_true-manual.html | 140 + .../slider_readonly_unspecified-manual.html | 140 + ...nbutton_all_values_unspecified-manual.html | 178 + ...only_aria-valuenow_unspecified-manual.html | 178 + .../spinbutton_readonly_false-manual.html | 140 + .../spinbutton_readonly_true-manual.html | 140 + ...pinbutton_readonly_unspecified-manual.html | 140 + .../wai-aria/switch_checked_false-manual.html | 125 + .../wai-aria/switch_checked_mixed-manual.html | 131 + .../wai-aria/switch_checked_true-manual.html | 139 + .../switch_checked_undefined-manual.html | 125 + .../switch_checked_value_changes-manual.html | 164 + .../switch_readonly_false-manual.html | 140 + .../wai-aria/switch_readonly_true-manual.html | 140 + .../switch_readonly_unspecified-manual.html | 140 + .../tab_posinset_and_setsize-manual.html | 184 + .../wai-aria/table_colcount_-1-manual.html | 118 + .../wai-aria/table_colcount_8-manual.html | 113 + .../wai-aria/table_rowcount_-1-manual.html | 126 + .../wai-aria/table_rowcount_3-manual.html | 118 + ...tablist_orientation_horizontal-manual.html | 137 + ...ablist_orientation_unspecified-manual.html | 131 + .../tablist_orientation_vertical-manual.html | 131 + .../wai-aria/term_role-manual.html | 107 + .../wai-aria/textbox_placeholder-manual.html | 129 + ...toolbar_orientation_horizontal-manual.html | 117 + ...oolbar_orientation_unspecified-manual.html | 117 + .../toolbar_orientation_vertical-manual.html | 117 + .../wai-aria/tools/convert_wiki.pl | 648 + .../wai-aria/tools/make_tests.pl | 602 + .../tree_orientation_horizontal-manual.html | 124 + .../tree_orientation_unspecified-manual.html | 124 + .../tree_orientation_vertical-manual.html | 124 + .../wai-aria/treegrid_colcount_8-manual.html | 118 + ...reegrid_orientation_horizontal-manual.html | 132 + ...eegrid_orientation_unspecified-manual.html | 150 + .../treegrid_orientation_vertical-manual.html | 132 + .../wai-aria/treegrid_rowcount_3-manual.html | 120 + .../treeitem_selected_false-manual.html | 126 + .../treeitem_selected_true-manual.html | 126 + .../treeitem_selected_undefined-manual.html | 126 + ...reeitem_selected_value_changes-manual.html | 148 + .../web-platform-tests/wasm/compile_worker.js | 11 + .../web-platform-tests/wasm/incrementer.wasm | Bin 0 -> 46 bytes .../wasm/resources/blank.html | 2 + .../wasm/resources/frame.html | 18 + .../wasm/resources/incrementer.wasm | Bin 0 -> 46 bytes .../wasm/resources/load_wasm.js | 12 + .../wasm/resources/service-worker.js | 26 + .../wasm/wasm_indexeddb_test.html | 19 + .../wasm/wasm_indexeddb_test.js | 81 + .../wasm/wasm_local_iframe_test.html | 17 + .../wasm/wasm_serialization_tests.html | 8 + .../wasm/wasm_serialization_tests.js | 18 + .../wasm/wasm_serialization_worker.js | 21 + .../wasm/wasm_service_worker_test.html | 20 + .../accumulation-per-property.html | 58 + .../animation-types/property-list.js | 43 +- .../animation-types/property-types.js | 789 +- .../AnimationTimeline/document-timeline.html | 61 +- .../animations/reversing-an-animation.html} | 93 +- tests/wpt/web-platform-tests/web-nfc/OWNERS | 3 + .../web-nfc/idlharness.https.html | 34 +- tests/wpt/web-platform-tests/webaudio/OWNERS | 2 + .../wpt/web-platform-tests/webaudio/README.md | 2 +- .../test-constantsourcenode.html | 4 +- .../curve-tests.html | 25 - .../webdriver/actions/key.py | 38 +- .../webdriver/actions/mouse.py | 90 +- .../webdriver/actions/special_keys.py | 32 + .../webdriver/actions/support/keys.py | 72 +- .../actions/support/test_actions_wdspec.html | 73 +- .../web-platform-tests/webdriver/conftest.py | 8 +- .../web-platform-tests/webdriver/contexts.py | 1 + .../webdriver/elements/active.py | 252 + .../web-platform-tests/webdriver/get_title.py | 282 + .../webdriver/support/asserts.py | 42 + .../webdriver/support/fixtures.py | 152 +- .../broadcastchannel/origin.window.js | 10 + .../broadcastchannel/resources/origin.html | 8 + .../webmessaging/messageerror.html | 44 + tests/wpt/web-platform-tests/webrtc/OWNERS | 10 +- .../webrtc/RTCCertificate.html | 283 + ...RTCConfiguration-iceCandidatePoolSize.html | 109 + .../webrtc/RTCDataChannel-bufferedAmount.html | 169 + .../webrtc/RTCDataChannel-id.html | 60 + .../webrtc/RTCDataChannel-send.html | 299 + .../webrtc/RTCIceCandidate-constructor.html | 196 + .../RTCPeerConnection-addIceCandidate.html | 524 + .../RTCPeerConnection-addTransceiver.html | 157 + ...erConnection-canTrickleIceCandidates.html} | 0 .../RTCPeerConnection-connectionState.html | 207 + ...tml => RTCPeerConnection-constructor.html} | 15 - .../RTCPeerConnection-createAnswer.html | 115 + .../RTCPeerConnection-createDataChannel.html | 306 + .../webrtc/RTCPeerConnection-createOffer.html | 201 + ...RTCPeerConnection-generateCertificate.html | 138 + .../RTCPeerConnection-getTransceivers.html | 39 + .../webrtc/RTCPeerConnection-helper.js | 374 + .../RTCPeerConnection-iceConnectionState.html | 185 + .../RTCPeerConnection-iceGatheringState.html | 144 + ...on-idl.html => RTCPeerConnection-idl.html} | 0 .../RTCPeerConnection-ondatachannel.html | 177 + ...RTCPeerConnection-onnegotiationneeded.html | 298 + .../webrtc/RTCPeerConnection-removeTrack.html | 232 + ...RTCPeerConnection-setLocalDescription.html | 270 + ...TCPeerConnection-setRemoteDescription.html | 327 + ...RTCPeerConnectionIceEvent-constructor.html | 166 +- .../webrtc/RTCRtpSender-replaceTrack.html | 270 + .../webrtc/RTCSctpTransport-constructor.html | 89 + .../webrtc/datachannel-idlharness.html | 75 + .../web-platform-tests/webrtc/getstats.html | 130 + .../web-platform-tests/webrtc/interfaces.html | 57 + .../rtcpeerconnection/iceGatheringState.html | 29 - ...rtcconfiguration-icecandidatepoolsize.html | 35 - .../setRemoteDescription.html | 53 - .../websockets/opening-handshake/003.html | 5 +- ...{idlharness.html => idlharness.https.html} | 0 .../webusb/resources/check-availability.html | 9 + .../webusb/resources/featurepolicytest.js | 14 + ...by-feature-policy-attribute.https.sub.html | 24 + ...b-allowed-by-feature-policy.https.sub.html | 21 + ...d-by-feature-policy.https.sub.html.headers | 1 + .../usb-default-feature-policy.https.sub.html | 21 + ...-disabled-by-feature-policy.https.sub.html | 25 + ...d-by-feature-policy.https.sub.html.headers | 1 + .../workers/Worker_ErrorEvent_error.htm | 3 +- .../SharedWorker/null-arguments.html | 4 +- .../unexpected-self-properties.worker.js | 2 +- .../workers/name-property.html | 19 + .../semantics/multiple-workers/001.html | 1 - .../workers/semantics/xhr/004.html | 2 - .../shared-worker-name-via-options.html | 37 + .../workers/support/name.js | 9 + .../workers/support/shared-name.js | 8 + tests/wpt/web-platform-tests/wptrun | 5 + .../x-frame-options/deny.sub.html | 34 + .../x-frame-options/invalid.sub.html | 84 + .../x-frame-options/multiple.sub.html | 89 + .../x-frame-options/sameorigin.sub.html | 85 + .../x-frame-options/support/helper.js | 13 + .../x-frame-options/support/nested.py | 31 + .../x-frame-options/support/xfo.py | 20 + 4001 files changed, 159517 insertions(+), 30260 deletions(-) delete mode 100644 tests/wpt/metadata/WebCryptoAPI/derive_bits_keys/test_ecdh_bits.html.ini delete mode 100644 tests/wpt/metadata/WebCryptoAPI/derive_bits_keys/test_ecdh_keys.html.ini delete mode 100644 tests/wpt/metadata/WebCryptoAPI/derive_bits_keys/test_hkdf.html.ini delete mode 100644 tests/wpt/metadata/WebCryptoAPI/derive_bits_keys/test_pbkdf2.html.ini delete mode 100644 tests/wpt/metadata/WebCryptoAPI/digest/test_digest.html.ini delete mode 100644 tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_aes_cbc.html.ini delete mode 100644 tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_aes_ctr.html.ini delete mode 100644 tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_aes_gcm.html.ini delete mode 100644 tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_rsa_oaep.html.ini delete mode 100644 tests/wpt/metadata/WebCryptoAPI/generateKey/test_aes-cbc.html.ini delete mode 100644 tests/wpt/metadata/WebCryptoAPI/generateKey/test_aes-ctr.html.ini delete mode 100644 tests/wpt/metadata/WebCryptoAPI/generateKey/test_failures.html.ini delete mode 100644 tests/wpt/metadata/WebCryptoAPI/generateKey/test_failures_AES-CBC.html.ini delete mode 100644 tests/wpt/metadata/WebCryptoAPI/generateKey/test_failures_AES-CTR.html.ini delete mode 100644 tests/wpt/metadata/WebCryptoAPI/generateKey/test_failures_AES-GCM.html.ini delete mode 100644 tests/wpt/metadata/WebCryptoAPI/generateKey/test_failures_AES-KW.html.ini delete mode 100644 tests/wpt/metadata/WebCryptoAPI/generateKey/test_failures_ECDH.html.ini delete mode 100644 tests/wpt/metadata/WebCryptoAPI/generateKey/test_failures_ECDSA.html.ini delete mode 100644 tests/wpt/metadata/WebCryptoAPI/generateKey/test_failures_HMAC.html.ini delete mode 100644 tests/wpt/metadata/WebCryptoAPI/generateKey/test_failures_RSA-OAEP.html.ini delete mode 100644 tests/wpt/metadata/WebCryptoAPI/generateKey/test_failures_RSA-PSS.html.ini delete mode 100644 tests/wpt/metadata/WebCryptoAPI/generateKey/test_failures_RSASSA-PKCS1-v1_5.html.ini delete mode 100644 tests/wpt/metadata/WebCryptoAPI/generateKey/test_successes.html.ini delete mode 100644 tests/wpt/metadata/WebCryptoAPI/generateKey/test_successes_AES-CBC.html.ini delete mode 100644 tests/wpt/metadata/WebCryptoAPI/generateKey/test_successes_AES-CTR.html.ini delete mode 100644 tests/wpt/metadata/WebCryptoAPI/generateKey/test_successes_AES-GCM.html.ini delete mode 100644 tests/wpt/metadata/WebCryptoAPI/generateKey/test_successes_AES-KW.html.ini delete mode 100644 tests/wpt/metadata/WebCryptoAPI/generateKey/test_successes_ECDH.html.ini delete mode 100644 tests/wpt/metadata/WebCryptoAPI/generateKey/test_successes_ECDSA.html.ini delete mode 100644 tests/wpt/metadata/WebCryptoAPI/generateKey/test_successes_HMAC.html.ini delete mode 100644 tests/wpt/metadata/WebCryptoAPI/generateKey/test_successes_RSA-OAEP.html.ini delete mode 100644 tests/wpt/metadata/WebCryptoAPI/generateKey/test_successes_RSA-PSS.html.ini delete mode 100644 tests/wpt/metadata/WebCryptoAPI/generateKey/test_successes_RSASSA-PKCS1-v1_5.html.ini delete mode 100644 tests/wpt/metadata/WebCryptoAPI/import_export/test_ec_importKey.html.ini delete mode 100644 tests/wpt/metadata/WebCryptoAPI/import_export/test_rsa_importKey.html.ini delete mode 100644 tests/wpt/metadata/WebCryptoAPI/import_export/test_symmetric_importKey.html.ini delete mode 100644 tests/wpt/metadata/WebCryptoAPI/sign_verify/test_ecdsa.html.ini delete mode 100644 tests/wpt/metadata/WebCryptoAPI/sign_verify/test_hmac.html.ini delete mode 100644 tests/wpt/metadata/WebCryptoAPI/sign_verify/test_rsa_pkcs.html.ini delete mode 100644 tests/wpt/metadata/WebCryptoAPI/sign_verify/test_rsa_pss.html.ini delete mode 100644 tests/wpt/metadata/WebCryptoAPI/wrapKey_unwrapKey/test_wrapKey_unwrapKey.html.ini create mode 100644 tests/wpt/metadata/encoding/legacy-mb-japanese/__dir__.ini create mode 100644 tests/wpt/metadata/encoding/legacy-mb-korean/__dir__.ini create mode 100644 tests/wpt/metadata/encoding/legacy-mb-tchinese/__dir__.ini delete mode 100644 tests/wpt/metadata/html/webappapis/scripting/events/event-handler-onauxclick.html.ini delete mode 100644 tests/wpt/metadata/url/interfaces.html.ini create mode 100644 tests/wpt/web-platform-tests/.codecov.yml delete mode 100644 tests/wpt/web-platform-tests/DOM-parsing/todo/internalSubset.html create mode 100644 tests/wpt/web-platform-tests/IndexedDB/idbfactory-deleteDatabase-request-success.html create mode 100644 tests/wpt/web-platform-tests/IndexedDB/idbfactory-open-request-error.html create mode 100644 tests/wpt/web-platform-tests/IndexedDB/idbfactory-open-request-success.html create mode 100644 tests/wpt/web-platform-tests/IndexedDB/large-nested-cloning.html create mode 100644 tests/wpt/web-platform-tests/IndexedDB/large-requests-abort.html create mode 100644 tests/wpt/web-platform-tests/IndexedDB/request-abort-ordering.html create mode 100644 tests/wpt/web-platform-tests/IndexedDB/request-event-ordering.html rename tests/wpt/web-platform-tests/WebCryptoAPI/derive_bits_keys/{test_ecdh_bits.html => test_ecdh_bits.https.html} (100%) rename tests/wpt/web-platform-tests/WebCryptoAPI/derive_bits_keys/{test_ecdh_keys.html => test_ecdh_keys.https.html} (100%) rename tests/wpt/web-platform-tests/WebCryptoAPI/derive_bits_keys/{test_hkdf.html => test_hkdf.https.html} (100%) create mode 100644 tests/wpt/web-platform-tests/WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_empty.https.html create mode 100644 tests/wpt/web-platform-tests/WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_long.https.html create mode 100644 tests/wpt/web-platform-tests/WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_short.https.html create mode 100644 tests/wpt/web-platform-tests/WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_empty.https.html rename tests/wpt/web-platform-tests/WebCryptoAPI/derive_bits_keys/{test_pbkdf2.html => test_pbkdf2_long_long.https.html} (91%) create mode 100644 tests/wpt/web-platform-tests/WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_short.https.html create mode 100644 tests/wpt/web-platform-tests/WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_empty.https.html create mode 100644 tests/wpt/web-platform-tests/WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_long.https.html create mode 100644 tests/wpt/web-platform-tests/WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_short.https.html rename tests/wpt/web-platform-tests/WebCryptoAPI/digest/{test_digest.html => test_digest.https.html} (100%) rename tests/wpt/web-platform-tests/WebCryptoAPI/encrypt_decrypt/{test_aes_cbc.html => test_aes_cbc.https.html} (100%) rename tests/wpt/web-platform-tests/WebCryptoAPI/encrypt_decrypt/{test_aes_ctr.html => test_aes_ctr.https.html} (100%) rename tests/wpt/web-platform-tests/WebCryptoAPI/encrypt_decrypt/{test_aes_gcm.html => test_aes_gcm.https.html} (100%) rename tests/wpt/web-platform-tests/WebCryptoAPI/encrypt_decrypt/{test_rsa_oaep.html => test_rsa_oaep.https.html} (100%) rename tests/wpt/web-platform-tests/WebCryptoAPI/generateKey/{test_aes-cbc.html => test_aes-cbc.https.html} (100%) rename tests/wpt/web-platform-tests/WebCryptoAPI/generateKey/{test_aes-ctr.html => test_aes-ctr.https.html} (100%) rename tests/wpt/web-platform-tests/WebCryptoAPI/generateKey/{test_failures.html => test_failures.https.html} (100%) rename tests/wpt/web-platform-tests/WebCryptoAPI/generateKey/{test_failures_AES-CBC.html => test_failures_AES-CBC.https.html} (100%) rename tests/wpt/web-platform-tests/WebCryptoAPI/generateKey/{test_failures_AES-CTR.html => test_failures_AES-CTR.https.html} (100%) rename tests/wpt/web-platform-tests/WebCryptoAPI/generateKey/{test_failures_AES-GCM.html => test_failures_AES-GCM.https.html} (100%) rename tests/wpt/web-platform-tests/WebCryptoAPI/generateKey/{test_failures_AES-KW.html => test_failures_AES-KW.https.html} (100%) rename tests/wpt/web-platform-tests/WebCryptoAPI/generateKey/{test_failures_ECDH.html => test_failures_ECDH.https.html} (100%) rename tests/wpt/web-platform-tests/WebCryptoAPI/generateKey/{test_failures_ECDSA.html => test_failures_ECDSA.https.html} (100%) rename tests/wpt/web-platform-tests/WebCryptoAPI/generateKey/{test_failures_HMAC.html => test_failures_HMAC.https.html} (100%) rename tests/wpt/web-platform-tests/WebCryptoAPI/generateKey/{test_failures_RSA-OAEP.html => test_failures_RSA-OAEP.https.html} (100%) rename tests/wpt/web-platform-tests/WebCryptoAPI/generateKey/{test_failures_RSA-PSS.html => test_failures_RSA-PSS.https.html} (100%) rename tests/wpt/web-platform-tests/WebCryptoAPI/generateKey/{test_failures_RSASSA-PKCS1-v1_5.html => test_failures_RSASSA-PKCS1-v1_5.https.html} (100%) rename tests/wpt/web-platform-tests/WebCryptoAPI/generateKey/{test_successes_AES-CBC.html => test_successes_AES-CBC.https.html} (100%) rename tests/wpt/web-platform-tests/WebCryptoAPI/generateKey/{test_successes_AES-CTR.html => test_successes_AES-CTR.https.html} (100%) rename tests/wpt/web-platform-tests/WebCryptoAPI/generateKey/{test_successes_AES-GCM.html => test_successes_AES-GCM.https.html} (100%) rename tests/wpt/web-platform-tests/WebCryptoAPI/generateKey/{test_successes_AES-KW.html => test_successes_AES-KW.https.html} (100%) rename tests/wpt/web-platform-tests/WebCryptoAPI/generateKey/{test_successes_ECDH.html => test_successes_ECDH.https.html} (100%) rename tests/wpt/web-platform-tests/WebCryptoAPI/generateKey/{test_successes_ECDSA.html => test_successes_ECDSA.https.html} (100%) rename tests/wpt/web-platform-tests/WebCryptoAPI/generateKey/{test_successes_HMAC.html => test_successes_HMAC.https.html} (100%) delete mode 100644 tests/wpt/web-platform-tests/WebCryptoAPI/generateKey/test_successes_RSA-OAEP.html rename tests/wpt/web-platform-tests/WebCryptoAPI/generateKey/{test_successes.html => test_successes_RSA-OAEP.https.html} (96%) rename tests/wpt/web-platform-tests/WebCryptoAPI/generateKey/{test_successes_RSA-PSS.html => test_successes_RSA-PSS.https.html} (100%) rename tests/wpt/web-platform-tests/WebCryptoAPI/generateKey/{test_successes_RSASSA-PKCS1-v1_5.html => test_successes_RSASSA-PKCS1-v1_5.https.html} (100%) create mode 100644 tests/wpt/web-platform-tests/WebCryptoAPI/idlharness.https.html rename tests/wpt/web-platform-tests/WebCryptoAPI/import_export/{test_ec_importKey.html => test_ec_importKey.https.html} (100%) rename tests/wpt/web-platform-tests/WebCryptoAPI/import_export/{test_rsa_importKey.html => test_rsa_importKey.https.html} (100%) rename tests/wpt/web-platform-tests/WebCryptoAPI/import_export/{test_symmetric_importKey.html => test_symmetric_importKey.https.html} (100%) create mode 100644 tests/wpt/web-platform-tests/WebCryptoAPI/secure_context/crypto-subtle-non-secure-context-not-available.sub.html create mode 100644 tests/wpt/web-platform-tests/WebCryptoAPI/secure_context/crypto-subtle-secure-context-available.https.sub.html rename tests/wpt/web-platform-tests/WebCryptoAPI/sign_verify/{test_ecdsa.html => test_ecdsa.https.html} (100%) rename tests/wpt/web-platform-tests/WebCryptoAPI/sign_verify/{test_hmac.html => test_hmac.https.html} (100%) rename tests/wpt/web-platform-tests/WebCryptoAPI/sign_verify/{test_rsa_pkcs.html => test_rsa_pkcs.https.html} (100%) rename tests/wpt/web-platform-tests/WebCryptoAPI/sign_verify/{test_rsa_pss.html => test_rsa_pss.https.html} (100%) create mode 100644 tests/wpt/web-platform-tests/WebCryptoAPI/util/worker-report-crypto-subtle-presence.js rename tests/wpt/web-platform-tests/WebCryptoAPI/wrapKey_unwrapKey/{test_wrapKey_unwrapKey.html => test_wrapKey_unwrapKey.https.html} (100%) create mode 100644 tests/wpt/web-platform-tests/WebIDL/OWNERS create mode 100644 tests/wpt/web-platform-tests/WebIDL/ecmascript-binding/interface-prototype-object.html create mode 100644 tests/wpt/web-platform-tests/WebIDL/ecmascript-binding/legacy-callback-interface-object.html create mode 100644 tests/wpt/web-platform-tests/WebIDL/ecmascript-binding/put-forwards.html create mode 100644 tests/wpt/web-platform-tests/WebIDL/ecmascript-binding/sequence-conversion.html create mode 100644 tests/wpt/web-platform-tests/XMLHttpRequest/resources/base.xml create mode 100644 tests/wpt/web-platform-tests/XMLHttpRequest/send-data-arraybufferview.htm create mode 100644 tests/wpt/web-platform-tests/accelerometer/Accelerometer.https.html create mode 100644 tests/wpt/web-platform-tests/accelerometer/Accelerometer_insecure_context.html create mode 100644 tests/wpt/web-platform-tests/accelerometer/Accelerometer_onerror-manual.https.html create mode 100644 tests/wpt/web-platform-tests/accelerometer/support-iframe.html create mode 100644 tests/wpt/web-platform-tests/ambient-light/AmbientLightSensor.https.html delete mode 100644 tests/wpt/web-platform-tests/ambient-light/AmbientLightSensor.js delete mode 100644 tests/wpt/web-platform-tests/ambient-light/AmbientLightSensor_browsing_context.https.html delete mode 100644 tests/wpt/web-platform-tests/ambient-light/AmbientLightSensor_onchange.https.html delete mode 100644 tests/wpt/web-platform-tests/ambient-light/AmbientLightSensor_reading.https.html delete mode 100644 tests/wpt/web-platform-tests/ambient-light/AmbientLightSensor_start.https.html delete mode 100644 tests/wpt/web-platform-tests/ambient-light/AmbientLightSensor_stop.https.html delete mode 100644 tests/wpt/web-platform-tests/ambient-light/AmbientLightSensor_tests.html create mode 100644 tests/wpt/web-platform-tests/assumptions/ahem-ref.html create mode 100644 tests/wpt/web-platform-tests/assumptions/ahem.html create mode 100644 tests/wpt/web-platform-tests/assumptions/tools/ahem-generate-table.py create mode 100755 tests/wpt/web-platform-tests/assumptions/tools/build.sh rename tests/wpt/web-platform-tests/battery-status/{battery-charging-manual.html => battery-charging-manual.https.html} (92%) rename tests/wpt/web-platform-tests/battery-status/{battery-discharging-manual.html => battery-discharging-manual.https.html} (92%) rename tests/wpt/web-platform-tests/battery-status/{battery-full-manual.html => battery-full-manual.https.html} (90%) create mode 100644 tests/wpt/web-platform-tests/battery-status/battery-iframe.https.html create mode 100644 tests/wpt/web-platform-tests/battery-status/battery-insecure-context.html rename tests/wpt/web-platform-tests/battery-status/{battery-interface-idlharness.html => battery-interface-idlharness.https.html} (95%) rename tests/wpt/web-platform-tests/battery-status/{battery-plugging-in-manual.html => battery-plugging-in-manual.https.html} (96%) delete mode 100644 tests/wpt/web-platform-tests/battery-status/battery-promise-iframe.html rename tests/wpt/web-platform-tests/battery-status/{battery-promise-window.html => battery-promise-window.https.html} (86%) rename tests/wpt/web-platform-tests/battery-status/{battery-promise.html => battery-promise.https.html} (84%) rename tests/wpt/web-platform-tests/battery-status/{battery-unplugging-manual.html => battery-unplugging-manual.https.html} (96%) delete mode 100644 tests/wpt/web-platform-tests/battery-status/support-iframe-initial.html create mode 100644 tests/wpt/web-platform-tests/beacon/headers/header-content-type.html create mode 100644 tests/wpt/web-platform-tests/beacon/resources/content-type.py create mode 100644 tests/wpt/web-platform-tests/check_stability.ini create mode 100755 tests/wpt/web-platform-tests/ci_unittest.sh create mode 100644 tests/wpt/web-platform-tests/common/css-paint-tests.js create mode 100644 tests/wpt/web-platform-tests/common/object-association.js create mode 100644 tests/wpt/web-platform-tests/common/performance-timeline-utils.js rename tests/wpt/web-platform-tests/conformance-checkers/html-svg/{animate-elem-77-t-novalid.html => animate-elem-77-t-isvalid.html} (100%) rename tests/wpt/web-platform-tests/conformance-checkers/html-svg/{linking-a-10-f-novalid.html => linking-a-10-f-isvalid.html} (100%) delete mode 100644 tests/wpt/web-platform-tests/conformance-checkers/xhtml/elements/menu/001-haswarn.xhtml delete mode 100644 tests/wpt/web-platform-tests/conformance-checkers/xhtml/elements/menu/001-novalid.xhtml create mode 100644 tests/wpt/web-platform-tests/conformance-checkers/xhtml/elements/menu/embed-contextmenu-isvalid.xhtml create mode 100644 tests/wpt/web-platform-tests/conformance-checkers/xhtml/elements/menu/menu-containing-hr-novalid.xhtml create mode 100644 tests/wpt/web-platform-tests/conformance-checkers/xhtml/elements/menu/menu-containing-menu-novalid.xhtml create mode 100644 tests/wpt/web-platform-tests/conformance-checkers/xhtml/elements/menu/menu-containing-text-novalid.xhtml create mode 100644 tests/wpt/web-platform-tests/conformance-checkers/xhtml/elements/menu/menu-type-context-novalid.xhtml create mode 100644 tests/wpt/web-platform-tests/conformance-checkers/xhtml/elements/menu/menu-type-popup-novalid.xhtml create mode 100644 tests/wpt/web-platform-tests/conformance-checkers/xhtml/elements/menu/menu-type-toolbar-novalid.xhtml create mode 100644 tests/wpt/web-platform-tests/conformance-checkers/xhtml/elements/menu/menu-valid.xhtml create mode 100644 tests/wpt/web-platform-tests/conformance-checkers/xhtml/elements/menu/menuitem-children-novalid.xhtml create mode 100644 tests/wpt/web-platform-tests/conformance-checkers/xhtml/elements/menu/menuitem-label-novalid.xhtml create mode 100644 tests/wpt/web-platform-tests/conformance-checkers/xhtml/elements/menu/p-contextmenu-novalid.xhtml create mode 100644 tests/wpt/web-platform-tests/content-security-policy/base-uri/base-uri-allow.sub.html create mode 100644 tests/wpt/web-platform-tests/content-security-policy/base-uri/base-uri-deny.sub.html delete mode 100644 tests/wpt/web-platform-tests/content-security-policy/base-uri/base-uri_iframe_sandbox.sub.html.headers delete mode 100644 tests/wpt/web-platform-tests/content-security-policy/embedded-enforcement/embedding_csp-header-invalid-format.html delete mode 100644 tests/wpt/web-platform-tests/content-security-policy/embedded-enforcement/embedding_csp-header.html create mode 100644 tests/wpt/web-platform-tests/content-security-policy/embedded-enforcement/required_csp-header.html create mode 100644 tests/wpt/web-platform-tests/content-security-policy/embedded-enforcement/subsumption_algorithm-nonces.html rename tests/wpt/web-platform-tests/content-security-policy/embedded-enforcement/support/{echo-embedding-csp.py => echo-required-csp.py} (71%) create mode 100644 tests/wpt/web-platform-tests/content-security-policy/frame-src/frame-src-redirect.html create mode 100644 tests/wpt/web-platform-tests/content-security-policy/frame-src/frame-src-redirect.html.headers create mode 100644 tests/wpt/web-platform-tests/content-security-policy/frame-src/frame-src-self-unique-origin.html create mode 100644 tests/wpt/web-platform-tests/content-security-policy/frame-src/support/frame.html create mode 100644 tests/wpt/web-platform-tests/content-security-policy/frame-src/support/testharness-helper.sub.js create mode 100644 tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-self-unique-origin.html create mode 100644 tests/wpt/web-platform-tests/content-security-policy/navigation/to-javascript-url-frame-src.html rename tests/wpt/web-platform-tests/content-security-policy/navigation/{to-javascript-url.html => to-javascript-url-script-src.html} (100%) create mode 100644 tests/wpt/web-platform-tests/content-security-policy/nonce-hiding/script-nonces-hidden-meta.tentative.html create mode 100644 tests/wpt/web-platform-tests/content-security-policy/nonce-hiding/script-nonces-hidden.tentative.html create mode 100644 tests/wpt/web-platform-tests/content-security-policy/nonce-hiding/script-nonces-hidden.tentative.html.headers create mode 100644 tests/wpt/web-platform-tests/content-security-policy/nonce-hiding/svgscript-nonces-hidden-meta.tentative.html create mode 100644 tests/wpt/web-platform-tests/content-security-policy/nonce-hiding/svgscript-nonces-hidden.tentative.html create mode 100644 tests/wpt/web-platform-tests/content-security-policy/nonce-hiding/svgscript-nonces-hidden.tentative.html.headers create mode 100644 tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/img-src-redirect-upgrade-reporting.https.html create mode 100644 tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/img-src-redirect-upgrade-reporting.https.html.headers create mode 100644 tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/support/testharness-helper.sub.js create mode 100644 tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/upgrade-insecure-requests-reporting.https.html create mode 100644 tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/upgrade-insecure-requests-reporting.https.html.headers create mode 100644 tests/wpt/web-platform-tests/cors/access-control-expose-headers-parsing.window.js create mode 100644 tests/wpt/web-platform-tests/cors/resources/access-control-expose-headers-parsing-2.asis create mode 100644 tests/wpt/web-platform-tests/cors/resources/access-control-expose-headers-parsing.asis create mode 100644 tests/wpt/web-platform-tests/credential-management/credentialscontainer-create-basics.https.html create mode 100644 tests/wpt/web-platform-tests/credential-management/idl.https.html create mode 100644 tests/wpt/web-platform-tests/css-font-display/font-display-ref.html create mode 100644 tests/wpt/web-platform-tests/css-font-display/font-display.html create mode 100644 tests/wpt/web-platform-tests/css-font-display/resources/slow-ahem-loading.py create mode 100644 tests/wpt/web-platform-tests/css-font-loading/fontfacesetloadevent-constructor.html create mode 100644 tests/wpt/web-platform-tests/css-paint-api/OWNERS create mode 100644 tests/wpt/web-platform-tests/css-paint-api/background-image-alpha-ref.html create mode 100644 tests/wpt/web-platform-tests/css-paint-api/background-image-alpha.html create mode 100644 tests/wpt/web-platform-tests/css-paint-api/background-image-multiple-ref.html create mode 100644 tests/wpt/web-platform-tests/css-paint-api/background-image-multiple.html create mode 100644 tests/wpt/web-platform-tests/css-paint-api/background-image-tiled-ref.html create mode 100644 tests/wpt/web-platform-tests/css-paint-api/background-image-tiled.html create mode 100644 tests/wpt/web-platform-tests/css-paint-api/invalid-image-constructor-error-ref.html create mode 100644 tests/wpt/web-platform-tests/css-paint-api/invalid-image-constructor-error.html create mode 100644 tests/wpt/web-platform-tests/css-paint-api/invalid-image-paint-error-ref.html create mode 100644 tests/wpt/web-platform-tests/css-paint-api/invalid-image-paint-error.html create mode 100644 tests/wpt/web-platform-tests/css-paint-api/invalid-image-pending-script-ref.html create mode 100644 tests/wpt/web-platform-tests/css-paint-api/invalid-image-pending-script.html create mode 100644 tests/wpt/web-platform-tests/css-paint-api/overdraw-ref.html create mode 100644 tests/wpt/web-platform-tests/css-paint-api/overdraw.html create mode 100644 tests/wpt/web-platform-tests/css-paint-api/paint-arguments-ref.html create mode 100644 tests/wpt/web-platform-tests/css-paint-api/paint-arguments.html create mode 100644 tests/wpt/web-platform-tests/css-paint-api/paint-function-arguments-ref.html create mode 100644 tests/wpt/web-platform-tests/css-paint-api/paint-function-arguments.html create mode 100644 tests/wpt/web-platform-tests/css-paint-api/paint2d-composite-ref.html create mode 100644 tests/wpt/web-platform-tests/css-paint-api/paint2d-composite.html create mode 100644 tests/wpt/web-platform-tests/css-paint-api/paint2d-filter-ref.html create mode 100644 tests/wpt/web-platform-tests/css-paint-api/paint2d-filter.html create mode 100644 tests/wpt/web-platform-tests/css-paint-api/paint2d-gradient-ref.html create mode 100644 tests/wpt/web-platform-tests/css-paint-api/paint2d-gradient.html create mode 100644 tests/wpt/web-platform-tests/css-paint-api/paint2d-image-ref.html create mode 100644 tests/wpt/web-platform-tests/css-paint-api/paint2d-image.html create mode 100644 tests/wpt/web-platform-tests/css-paint-api/paint2d-paths-ref.html create mode 100644 tests/wpt/web-platform-tests/css-paint-api/paint2d-paths.html create mode 100644 tests/wpt/web-platform-tests/css-paint-api/paint2d-rects-ref.html create mode 100644 tests/wpt/web-platform-tests/css-paint-api/paint2d-rects.html create mode 100644 tests/wpt/web-platform-tests/css-paint-api/paint2d-shadows-ref.html create mode 100644 tests/wpt/web-platform-tests/css-paint-api/paint2d-shadows.html create mode 100644 tests/wpt/web-platform-tests/css-paint-api/paint2d-transform-ref.html create mode 100644 tests/wpt/web-platform-tests/css-paint-api/paint2d-transform.html create mode 100644 tests/wpt/web-platform-tests/css-paint-api/valid-image-after-load-ref.html create mode 100644 tests/wpt/web-platform-tests/css-paint-api/valid-image-after-load.html create mode 100644 tests/wpt/web-platform-tests/css-paint-api/valid-image-before-load-ref.html create mode 100644 tests/wpt/web-platform-tests/css-paint-api/valid-image-before-load.html rename tests/wpt/web-platform-tests/{css-timing-1 => css-timing}/OWNERS (100%) rename tests/wpt/web-platform-tests/{css-timing-1 => css-timing}/cubic-bezier-timing-functions-output.html (100%) rename tests/wpt/web-platform-tests/{css-timing-1 => css-timing}/frames-timing-functions-output.html (100%) rename tests/wpt/web-platform-tests/{css-timing-1 => css-timing}/frames-timing-functions-syntax.html (100%) rename tests/wpt/web-platform-tests/{css-timing-1 => css-timing}/step-timing-functions-output.html (100%) rename tests/wpt/web-platform-tests/{css-timing-1 => css-timing}/testcommon.js (100%) delete mode 100644 tests/wpt/web-platform-tests/css/WOFF2/support/valid-009.woff2 delete mode 100644 tests/wpt/web-platform-tests/css/WOFF2/valid-009-ref.xht delete mode 100644 tests/wpt/web-platform-tests/css/WOFF2/valid-009.xht create mode 100644 tests/wpt/web-platform-tests/css/css-display-3/display-contents-state-change-001-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-display-3/display-contents-state-change-001.html create mode 100644 tests/wpt/web-platform-tests/css/css-flexbox-1/align-items-006.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-kerning-01-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-kerning-01.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-kerning-02-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-kerning-02.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-kerning-03-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-kerning-03.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-kerning-04-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-kerning-04.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-kerning-05-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-kerning-05.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-01-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-01.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-02-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-02.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-03-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-03.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-04-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-04.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-01-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-01.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-02-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-02.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-03-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-03.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-04-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-04.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-05-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-05.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-06-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-06.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-07-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-07.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-08-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-08.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-09-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-09.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-10-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-10.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-11-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-11.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-12-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-12.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-13-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-13.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-14-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-14.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-15-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-15.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-16-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-16.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-17-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-17.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-18-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-18.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-01-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-01.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-02-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-02.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-03-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-03.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-04-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-04.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-05-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-05.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-06-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-06.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-07-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-07.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-01-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-01.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-02-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-02.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-03-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-03.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-04-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-04.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-05-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-05.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-06-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-06.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-07-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-07.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-08-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-08.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-09-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-09.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-10-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-10.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-01-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-01.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-02-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-02.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-03-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-03.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-04-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-04.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-05-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-05.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-06-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-06.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-07-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-07.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-08-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-08.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-09-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-09.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-10-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-10.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-11-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-11.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-01-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-01.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-02-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-02.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-03-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-03.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-04-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-04.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-05-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-05.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-06-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-06.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-07-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-07.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-08-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-08.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-09-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-09.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-position-01-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-position-01.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-position-02-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-position-02.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-position-03-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-position-03.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/language-specific-01.html create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/support/fonts/FontWithFancyFeatures.otf create mode 100644 tests/wpt/web-platform-tests/css/css-fonts-3/support/fonts/Lato-Medium.ttf create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-001-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-001.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-002.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-003.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-004.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-005-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-005.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-006-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-006.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-007-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-007.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-008-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-008.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-009-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-009.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-010.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-011-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-011.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-012-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-012.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-013-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-013.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-014-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-014.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-015-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-015.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-016-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-016.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-017-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-017.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-001-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-001.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-002.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-003.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-004.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-005-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-005.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-006-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-006.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-007-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-007.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-008-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-008.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-009-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-009.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-010.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-011-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-011.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-012-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-012.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-013-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-013.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-014-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-014.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-015-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-015.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-016-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-016.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-017-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-017.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-001.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-002.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-003.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-004.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-005.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-006.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-007.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-008.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-009.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-010.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-011.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-012.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-013.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-014.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-015.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-016.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-017.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-018.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-019.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-020.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-021.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-022.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-023.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-024.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-025.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-001.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-002.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-003.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-004.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-005.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-006.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-007.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-008.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-009.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-010.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-011.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-012.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-013.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-014.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-015.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-016.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-017.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-018.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-019.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-020.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-021.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-022.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-023.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-024.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-001.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-002.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-003.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-004.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-005.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-006.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-007.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-008.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-009.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-010.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-011.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-012.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-013.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-014.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-015.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-016.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-001.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-002.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-003.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-004.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-005.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-006.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-007.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-008.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-009.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-010.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-011.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-012.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-013.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-014.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-015.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-016.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-001.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-002.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-003.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-004.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-005.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-006.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-007.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-008.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-009.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-010.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-011.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-012.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-013.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-014.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-015.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-016.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-inline-support-flexible-lengths-001.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-inline-support-flexible-lengths-001.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-inline-support-grid-template-areas-001.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-inline-support-grid-template-areas-001.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-inline-support-grid-template-columns-rows-001.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-inline-support-grid-template-columns-rows-001.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-inline-support-named-grid-lines-001.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-inline-support-named-grid-lines-001.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-inline-support-repeat-001.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-inline-support-repeat-001.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-inline-template-columns-rows-resolved-values-001.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-inline-template-columns-rows-resolved-values-001.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-support-flexible-lengths-001.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-support-flexible-lengths-001.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-support-grid-template-areas-001.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-support-grid-template-areas-001.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-support-grid-template-columns-rows-001.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-support-grid-template-columns-rows-001.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-support-named-grid-lines-001.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-support-named-grid-lines-001.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-support-repeat-001.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-support-repeat-001.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-template-columns-rows-resolved-values-001.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-template-columns-rows-resolved-values-001.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-items-001.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-items-001.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-items-002.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-items-002.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-items-003.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-items-003.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-items-inline-blocks-001.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-items-inline-blocks-001.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-001.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-001.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-002.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-002.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-003.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-003.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-004.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-004.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-005.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-005.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-painting-001.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-painting-001.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-painting-002.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-painting-002.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-painting-003.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-painting-003.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-painting-004.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-painting-004.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-painting-005.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-painting-005.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-001.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-001.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-002.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-002.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-003.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-003.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-004.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-004.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-005.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-005.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-001.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-001.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-002.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-002.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-003.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-003.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-004.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-004.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-005.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-005.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-006.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-006.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-items-001.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-items-001.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-items-002.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-items-002.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-items-003.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-items-003.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-items-inline-blocks-001.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-items-inline-blocks-001.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-001.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-001.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-002.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-002.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-003.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-003.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-004.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-004.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-005.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-005.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-006.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-006.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-007.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-007.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-008.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-008.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-009.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-009.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-021.html create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-auto-placement-001.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-auto-placement-001.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-auto-placement-002.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-auto-placement-002.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-auto-placement-003.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-auto-placement-003.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-auto-placement-004.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-auto-placement-004.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-auto-placement-005.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-auto-placement-005.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-painting-001.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-painting-001.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-painting-002.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-painting-002.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-painting-003.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-painting-003.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-painting-004.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-painting-004.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-painting-005.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-painting-005.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-001.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-001.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-002.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-002.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-003.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-003.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-004.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-004.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-005.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-005.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-001.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-001.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-002.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-002.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-003.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-003.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-004.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-004.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-005.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-005.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-006.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-006.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-items/support/500x500-green.png create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-computed-value-display-floated-items-001.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-computed-value-display-floated-items-001.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-display-grid-001.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-display-grid-001.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-display-inline-grid-001.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-display-inline-grid-001.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-first-letter-001.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-first-letter-001.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-first-letter-002.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-first-letter-002.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-first-letter-003.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-first-letter-003.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-first-line-001.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-first-line-001.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-first-line-002.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-first-line-002.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-first-line-003.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-first-line-003.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-float-001.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-float-001.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-floats-no-intrude-001.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-floats-no-intrude-001.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-first-letter-001.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-first-letter-001.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-first-letter-002.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-first-letter-002.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-first-letter-003.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-first-letter-003.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-first-line-001.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-first-line-001.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-first-line-002.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-first-line-002.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-first-line-003.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-first-line-003.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-float-001.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-float-001.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-floats-no-intrude-001.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-floats-no-intrude-001.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-margins-no-collapse-001.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-margins-no-collapse-001.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-multicol-001.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-multicol-001.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-vertical-align-001.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-vertical-align-001.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-margins-no-collapse-001.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-margins-no-collapse-001.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-multicol-001.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-multicol-001.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-support-display-001.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-support-display-001.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-vertical-align-001.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-vertical-align-001.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/reference/grid-2x2-blue-yellow-lime-magenta.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/reference/grid-2x2-blue-yellow-lime-magenta.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/reference/grid-filled-blue-yellow-green-overlapped-100px-squares.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/reference/grid-filled-blue-yellow-green-overlapped-100px-squares.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/reference/grid-first-letter-green-margin-no-collapse-ref.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/reference/grid-first-letter-green-margin-no-collapse-ref.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/reference/grid-text-green-margin-no-collapse-ref.html delete mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/reference/grid-text-green-margin-no-collapse-ref.xht create mode 100644 tests/wpt/web-platform-tests/css/css-grid-1/support/check-layout-th.js create mode 100644 tests/wpt/web-platform-tests/css/css-images-3/gradients-with-border-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-images-3/gradients-with-border.html create mode 100644 tests/wpt/web-platform-tests/css/css-position-3/position-sticky-bottom-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-position-3/position-sticky-bottom.html create mode 100644 tests/wpt/web-platform-tests/css/css-position-3/position-sticky-get-bounding-client-rect.html create mode 100644 tests/wpt/web-platform-tests/css/css-position-3/position-sticky-left-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-position-3/position-sticky-left.html create mode 100644 tests/wpt/web-platform-tests/css/css-position-3/position-sticky-parsing.html create mode 100644 tests/wpt/web-platform-tests/css/css-position-3/position-sticky-right-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-position-3/position-sticky-right.html create mode 100644 tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-tfoot-bottom-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-tfoot-bottom.html create mode 100644 tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-th-bottom-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-th-bottom.html create mode 100644 tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-th-left-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-th-left.html create mode 100644 tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-th-right-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-th-right.html create mode 100644 tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-th-top-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-th-top.html create mode 100644 tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-thead-top-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-thead-top.html create mode 100644 tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-tr-bottom-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-tr-bottom.html create mode 100644 tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-tr-top-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-tr-top.html create mode 100644 tests/wpt/web-platform-tests/css/css-position-3/position-sticky-top-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-position-3/position-sticky-top.html create mode 100644 tests/wpt/web-platform-tests/css/css-scoping-1/css-scoping-shadow-host-namespace.html rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/backface-visibility-hidden-001.html (96%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/css-rotate-2d-3d-001-ref.html (100%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/css-rotate-2d-3d-001.html (90%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/css-transform-3d-rotate3d-X-negative.html (94%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/css-transform-3d-rotate3d-X-positive.html (94%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/css-transform-3d-rotate3d-Y-negative.html (94%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/css-transform-3d-rotate3d-Y-positive.html (94%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/css-transform-3d-rotate3d-Z-negative.html (94%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/css-transform-3d-rotate3d-Z-positive.html (94%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/css-transform-3d-rotateX-negative.html (94%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/css-transform-3d-rotateX-positive.html (94%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/css-transform-3d-rotateY-negative.html (94%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/css-transform-3d-rotateY-positive.html (94%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/css-transform-3d-rotateZ-negative.html (94%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/css-transform-3d-rotateZ-positive.html (94%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/css-transform-3d-transform-style.html (92%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/css-transforms-3d-on-anonymous-block-001.html (87%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/css3-transform-perspective.html (93%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/css3-transform-rotateY-ref.html (100%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/css3-transform-rotateY.html (89%) create mode 100644 tests/wpt/web-platform-tests/css/css-transforms-2/parsing/resources/parsing-testcommon.js create mode 100644 tests/wpt/web-platform-tests/css/css-transforms-2/parsing/rotate-parsing-invalid.html create mode 100644 tests/wpt/web-platform-tests/css/css-transforms-2/parsing/rotate-parsing-valid.html create mode 100644 tests/wpt/web-platform-tests/css/css-transforms-2/parsing/scale-parsing-invalid.html create mode 100644 tests/wpt/web-platform-tests/css/css-transforms-2/parsing/scale-parsing-valid.html create mode 100644 tests/wpt/web-platform-tests/css/css-transforms-2/parsing/translate-parsing-invalid.html create mode 100644 tests/wpt/web-platform-tests/css/css-transforms-2/parsing/translate-parsing-valid.html rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/perspective-origin-001.html (95%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/perspective-origin-002.html (95%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/perspective-origin-003.html (95%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/perspective-origin-004.html (95%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/perspective-origin-005.html (95%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/perspective-origin-006.html (95%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/perspective-origin-x.html (92%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/perspective-origin-xy.html (95%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/perspective-translateZ-0.html (95%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/perspective-translateZ-negative.html (95%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/perspective-translateZ-positive.html (94%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/reference/backface-visibility-hidden-ref.html (100%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/reference/css-transform-3d-rotateX-ref.html (100%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/reference/css-transform-3d-rotateZ-ref.html (100%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/reference/css-transform-3d-transform-style-ref.html (100%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/reference/css-transforms-3d-anonymous-block-ref.html (100%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/reference/css3-transform-perspective-ref.html (100%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/reference/perspective-origin-reftest.html (100%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/reference/perspective-reftest.html (100%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/reference/rotateY-ref.html (100%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/reference/transforms-rotateY-degree-60-ref.html (100%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/reference/transofrmed-preserve-3d-1-ref.html (100%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/reference/transofrmed-rotateX-3-ref.html (100%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/reference/transofrmed-rotateY-1-ref.html (100%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/reference/ttwf-css-3d-polygon-cycle-ref.html (100%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/reftest/transform-3d-rotateY-stair-above-ref-001.xht (100%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/rotateY.html (95%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/rotate_x_45deg-ref.html (100%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/rotate_x_45deg.html (93%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/rotate_y_45deg-ref.html (100%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/rotate_y_45deg.html (93%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform-3d-rotateY-stair-above-001.xht (95%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform-3d-rotateY-stair-below-001.xht (95%) create mode 100644 tests/wpt/web-platform-tests/css/css-transforms-2/transform-blank-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-transforms-2/transform-lime-square-ref.html rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-backface-visibility-001.html (92%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-backface-visibility-002.html (93%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-backface-visibility-003.html (92%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-backface-visibility-004.html (94%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-backface-visibility-005.html (93%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-backface-visibility-006.html (92%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-backface-visibility-007.html (93%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-backface-visibility-008.html (93%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-image-scale-001.html (84%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-image-scale-002.html (82%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-matrix3d-001-ref.html (100%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-matrix3d-001.html (85%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-matrix3d-002-ref.html (100%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-matrix3d-002.html (85%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-matrix3d-003-ref.html (100%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-matrix3d-003.html (85%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-matrix3d-004-ref.html (100%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-matrix3d-004.html (85%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-matrix3d-005-ref.html (100%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-matrix3d-005.html (83%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-perspective-001-ref.html (100%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-perspective-001.html (91%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-perspective-002.html (92%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-perspective-003.html (91%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-perspective-004.html (92%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-perspective-005.html (92%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-perspective-006.html (90%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-perspective-007.html (93%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-perspective-008.html (91%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-perspective-009-ref.html (100%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-perspective-009.html (94%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-perspective-origin-001.html (93%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-perspective-origin-ref.html (100%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-preserve3d-001-ref.html (100%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-preserve3d-001.html (93%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-preserve3d-002.html (93%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-preserve3d-003.html (93%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-preserve3d-004.html (93%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-preserve3d-005.html (94%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-preserve3d-006.html (93%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-preserve3d-007.html (91%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-preserve3d-008.html (93%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-preserve3d-009.html (91%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-preserve3d-010.html (92%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-preserve3d-011.html (93%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-preserve3d-012.html (93%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-preserve3d-013-ref.html (100%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-preserve3d-013.html (92%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-rotate3d-001.html (84%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-rotate3d-002.html (84%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-rotatex-001.html (85%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-rotatex-perspective-001.html (79%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-rotatex-perspective-002.html (81%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-rotatex-perspective-003.html (94%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-rotatex-perspective-notref.html (100%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-rotatex-perspective-ref.html (100%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-rotatex-ref.html (100%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-rotatex-transformorigin-001.html (90%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-rotatex-transformorigin-ref.html (100%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-rotatey-001.html (84%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-rotatey-ref.html (100%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-scale-001-notref.html (100%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-scale-001-ref.html (100%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-scale-001.html (85%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-scale-002.html (87%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-scale-003.html (85%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-scale-004.html (77%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-scale-005-ref.html (100%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-scale-005.html (86%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-scale-006.html (84%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-scale-007-ref.html (100%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-scale-007.html (91%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-sorting-001.html (87%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-sorting-002.html (89%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-sorting-003.html (85%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-sorting-004.html (88%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-sorting-005.html (88%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-sorting-006-ref.html (100%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-sorting-006.html (86%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-translate3d-001.html (88%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-translate3d-ref.html (100%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-translatez-001.html (87%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-translatez-notref.html (100%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transform3d-translatez-ref.html (100%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transforms-rotateY-degree-60.html (94%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transofrmed-preserve-3d-1.html (100%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transofrmed-rotateX-3.html (100%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/transofrmed-rotateY-1.html (100%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/ttwf-css-3d-polygon-cycle-mismatch.html (96%) rename tests/wpt/web-platform-tests/css/{css-transforms-1 => css-transforms-2}/ttwf-css-3d-polygon-cycle.html (95%) create mode 100644 tests/wpt/web-platform-tests/css/css-variables-1/resources/variable-reference-refresh-iframe.css create mode 100644 tests/wpt/web-platform-tests/css/css-variables-1/resources/variable-reference-refresh-iframe.html create mode 100644 tests/wpt/web-platform-tests/css/css-variables-1/variable-animation-from-to.html create mode 100644 tests/wpt/web-platform-tests/css/css-variables-1/variable-animation-over-transition.html create mode 100644 tests/wpt/web-platform-tests/css/css-variables-1/variable-animation-substitute-into-keyframe-shorthand.html create mode 100644 tests/wpt/web-platform-tests/css/css-variables-1/variable-animation-substitute-into-keyframe-transform.html create mode 100644 tests/wpt/web-platform-tests/css/css-variables-1/variable-animation-substitute-into-keyframe.html create mode 100644 tests/wpt/web-platform-tests/css/css-variables-1/variable-animation-substitute-within-keyframe-fallback.html create mode 100644 tests/wpt/web-platform-tests/css/css-variables-1/variable-animation-substitute-within-keyframe-multiple.html create mode 100644 tests/wpt/web-platform-tests/css/css-variables-1/variable-animation-substitute-within-keyframe.html create mode 100644 tests/wpt/web-platform-tests/css/css-variables-1/variable-animation-to-only.html create mode 100644 tests/wpt/web-platform-tests/css/css-variables-1/variable-created-document.html create mode 100644 tests/wpt/web-platform-tests/css/css-variables-1/variable-created-element.html create mode 100644 tests/wpt/web-platform-tests/css/css-variables-1/variable-cssText.html create mode 100644 tests/wpt/web-platform-tests/css/css-variables-1/variable-definition-border-shorthand-serialize.html create mode 100644 tests/wpt/web-platform-tests/css/css-variables-1/variable-definition-cascading.html create mode 100644 tests/wpt/web-platform-tests/css/css-variables-1/variable-definition-keywords.html create mode 100644 tests/wpt/web-platform-tests/css/css-variables-1/variable-definition.html create mode 100644 tests/wpt/web-platform-tests/css/css-variables-1/variable-first-letter.html create mode 100644 tests/wpt/web-platform-tests/css/css-variables-1/variable-first-line.html create mode 100644 tests/wpt/web-platform-tests/css/css-variables-1/variable-invalidation.html create mode 100644 tests/wpt/web-platform-tests/css/css-variables-1/variable-presentation-attribute.html create mode 100644 tests/wpt/web-platform-tests/css/css-variables-1/variable-pseudo-element.html create mode 100644 tests/wpt/web-platform-tests/css/css-variables-1/variable-reference-cssom.html create mode 100644 tests/wpt/web-platform-tests/css/css-variables-1/variable-reference-refresh.html create mode 100644 tests/wpt/web-platform-tests/css/css-variables-1/variable-reference-shorthands-cssom.html create mode 100644 tests/wpt/web-platform-tests/css/css-variables-1/variable-reference-shorthands.html create mode 100644 tests/wpt/web-platform-tests/css/css-variables-1/variable-reference-variable.html create mode 100644 tests/wpt/web-platform-tests/css/css-variables-1/variable-reference.html create mode 100644 tests/wpt/web-platform-tests/css/css-variables-1/variable-substitution-background-properties.html create mode 100644 tests/wpt/web-platform-tests/css/css-variables-1/variable-substitution-basic.html create mode 100644 tests/wpt/web-platform-tests/css/css-variables-1/variable-substitution-filters.html create mode 100644 tests/wpt/web-platform-tests/css/css-variables-1/variable-substitution-plus-box-shadow.html create mode 100644 tests/wpt/web-platform-tests/css/css-variables-1/variable-substitution-replaced-size.html create mode 100644 tests/wpt/web-platform-tests/css/css-variables-1/variable-substitution-shadow-properties.html create mode 100644 tests/wpt/web-platform-tests/css/css-variables-1/variable-substitution-shorthands.html create mode 100644 tests/wpt/web-platform-tests/css/css-variables-1/variable-substitution-variable-declaration.html create mode 100644 tests/wpt/web-platform-tests/css/css-variables-1/variable-transitions-from-no-value.html create mode 100644 tests/wpt/web-platform-tests/css/css-variables-1/variable-transitions-to-no-value.html create mode 100644 tests/wpt/web-platform-tests/css/css-variables-1/variable-transitions-transition-property-all-before-value.html create mode 100644 tests/wpt/web-platform-tests/css/css-variables-1/variable-transitions-transition-property-variable-before-value.html create mode 100644 tests/wpt/web-platform-tests/css/css-variables-1/variable-transitions-value-before-transition-property-all.html create mode 100644 tests/wpt/web-platform-tests/css/css-variables-1/variable-transitions-value-before-transition-property-variable.html create mode 100644 tests/wpt/web-platform-tests/css/geometry-1/DOMMatrix-a-f-alias.html create mode 100644 tests/wpt/web-platform-tests/css/geometry-1/DOMMatrix-css-string.worker.js create mode 100644 tests/wpt/web-platform-tests/css/geometry-1/DOMMatrix-newobject.html create mode 100644 tests/wpt/web-platform-tests/css/geometry-1/DOMMatrix-stringifier.html create mode 100644 tests/wpt/web-platform-tests/css/geometry-1/DOMMatrixInit-validate-fixup.html create mode 100644 tests/wpt/web-platform-tests/css/geometry-1/DOMQuad-002.html create mode 100644 tests/wpt/web-platform-tests/css/geometry-1/WebKitCSSMatrix.html create mode 100644 tests/wpt/web-platform-tests/css/geometry-1/WebKitCSSMatrix.worker.js create mode 100644 tests/wpt/web-platform-tests/css/geometry-1/historical.html create mode 100644 tests/wpt/web-platform-tests/css/geometry-1/interfaces.html create mode 100644 tests/wpt/web-platform-tests/css/geometry-1/interfaces.worker.js create mode 100644 tests/wpt/web-platform-tests/css/geometry-1/structured-serialization.html create mode 100644 tests/wpt/web-platform-tests/css/geometry-1/support/interfaces.js create mode 100644 tests/wpt/web-platform-tests/css/motion-1/offset-path-ray-ref.html create mode 100644 tests/wpt/web-platform-tests/css/motion-1/offset-path-ray.html create mode 100644 tests/wpt/web-platform-tests/css/motion-1/offset-path-string-ref.html create mode 100644 tests/wpt/web-platform-tests/css/motion-1/offset-path-string.html create mode 100644 tests/wpt/web-platform-tests/css/motion-1/offset-rotate-001.html create mode 100644 tests/wpt/web-platform-tests/css/motion-1/offset-rotate-002.html create mode 100644 tests/wpt/web-platform-tests/css/motion-1/offset-rotate-ref.html create mode 100644 tests/wpt/web-platform-tests/css/motion-1/parsing/offset-anchor-parsing-invalid.html create mode 100644 tests/wpt/web-platform-tests/css/motion-1/parsing/offset-anchor-parsing-valid.html create mode 100644 tests/wpt/web-platform-tests/css/motion-1/parsing/offset-distance-parsing-invalid.html create mode 100644 tests/wpt/web-platform-tests/css/motion-1/parsing/offset-distance-parsing-valid.html create mode 100644 tests/wpt/web-platform-tests/css/motion-1/parsing/offset-parsing-invalid.html create mode 100644 tests/wpt/web-platform-tests/css/motion-1/parsing/offset-parsing-valid.html create mode 100644 tests/wpt/web-platform-tests/css/motion-1/parsing/offset-path-parsing-invalid.html create mode 100644 tests/wpt/web-platform-tests/css/motion-1/parsing/offset-path-parsing-valid.html create mode 100644 tests/wpt/web-platform-tests/css/motion-1/parsing/offset-position-parsing-invalid.html create mode 100644 tests/wpt/web-platform-tests/css/motion-1/parsing/offset-position-parsing-valid.html create mode 100644 tests/wpt/web-platform-tests/css/motion-1/parsing/offset-rotate-parsing-invalid.html create mode 100644 tests/wpt/web-platform-tests/css/motion-1/parsing/offset-rotate-parsing-valid.html create mode 100644 tests/wpt/web-platform-tests/css/motion-1/parsing/resources/parsing-testcommon.js create mode 100644 tests/wpt/web-platform-tests/css/reference/ref-filled-green-200px-square.html create mode 100644 tests/wpt/web-platform-tests/css/reference/ref-filled-green-300px-square.html create mode 100644 tests/wpt/web-platform-tests/css/selectors4/focus-display-none-001.html create mode 100644 tests/wpt/web-platform-tests/css/selectors4/focus-within-006-ref.html create mode 100644 tests/wpt/web-platform-tests/css/selectors4/focus-within-010.html create mode 100644 tests/wpt/web-platform-tests/css/selectors4/focus-within-display-none-001.html create mode 100644 tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/masking/mask-composite-1d.html create mode 100644 tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/masking/mask-mode-d.html create mode 100644 tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/selectors4/class-id-attr-selector-invalidation-01-ref.html create mode 100644 tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/selectors4/class-id-attr-selector-invalidation-01.html delete mode 100644 tests/wpt/web-platform-tests/css/work-in-progress/hixie/comments-010.xht create mode 100644 tests/wpt/web-platform-tests/cssom-view/scrollIntoView-empty-args.html create mode 100644 tests/wpt/web-platform-tests/cssom-view/scrollIntoView-shadow.html create mode 100644 tests/wpt/web-platform-tests/cssom-view/scrollIntoView-smooth.html create mode 100644 tests/wpt/web-platform-tests/cssom-view/scrolling-quirks-vs-nonquirks.html create mode 100644 tests/wpt/web-platform-tests/cssom/getComputedStyle-pseudo.html create mode 100644 tests/wpt/web-platform-tests/cssom/insertRule-charset-no-index.html create mode 100644 tests/wpt/web-platform-tests/cssom/insertRule-import-no-index.html create mode 100644 tests/wpt/web-platform-tests/cssom/insertRule-namespace-no-index.html create mode 100644 tests/wpt/web-platform-tests/cssom/insertRule-no-index.html create mode 100644 tests/wpt/web-platform-tests/cssom/support/import-charset.css create mode 100644 tests/wpt/web-platform-tests/cssom/variable-names.html create mode 100644 tests/wpt/web-platform-tests/custom-elements/custom-element-registry/per-global.html create mode 100644 tests/wpt/web-platform-tests/custom-elements/microtasks-and-constructors.html delete mode 100644 tests/wpt/web-platform-tests/docs/_writing-tests/idlharness.html rename tests/wpt/web-platform-tests/{resources/docs => docs/_writing-tests}/idlharness.md (99%) delete mode 100644 tests/wpt/web-platform-tests/docs/_writing-tests/testharness-api.html rename tests/wpt/web-platform-tests/{resources/docs/api.md => docs/_writing-tests/testharness-api.md} (98%) create mode 100644 tests/wpt/web-platform-tests/dom/nodes/Document-constructor-svg.svg create mode 100644 tests/wpt/web-platform-tests/dom/nodes/Document-constructor-xml.xml create mode 100644 tests/wpt/web-platform-tests/domparsing/DOMParser-parseFromString-xml-internal-subset.html create mode 100644 tests/wpt/web-platform-tests/dpub-aam/doc-abstract-manual.html create mode 100644 tests/wpt/web-platform-tests/dpub-aam/doc-acknowledgments-manual.html create mode 100644 tests/wpt/web-platform-tests/dpub-aam/doc-afterword-manual.html create mode 100644 tests/wpt/web-platform-tests/dpub-aam/doc-appendix-manual.html create mode 100644 tests/wpt/web-platform-tests/dpub-aam/doc-backlink-manual.html create mode 100644 tests/wpt/web-platform-tests/dpub-aam/doc-biblioentry-manual.html create mode 100644 tests/wpt/web-platform-tests/dpub-aam/doc-bibliography-manual.html create mode 100644 tests/wpt/web-platform-tests/dpub-aam/doc-biblioref-manual.html create mode 100644 tests/wpt/web-platform-tests/dpub-aam/doc-chapter-manual.html create mode 100644 tests/wpt/web-platform-tests/dpub-aam/doc-colophon-manual.html create mode 100644 tests/wpt/web-platform-tests/dpub-aam/doc-conclusion-manual.html create mode 100644 tests/wpt/web-platform-tests/dpub-aam/doc-cover-manual.html create mode 100644 tests/wpt/web-platform-tests/dpub-aam/doc-credit-manual.html create mode 100644 tests/wpt/web-platform-tests/dpub-aam/doc-credits-manual.html create mode 100644 tests/wpt/web-platform-tests/dpub-aam/doc-dedication-manual.html create mode 100644 tests/wpt/web-platform-tests/dpub-aam/doc-endnote-manual.html create mode 100644 tests/wpt/web-platform-tests/dpub-aam/doc-endnotes-manual.html create mode 100644 tests/wpt/web-platform-tests/dpub-aam/doc-epigraph-manual.html create mode 100644 tests/wpt/web-platform-tests/dpub-aam/doc-epilogue-manual.html create mode 100644 tests/wpt/web-platform-tests/dpub-aam/doc-errata-manual.html create mode 100644 tests/wpt/web-platform-tests/dpub-aam/doc-example-manual.html create mode 100644 tests/wpt/web-platform-tests/dpub-aam/doc-footnote-manual.html create mode 100644 tests/wpt/web-platform-tests/dpub-aam/doc-foreword-manual.html create mode 100644 tests/wpt/web-platform-tests/dpub-aam/doc-glossary-manual.html create mode 100644 tests/wpt/web-platform-tests/dpub-aam/doc-glossref-manual.html create mode 100644 tests/wpt/web-platform-tests/dpub-aam/doc-index-manual.html create mode 100644 tests/wpt/web-platform-tests/dpub-aam/doc-introduction-manual.html create mode 100644 tests/wpt/web-platform-tests/dpub-aam/doc-noteref-manual.html create mode 100644 tests/wpt/web-platform-tests/dpub-aam/doc-notice-manual.html create mode 100644 tests/wpt/web-platform-tests/dpub-aam/doc-pagebreak-manual.html create mode 100644 tests/wpt/web-platform-tests/dpub-aam/doc-pagelist-manual.html create mode 100644 tests/wpt/web-platform-tests/dpub-aam/doc-part-manual.html create mode 100644 tests/wpt/web-platform-tests/dpub-aam/doc-preface-manual.html create mode 100644 tests/wpt/web-platform-tests/dpub-aam/doc-prologue-manual.html create mode 100644 tests/wpt/web-platform-tests/dpub-aam/doc-pullquote-manual.html create mode 100644 tests/wpt/web-platform-tests/dpub-aam/doc-qna-manual.html create mode 100644 tests/wpt/web-platform-tests/dpub-aam/doc-subtitle-manual.html create mode 100644 tests/wpt/web-platform-tests/dpub-aam/doc-tip-manual.html create mode 100644 tests/wpt/web-platform-tests/dpub-aam/doc-toc-manual.html create mode 100644 tests/wpt/web-platform-tests/editing/data/README.md create mode 100644 tests/wpt/web-platform-tests/editing/data/delete-list-items-in-table-cells.js create mode 100644 tests/wpt/web-platform-tests/editing/other/extra-text-nodes.html create mode 100644 tests/wpt/web-platform-tests/editing/run/delete-list-items-in-table-cell.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/jis0208_index.js create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-decode-csshiftjis.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-decode-errors.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms932.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms_kanji.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-decode-shift-jis.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-decode-sjis.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-decode-windows-31j.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-decode-x-sjis.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-decode.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-decoder.js create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-csshiftjis.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-csshiftjis.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-han.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-han.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-hangul.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-hangul.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-misc.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-misc.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms932.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms932.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms_kanji.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms_kanji.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-shift-jis.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-shift-jis.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-sjis.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-sjis.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-windows-31j.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-windows-31j.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-x-sjis.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-x-sjis.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-han.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-han.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-hangul.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-hangul.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-misc.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-misc.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encoder.js create mode 100755 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-csshiftjis.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-csshiftjis.html.headers create mode 100755 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-ms932.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-ms932.html.headers create mode 100755 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-ms_kanji.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-ms_kanji.html.headers create mode 100755 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-shift-jis.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-shift-jis.html.headers create mode 100755 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-sjis.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-sjis.html.headers create mode 100755 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-windows-31j.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-windows-31j.html.headers create mode 100755 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-x-sjis.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-x-sjis.html.headers create mode 100755 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars.html.headers create mode 100755 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_errors.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_errors.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-decode-cseuckr.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-decode-csksc56011987.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-decode-errors.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-decode-iso-ir-149.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-decode-korean.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-decode-ks_c_5601-1987.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-decode-ks_c_5601-1989.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-decode-ksc5601.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-decode-ksc_5601.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-decode-windows-949.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-decode.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-decoder.js create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-cseuckr.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-cseuckr.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-han.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-han.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-hangul.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-hangul.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-misc.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-misc.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc5601.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc5601.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-windows-949.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-windows-949.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-han.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-han.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-misc.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-misc.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-href.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-href.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encoder.js create mode 100755 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-cseuckr.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-cseuckr.html.headers create mode 100755 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-csksc56011987.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-csksc56011987.html.headers create mode 100755 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-iso-ir-149.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-iso-ir-149.html.headers create mode 100755 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-korean.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-korean.html.headers create mode 100755 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-ks_c_5601-1987.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-ks_c_5601-1987.html.headers create mode 100755 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-ks_c_5601-1989.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-ks_c_5601-1989.html.headers create mode 100755 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-ksc5601.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-ksc5601.html.headers create mode 100755 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-ksc_5601.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-ksc_5601.html.headers create mode 100755 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-windows-949.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-windows-949.html.headers create mode 100755 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars.html.headers create mode 100755 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_errors.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_errors.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_index.js create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-decode-big5-hkscs.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-decode-cn-big5.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-decode-csbig5.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-decode-errors.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-decode-extra.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-decode-x-x-big5.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-decode.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-decoder.js create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-enc-ascii.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-enc-ascii.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-big5-hkscs.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-big5-hkscs.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-cn-big5.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-cn-big5.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-csbig5.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-csbig5.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBa.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBa.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBb.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBb.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-han.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-han.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-hangul.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-hangul.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-misc.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-misc.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-pua.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-x-x-big5.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-x-x-big5.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-han.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-han.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-hangul.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-hangul.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-misc.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-misc.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-href.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-href.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encoder.js create mode 100755 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_chars-big5-hkscs.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_chars-big5-hkscs.html.headers create mode 100755 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_chars-cn-big5.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_chars-cn-big5.html.headers create mode 100755 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_chars-csbig5.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_chars-csbig5.html.headers create mode 100755 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_chars-x-x-big5.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_chars-x-x-big5.html.headers create mode 100755 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_chars.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_chars.html.headers create mode 100755 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_chars_extra.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_chars_extra.html.headers create mode 100755 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_errors.html create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_errors.html.headers create mode 100644 tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_index.js create mode 100644 tests/wpt/web-platform-tests/fetch/security/dangling-markup-mitigation.tentative.html create mode 100644 tests/wpt/web-platform-tests/fetch/security/embedded-credentials.tentative.sub.html create mode 100644 tests/wpt/web-platform-tests/fetch/security/support/embedded-credential-window.sub.html delete mode 100644 tests/wpt/web-platform-tests/fonts/CanvasTest.sfd create mode 100644 tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-active-document.html create mode 100644 tests/wpt/web-platform-tests/fullscreen/interfaces.html create mode 100644 tests/wpt/web-platform-tests/fullscreen/model/move-to-iframe-manual.html create mode 100644 tests/wpt/web-platform-tests/generic-sensor/generic-sensor-tests.js create mode 100644 tests/wpt/web-platform-tests/gyroscope/Gyroscope.https.html create mode 100644 tests/wpt/web-platform-tests/gyroscope/Gyroscope_insecure_context.html create mode 100644 tests/wpt/web-platform-tests/gyroscope/Gyroscope_onerror-manual.https.html create mode 100644 tests/wpt/web-platform-tests/gyroscope/support-iframe.html create mode 100644 tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/location-origin-idna.sub.window.js create mode 100644 tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/per-global.window.js create mode 100644 tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/resources/post-your-origin.html create mode 100644 tests/wpt/web-platform-tests/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_setter_null.tentative.html create mode 100644 tests/wpt/web-platform-tests/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_setter_srcdoc.html create mode 100644 tests/wpt/web-platform-tests/html/browsers/origin/relaxing-the-same-origin-restriction/support/document_domain_frame.html create mode 100644 tests/wpt/web-platform-tests/html/browsers/the-window-object/historical.window.js create mode 100644 tests/wpt/web-platform-tests/html/dom/documents/dom-tree-accessors/nameditem-07.html create mode 100644 tests/wpt/web-platform-tests/html/dom/documents/dom-tree-accessors/nameditem-08.html delete mode 100644 tests/wpt/web-platform-tests/html/dom/resources/untested-interfaces.idl create mode 100644 tests/wpt/web-platform-tests/html/editing/dnd/datastore/datatransfer-types.html create mode 100644 tests/wpt/web-platform-tests/html/editing/dnd/events/relatedTarget-attribute-manual.html create mode 100644 tests/wpt/web-platform-tests/html/editing/editing-0/spelling-and-grammar-checking/references/spelling-markers-001-ref.html create mode 100644 tests/wpt/web-platform-tests/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-001.html create mode 100644 tests/wpt/web-platform-tests/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-002.html create mode 100644 tests/wpt/web-platform-tests/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-003.html create mode 100644 tests/wpt/web-platform-tests/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-004.html create mode 100644 tests/wpt/web-platform-tests/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-005.html create mode 100644 tests/wpt/web-platform-tests/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-006.html create mode 100644 tests/wpt/web-platform-tests/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-007.html create mode 100644 tests/wpt/web-platform-tests/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-008.html create mode 100644 tests/wpt/web-platform-tests/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-009.html create mode 100644 tests/wpt/web-platform-tests/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-010.html create mode 100644 tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/broadcastchannel-success-and-failure.html create mode 100644 tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/broadcastchannel-success.html create mode 100644 tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/identity-not-preserved.html create mode 100644 tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-worker-success-dedicatedworker.html create mode 100644 tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-worker-success-sharedworker.html create mode 100644 tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-worker-success.js create mode 100644 tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-transferring.html create mode 100644 tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/blank.html create mode 100644 tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/broadcastchannel-iframe.html create mode 100644 tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/broadcastchannel-sharedworker.js create mode 100644 tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/broadcastchannel-worker.js create mode 100644 tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/echo-iframe.html create mode 100644 tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/echo-worker.js create mode 100644 tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/incrementer-iframe-domain.sub.html create mode 100644 tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/incrementer-iframe.html create mode 100644 tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/incrementer-popup.html create mode 100644 tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/incrementer-worker-with-channel.js create mode 100644 tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/incrementer-worker.js create mode 100644 tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-iframe-1.html create mode 100644 tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-iframe-2.html create mode 100644 tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-iframe-3.html create mode 100644 tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-iframe-4-incrementer.html create mode 100644 tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/serviceworker-failure.js create mode 100644 tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/sharedworker-failure.js create mode 100644 tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/test-incrementer.js create mode 100644 tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/test-sab.js create mode 100644 tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-history.html create mode 100644 tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-idb.any.js create mode 100644 tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-notifications-api.any.js create mode 100644 tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-domain-success.sub.html create mode 100644 tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-messagechannel-success.html create mode 100644 tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-serviceworker-failure.https.html create mode 100644 tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-sharedworker-failure.html create mode 100644 tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-similar-but-cross-origin-success.sub.html create mode 100644 tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-simple-success.html create mode 100644 tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-block-formatting-context.html create mode 100644 tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend.html create mode 100644 tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-hr-element-0/hr.html create mode 100644 tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-hr-element-0/setting-overflow-visible.html create mode 100644 tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/iframe-body-margin-attributes.html create mode 100644 tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/iframe-marginwidth-marginheight.html create mode 100644 tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/support/body-marginwidth-marginheight.html create mode 100644 tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/support/body-topmargin-leftmargin.html create mode 100644 tests/wpt/web-platform-tests/html/rendering/replaced-elements/the-option-element/option-with-br-ref.html create mode 100644 tests/wpt/web-platform-tests/html/rendering/replaced-elements/the-option-element/option-with-br.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/ismap/img-ismap-coordinates-iframe-after.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/ismap/img-ismap-coordinates-iframe-before.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/ismap/img-ismap-coordinates-iframe-inside.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/ismap/img-ismap-coordinates-manual.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/forms/resetting-a-form/reset-form-2.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/forms/the-button-element/button-click-submits.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/forms/the-button-element/button-type.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/forms/the-form-element/form-action-reflection-with-base-url.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/forms/the-form-element/form-action-reflection.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/forms/the-form-element/form-action-submission-with-base-url.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/forms/the-form-element/form-action-submission.html delete mode 100644 tests/wpt/web-platform-tests/html/semantics/forms/the-form-element/form-action-url.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/forms/the-form-element/form-elements-filter.html delete mode 100644 tests/wpt/web-platform-tests/html/semantics/forms/the-form-element/resources/form-action-url-iframe.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/forms/the-form-element/resources/form-no-action-with-base.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/forms/the-form-element/resources/form-no-action.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/forms/the-form-element/resources/form-with-action-and-base.sub.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/forms/the-form-element/resources/form-with-action.sub.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/forms/the-input-element/checkbox-click-events.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/forms/the-input-element/radio-input-cancel.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/forms/the-label-element/proxy-click-to-associated-element.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/forms/the-option-element/option-element-constructor.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/forms/the-option-element/option-index.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/forms/the-select-element/select-multiple.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/forms/the-select-element/select-selectedOptions.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/forms/the-textarea-element/value-defaultValue-textContent.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/interactive-elements/contextmenu-historical.html delete mode 100644 tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-menu-element/contains.json create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/bad-module-specifier.js create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/compilation-error-1.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/compilation-error-2.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/currentScript-null.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/currentscript.js create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/cycle-tdz-access-a.js create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/cycle-tdz-access.js create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/cycle-unresolvable-a.js create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/cycle-unresolvable.js create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-and-slow-dependency.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-error-1.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-error-2.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-error-3.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-error-4.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/export-something-nested.js create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/export-something.js create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/fetch-error-1.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/fetch-error-2.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/fetch-error-2.js create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/import-something-namespace.js create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/import-subgraph-404.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/instantiation-error-1.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/instantiation-error-1.js create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/instantiation-error-2.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/instantiation-error-3.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/late-namespace-request.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/late-star-export-request.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/missing-export-nested.js create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/missing-export.js create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/module-vs-script-1.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/module-vs-script-2.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/nested-missing-export.js create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/nomodule-attribute.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/resources/delayed-modulescript.py create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/script-for-event.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/set-currentScript-on-window.js create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/single-evaluation-1.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/single-evaluation-2.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/slow-cycle.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/slow-module-graph-a.js create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/slow-module-graph-b.js create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/specifier-error.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/syntaxerror-nested.js create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/syntaxerror.js create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/this-nested.js create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/this.js create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/throw-nested.js create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/throw.js create mode 100644 tests/wpt/web-platform-tests/html/semantics/tabular-data/processing-model-1/col-span-limits.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/tabular-data/processing-model-1/span-limits.html create mode 100644 tests/wpt/web-platform-tests/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-1.htm create mode 100644 tests/wpt/web-platform-tests/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-10.htm create mode 100644 tests/wpt/web-platform-tests/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-2.htm create mode 100644 tests/wpt/web-platform-tests/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-3.htm create mode 100644 tests/wpt/web-platform-tests/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-4.htm create mode 100644 tests/wpt/web-platform-tests/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-5.htm create mode 100644 tests/wpt/web-platform-tests/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-6.htm create mode 100644 tests/wpt/web-platform-tests/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-7.htm create mode 100644 tests/wpt/web-platform-tests/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-8.htm create mode 100644 tests/wpt/web-platform-tests/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-9.htm rename tests/wpt/web-platform-tests/html/{semantics/interactive-elements/context-menus => webappapis/scripting/events}/contextmenu-event-manual.htm (100%) create mode 100644 tests/wpt/web-platform-tests/html/webappapis/scripting/events/event-handler-all-global-events.html delete mode 100644 tests/wpt/web-platform-tests/html/webappapis/scripting/events/event-handler-onauxclick.html create mode 100644 tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/canblock-dedicatedworker.html create mode 100644 tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/canblock-serviceworker.https.html create mode 100644 tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/canblock-sharedworker.html create mode 100644 tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/canblock-window.html create mode 100644 tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/worker-that-requires-failure.js create mode 100644 tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/worker-that-requires-success.js delete mode 100644 tests/wpt/web-platform-tests/html/webappapis/system-state-and-capabilities/the-navigator-object/NavigatorID.worker.js create mode 100644 tests/wpt/web-platform-tests/html/webappapis/system-state-and-capabilities/the-navigator-object/navigator-pluginarray.html rename tests/wpt/web-platform-tests/html/webappapis/system-state-and-capabilities/the-navigator-object/{NavigatorID.js => navigator.any.js} (97%) create mode 100644 tests/wpt/web-platform-tests/image-decodes/image-decode-iframe.html create mode 100644 tests/wpt/web-platform-tests/image-decodes/image-decode-path-changes.html create mode 100644 tests/wpt/web-platform-tests/image-decodes/image-decode.html create mode 100644 tests/wpt/web-platform-tests/input-events/input-events-typing-data-manual.html create mode 100644 tests/wpt/web-platform-tests/interfaces/OWNERS create mode 100644 tests/wpt/web-platform-tests/interfaces/cssom.idl create mode 100644 tests/wpt/web-platform-tests/interfaces/dom.idl create mode 100644 tests/wpt/web-platform-tests/interfaces/fullscreen.idl create mode 100644 tests/wpt/web-platform-tests/interfaces/geometry.idl rename tests/wpt/web-platform-tests/{html/dom/resources/interfaces.idl => interfaces/html.idl} (93%) create mode 100644 tests/wpt/web-platform-tests/interfaces/mediacapture-main.idl create mode 100644 tests/wpt/web-platform-tests/interfaces/remoteplayback.idl create mode 100644 tests/wpt/web-platform-tests/interfaces/touchevents.idl create mode 100644 tests/wpt/web-platform-tests/interfaces/uievents.idl create mode 100644 tests/wpt/web-platform-tests/interfaces/webrtc-pc.idl create mode 100644 tests/wpt/web-platform-tests/keyboard-lock/idlharness.https.html create mode 100644 tests/wpt/web-platform-tests/keyboard-lock/navigator-cancelKeyboardLock.https.html create mode 100644 tests/wpt/web-platform-tests/keyboard-lock/navigator-requestKeyboardLock-two-parallel-requests.https.html create mode 100644 tests/wpt/web-platform-tests/keyboard-lock/navigator-requestKeyboardLock-two-sequential-requests.https.html create mode 100644 tests/wpt/web-platform-tests/keyboard-lock/navigator-requestKeyboardLock.https.html create mode 100644 tests/wpt/web-platform-tests/magnetometer/Magnetometer.https.html create mode 100644 tests/wpt/web-platform-tests/magnetometer/Magnetometer_insecure_context.html create mode 100644 tests/wpt/web-platform-tests/magnetometer/Magnetometer_onerror-manual.https.html create mode 100644 tests/wpt/web-platform-tests/magnetometer/support-iframe.html delete mode 100644 tests/wpt/web-platform-tests/media/CanvasTest.ttf create mode 100644 tests/wpt/web-platform-tests/mediacapture-image/idlharness.html create mode 100644 tests/wpt/web-platform-tests/mediacapture-streams/MediaDevices-IDL-all.html create mode 100644 tests/wpt/web-platform-tests/mediacapture-streams/MediaDevices-IDL-enumerateDevices.html create mode 100644 tests/wpt/web-platform-tests/mixed-content/imageset.https.sub.html create mode 100644 tests/wpt/web-platform-tests/netinfo/netinfo-basics.html delete mode 100644 tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/iframe_sandbox_009.htm delete mode 100644 tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/sandbox_009-manual.htm create mode 100644 tests/wpt/web-platform-tests/orientation-sensor/OWNERS create mode 100644 tests/wpt/web-platform-tests/orientation-sensor/idlharness.https.html create mode 100644 tests/wpt/web-platform-tests/payment-request/payment-request-abort-method.https.html create mode 100644 tests/wpt/web-platform-tests/payment-request/payment-request-canmakepayment-method.https.http create mode 100644 tests/wpt/web-platform-tests/payment-request/payment-request-constructor-crash.https.html create mode 100644 tests/wpt/web-platform-tests/payment-request/payment-request-constructor.https.html create mode 100644 tests/wpt/web-platform-tests/payment-request/payment-request-id.https.html create mode 100644 tests/wpt/web-platform-tests/payment-request/payment-request-onshippingaddresschange-attribute.https.html create mode 100644 tests/wpt/web-platform-tests/payment-request/payment-request-onshippingoptionchange-attribute.https.html create mode 100644 tests/wpt/web-platform-tests/payment-request/payment-request-response-id.html create mode 100644 tests/wpt/web-platform-tests/payment-request/payment-request-show-method.https.html create mode 100644 tests/wpt/web-platform-tests/payment-request/payment-request-update-event-constructor.http.html create mode 100644 tests/wpt/web-platform-tests/payment-request/payment-request-update-event-constructor.https.html create mode 100644 tests/wpt/web-platform-tests/payment-request/payment-request-update-event-updatewith-method.https.html create mode 100644 tests/wpt/web-platform-tests/performance-timeline/po-observe.html create mode 100644 tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-rotated-divs_touch-manual.html create mode 100644 tests/wpt/web-platform-tests/pointerevents/pointerlock/pointerevent_pointerlock_after_pointercapture-manual.html create mode 100644 tests/wpt/web-platform-tests/pointerevents/pointerlock/pointerevent_pointerlock_supercedes_capture-manual.html create mode 100644 tests/wpt/web-platform-tests/pointerlock/pointerlock_remove_target_on_mouseup-manual.html create mode 100644 tests/wpt/web-platform-tests/preload/reflected-as-value.html create mode 100644 tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationConnection_onclose-manual.https.html delete mode 100644 tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationConnection_onclosed-manual.html create mode 100644 tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationConnection_onconnect-manual.https.html delete mode 100644 tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationConnection_onconnected-manual.html create mode 100644 tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationConnection_onterminate-manual.https.html delete mode 100644 tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationConnection_onterminated-manual.html create mode 100644 tests/wpt/web-platform-tests/presentation-api/controlling-ua/defaultRequest.https.html create mode 100644 tests/wpt/web-platform-tests/presentation-api/receiving-ua/PresentationConnectionList_onconnectionavailable-manual.https.html create mode 100644 tests/wpt/web-platform-tests/presentation-api/receiving-ua/PresentationConnection_onclose-manual.https.html create mode 100644 tests/wpt/web-platform-tests/presentation-api/receiving-ua/PresentationConnection_terminate-manual.https.html create mode 100644 tests/wpt/web-platform-tests/presentation-api/receiving-ua/support/PresentationConnectionList_onconnectionavailable_receiving-ua.html create mode 100644 tests/wpt/web-platform-tests/presentation-api/receiving-ua/support/PresentationConnection_onclose_receiving-ua.html create mode 100644 tests/wpt/web-platform-tests/presentation-api/receiving-ua/support/PresentationConnection_terminate_receiving-ua.html create mode 100644 tests/wpt/web-platform-tests/presentation-api/receiving-ua/support/iframe.html create mode 100644 tests/wpt/web-platform-tests/remote-playback/idlharness.html create mode 100644 tests/wpt/web-platform-tests/resource-timing/resource_TAO_match_origin.htm create mode 100644 tests/wpt/web-platform-tests/resource-timing/resource_TAO_match_wildcard.htm create mode 100644 tests/wpt/web-platform-tests/resource-timing/resource_TAO_multi.htm create mode 100644 tests/wpt/web-platform-tests/resource-timing/resource_TAO_null.htm create mode 100644 tests/wpt/web-platform-tests/resource-timing/resource_TAO_origin.htm create mode 100644 tests/wpt/web-platform-tests/resource-timing/resource_TAO_origin_uppercase.htm create mode 100644 tests/wpt/web-platform-tests/resource-timing/resource_TAO_space.htm create mode 100644 tests/wpt/web-platform-tests/resource-timing/resource_TAO_wildcard.htm create mode 100644 tests/wpt/web-platform-tests/resource-timing/resource_TAO_zero.htm create mode 100644 tests/wpt/web-platform-tests/resource-timing/resources/TAOResponse.py create mode 100644 tests/wpt/web-platform-tests/resource-timing/resources/iframe_TAO_match_origin.html create mode 100644 tests/wpt/web-platform-tests/resource-timing/resources/iframe_TAO_match_wildcard.html create mode 100644 tests/wpt/web-platform-tests/resource-timing/resources/iframe_TAO_multi.html create mode 100644 tests/wpt/web-platform-tests/resource-timing/resources/iframe_TAO_null.html create mode 100644 tests/wpt/web-platform-tests/resource-timing/resources/iframe_TAO_origin.html create mode 100644 tests/wpt/web-platform-tests/resource-timing/resources/iframe_TAO_origin_uppercase.html create mode 100644 tests/wpt/web-platform-tests/resource-timing/resources/iframe_TAO_space.html create mode 100644 tests/wpt/web-platform-tests/resource-timing/resources/iframe_TAO_wildcard.html create mode 100644 tests/wpt/web-platform-tests/resource-timing/resources/iframe_TAO_zero.html delete mode 100644 tests/wpt/web-platform-tests/resources/.gitmodules create mode 100644 tests/wpt/web-platform-tests/resources/OWNERS delete mode 100644 tests/wpt/web-platform-tests/resources/examples/apisample.htm delete mode 100644 tests/wpt/web-platform-tests/resources/examples/apisample14.html delete mode 100644 tests/wpt/web-platform-tests/resources/examples/apisample15.html delete mode 100644 tests/wpt/web-platform-tests/resources/examples/apisample17.html delete mode 100644 tests/wpt/web-platform-tests/resources/examples/apisample19.html delete mode 100644 tests/wpt/web-platform-tests/resources/examples/apisample2.htm delete mode 100644 tests/wpt/web-platform-tests/resources/examples/apisample3.htm delete mode 100644 tests/wpt/web-platform-tests/resources/examples/apisample4.htm delete mode 100644 tests/wpt/web-platform-tests/resources/examples/apisample5.htm delete mode 100644 tests/wpt/web-platform-tests/resources/examples/apisample6.html delete mode 100644 tests/wpt/web-platform-tests/resources/examples/apisample7.html delete mode 100644 tests/wpt/web-platform-tests/resources/examples/apisample8.html delete mode 100644 tests/wpt/web-platform-tests/resources/examples/apisample9.html create mode 100644 tests/wpt/web-platform-tests/resources/test/README.md create mode 100644 tests/wpt/web-platform-tests/resources/test/config.test.json create mode 100644 tests/wpt/web-platform-tests/resources/test/conftest.py create mode 100644 tests/wpt/web-platform-tests/resources/test/harness.html create mode 100644 tests/wpt/web-platform-tests/resources/test/tests/add_cleanup.html create mode 100644 tests/wpt/web-platform-tests/resources/test/tests/add_cleanup_err.html create mode 100644 tests/wpt/web-platform-tests/resources/test/tests/add_cleanup_err_multi.html create mode 100644 tests/wpt/web-platform-tests/resources/test/tests/api-tests-1.html create mode 100644 tests/wpt/web-platform-tests/resources/test/tests/api-tests-2.html create mode 100644 tests/wpt/web-platform-tests/resources/test/tests/api-tests-3.html create mode 100644 tests/wpt/web-platform-tests/resources/test/tests/generate-callback.html create mode 100644 tests/wpt/web-platform-tests/resources/test/tests/idlharness/IdlInterface/test_primary_interface_of.html rename tests/wpt/web-platform-tests/resources/{examples/apisample11.html => test/tests/iframe-callback.html} (85%) rename tests/wpt/web-platform-tests/resources/{examples/apisample18.html => test/tests/iframe-consolidate-errors.html} (50%) create mode 100644 tests/wpt/web-platform-tests/resources/test/tests/iframe-consolidate-tests.html rename tests/wpt/web-platform-tests/resources/{examples/apisample12.html => test/tests/iframe-msg.html} (76%) create mode 100644 tests/wpt/web-platform-tests/resources/test/tests/order.html rename tests/wpt/web-platform-tests/resources/{examples/apisample10.html => test/tests/promise-async.html} (64%) rename tests/wpt/web-platform-tests/resources/{examples/apisample13.html => test/tests/promise.html} (59%) create mode 100644 tests/wpt/web-platform-tests/resources/test/tests/single-page-test-fail.html create mode 100644 tests/wpt/web-platform-tests/resources/test/tests/single-page-test-no-assertions.html create mode 100644 tests/wpt/web-platform-tests/resources/test/tests/single-page-test-no-body.html create mode 100644 tests/wpt/web-platform-tests/resources/test/tests/single-page-test-pass.html create mode 100644 tests/wpt/web-platform-tests/resources/test/tests/uncaught-exception-handle.html create mode 100644 tests/wpt/web-platform-tests/resources/test/tests/uncaught-exception-ignore.html create mode 100644 tests/wpt/web-platform-tests/resources/test/tests/worker-dedicated.html rename tests/wpt/web-platform-tests/resources/{examples/apisample-error-worker.js => test/tests/worker-error.js} (54%) rename tests/wpt/web-platform-tests/resources/{examples/apisample16.html => test/tests/worker-service.html} (55%) create mode 100644 tests/wpt/web-platform-tests/resources/test/tests/worker-shared.html rename tests/wpt/web-platform-tests/resources/{examples/apisample-worker.js => test/tests/worker.js} (94%) create mode 100644 tests/wpt/web-platform-tests/resources/test/tox.ini create mode 100644 tests/wpt/web-platform-tests/resources/test/wptserver.py create mode 100644 tests/wpt/web-platform-tests/resources/webidl2/test/invalid/idl/record-key.widl create mode 100644 tests/wpt/web-platform-tests/resources/webidl2/test/invalid/json/record-key.json delete mode 100644 tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/map.widl create mode 100644 tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/namespace.widl create mode 100644 tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/record.widl delete mode 100644 tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/typedef-nested.widl create mode 100644 tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/typedef-union.idl delete mode 100644 tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/map.json create mode 100644 tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/namespace.json create mode 100644 tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/record.json delete mode 100644 tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/typedef-nested.json create mode 100644 tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/typedef-union.json create mode 100644 tests/wpt/web-platform-tests/scroll-anchoring/README.md create mode 100644 tests/wpt/web-platform-tests/scroll-anchoring/abspos-containing-block-outside-scroller.html create mode 100644 tests/wpt/web-platform-tests/scroll-anchoring/abspos-contributes-to-static-parent-bounds.html create mode 100644 tests/wpt/web-platform-tests/scroll-anchoring/ancestor-change-heuristic.html create mode 100644 tests/wpt/web-platform-tests/scroll-anchoring/anchor-updates-after-explicit-scroll.html create mode 100644 tests/wpt/web-platform-tests/scroll-anchoring/anchoring-with-bounds-clamping-div.html create mode 100644 tests/wpt/web-platform-tests/scroll-anchoring/anchoring-with-bounds-clamping.html create mode 100644 tests/wpt/web-platform-tests/scroll-anchoring/anonymous-block-box.html create mode 100644 tests/wpt/web-platform-tests/scroll-anchoring/basic.html create mode 100644 tests/wpt/web-platform-tests/scroll-anchoring/clipped-scrollers-skipped.html create mode 100644 tests/wpt/web-platform-tests/scroll-anchoring/descend-into-container-with-float.html create mode 100644 tests/wpt/web-platform-tests/scroll-anchoring/descend-into-container-with-overflow.html create mode 100644 tests/wpt/web-platform-tests/scroll-anchoring/exclude-fixed-position.html create mode 100644 tests/wpt/web-platform-tests/scroll-anchoring/inline-block.html create mode 100644 tests/wpt/web-platform-tests/scroll-anchoring/negative-layout-overflow.html create mode 100644 tests/wpt/web-platform-tests/scroll-anchoring/opt-out.html create mode 100644 tests/wpt/web-platform-tests/scroll-anchoring/position-change-heuristic.html create mode 100644 tests/wpt/web-platform-tests/scroll-anchoring/start-edge-in-block-layout-direction.html create mode 100644 tests/wpt/web-platform-tests/scroll-anchoring/subtree-exclusion.html create mode 100644 tests/wpt/web-platform-tests/scroll-anchoring/wrapped-text.html create mode 100644 tests/wpt/web-platform-tests/selection/collapse-15.html create mode 100644 tests/wpt/web-platform-tests/selection/collapse-45.html create mode 100644 tests/wpt/web-platform-tests/selection/type.html delete mode 100644 tests/wpt/web-platform-tests/selectors-api/tests/submissions/Opera/ParentNode-query-queryAll.html delete mode 100644 tests/wpt/web-platform-tests/selectors-api/tests/submissions/Opera/ParentNode-query-queryAll.js create mode 100644 tests/wpt/web-platform-tests/server-timing/resources/blue.png create mode 100644 tests/wpt/web-platform-tests/server-timing/resources/blue.png.sub.headers create mode 100644 tests/wpt/web-platform-tests/server-timing/resources/green.png create mode 100644 tests/wpt/web-platform-tests/server-timing/resources/green.png.sub.headers create mode 100644 tests/wpt/web-platform-tests/server-timing/test_server_timing.html create mode 100644 tests/wpt/web-platform-tests/server-timing/test_server_timing.html.sub.headers create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event-respond-with-argument.https.html create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event-respond-with-readable-stream.https.html create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event-respond-with-response-body-with-invalid-chunk.https.html create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/fetch-request-css-cross-origin-mime-check.https.html create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/fetch-request-html-imports.https.html create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/fetch-request-xhr-sync.https.html create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/fetch-response-taint.https.html create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/http-to-https-redirect-and-register.https.html create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/iframe-sandbox-register-link-element.https.html create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/import-scripts-resource-map.https.html create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/import-scripts-updated-flag.https.html create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/iso-latin1-header.https.html create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/navigation-preload/resource-timing.https.html create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/navigation-preload/resources/resource-timing-scope.py create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/navigation-preload/resources/resource-timing-worker.js create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/navigation-redirect-body.https.html create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/navigation-redirect-to-http.https.html create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/opaque-response-preloaded.https.html create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/redirected-response.https.html create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/referrer-policy-header.https.html create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/register-foreign-fetch-errors.https.html delete mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/registration-useCache.https.html create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/request-body-blob.https.html create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/resources/clients-get-client-types-frame-worker.js create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/resources/clients-get-client-types-worker.js create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/resources/clients-matchall-client-types-dedicated-worker.js create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-respond-with-argument-iframe.html create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-respond-with-argument-worker.js create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-respond-with-readable-stream-iframe.html create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-respond-with-readable-stream-worker.js create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-respond-with-response-body-with-invalid-chunk-iframe.html create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-respond-with-response-body-with-invalid-chunk-worker.js create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-css-cross-origin-mime-check-cross.css create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-css-cross-origin-mime-check-cross.html create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-css-cross-origin-mime-check-iframe.html create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-css-cross-origin-mime-check-same.css create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-css-cross-origin-mime-check-same.html create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-css-cross-origin-mime-check-worker.js create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-html-imports-iframe.html create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-html-imports-worker.js create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-xhr-sync-iframe.html create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-xhr-sync-worker.js create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-response-taint-iframe.html create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-rewrite-worker-referrer-policy.js create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-rewrite-worker-referrer-policy.js.headers create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/resources/http-to-https-redirect-and-register-iframe.html create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/resources/iframe-register-link-element.html create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/resources/import-scripts-echo.py create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/resources/import-scripts-resource-map-worker.js create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/resources/import-scripts-updated-flag-worker.js create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/resources/import-scripts-version.py create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/resources/iso-latin1-header-iframe.html create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/resources/iso-latin1-header-worker.js create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/resources/navigation-redirect-body-worker.js create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/resources/navigation-redirect-body.py create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/resources/navigation-redirect-to-http-iframe.html create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/resources/navigation-redirect-to-http-worker.js create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/resources/opaque-response-preloaded-iframe.html create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/resources/opaque-response-preloaded-worker.js create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/resources/postmessage-transferables-worker.js create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/resources/referrer-policy-iframe.html create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/resources/register-foreign-fetch-errors-worker.js create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/resources/register-iframe.html create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/resources/request-body-blob-iframe.html create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/resources/request-body-blob-worker.js delete mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/resources/update-max-aged-worker-imported-script.py delete mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/resources/update-max-aged-worker.py create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/resources/windowclient-navigate-worker.js create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/windowclient-navigate.https.html create mode 100644 tests/wpt/web-platform-tests/shadow-dom/Range-prototype-insertNode.html create mode 100644 tests/wpt/web-platform-tests/shadow-dom/slots-fallback-in-document.html create mode 100644 tests/wpt/web-platform-tests/storage/persist-permission-manual.https.html create mode 100644 tests/wpt/web-platform-tests/storage/persisted-worker.https.html create mode 100644 tests/wpt/web-platform-tests/storage/persisted.https.html create mode 100644 tests/wpt/web-platform-tests/storage/storage-persisted.js delete mode 100644 tests/wpt/web-platform-tests/tools/.travis.yml create mode 100644 tests/wpt/web-platform-tests/tools/OWNERS rename tests/wpt/web-platform-tests/{html/semantics/interactive-elements/the-command-element/.gitkeep => tools/browserutils/__init__.py} (100%) create mode 100644 tests/wpt/web-platform-tests/tools/browserutils/browser.py create mode 100644 tests/wpt/web-platform-tests/tools/browserutils/install.py create mode 100644 tests/wpt/web-platform-tests/tools/browserutils/requirements.txt create mode 100644 tests/wpt/web-platform-tests/tools/browserutils/utils.py create mode 100644 tests/wpt/web-platform-tests/tools/browserutils/virtualenv.py delete mode 100644 tests/wpt/web-platform-tests/tools/webdriver/COPYING create mode 100644 tests/wpt/web-platform-tests/tools/wptrun.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/.gitignore rename tests/wpt/web-platform-tests/tools/{ => wptrunner}/LICENSE (100%) create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/MANIFEST.in create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/OWNERS create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/README.rst create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/docs/Makefile create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/docs/architecture.svg create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/docs/conf.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/docs/design.rst create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/docs/expectation.rst create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/docs/index.rst create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/docs/make.bat create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/docs/usage.rst create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/requirements.txt create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/requirements_chrome.txt create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/requirements_edge.txt create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/requirements_firefox.txt create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/requirements_sauce.txt create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/requirements_servo.txt create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/setup.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/reftest/reftest_and_fail.html.ini create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/reftest/reftest_cycle_fail.html.ini create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/reftest/reftest_match_fail.html.ini create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/reftest/reftest_mismatch_fail.html.ini create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/reftest/reftest_ref_timeout.html.ini create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/reftest/reftest_timeout.html.ini create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/testharness/firefox/__dir__.ini create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/testharness/firefox/subdir/test_pref_reset.html.ini create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/testharness/firefox/test_pref_set.html.ini create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/testharness/subdir/__dir__.ini create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/testharness/subdir/testharness_1.html.ini create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/testharness/tags/__dir__.ini create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/testharness/tags/testharness_0.html.ini create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/testharness/tags/testharness_1.html.ini create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/testharness/tags/testharness_2.html.ini create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/testharness/testharness_0.html.ini create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/testharness/testharness_error.html.ini create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/testharness/testharness_timeout.html.ini create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/test.cfg.example create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/test.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/green-ref.html create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/green.html create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/red.html create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest.https.html create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_and_fail.html create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_and_fail_0-ref.html create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_cycle.html create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_cycle_0-ref.html create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_cycle_1-ref.html create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_cycle_fail.html create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_cycle_fail_0-ref.html create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_match.html create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_match_fail.html create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_mismatch.html create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_mismatch_fail.html create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_or_0.html create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_ref_timeout-ref.html create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_ref_timeout.html create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_timeout.html create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_wait_0.html create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/firefox/subdir/test_pref_inherit.html create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/firefox/subdir/test_pref_reset.html create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/firefox/test_pref_dir.html create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/firefox/test_pref_set.html rename tests/wpt/web-platform-tests/{html/webappapis/system-state-and-capabilities/the-navigator-object/NavigatorID.html => tools/wptrunner/test/testdata/testharness/subdir/testharness_1.html} (54%) create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/tags/testharness_0.html create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/tags/testharness_1.html create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/tags/testharness_2.html create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/testharness.https.html create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/testharness_0.html create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/testharness_error.html create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/testharness_long_timeout.html create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/testharness_timeout.html create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/tox.ini create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner.default.ini create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/__init__.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/__init__.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/b2g_setup/certtest_app.zip create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/base.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/edge.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/firefox.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/sauce.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/sauce_setup/edge-prerun.bat create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/sauce_setup/safari-prerun.sh create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/server-locations.txt create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/servo.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/servodriver.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/config.json create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/config.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/environment.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/__init__.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/base.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executormarionette.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorselenium.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorservo.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorservodriver.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/process.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/pytestrunner/__init__.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/pytestrunner/runner.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/reftest-wait.js create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/reftest-wait_servodriver.js create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/reftest-wait_webdriver.js create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/reftest.js create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/testharness_marionette.js create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/testharness_servodriver.js create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/testharness_webdriver.js create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/expected.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/hosts.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/manifestexpected.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/manifestinclude.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/manifestupdate.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/metadata.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/products.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/reduce.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testharness_runner.html create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testharnessreport-servo.js create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testharnessreport-servodriver.js create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testharnessreport.js create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testloader.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testrunner.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/__init__.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_chunker.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_hosts.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_testloader.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_update.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/update/__init__.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/update/base.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/update/metadata.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/update/state.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/update/sync.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/update/tree.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/update/update.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/vcs.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/webdriver_server.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptcommandline.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptlogging.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/__init__.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/backends/__init__.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/backends/conditional.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/backends/static.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/node.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/parser.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/serializer.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/tests/__init__.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/tests/test_conditional.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/tests/test_parser.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/tests/test_serializer.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/tests/test_static.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/tests/test_tokenizer.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptrunner.py create mode 100644 tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wpttest.py delete mode 100644 tests/wpt/web-platform-tests/tools/wptserve/tox.ini rename tests/wpt/web-platform-tests/{ => uievents}/auxclick/auxclick_event-manual.html (100%) create mode 100644 tests/wpt/web-platform-tests/uievents/mouse/mouseevent_move_button-manual.html rename tests/wpt/web-platform-tests/url/{historical.worker.js => historical.any.js} (74%) delete mode 100644 tests/wpt/web-platform-tests/url/historical.html create mode 100644 tests/wpt/web-platform-tests/url/interfaces.any.js delete mode 100644 tests/wpt/web-platform-tests/url/interfaces.html create mode 100644 tests/wpt/web-platform-tests/url/toascii.json create mode 100644 tests/wpt/web-platform-tests/url/toascii.window.js create mode 100644 tests/wpt/web-platform-tests/viewport/OWNERS create mode 100644 tests/wpt/web-platform-tests/viewport/viewport-dimensions-custom-scrollbars-manual.html create mode 100644 tests/wpt/web-platform-tests/viewport/viewport-dimensions-scrollbars-manual.html create mode 100644 tests/wpt/web-platform-tests/viewport/viewport-no-resize-event-on-overflow-recalc.html create mode 100644 tests/wpt/web-platform-tests/viewport/viewport-offset-manual.html create mode 100644 tests/wpt/web-platform-tests/viewport/viewport-page-manual.html create mode 100644 tests/wpt/web-platform-tests/viewport/viewport-read-size-causes-layout.html create mode 100644 tests/wpt/web-platform-tests/viewport/viewport-read-size-in-iframe-causes-layout.html create mode 100644 tests/wpt/web-platform-tests/viewport/viewport-resize-event-manual.html create mode 100644 tests/wpt/web-platform-tests/viewport/viewport-resize-event-on-load-overflowing-page.html create mode 100644 tests/wpt/web-platform-tests/viewport/viewport-scale-iframe-manual.html create mode 100644 tests/wpt/web-platform-tests/viewport/viewport-scale-manual.html create mode 100644 tests/wpt/web-platform-tests/viewport/viewport-scroll-event-manual.html create mode 100644 tests/wpt/web-platform-tests/viewport/viewport-scrollbars-cause-resize.html create mode 100644 tests/wpt/web-platform-tests/viewport/viewport-type.html create mode 100644 tests/wpt/web-platform-tests/viewport/viewport-unscaled-scale-iframe.html create mode 100644 tests/wpt/web-platform-tests/viewport/viewport-unscaled-scale.html create mode 100644 tests/wpt/web-platform-tests/viewport/viewport-unscaled-scroll-iframe.html create mode 100644 tests/wpt/web-platform-tests/viewport/viewport-unscaled-scroll.html create mode 100644 tests/wpt/web-platform-tests/viewport/viewport-unscaled-size-iframe.html create mode 100644 tests/wpt/web-platform-tests/viewport/viewport-unscaled-size.html create mode 100644 tests/wpt/web-platform-tests/viewport/viewport_support.js create mode 100644 tests/wpt/web-platform-tests/wai-aria/alertdialog_modal_false-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/alertdialog_modal_true-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/application_activedescendant-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/application_activedescendant_value_changes-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/aria-current_not_declared-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/aria-current_with_value_changes-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/aria-current_with_value_date-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/aria-current_with_value_location-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/aria-current_with_value_page-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/aria-current_with_value_step-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/aria-current_with_value_time-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/aria-current_with_value_true-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/aria-current_with_value_unspecified-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/aria-details_pointing_to_details_element-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/aria-details_pointing_to_div_element-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/article_in_feed_posinset_and_setsize-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/article_in_feed_setsize_-1-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/article_not_in_feed_posinset_and_setsize-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/button_haspopup_dialog-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/button_haspopup_emptystring-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/button_haspopup_false-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/button_haspopup_foo-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/button_haspopup_grid-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/button_haspopup_listbox-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/button_haspopup_menu-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/button_haspopup_tree-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/button_haspopup_true-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/button_haspopup_unspecified-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/button_roledescription_empty-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/button_roledescription_valid-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/button_roledescription_whitespace_only-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/cell-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/cell_aria-colspan_2_on_div-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/cell_aria-colspan_2_on_td_html_colspan_3-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/cell_aria-colspan_2_on_td_html_colspan_3_with_headers_and_border-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/cell_aria-colspan_2_on_td_html_colspan_3_with_three_actual_columns-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/cell_aria-colspan_2_on_td_with_html_colspan_not_specified-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/cell_aria-rowspan_2_on_div-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/cell_aria-rowspan_2_on_td_html_rowspan_3-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/cell_aria-rowspan_2_on_td_html_rowspan_3_with_three_actual_rows-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/cell_aria-rowspan_2_on_td_with_html_rowspan_not_specified-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/cell_colindex_4-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/cell_rowindex_4-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/checkbox_readonly_false-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/checkbox_readonly_true-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/checkbox_readonly_unspecified-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/columnheader_aria-colspan_2_on_div-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/columnheader_aria-colspan_2_on_th_html_colspan_3-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/columnheader_aria-colspan_2_on_th_html_colspan_3_with_three_actual_columns-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/columnheader_aria-colspan_2_on_th_with_html_colspan_not_specified-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/columnheader_aria-rowspan_2_on_div-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/columnheader_aria-rowspan_2_on_th_html_rowspan_3-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/columnheader_aria-rowspan_2_on_th_html_rowspan_3_with_three_actual_rows-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/columnheader_aria-rowspan_2_on_th_with_html_rowspan_not_specified-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/columnheader_colindex_4-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/columnheader_rowindex_4-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/columnheader_selected_false_not_automatically_propagated-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/columnheader_selected_true_not_automatically_propagated-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/combobox_controls_an_invalid_id-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/combobox_haspopup_dialog-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/combobox_haspopup_false-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/combobox_haspopup_grid-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/combobox_haspopup_listbox-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/combobox_haspopup_menu-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/combobox_haspopup_tree-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/combobox_haspopup_true-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/combobox_haspopup_unspecified-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/combobox_orientation_horizontal-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/combobox_orientation_unspecified-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/combobox_orientation_vertical-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/combobox_readonly_false-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/combobox_readonly_true-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/combobox_readonly_unspecified-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/dialog_modal_false-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/dialog_modal_true-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/dialog_modal_unspecified-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/div_element_without_role_roledescription_valid-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/errormessage_object_in_invalid_state-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/errormessage_object_in_valid_state-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/feed-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/figure-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/grid_aria-readonly_false_automatically_propagated-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/grid_aria-readonly_true_automatically_propagated-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/grid_busy_false-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/grid_busy_true-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/grid_busy_value_changes-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/grid_colcount_8-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/grid_columnheader_readonly_false-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/grid_columnheader_readonly_true-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/grid_columnheader_readonly_unspecified-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/grid_columnheader_required_false-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/grid_columnheader_required_true-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/grid_columnheader_required_unspecified-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/grid_rowcount_3-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/grid_rowheader_readonly_false-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/grid_rowheader_readonly_true-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/grid_rowheader_readonly_unspecified-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/grid_rowheader_required_false-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/grid_rowheader_required_true-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/grid_rowheader_required_unspecified-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/gridcell_aria-colspan_2_on_div-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/gridcell_aria-rowspan_2_on_div-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/gridcell_colindex_4-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/gridcell_rowindex_4-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/group_hidden_undefined_element_not_rendered-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/group_hidden_undefined_element_rendered-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/heading_level_unspecified-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/keyshortcuts_multiple_shortcuts-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/keyshortcuts_one_shortcut-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/listbox_busy_false-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/listbox_busy_true-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/listbox_orientation_horizontal-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/listbox_orientation_unspecified-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/listbox_orientation_vertical-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/listbox_readonly_false-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/listbox_readonly_true-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/listbox_readonly_unspecified-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/listitem_setsize_-1-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/menu_orientation_horizontal-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/menu_orientation_unspecified-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/menu_orientation_vertical-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/menubar_busy_false-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/menubar_busy_true-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/menubar_orientation_horizontal-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/menubar_orientation_unspecified-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/menubar_orientation_vertical-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/menuitem_posinset_and_setsize-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/menuitemcheckbox_posinset_and_setsize-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/menuitemcheckbox_readonly_false-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/menuitemcheckbox_readonly_true-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/menuitemcheckbox_readonly_unspecified-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/menuitemradio_posinset_and_setsize-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/menuitemradio_readonly_false-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/menuitemradio_readonly_true-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/menuitemradio_readonly_unspecified-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/none-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/option_selected_false-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/option_selected_true-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/option_selected_undefined-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/option_selected_value_changes-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/radiogroup_orientation_horizontal-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/radiogroup_orientation_unspecified-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/radiogroup_orientation_vertical-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/radiogroup_readonly_false-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/radiogroup_readonly_true-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/radiogroup_readonly_unspecified-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/region_with_name-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/region_without_name-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/row_colindex_4-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/row_rowindex_4-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/rowheader_aria-colspan_2_on_div-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/rowheader_aria-rowspan_2_on_div-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/rowheader_colindex_4-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/rowheader_rowindex_4-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/rowheader_selected_false_not_automatically_propagated-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/rowheader_selected_true_not_automatically_propagated-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/scripts/ATTAcomm.js create mode 100644 tests/wpt/web-platform-tests/wai-aria/scripts/manual.css create mode 100644 tests/wpt/web-platform-tests/wai-aria/scrollbar_all_values_unspecified-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/scrollbar_only_valuenow_unspecified-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/scrollbar_orientation_unspecified-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/searchbox-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/searchbox_activedescendant-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/searchbox_activedescendant_value_changes-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/searchbox_autocomplete_both-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/searchbox_autocomplete_inline-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/searchbox_autocomplete_list-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/searchbox_autocomplete_none-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/searchbox_autocomplete_unspecified-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/searchbox_multiline_false-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/searchbox_multiline_true-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/searchbox_multiline_unspecified-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/searchbox_placeholder-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/searchbox_readonly_false-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/searchbox_readonly_true-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/searchbox_readonly_unspecified-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/searchbox_required_false-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/searchbox_required_true-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/searchbox_required_unspecified-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/separator_focusable_all_values_unspecified-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/separator_focusable_only_valuenow_unspecified-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/separator_focusable_valuetext-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/separator_orientation_unspecified-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/separator_unfocusable_all_values_unspecified-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/separator_unfocusable_valuetext-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/slider_all_values_unspecified-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/slider_only_valuenow_unspecified-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/slider_orientation_unspecified-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/slider_readonly_false-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/slider_readonly_true-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/slider_readonly_unspecified-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/spinbutton_all_values_unspecified-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/spinbutton_only_aria-valuenow_unspecified-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/spinbutton_readonly_false-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/spinbutton_readonly_true-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/spinbutton_readonly_unspecified-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/switch_checked_false-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/switch_checked_mixed-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/switch_checked_true-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/switch_checked_undefined-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/switch_checked_value_changes-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/switch_readonly_false-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/switch_readonly_true-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/switch_readonly_unspecified-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/tab_posinset_and_setsize-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/table_colcount_-1-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/table_colcount_8-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/table_rowcount_-1-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/table_rowcount_3-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/tablist_orientation_horizontal-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/tablist_orientation_unspecified-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/tablist_orientation_vertical-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/term_role-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/textbox_placeholder-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/toolbar_orientation_horizontal-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/toolbar_orientation_unspecified-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/toolbar_orientation_vertical-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/tools/convert_wiki.pl create mode 100644 tests/wpt/web-platform-tests/wai-aria/tools/make_tests.pl create mode 100644 tests/wpt/web-platform-tests/wai-aria/tree_orientation_horizontal-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/tree_orientation_unspecified-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/tree_orientation_vertical-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/treegrid_colcount_8-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/treegrid_orientation_horizontal-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/treegrid_orientation_unspecified-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/treegrid_orientation_vertical-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/treegrid_rowcount_3-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/treeitem_selected_false-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/treeitem_selected_true-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/treeitem_selected_undefined-manual.html create mode 100644 tests/wpt/web-platform-tests/wai-aria/treeitem_selected_value_changes-manual.html create mode 100644 tests/wpt/web-platform-tests/wasm/compile_worker.js create mode 100644 tests/wpt/web-platform-tests/wasm/incrementer.wasm create mode 100644 tests/wpt/web-platform-tests/wasm/resources/blank.html create mode 100644 tests/wpt/web-platform-tests/wasm/resources/frame.html create mode 100644 tests/wpt/web-platform-tests/wasm/resources/incrementer.wasm create mode 100644 tests/wpt/web-platform-tests/wasm/resources/load_wasm.js create mode 100644 tests/wpt/web-platform-tests/wasm/resources/service-worker.js create mode 100644 tests/wpt/web-platform-tests/wasm/wasm_indexeddb_test.html create mode 100644 tests/wpt/web-platform-tests/wasm/wasm_indexeddb_test.js create mode 100644 tests/wpt/web-platform-tests/wasm/wasm_local_iframe_test.html create mode 100644 tests/wpt/web-platform-tests/wasm/wasm_serialization_tests.html create mode 100644 tests/wpt/web-platform-tests/wasm/wasm_serialization_tests.js create mode 100644 tests/wpt/web-platform-tests/wasm/wasm_serialization_worker.js create mode 100644 tests/wpt/web-platform-tests/wasm/wasm_service_worker_test.html create mode 100644 tests/wpt/web-platform-tests/web-animations/animation-model/animation-types/accumulation-per-property.html rename tests/wpt/web-platform-tests/web-animations/{interfaces/Animation/reverse.html => timing-model/animations/reversing-an-animation.html} (59%) create mode 100644 tests/wpt/web-platform-tests/webdriver/actions/special_keys.py create mode 100644 tests/wpt/web-platform-tests/webdriver/elements/active.py create mode 100644 tests/wpt/web-platform-tests/webdriver/get_title.py create mode 100644 tests/wpt/web-platform-tests/webmessaging/broadcastchannel/origin.window.js create mode 100644 tests/wpt/web-platform-tests/webmessaging/broadcastchannel/resources/origin.html create mode 100644 tests/wpt/web-platform-tests/webmessaging/messageerror.html create mode 100644 tests/wpt/web-platform-tests/webrtc/RTCCertificate.html create mode 100644 tests/wpt/web-platform-tests/webrtc/RTCConfiguration-iceCandidatePoolSize.html create mode 100644 tests/wpt/web-platform-tests/webrtc/RTCDataChannel-bufferedAmount.html create mode 100644 tests/wpt/web-platform-tests/webrtc/RTCDataChannel-id.html create mode 100644 tests/wpt/web-platform-tests/webrtc/RTCDataChannel-send.html create mode 100644 tests/wpt/web-platform-tests/webrtc/RTCIceCandidate-constructor.html create mode 100644 tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addIceCandidate.html create mode 100644 tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addTransceiver.html rename tests/wpt/web-platform-tests/webrtc/{rtcpeerconnection/canTrickleIceCandidates.html => RTCPeerConnection-canTrickleIceCandidates.html} (100%) create mode 100644 tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-connectionState.html rename tests/wpt/web-platform-tests/webrtc/{rtcpeerconnection/rtcpeerconnection-constructor.html => RTCPeerConnection-constructor.html} (89%) create mode 100644 tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-createAnswer.html create mode 100644 tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-createDataChannel.html create mode 100644 tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-createOffer.html create mode 100644 tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-generateCertificate.html create mode 100644 tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-getTransceivers.html create mode 100644 tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-helper.js create mode 100644 tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-iceConnectionState.html create mode 100644 tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-iceGatheringState.html rename tests/wpt/web-platform-tests/webrtc/{rtcpeerconnection/rtcpeerconnection-idl.html => RTCPeerConnection-idl.html} (100%) create mode 100644 tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-ondatachannel.html create mode 100644 tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-onnegotiationneeded.html create mode 100644 tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-removeTrack.html create mode 100644 tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setLocalDescription.html create mode 100644 tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription.html create mode 100644 tests/wpt/web-platform-tests/webrtc/RTCRtpSender-replaceTrack.html create mode 100644 tests/wpt/web-platform-tests/webrtc/RTCSctpTransport-constructor.html create mode 100644 tests/wpt/web-platform-tests/webrtc/datachannel-idlharness.html create mode 100644 tests/wpt/web-platform-tests/webrtc/getstats.html create mode 100644 tests/wpt/web-platform-tests/webrtc/interfaces.html delete mode 100644 tests/wpt/web-platform-tests/webrtc/rtcpeerconnection/iceGatheringState.html delete mode 100644 tests/wpt/web-platform-tests/webrtc/rtcpeerconnection/rtcconfiguration-icecandidatepoolsize.html delete mode 100644 tests/wpt/web-platform-tests/webrtc/rtcpeerconnection/setRemoteDescription.html rename tests/wpt/web-platform-tests/webusb/{idlharness.html => idlharness.https.html} (100%) create mode 100644 tests/wpt/web-platform-tests/webusb/resources/check-availability.html create mode 100644 tests/wpt/web-platform-tests/webusb/resources/featurepolicytest.js create mode 100644 tests/wpt/web-platform-tests/webusb/usb-allowed-by-feature-policy-attribute.https.sub.html create mode 100644 tests/wpt/web-platform-tests/webusb/usb-allowed-by-feature-policy.https.sub.html create mode 100644 tests/wpt/web-platform-tests/webusb/usb-allowed-by-feature-policy.https.sub.html.headers create mode 100644 tests/wpt/web-platform-tests/webusb/usb-default-feature-policy.https.sub.html create mode 100644 tests/wpt/web-platform-tests/webusb/usb-disabled-by-feature-policy.https.sub.html create mode 100644 tests/wpt/web-platform-tests/webusb/usb-disabled-by-feature-policy.https.sub.html.headers create mode 100644 tests/wpt/web-platform-tests/workers/name-property.html create mode 100644 tests/wpt/web-platform-tests/workers/shared-worker-name-via-options.html create mode 100644 tests/wpt/web-platform-tests/workers/support/name.js create mode 100644 tests/wpt/web-platform-tests/workers/support/shared-name.js create mode 100755 tests/wpt/web-platform-tests/wptrun create mode 100644 tests/wpt/web-platform-tests/x-frame-options/deny.sub.html create mode 100644 tests/wpt/web-platform-tests/x-frame-options/invalid.sub.html create mode 100644 tests/wpt/web-platform-tests/x-frame-options/multiple.sub.html create mode 100644 tests/wpt/web-platform-tests/x-frame-options/sameorigin.sub.html create mode 100644 tests/wpt/web-platform-tests/x-frame-options/support/helper.js create mode 100644 tests/wpt/web-platform-tests/x-frame-options/support/nested.py create mode 100644 tests/wpt/web-platform-tests/x-frame-options/support/xfo.py diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json index 202288ed310..3725edf9ece 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -145,6 +145,12 @@ {} ] ], + "accelerometer/Accelerometer_onerror-manual.https.html": [ + [ + "/accelerometer/Accelerometer_onerror-manual.https.html", + {} + ] + ], "ambient-light/AmbientLightSensor_onerror-manual.https.html": [ [ "/ambient-light/AmbientLightSensor_onerror-manual.https.html", @@ -235,39 +241,33 @@ {} ] ], - "auxclick/auxclick_event-manual.html": [ + "battery-status/battery-charging-manual.https.html": [ [ - "/auxclick/auxclick_event-manual.html", + "/battery-status/battery-charging-manual.https.html", {} ] ], - "battery-status/battery-charging-manual.html": [ + "battery-status/battery-discharging-manual.https.html": [ [ - "/battery-status/battery-charging-manual.html", + "/battery-status/battery-discharging-manual.https.html", {} ] ], - "battery-status/battery-discharging-manual.html": [ + "battery-status/battery-full-manual.https.html": [ [ - "/battery-status/battery-discharging-manual.html", + "/battery-status/battery-full-manual.https.html", {} ] ], - "battery-status/battery-full-manual.html": [ + "battery-status/battery-plugging-in-manual.https.html": [ [ - "/battery-status/battery-full-manual.html", + "/battery-status/battery-plugging-in-manual.https.html", {} ] ], - "battery-status/battery-plugging-in-manual.html": [ + "battery-status/battery-unplugging-manual.https.html": [ [ - "/battery-status/battery-plugging-in-manual.html", - {} - ] - ], - "battery-status/battery-unplugging-manual.html": [ - [ - "/battery-status/battery-unplugging-manual.html", + "/battery-status/battery-unplugging-manual.https.html", {} ] ], @@ -5557,12 +5557,6 @@ {} ] ], - "css/WOFF2/valid-009.xht": [ - [ - "/css/WOFF2/valid-009.xht", - {} - ] - ], "css/css-animations-1/animation-delay-001.html": [ [ "/css/css-animations-1/animation-delay-001.html", @@ -6919,6 +6913,12 @@ {} ] ], + "css/css-flexbox-1/css-flexbox-height-animation-stretch.html": [ + [ + "/css/css-flexbox-1/css-flexbox-height-animation-stretch.html", + {} + ] + ], "css/css-flexbox-1/interactive/flexbox_interactive_break-after-column-item.html": [ [ "/css/css-flexbox-1/interactive/flexbox_interactive_break-after-column-item.html", @@ -8083,3558 +8083,6 @@ {} ] ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-001.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-001.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-002.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-002.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-003.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-003.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-004.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-004.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-005.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-005.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-006.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-006.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-007.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-007.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-008.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-008.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-009.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-009.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-010.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-010.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-011.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-011.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-012.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-012.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-014.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-014.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-015.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-015.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-016.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-016.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-017.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-017.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-018.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-018.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-019.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-019.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-020.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-020.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-021.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-021.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-022.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-022.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-023.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-023.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-024.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-024.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-025.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-025.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-026.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-026.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-030.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-030.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-031.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-031.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-032.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-032.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-033.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-033.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-034.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-034.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-035.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-035.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-036.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-036.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-037.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-037.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-038.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-038.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-039.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-039.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-040.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-040.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-041.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-041.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-042.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-042.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-043.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-043.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-044.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-044.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-045.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-045.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-046.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-046.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-047.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-047.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-048.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-048.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-049.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-049.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-050.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-050.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-051.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-051.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-052.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-052.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-060.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-060.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-061.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-061.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-062.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-062.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-063.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-063.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-064.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-064.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-065.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-065.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-066.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-066.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-067.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-067.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-068.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-068.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-069.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-069.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-070.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-070.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-071.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-071.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-072.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-072.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-073.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-073.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-074.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-074.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-075.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-075.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-076.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-076.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-077.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-077.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-078.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-078.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-080.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-080.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-081.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-081.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-082.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-082.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-083.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-083.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-084.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-084.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-085.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-085.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-086.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-086.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-090.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-090.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-091.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-091.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-092.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-092.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-093.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-093.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-094.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-094.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-095.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-095.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-096.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-096.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-097.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-097.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-098.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-098.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-099.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-099.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-100.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-100.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-101.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-101.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-102.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-102.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-103.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-103.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-104.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-104.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-105.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-105.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-106.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-106.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-107.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-107.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-108.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-108.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-109.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-109.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-110.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-110.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-111.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-111.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-112.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-112.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-113.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-113.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-114.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-114.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-115.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-115.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-116.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-116.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-117.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-117.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-118.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-118.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-120.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-120.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-121.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-121.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-122.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-122.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-123.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-123.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-124.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-124.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-125.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-125.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-126.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-126.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-127.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-127.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-128.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-128.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-130.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-130.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-baspglwj-131.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-baspglwj-131.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-001.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-001.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-002.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-002.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-003.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-003.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-004.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-004.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-005.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-005.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-006.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-006.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-007.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-007.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-008.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-008.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-009.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-009.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-010.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-010.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-011.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-011.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-012.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-012.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-013.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-013.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-014.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-014.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-015.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-015.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-016.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-016.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-017.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-017.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-018.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-018.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-019.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-019.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-020.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-020.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-021.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-021.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-022.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-022.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-023.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-023.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-024.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-024.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-025.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-025.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-026.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-026.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-027.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-027.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-028.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-028.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-029.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-029.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-030.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-030.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-031.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-031.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-032.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-032.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-033.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-033.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-034.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-034.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-035.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-035.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-036.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-036.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-037.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-037.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-038.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-038.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-039.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-039.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-040.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-040.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-041.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-041.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-042.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-042.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-043.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-043.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-044.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-044.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-045.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-045.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-046.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-046.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-047.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-047.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-048.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-048.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-049.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-049.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-050.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-050.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-051.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-051.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-052.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-052.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-054.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-054.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-055.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-055.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-056.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-056.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-057.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-057.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-058.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-058.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-059.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-059.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-060.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-060.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-101.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-101.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-102.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-102.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-103.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-103.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-104.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-104.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-105.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-105.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-106.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-106.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-107.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-107.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-108.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-108.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-109.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-109.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-110.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-110.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-111.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-111.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-112.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-112.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-113.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-113.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-114.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-114.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-115.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-115.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-116.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-116.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-117.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-117.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-118.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-118.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-119.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-119.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-120.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-120.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-121.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-121.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-122.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-122.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-123.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-123.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-124.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-124.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-125.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-125.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-126.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-126.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-127.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-127.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-128.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-128.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-129.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-129.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-130.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-130.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-131.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-131.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-132.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-132.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-133.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-133.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-134.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-134.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-135.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-135.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-136.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-136.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-137.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-137.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-138.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-138.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-139.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-139.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-140.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-140.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-141.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-141.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-142.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-142.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-143.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-143.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-144.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-144.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-145.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-145.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-146.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-146.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-147.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-147.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-148.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-148.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-149.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-149.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-150.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-150.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-151.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-151.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-152.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-152.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-154.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-154.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-155.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-155.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-156.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-156.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-157.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-157.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-158.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-158.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-159.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-159.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-160.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-160.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-201.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-201.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-202.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-202.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-203.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-203.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-204.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-204.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-205.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-205.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-206.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-206.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-207.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-207.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-208.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-208.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-209.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-209.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-210.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-210.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-211.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-211.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-212.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-212.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-213.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-213.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-214.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-214.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-215.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-215.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-216.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-216.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-217.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-217.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-218.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-218.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-219.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-219.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-220.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-220.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-221.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-221.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-222.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-222.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-223.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-223.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-224.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-224.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-225.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-225.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-226.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-226.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-227.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-227.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-228.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-228.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-229.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-229.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-230.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-230.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-231.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-231.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-232.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-232.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-233.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-233.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-234.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-234.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-235.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-235.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-236.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-236.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-237.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-237.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-238.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-238.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-239.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-239.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-240.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-240.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-241.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-241.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-242.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-242.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-243.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-243.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-244.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-244.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-245.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-245.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-246.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-246.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-247.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-247.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-248.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-248.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-249.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-249.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-250.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-250.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-251.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-251.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-252.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-252.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-254.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-254.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-255.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-255.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-256.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-256.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-257.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-257.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-258.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-258.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-259.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-259.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-260.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-260.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-301.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-301.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-302.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-302.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-303.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-303.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-304.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-304.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-305.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-305.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-306.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-306.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-307.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-307.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-308.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-308.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-309.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-309.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-310.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-310.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-311.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-311.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-312.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-312.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-313.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-313.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-314.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-314.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-315.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-315.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-316.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-316.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-317.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-317.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-318.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-318.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-319.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-319.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-320.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-320.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-321.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-321.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-322.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-322.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-323.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-323.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-324.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-324.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-325.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-325.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-326.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-326.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-327.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-327.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-351.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-351.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-352.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-352.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-353.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-353.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-354.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-354.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-355.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-355.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-356.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-356.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-357.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-357.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-358.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-358.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-359.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-359.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-360.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-360.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-361.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-361.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-362.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-362.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-363.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-363.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-364.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-364.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-365.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-365.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-366.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-366.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-367.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-367.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-368.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-368.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-369.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-369.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-370.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-370.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-371.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-371.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-372.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-372.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-373.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-373.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-374.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-374.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-375.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-375.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-376.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-376.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-377.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-377.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-401.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-401.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-402.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-402.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-403.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-403.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-404.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-404.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-405.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-405.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-406.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-406.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-407.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-407.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-408.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-408.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-409.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-409.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-410.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-410.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-411.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-411.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-412.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-412.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-413.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-413.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-414.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-414.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-415.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-415.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-416.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-416.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-417.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-417.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-418.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-418.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-419.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-419.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-420.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-420.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-421.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-421.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-422.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-422.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-423.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-423.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-424.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-424.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-425.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-425.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-426.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-426.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-jazh-427.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-jazh-427.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-001.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-001.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-002.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-002.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-003.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-003.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-004.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-004.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-005.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-005.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-006.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-006.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-007.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-007.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-008.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-008.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-009.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-009.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-010.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-010.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-011.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-011.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-012.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-012.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-013.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-013.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-014.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-014.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-015.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-015.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-016.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-016.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-017.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-017.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-018.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-018.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-019.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-019.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-020.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-020.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-021.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-021.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-022.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-022.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-023.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-023.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-024.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-024.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-025.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-025.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-026.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-026.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-027.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-027.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-028.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-028.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-029.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-029.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-030.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-030.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-031.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-031.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-032.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-032.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-033.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-033.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-034.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-034.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-035.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-035.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-036.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-036.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-037.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-037.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-038.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-038.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-039.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-039.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-040.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-040.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-041.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-041.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-042.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-042.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-043.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-043.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-044.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-044.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-045.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-045.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-046.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-046.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-047.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-047.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-048.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-048.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-049.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-049.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-050.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-050.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-051.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-051.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-052.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-052.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-053.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-053.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-054.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-054.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-055.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-055.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-056.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-056.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-057.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-057.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-058.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-058.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-059.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-059.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-060.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-060.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-061.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-061.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-062.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-062.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-063.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-063.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-064.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-064.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-065.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-065.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-100.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-100.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-101.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-101.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-102.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-102.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-103.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-103.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-104.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-104.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-105.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-105.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-106.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-106.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-107.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-107.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-108.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-108.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-109.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-109.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-110.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-110.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-111.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-111.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-112.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-112.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-113.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-113.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-114.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-114.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-115.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-115.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-116.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-116.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-117.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-117.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-118.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-118.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-119.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-119.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-120.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-120.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-121.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-121.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-122.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-122.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-123.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-123.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-124.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-124.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-125.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-125.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-126.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-126.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-127.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-127.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-128.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-128.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-129.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-129.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-130.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-130.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-131.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-131.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-132.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-132.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-133.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-133.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-134.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-134.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-135.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-135.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-136.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-136.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-137.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-137.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-138.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-138.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-139.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-139.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-140.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-140.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-141.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-141.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-142.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-142.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-143.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-143.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-144.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-144.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-145.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-145.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-146.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-146.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-147.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-147.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-148.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-148.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-149.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-149.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-150.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-150.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-151.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-151.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-152.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-152.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-153.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-153.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-154.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-154.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-155.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-155.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-156.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-156.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-157.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-157.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-158.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-158.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-159.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-159.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-160.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-160.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-161.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-161.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-162.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-162.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-163.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-163.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-164.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-164.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-165.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-165.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-166.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-166.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-167.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-167.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-168.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-168.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-169.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-169.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-170.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-170.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-171.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-171.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-200.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-200.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-201.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-201.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-202.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-202.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-203.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-203.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-204.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-204.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-205.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-205.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-206.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-206.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-207.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-207.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-208.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-208.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-209.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-209.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-210.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-210.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-211.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-211.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-212.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-212.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-213.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-213.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-214.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-214.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-215.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-215.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-216.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-216.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-217.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-217.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-218.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-218.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-219.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-219.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-220.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-220.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-221.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-221.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-222.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-222.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-223.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-223.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-224.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-224.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-225.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-225.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-226.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-226.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-250.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-250.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-251.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-251.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-252.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-252.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-253.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-253.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-254.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-254.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-255.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-255.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-256.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-256.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-257.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-257.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-258.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-258.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-259.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-259.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-260.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-260.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-261.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-261.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-262.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-262.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-263.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-263.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-264.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-264.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-265.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-265.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-266.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-266.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-267.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-267.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-268.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-268.html", - {} - ] - ], - "css/css-text-3/i18n/css3-text-line-break-opclns-269.html": [ - [ - "/css/css-text-3/i18n/css3-text-line-break-opclns-269.html", - {} - ] - ], - "css/css-text-3/line-break/line-break-normal-021.xht": [ - [ - "/css/css-text-3/line-break/line-break-normal-021.xht", - {} - ] - ], - "css/css-text-3/line-break/line-break-normal-022.xht": [ - [ - "/css/css-text-3/line-break/line-break-normal-022.xht", - {} - ] - ], - "css/css-text-3/line-break/line-break-normal-023.xht": [ - [ - "/css/css-text-3/line-break/line-break-normal-023.xht", - {} - ] - ], - "css/css-text-3/line-break/line-break-normal-024.xht": [ - [ - "/css/css-text-3/line-break/line-break-normal-024.xht", - {} - ] - ], - "css/css-text-3/line-break/line-break-normal-025.xht": [ - [ - "/css/css-text-3/line-break/line-break-normal-025.xht", - {} - ] - ], - "css/css-text-3/line-break/line-break-strict-011.xht": [ - [ - "/css/css-text-3/line-break/line-break-strict-011.xht", - {} - ] - ], - "css/css-text-3/line-break/line-break-strict-012.xht": [ - [ - "/css/css-text-3/line-break/line-break-strict-012.xht", - {} - ] - ], - "css/css-text-3/line-break/line-break-strict-013.xht": [ - [ - "/css/css-text-3/line-break/line-break-strict-013.xht", - {} - ] - ], - "css/css-text-3/line-break/line-break-strict-014.xht": [ - [ - "/css/css-text-3/line-break/line-break-strict-014.xht", - {} - ] - ], - "css/css-text-3/line-break/line-break-strict-015.xht": [ - [ - "/css/css-text-3/line-break/line-break-strict-015.xht", - {} - ] - ], - "css/css-text-3/line-break/line-break-strict-016.xht": [ - [ - "/css/css-text-3/line-break/line-break-strict-016.xht", - {} - ] - ], - "css/css-text-3/line-break/line-break-strict-017.xht": [ - [ - "/css/css-text-3/line-break/line-break-strict-017.xht", - {} - ] - ], - "css/css-text-3/line-break/line-break-strict-018.xht": [ - [ - "/css/css-text-3/line-break/line-break-strict-018.xht", - {} - ] - ], - "css/css-text-3/text-transform/text-transform-capitalize-022.html": [ - [ - "/css/css-text-3/text-transform/text-transform-capitalize-022.html", - {} - ] - ], - "css/css-text-3/text-transform/text-transform-capitalize-024.html": [ - [ - "/css/css-text-3/text-transform/text-transform-capitalize-024.html", - {} - ] - ], - "css/css-text-3/text-transform/text-transform-capitalize-026.html": [ - [ - "/css/css-text-3/text-transform/text-transform-capitalize-026.html", - {} - ] - ], - "css/css-text-3/text-transform/text-transform-capitalize-028.html": [ - [ - "/css/css-text-3/text-transform/text-transform-capitalize-028.html", - {} - ] - ], - "css/css-text-3/text-transform/text-transform-capitalize-030.html": [ - [ - "/css/css-text-3/text-transform/text-transform-capitalize-030.html", - {} - ] - ], - "css/css-text-3/text-transform/text-transform-upperlower-022.html": [ - [ - "/css/css-text-3/text-transform/text-transform-upperlower-022.html", - {} - ] - ], - "css/css-text-3/text-transform/text-transform-upperlower-023.html": [ - [ - "/css/css-text-3/text-transform/text-transform-upperlower-023.html", - {} - ] - ], - "css/css-text-3/text-transform/text-transform-upperlower-024.html": [ - [ - "/css/css-text-3/text-transform/text-transform-upperlower-024.html", - {} - ] - ], - "css/css-text-3/text-transform/text-transform-upperlower-025.html": [ - [ - "/css/css-text-3/text-transform/text-transform-upperlower-025.html", - {} - ] - ], - "css/css-text-3/text-transform/text-transform-upperlower-026.html": [ - [ - "/css/css-text-3/text-transform/text-transform-upperlower-026.html", - {} - ] - ], - "css/css-text-3/text-transform/text-transform-upperlower-027.html": [ - [ - "/css/css-text-3/text-transform/text-transform-upperlower-027.html", - {} - ] - ], - "css/css-text-3/text-transform/text-transform-upperlower-028.html": [ - [ - "/css/css-text-3/text-transform/text-transform-upperlower-028.html", - {} - ] - ], - "css/css-text-3/text-transform/text-transform-upperlower-029.html": [ - [ - "/css/css-text-3/text-transform/text-transform-upperlower-029.html", - {} - ] - ], - "css/css-text-3/text-transform/text-transform-upperlower-030.html": [ - [ - "/css/css-text-3/text-transform/text-transform-upperlower-030.html", - {} - ] - ], - "css/css-text-3/text-transform/text-transform-upperlower-031.html": [ - [ - "/css/css-text-3/text-transform/text-transform-upperlower-031.html", - {} - ] - ], - "css/css-text-3/text-transform/text-transform-upperlower-039.html": [ - [ - "/css/css-text-3/text-transform/text-transform-upperlower-039.html", - {} - ] - ], - "css/css-text-3/text-transform/text-transform-upperlower-040.html": [ - [ - "/css/css-text-3/text-transform/text-transform-upperlower-040.html", - {} - ] - ], - "css/css-text-3/text-transform/text-transform-upperlower-041.html": [ - [ - "/css/css-text-3/text-transform/text-transform-upperlower-041.html", - {} - ] - ], - "css/css-text-3/text-transform/text-transform-upperlower-042.html": [ - [ - "/css/css-text-3/text-transform/text-transform-upperlower-042.html", - {} - ] - ], - "css/css-text-3/text-transform/text-transform-upperlower-043.html": [ - [ - "/css/css-text-3/text-transform/text-transform-upperlower-043.html", - {} - ] - ], - "css/css-text-3/text-transform/text-transform-upperlower-102.html": [ - [ - "/css/css-text-3/text-transform/text-transform-upperlower-102.html", - {} - ] - ], - "css/css-text-3/text-transform/text-transform-upperlower-103.html": [ - [ - "/css/css-text-3/text-transform/text-transform-upperlower-103.html", - {} - ] - ], - "css/css-text-3/text-transform/text-transform-upperlower-104.html": [ - [ - "/css/css-text-3/text-transform/text-transform-upperlower-104.html", - {} - ] - ], "css/css-text-3/word-break/word-break-break-all-009.xht": [ [ "/css/css-text-3/word-break/word-break-break-all-009.xht", @@ -11653,30 +8101,6 @@ {} ] ], - "css/css-text-decor-3/text-decoration-line-010.xht": [ - [ - "/css/css-text-decor-3/text-decoration-line-010.xht", - {} - ] - ], - "css/css-text-decor-3/text-decoration-line-011.xht": [ - [ - "/css/css-text-decor-3/text-decoration-line-011.xht", - {} - ] - ], - "css/css-text-decor-3/text-decoration-line-012.xht": [ - [ - "/css/css-text-decor-3/text-decoration-line-012.xht", - {} - ] - ], - "css/css-text-decor-3/text-decoration-line-013.xht": [ - [ - "/css/css-text-decor-3/text-decoration-line-013.xht", - {} - ] - ], "css/css-text-decor-3/text-decoration-line-014.xht": [ [ "/css/css-text-decor-3/text-decoration-line-014.xht", @@ -13453,150 +9877,6 @@ {} ] ], - "css/css-writing-modes-3/text-orientation-mixed-vlr-100.html": [ - [ - "/css/css-writing-modes-3/text-orientation-mixed-vlr-100.html", - {} - ] - ], - "css/css-writing-modes-3/text-orientation-mixed-vrl-100.html": [ - [ - "/css/css-writing-modes-3/text-orientation-mixed-vrl-100.html", - {} - ] - ], - "css/css-writing-modes-3/text-orientation-script-001.html": [ - [ - "/css/css-writing-modes-3/text-orientation-script-001.html", - {} - ] - ], - "css/css-writing-modes-3/text-orientation-script-001a.html": [ - [ - "/css/css-writing-modes-3/text-orientation-script-001a.html", - {} - ] - ], - "css/css-writing-modes-3/text-orientation-script-001b.html": [ - [ - "/css/css-writing-modes-3/text-orientation-script-001b.html", - {} - ] - ], - "css/css-writing-modes-3/text-orientation-script-001c.html": [ - [ - "/css/css-writing-modes-3/text-orientation-script-001c.html", - {} - ] - ], - "css/css-writing-modes-3/text-orientation-script-001d.html": [ - [ - "/css/css-writing-modes-3/text-orientation-script-001d.html", - {} - ] - ], - "css/css-writing-modes-3/text-orientation-script-001e.html": [ - [ - "/css/css-writing-modes-3/text-orientation-script-001e.html", - {} - ] - ], - "css/css-writing-modes-3/text-orientation-script-001f.html": [ - [ - "/css/css-writing-modes-3/text-orientation-script-001f.html", - {} - ] - ], - "css/css-writing-modes-3/text-orientation-script-001g.html": [ - [ - "/css/css-writing-modes-3/text-orientation-script-001g.html", - {} - ] - ], - "css/css-writing-modes-3/text-orientation-script-001h.html": [ - [ - "/css/css-writing-modes-3/text-orientation-script-001h.html", - {} - ] - ], - "css/css-writing-modes-3/text-orientation-script-001i.html": [ - [ - "/css/css-writing-modes-3/text-orientation-script-001i.html", - {} - ] - ], - "css/css-writing-modes-3/text-orientation-script-001j.html": [ - [ - "/css/css-writing-modes-3/text-orientation-script-001j.html", - {} - ] - ], - "css/css-writing-modes-3/text-orientation-script-001k.html": [ - [ - "/css/css-writing-modes-3/text-orientation-script-001k.html", - {} - ] - ], - "css/css-writing-modes-3/text-orientation-script-001l.html": [ - [ - "/css/css-writing-modes-3/text-orientation-script-001l.html", - {} - ] - ], - "css/css-writing-modes-3/text-orientation-script-001m.html": [ - [ - "/css/css-writing-modes-3/text-orientation-script-001m.html", - {} - ] - ], - "css/css-writing-modes-3/text-orientation-script-001n.html": [ - [ - "/css/css-writing-modes-3/text-orientation-script-001n.html", - {} - ] - ], - "css/css-writing-modes-3/text-orientation-script-001o.html": [ - [ - "/css/css-writing-modes-3/text-orientation-script-001o.html", - {} - ] - ], - "css/css-writing-modes-3/text-orientation-script-001p.html": [ - [ - "/css/css-writing-modes-3/text-orientation-script-001p.html", - {} - ] - ], - "css/css-writing-modes-3/text-orientation-script-001q.html": [ - [ - "/css/css-writing-modes-3/text-orientation-script-001q.html", - {} - ] - ], - "css/css-writing-modes-3/text-orientation-sideways-vlr-100.html": [ - [ - "/css/css-writing-modes-3/text-orientation-sideways-vlr-100.html", - {} - ] - ], - "css/css-writing-modes-3/text-orientation-sideways-vrl-100.html": [ - [ - "/css/css-writing-modes-3/text-orientation-sideways-vrl-100.html", - {} - ] - ], - "css/css-writing-modes-3/text-orientation-upright-vlr-100.html": [ - [ - "/css/css-writing-modes-3/text-orientation-upright-vlr-100.html", - {} - ] - ], - "css/css-writing-modes-3/text-orientation-upright-vrl-100.html": [ - [ - "/css/css-writing-modes-3/text-orientation-upright-vrl-100.html", - {} - ] - ], "css/selectors4/hover-001-manual.html": [ [ "/css/selectors4/hover-001-manual.html", @@ -13867,6 +10147,240 @@ {} ] ], + "dpub-aam/doc-abstract-manual.html": [ + [ + "/dpub-aam/doc-abstract-manual.html", + {} + ] + ], + "dpub-aam/doc-acknowledgments-manual.html": [ + [ + "/dpub-aam/doc-acknowledgments-manual.html", + {} + ] + ], + "dpub-aam/doc-afterword-manual.html": [ + [ + "/dpub-aam/doc-afterword-manual.html", + {} + ] + ], + "dpub-aam/doc-appendix-manual.html": [ + [ + "/dpub-aam/doc-appendix-manual.html", + {} + ] + ], + "dpub-aam/doc-backlink-manual.html": [ + [ + "/dpub-aam/doc-backlink-manual.html", + {} + ] + ], + "dpub-aam/doc-biblioentry-manual.html": [ + [ + "/dpub-aam/doc-biblioentry-manual.html", + {} + ] + ], + "dpub-aam/doc-bibliography-manual.html": [ + [ + "/dpub-aam/doc-bibliography-manual.html", + {} + ] + ], + "dpub-aam/doc-biblioref-manual.html": [ + [ + "/dpub-aam/doc-biblioref-manual.html", + {} + ] + ], + "dpub-aam/doc-chapter-manual.html": [ + [ + "/dpub-aam/doc-chapter-manual.html", + {} + ] + ], + "dpub-aam/doc-colophon-manual.html": [ + [ + "/dpub-aam/doc-colophon-manual.html", + {} + ] + ], + "dpub-aam/doc-conclusion-manual.html": [ + [ + "/dpub-aam/doc-conclusion-manual.html", + {} + ] + ], + "dpub-aam/doc-cover-manual.html": [ + [ + "/dpub-aam/doc-cover-manual.html", + {} + ] + ], + "dpub-aam/doc-credit-manual.html": [ + [ + "/dpub-aam/doc-credit-manual.html", + {} + ] + ], + "dpub-aam/doc-credits-manual.html": [ + [ + "/dpub-aam/doc-credits-manual.html", + {} + ] + ], + "dpub-aam/doc-dedication-manual.html": [ + [ + "/dpub-aam/doc-dedication-manual.html", + {} + ] + ], + "dpub-aam/doc-endnote-manual.html": [ + [ + "/dpub-aam/doc-endnote-manual.html", + {} + ] + ], + "dpub-aam/doc-endnotes-manual.html": [ + [ + "/dpub-aam/doc-endnotes-manual.html", + {} + ] + ], + "dpub-aam/doc-epigraph-manual.html": [ + [ + "/dpub-aam/doc-epigraph-manual.html", + {} + ] + ], + "dpub-aam/doc-epilogue-manual.html": [ + [ + "/dpub-aam/doc-epilogue-manual.html", + {} + ] + ], + "dpub-aam/doc-errata-manual.html": [ + [ + "/dpub-aam/doc-errata-manual.html", + {} + ] + ], + "dpub-aam/doc-example-manual.html": [ + [ + "/dpub-aam/doc-example-manual.html", + {} + ] + ], + "dpub-aam/doc-footnote-manual.html": [ + [ + "/dpub-aam/doc-footnote-manual.html", + {} + ] + ], + "dpub-aam/doc-foreword-manual.html": [ + [ + "/dpub-aam/doc-foreword-manual.html", + {} + ] + ], + "dpub-aam/doc-glossary-manual.html": [ + [ + "/dpub-aam/doc-glossary-manual.html", + {} + ] + ], + "dpub-aam/doc-glossref-manual.html": [ + [ + "/dpub-aam/doc-glossref-manual.html", + {} + ] + ], + "dpub-aam/doc-index-manual.html": [ + [ + "/dpub-aam/doc-index-manual.html", + {} + ] + ], + "dpub-aam/doc-introduction-manual.html": [ + [ + "/dpub-aam/doc-introduction-manual.html", + {} + ] + ], + "dpub-aam/doc-noteref-manual.html": [ + [ + "/dpub-aam/doc-noteref-manual.html", + {} + ] + ], + "dpub-aam/doc-notice-manual.html": [ + [ + "/dpub-aam/doc-notice-manual.html", + {} + ] + ], + "dpub-aam/doc-pagebreak-manual.html": [ + [ + "/dpub-aam/doc-pagebreak-manual.html", + {} + ] + ], + "dpub-aam/doc-pagelist-manual.html": [ + [ + "/dpub-aam/doc-pagelist-manual.html", + {} + ] + ], + "dpub-aam/doc-part-manual.html": [ + [ + "/dpub-aam/doc-part-manual.html", + {} + ] + ], + "dpub-aam/doc-preface-manual.html": [ + [ + "/dpub-aam/doc-preface-manual.html", + {} + ] + ], + "dpub-aam/doc-prologue-manual.html": [ + [ + "/dpub-aam/doc-prologue-manual.html", + {} + ] + ], + "dpub-aam/doc-pullquote-manual.html": [ + [ + "/dpub-aam/doc-pullquote-manual.html", + {} + ] + ], + "dpub-aam/doc-qna-manual.html": [ + [ + "/dpub-aam/doc-qna-manual.html", + {} + ] + ], + "dpub-aam/doc-subtitle-manual.html": [ + [ + "/dpub-aam/doc-subtitle-manual.html", + {} + ] + ], + "dpub-aam/doc-tip-manual.html": [ + [ + "/dpub-aam/doc-tip-manual.html", + {} + ] + ], + "dpub-aam/doc-toc-manual.html": [ + [ + "/dpub-aam/doc-toc-manual.html", + {} + ] + ], "dpub-aria/inuse-manual.html": [ [ "/dpub-aria/inuse-manual.html", @@ -14041,6 +10555,12 @@ {} ] ], + "fullscreen/model/move-to-iframe-manual.html": [ + [ + "/fullscreen/model/move-to-iframe-manual.html", + {} + ] + ], "fullscreen/model/remove-child-manual.html": [ [ "/fullscreen/model/remove-child-manual.html", @@ -14119,6 +10639,12 @@ {} ] ], + "gyroscope/Gyroscope_onerror-manual.https.html": [ + [ + "/gyroscope/Gyroscope_onerror-manual.https.html", + {} + ] + ], "html-longdesc/data-uri-image-data-uri-description-manual.html": [ [ "/html-longdesc/data-uri-image-data-uri-description-manual.html", @@ -14593,6 +11119,12 @@ {} ] ], + "html/editing/dnd/events/relatedTarget-attribute-manual.html": [ + [ + "/html/editing/dnd/events/relatedTarget-attribute-manual.html", + {} + ] + ], "html/editing/dnd/synthetic/005-manual.html": [ [ "/html/editing/dnd/synthetic/005-manual.html", @@ -15097,6 +11629,12 @@ {} ] ], + "html/semantics/embedded-content/the-img-element/ismap/img-ismap-coordinates-manual.html": [ + [ + "/html/semantics/embedded-content/the-img-element/ismap/img-ismap-coordinates-manual.html", + {} + ] + ], "html/semantics/forms/attributes-common-to-form-controls/dirname-rtl-manual.html": [ [ "/html/semantics/forms/attributes-common-to-form-controls/dirname-rtl-manual.html", @@ -15235,12 +11773,6 @@ {} ] ], - "html/semantics/interactive-elements/context-menus/contextmenu-event-manual.htm": [ - [ - "/html/semantics/interactive-elements/context-menus/contextmenu-event-manual.htm", - {} - ] - ], "html/semantics/selectors/pseudo-classes/checked-001-manual.html": [ [ "/html/semantics/selectors/pseudo-classes/checked-001-manual.html", @@ -15253,6 +11785,12 @@ {} ] ], + "html/webappapis/scripting/events/contextmenu-event-manual.htm": [ + [ + "/html/webappapis/scripting/events/contextmenu-event-manual.htm", + {} + ] + ], "html/webappapis/scripting/events/event-handler-processing-algorithm-manual.html": [ [ "/html/webappapis/scripting/events/event-handler-processing-algorithm-manual.html", @@ -15265,6 +11803,18 @@ {} ] ], + "input-events/input-events-typing-data-manual.html": [ + [ + "/input-events/input-events-typing-data-manual.html", + {} + ] + ], + "magnetometer/Magnetometer_onerror-manual.https.html": [ + [ + "/magnetometer/Magnetometer_onerror-manual.https.html", + {} + ] + ], "mathml/relations/html5-tree/href-manual.html": [ [ "/mathml/relations/html5-tree/href-manual.html", @@ -15523,12 +12073,6 @@ {} ] ], - "old-tests/submission/Microsoft/sandbox/sandbox_009-manual.htm": [ - [ - "/old-tests/submission/Microsoft/sandbox/sandbox_009-manual.htm", - {} - ] - ], "old-tests/submission/Microsoft/sandbox/sandbox_010-manual.htm": [ [ "/old-tests/submission/Microsoft/sandbox/sandbox_010-manual.htm", @@ -16039,6 +12583,12 @@ {} ] ], + "pointerevents/pointerevent_touch-action-rotated-divs_touch-manual.html": [ + [ + "/pointerevents/pointerevent_touch-action-rotated-divs_touch-manual.html", + {} + ] + ], "pointerevents/pointerevent_touch-action-span-test_touch-manual.html": [ [ "/pointerevents/pointerevent_touch-action-span-test_touch-manual.html", @@ -16063,6 +12613,18 @@ {} ] ], + "pointerevents/pointerlock/pointerevent_pointerlock_after_pointercapture-manual.html": [ + [ + "/pointerevents/pointerlock/pointerevent_pointerlock_after_pointercapture-manual.html", + {} + ] + ], + "pointerevents/pointerlock/pointerevent_pointerlock_supercedes_capture-manual.html": [ + [ + "/pointerevents/pointerlock/pointerevent_pointerlock_supercedes_capture-manual.html", + {} + ] + ], "pointerlock/movementX_Y_basic-manual.html": [ [ "/pointerlock/movementX_Y_basic-manual.html", @@ -16111,6 +12673,12 @@ {} ] ], + "pointerlock/pointerlock_remove_target_on_mouseup-manual.html": [ + [ + "/pointerlock/pointerlock_remove_target_on_mouseup-manual.html", + {} + ] + ], "pointerlock/pointerlock_shadow-manual.html": [ [ "/pointerlock/pointerlock_shadow-manual.html", @@ -16123,15 +12691,15 @@ {} ] ], - "presentation-api/controlling-ua/PresentationConnection_onclosed-manual.html": [ + "presentation-api/controlling-ua/PresentationConnection_onclose-manual.https.html": [ [ - "/presentation-api/controlling-ua/PresentationConnection_onclosed-manual.html", + "/presentation-api/controlling-ua/PresentationConnection_onclose-manual.https.html", {} ] ], - "presentation-api/controlling-ua/PresentationConnection_onconnected-manual.html": [ + "presentation-api/controlling-ua/PresentationConnection_onconnect-manual.https.html": [ [ - "/presentation-api/controlling-ua/PresentationConnection_onconnected-manual.html", + "/presentation-api/controlling-ua/PresentationConnection_onconnect-manual.https.html", {} ] ], @@ -16141,9 +12709,9 @@ {} ] ], - "presentation-api/controlling-ua/PresentationConnection_onterminated-manual.html": [ + "presentation-api/controlling-ua/PresentationConnection_onterminate-manual.https.html": [ [ - "/presentation-api/controlling-ua/PresentationConnection_onterminated-manual.html", + "/presentation-api/controlling-ua/PresentationConnection_onterminate-manual.https.html", {} ] ], @@ -16201,6 +12769,18 @@ {} ] ], + "presentation-api/receiving-ua/PresentationConnectionList_onconnectionavailable-manual.https.html": [ + [ + "/presentation-api/receiving-ua/PresentationConnectionList_onconnectionavailable-manual.https.html", + {} + ] + ], + "presentation-api/receiving-ua/PresentationConnection_onclose-manual.https.html": [ + [ + "/presentation-api/receiving-ua/PresentationConnection_onclose-manual.https.html", + {} + ] + ], "presentation-api/receiving-ua/PresentationConnection_onmessage-manual.https.html": [ [ "/presentation-api/receiving-ua/PresentationConnection_onmessage-manual.https.html", @@ -16213,6 +12793,12 @@ {} ] ], + "presentation-api/receiving-ua/PresentationConnection_terminate-manual.https.html": [ + [ + "/presentation-api/receiving-ua/PresentationConnection_terminate-manual.https.html", + {} + ] + ], "presentation-api/receiving-ua/PresentationReceiver_create-manual.https.html": [ [ "/presentation-api/receiving-ua/PresentationReceiver_create-manual.https.html", @@ -16249,6 +12835,12 @@ {} ] ], + "storage/persist-permission-manual.https.html": [ + [ + "/storage/persist-permission-manual.https.html", + {} + ] + ], "svg/import/animate-dom-01-f-manual.svg": [ [ "/svg/import/animate-dom-01-f-manual.svg", @@ -19393,6 +15985,12 @@ {} ] ], + "uievents/auxclick/auxclick_event-manual.html": [ + [ + "/uievents/auxclick/auxclick_event-manual.html", + {} + ] + ], "uievents/interface/click-event-manual.htm": [ [ "/uievents/interface/click-event-manual.htm", @@ -19429,6 +16027,12 @@ {} ] ], + "uievents/mouse/mouseevent_move_button-manual.html": [ + [ + "/uievents/mouse/mouseevent_move_button-manual.html", + {} + ] + ], "uievents/order-of-events/focus-events/focus-contained-manual.html": [ [ "/uievents/order-of-events/focus-events/focus-contained-manual.html", @@ -19561,6 +16165,1416 @@ {} ] ], + "viewport/viewport-dimensions-custom-scrollbars-manual.html": [ + [ + "/viewport/viewport-dimensions-custom-scrollbars-manual.html", + {} + ] + ], + "viewport/viewport-dimensions-scrollbars-manual.html": [ + [ + "/viewport/viewport-dimensions-scrollbars-manual.html", + {} + ] + ], + "viewport/viewport-offset-manual.html": [ + [ + "/viewport/viewport-offset-manual.html", + {} + ] + ], + "viewport/viewport-page-manual.html": [ + [ + "/viewport/viewport-page-manual.html", + {} + ] + ], + "viewport/viewport-resize-event-manual.html": [ + [ + "/viewport/viewport-resize-event-manual.html", + {} + ] + ], + "viewport/viewport-scale-iframe-manual.html": [ + [ + "/viewport/viewport-scale-iframe-manual.html", + {} + ] + ], + "viewport/viewport-scale-manual.html": [ + [ + "/viewport/viewport-scale-manual.html", + {} + ] + ], + "viewport/viewport-scroll-event-manual.html": [ + [ + "/viewport/viewport-scroll-event-manual.html", + {} + ] + ], + "wai-aria/alertdialog_modal_false-manual.html": [ + [ + "/wai-aria/alertdialog_modal_false-manual.html", + {} + ] + ], + "wai-aria/alertdialog_modal_true-manual.html": [ + [ + "/wai-aria/alertdialog_modal_true-manual.html", + {} + ] + ], + "wai-aria/application_activedescendant-manual.html": [ + [ + "/wai-aria/application_activedescendant-manual.html", + {} + ] + ], + "wai-aria/application_activedescendant_value_changes-manual.html": [ + [ + "/wai-aria/application_activedescendant_value_changes-manual.html", + {} + ] + ], + "wai-aria/aria-current_not_declared-manual.html": [ + [ + "/wai-aria/aria-current_not_declared-manual.html", + {} + ] + ], + "wai-aria/aria-current_with_value_changes-manual.html": [ + [ + "/wai-aria/aria-current_with_value_changes-manual.html", + {} + ] + ], + "wai-aria/aria-current_with_value_date-manual.html": [ + [ + "/wai-aria/aria-current_with_value_date-manual.html", + {} + ] + ], + "wai-aria/aria-current_with_value_location-manual.html": [ + [ + "/wai-aria/aria-current_with_value_location-manual.html", + {} + ] + ], + "wai-aria/aria-current_with_value_page-manual.html": [ + [ + "/wai-aria/aria-current_with_value_page-manual.html", + {} + ] + ], + "wai-aria/aria-current_with_value_step-manual.html": [ + [ + "/wai-aria/aria-current_with_value_step-manual.html", + {} + ] + ], + "wai-aria/aria-current_with_value_time-manual.html": [ + [ + "/wai-aria/aria-current_with_value_time-manual.html", + {} + ] + ], + "wai-aria/aria-current_with_value_true-manual.html": [ + [ + "/wai-aria/aria-current_with_value_true-manual.html", + {} + ] + ], + "wai-aria/aria-current_with_value_unspecified-manual.html": [ + [ + "/wai-aria/aria-current_with_value_unspecified-manual.html", + {} + ] + ], + "wai-aria/aria-details_pointing_to_details_element-manual.html": [ + [ + "/wai-aria/aria-details_pointing_to_details_element-manual.html", + {} + ] + ], + "wai-aria/aria-details_pointing_to_div_element-manual.html": [ + [ + "/wai-aria/aria-details_pointing_to_div_element-manual.html", + {} + ] + ], + "wai-aria/article_in_feed_posinset_and_setsize-manual.html": [ + [ + "/wai-aria/article_in_feed_posinset_and_setsize-manual.html", + {} + ] + ], + "wai-aria/article_in_feed_setsize_-1-manual.html": [ + [ + "/wai-aria/article_in_feed_setsize_-1-manual.html", + {} + ] + ], + "wai-aria/article_not_in_feed_posinset_and_setsize-manual.html": [ + [ + "/wai-aria/article_not_in_feed_posinset_and_setsize-manual.html", + {} + ] + ], + "wai-aria/button_haspopup_dialog-manual.html": [ + [ + "/wai-aria/button_haspopup_dialog-manual.html", + {} + ] + ], + "wai-aria/button_haspopup_emptystring-manual.html": [ + [ + "/wai-aria/button_haspopup_emptystring-manual.html", + {} + ] + ], + "wai-aria/button_haspopup_false-manual.html": [ + [ + "/wai-aria/button_haspopup_false-manual.html", + {} + ] + ], + "wai-aria/button_haspopup_foo-manual.html": [ + [ + "/wai-aria/button_haspopup_foo-manual.html", + {} + ] + ], + "wai-aria/button_haspopup_grid-manual.html": [ + [ + "/wai-aria/button_haspopup_grid-manual.html", + {} + ] + ], + "wai-aria/button_haspopup_listbox-manual.html": [ + [ + "/wai-aria/button_haspopup_listbox-manual.html", + {} + ] + ], + "wai-aria/button_haspopup_menu-manual.html": [ + [ + "/wai-aria/button_haspopup_menu-manual.html", + {} + ] + ], + "wai-aria/button_haspopup_tree-manual.html": [ + [ + "/wai-aria/button_haspopup_tree-manual.html", + {} + ] + ], + "wai-aria/button_haspopup_true-manual.html": [ + [ + "/wai-aria/button_haspopup_true-manual.html", + {} + ] + ], + "wai-aria/button_haspopup_unspecified-manual.html": [ + [ + "/wai-aria/button_haspopup_unspecified-manual.html", + {} + ] + ], + "wai-aria/button_roledescription_empty-manual.html": [ + [ + "/wai-aria/button_roledescription_empty-manual.html", + {} + ] + ], + "wai-aria/button_roledescription_valid-manual.html": [ + [ + "/wai-aria/button_roledescription_valid-manual.html", + {} + ] + ], + "wai-aria/button_roledescription_whitespace_only-manual.html": [ + [ + "/wai-aria/button_roledescription_whitespace_only-manual.html", + {} + ] + ], + "wai-aria/cell-manual.html": [ + [ + "/wai-aria/cell-manual.html", + {} + ] + ], + "wai-aria/cell_aria-colspan_2_on_div-manual.html": [ + [ + "/wai-aria/cell_aria-colspan_2_on_div-manual.html", + {} + ] + ], + "wai-aria/cell_aria-colspan_2_on_td_html_colspan_3-manual.html": [ + [ + "/wai-aria/cell_aria-colspan_2_on_td_html_colspan_3-manual.html", + {} + ] + ], + "wai-aria/cell_aria-colspan_2_on_td_html_colspan_3_with_headers_and_border-manual.html": [ + [ + "/wai-aria/cell_aria-colspan_2_on_td_html_colspan_3_with_headers_and_border-manual.html", + {} + ] + ], + "wai-aria/cell_aria-colspan_2_on_td_html_colspan_3_with_three_actual_columns-manual.html": [ + [ + "/wai-aria/cell_aria-colspan_2_on_td_html_colspan_3_with_three_actual_columns-manual.html", + {} + ] + ], + "wai-aria/cell_aria-colspan_2_on_td_with_html_colspan_not_specified-manual.html": [ + [ + "/wai-aria/cell_aria-colspan_2_on_td_with_html_colspan_not_specified-manual.html", + {} + ] + ], + "wai-aria/cell_aria-rowspan_2_on_div-manual.html": [ + [ + "/wai-aria/cell_aria-rowspan_2_on_div-manual.html", + {} + ] + ], + "wai-aria/cell_aria-rowspan_2_on_td_html_rowspan_3-manual.html": [ + [ + "/wai-aria/cell_aria-rowspan_2_on_td_html_rowspan_3-manual.html", + {} + ] + ], + "wai-aria/cell_aria-rowspan_2_on_td_html_rowspan_3_with_three_actual_rows-manual.html": [ + [ + "/wai-aria/cell_aria-rowspan_2_on_td_html_rowspan_3_with_three_actual_rows-manual.html", + {} + ] + ], + "wai-aria/cell_aria-rowspan_2_on_td_with_html_rowspan_not_specified-manual.html": [ + [ + "/wai-aria/cell_aria-rowspan_2_on_td_with_html_rowspan_not_specified-manual.html", + {} + ] + ], + "wai-aria/cell_colindex_4-manual.html": [ + [ + "/wai-aria/cell_colindex_4-manual.html", + {} + ] + ], + "wai-aria/cell_rowindex_4-manual.html": [ + [ + "/wai-aria/cell_rowindex_4-manual.html", + {} + ] + ], + "wai-aria/checkbox_readonly_false-manual.html": [ + [ + "/wai-aria/checkbox_readonly_false-manual.html", + {} + ] + ], + "wai-aria/checkbox_readonly_true-manual.html": [ + [ + "/wai-aria/checkbox_readonly_true-manual.html", + {} + ] + ], + "wai-aria/checkbox_readonly_unspecified-manual.html": [ + [ + "/wai-aria/checkbox_readonly_unspecified-manual.html", + {} + ] + ], + "wai-aria/columnheader_aria-colspan_2_on_div-manual.html": [ + [ + "/wai-aria/columnheader_aria-colspan_2_on_div-manual.html", + {} + ] + ], + "wai-aria/columnheader_aria-colspan_2_on_th_html_colspan_3-manual.html": [ + [ + "/wai-aria/columnheader_aria-colspan_2_on_th_html_colspan_3-manual.html", + {} + ] + ], + "wai-aria/columnheader_aria-colspan_2_on_th_html_colspan_3_with_three_actual_columns-manual.html": [ + [ + "/wai-aria/columnheader_aria-colspan_2_on_th_html_colspan_3_with_three_actual_columns-manual.html", + {} + ] + ], + "wai-aria/columnheader_aria-colspan_2_on_th_with_html_colspan_not_specified-manual.html": [ + [ + "/wai-aria/columnheader_aria-colspan_2_on_th_with_html_colspan_not_specified-manual.html", + {} + ] + ], + "wai-aria/columnheader_aria-rowspan_2_on_div-manual.html": [ + [ + "/wai-aria/columnheader_aria-rowspan_2_on_div-manual.html", + {} + ] + ], + "wai-aria/columnheader_aria-rowspan_2_on_th_html_rowspan_3-manual.html": [ + [ + "/wai-aria/columnheader_aria-rowspan_2_on_th_html_rowspan_3-manual.html", + {} + ] + ], + "wai-aria/columnheader_aria-rowspan_2_on_th_html_rowspan_3_with_three_actual_rows-manual.html": [ + [ + "/wai-aria/columnheader_aria-rowspan_2_on_th_html_rowspan_3_with_three_actual_rows-manual.html", + {} + ] + ], + "wai-aria/columnheader_aria-rowspan_2_on_th_with_html_rowspan_not_specified-manual.html": [ + [ + "/wai-aria/columnheader_aria-rowspan_2_on_th_with_html_rowspan_not_specified-manual.html", + {} + ] + ], + "wai-aria/columnheader_colindex_4-manual.html": [ + [ + "/wai-aria/columnheader_colindex_4-manual.html", + {} + ] + ], + "wai-aria/columnheader_rowindex_4-manual.html": [ + [ + "/wai-aria/columnheader_rowindex_4-manual.html", + {} + ] + ], + "wai-aria/columnheader_selected_false_not_automatically_propagated-manual.html": [ + [ + "/wai-aria/columnheader_selected_false_not_automatically_propagated-manual.html", + {} + ] + ], + "wai-aria/columnheader_selected_true_not_automatically_propagated-manual.html": [ + [ + "/wai-aria/columnheader_selected_true_not_automatically_propagated-manual.html", + {} + ] + ], + "wai-aria/combobox_controls_an_invalid_id-manual.html": [ + [ + "/wai-aria/combobox_controls_an_invalid_id-manual.html", + {} + ] + ], + "wai-aria/combobox_haspopup_dialog-manual.html": [ + [ + "/wai-aria/combobox_haspopup_dialog-manual.html", + {} + ] + ], + "wai-aria/combobox_haspopup_false-manual.html": [ + [ + "/wai-aria/combobox_haspopup_false-manual.html", + {} + ] + ], + "wai-aria/combobox_haspopup_grid-manual.html": [ + [ + "/wai-aria/combobox_haspopup_grid-manual.html", + {} + ] + ], + "wai-aria/combobox_haspopup_listbox-manual.html": [ + [ + "/wai-aria/combobox_haspopup_listbox-manual.html", + {} + ] + ], + "wai-aria/combobox_haspopup_menu-manual.html": [ + [ + "/wai-aria/combobox_haspopup_menu-manual.html", + {} + ] + ], + "wai-aria/combobox_haspopup_tree-manual.html": [ + [ + "/wai-aria/combobox_haspopup_tree-manual.html", + {} + ] + ], + "wai-aria/combobox_haspopup_true-manual.html": [ + [ + "/wai-aria/combobox_haspopup_true-manual.html", + {} + ] + ], + "wai-aria/combobox_haspopup_unspecified-manual.html": [ + [ + "/wai-aria/combobox_haspopup_unspecified-manual.html", + {} + ] + ], + "wai-aria/combobox_orientation_horizontal-manual.html": [ + [ + "/wai-aria/combobox_orientation_horizontal-manual.html", + {} + ] + ], + "wai-aria/combobox_orientation_unspecified-manual.html": [ + [ + "/wai-aria/combobox_orientation_unspecified-manual.html", + {} + ] + ], + "wai-aria/combobox_orientation_vertical-manual.html": [ + [ + "/wai-aria/combobox_orientation_vertical-manual.html", + {} + ] + ], + "wai-aria/combobox_readonly_false-manual.html": [ + [ + "/wai-aria/combobox_readonly_false-manual.html", + {} + ] + ], + "wai-aria/combobox_readonly_true-manual.html": [ + [ + "/wai-aria/combobox_readonly_true-manual.html", + {} + ] + ], + "wai-aria/combobox_readonly_unspecified-manual.html": [ + [ + "/wai-aria/combobox_readonly_unspecified-manual.html", + {} + ] + ], + "wai-aria/dialog_modal_false-manual.html": [ + [ + "/wai-aria/dialog_modal_false-manual.html", + {} + ] + ], + "wai-aria/dialog_modal_true-manual.html": [ + [ + "/wai-aria/dialog_modal_true-manual.html", + {} + ] + ], + "wai-aria/dialog_modal_unspecified-manual.html": [ + [ + "/wai-aria/dialog_modal_unspecified-manual.html", + {} + ] + ], + "wai-aria/div_element_without_role_roledescription_valid-manual.html": [ + [ + "/wai-aria/div_element_without_role_roledescription_valid-manual.html", + {} + ] + ], + "wai-aria/errormessage_object_in_invalid_state-manual.html": [ + [ + "/wai-aria/errormessage_object_in_invalid_state-manual.html", + {} + ] + ], + "wai-aria/errormessage_object_in_valid_state-manual.html": [ + [ + "/wai-aria/errormessage_object_in_valid_state-manual.html", + {} + ] + ], + "wai-aria/feed-manual.html": [ + [ + "/wai-aria/feed-manual.html", + {} + ] + ], + "wai-aria/figure-manual.html": [ + [ + "/wai-aria/figure-manual.html", + {} + ] + ], + "wai-aria/grid_aria-readonly_false_automatically_propagated-manual.html": [ + [ + "/wai-aria/grid_aria-readonly_false_automatically_propagated-manual.html", + {} + ] + ], + "wai-aria/grid_aria-readonly_true_automatically_propagated-manual.html": [ + [ + "/wai-aria/grid_aria-readonly_true_automatically_propagated-manual.html", + {} + ] + ], + "wai-aria/grid_busy_false-manual.html": [ + [ + "/wai-aria/grid_busy_false-manual.html", + {} + ] + ], + "wai-aria/grid_busy_true-manual.html": [ + [ + "/wai-aria/grid_busy_true-manual.html", + {} + ] + ], + "wai-aria/grid_busy_value_changes-manual.html": [ + [ + "/wai-aria/grid_busy_value_changes-manual.html", + {} + ] + ], + "wai-aria/grid_colcount_8-manual.html": [ + [ + "/wai-aria/grid_colcount_8-manual.html", + {} + ] + ], + "wai-aria/grid_columnheader_readonly_false-manual.html": [ + [ + "/wai-aria/grid_columnheader_readonly_false-manual.html", + {} + ] + ], + "wai-aria/grid_columnheader_readonly_true-manual.html": [ + [ + "/wai-aria/grid_columnheader_readonly_true-manual.html", + {} + ] + ], + "wai-aria/grid_columnheader_readonly_unspecified-manual.html": [ + [ + "/wai-aria/grid_columnheader_readonly_unspecified-manual.html", + {} + ] + ], + "wai-aria/grid_columnheader_required_false-manual.html": [ + [ + "/wai-aria/grid_columnheader_required_false-manual.html", + {} + ] + ], + "wai-aria/grid_columnheader_required_true-manual.html": [ + [ + "/wai-aria/grid_columnheader_required_true-manual.html", + {} + ] + ], + "wai-aria/grid_columnheader_required_unspecified-manual.html": [ + [ + "/wai-aria/grid_columnheader_required_unspecified-manual.html", + {} + ] + ], + "wai-aria/grid_rowcount_3-manual.html": [ + [ + "/wai-aria/grid_rowcount_3-manual.html", + {} + ] + ], + "wai-aria/grid_rowheader_readonly_false-manual.html": [ + [ + "/wai-aria/grid_rowheader_readonly_false-manual.html", + {} + ] + ], + "wai-aria/grid_rowheader_readonly_true-manual.html": [ + [ + "/wai-aria/grid_rowheader_readonly_true-manual.html", + {} + ] + ], + "wai-aria/grid_rowheader_readonly_unspecified-manual.html": [ + [ + "/wai-aria/grid_rowheader_readonly_unspecified-manual.html", + {} + ] + ], + "wai-aria/grid_rowheader_required_false-manual.html": [ + [ + "/wai-aria/grid_rowheader_required_false-manual.html", + {} + ] + ], + "wai-aria/grid_rowheader_required_true-manual.html": [ + [ + "/wai-aria/grid_rowheader_required_true-manual.html", + {} + ] + ], + "wai-aria/grid_rowheader_required_unspecified-manual.html": [ + [ + "/wai-aria/grid_rowheader_required_unspecified-manual.html", + {} + ] + ], + "wai-aria/gridcell_aria-colspan_2_on_div-manual.html": [ + [ + "/wai-aria/gridcell_aria-colspan_2_on_div-manual.html", + {} + ] + ], + "wai-aria/gridcell_aria-rowspan_2_on_div-manual.html": [ + [ + "/wai-aria/gridcell_aria-rowspan_2_on_div-manual.html", + {} + ] + ], + "wai-aria/gridcell_colindex_4-manual.html": [ + [ + "/wai-aria/gridcell_colindex_4-manual.html", + {} + ] + ], + "wai-aria/gridcell_rowindex_4-manual.html": [ + [ + "/wai-aria/gridcell_rowindex_4-manual.html", + {} + ] + ], + "wai-aria/group_hidden_undefined_element_not_rendered-manual.html": [ + [ + "/wai-aria/group_hidden_undefined_element_not_rendered-manual.html", + {} + ] + ], + "wai-aria/group_hidden_undefined_element_rendered-manual.html": [ + [ + "/wai-aria/group_hidden_undefined_element_rendered-manual.html", + {} + ] + ], + "wai-aria/heading_level_unspecified-manual.html": [ + [ + "/wai-aria/heading_level_unspecified-manual.html", + {} + ] + ], + "wai-aria/keyshortcuts_multiple_shortcuts-manual.html": [ + [ + "/wai-aria/keyshortcuts_multiple_shortcuts-manual.html", + {} + ] + ], + "wai-aria/keyshortcuts_one_shortcut-manual.html": [ + [ + "/wai-aria/keyshortcuts_one_shortcut-manual.html", + {} + ] + ], + "wai-aria/listbox_busy_false-manual.html": [ + [ + "/wai-aria/listbox_busy_false-manual.html", + {} + ] + ], + "wai-aria/listbox_busy_true-manual.html": [ + [ + "/wai-aria/listbox_busy_true-manual.html", + {} + ] + ], + "wai-aria/listbox_orientation_horizontal-manual.html": [ + [ + "/wai-aria/listbox_orientation_horizontal-manual.html", + {} + ] + ], + "wai-aria/listbox_orientation_unspecified-manual.html": [ + [ + "/wai-aria/listbox_orientation_unspecified-manual.html", + {} + ] + ], + "wai-aria/listbox_orientation_vertical-manual.html": [ + [ + "/wai-aria/listbox_orientation_vertical-manual.html", + {} + ] + ], + "wai-aria/listbox_readonly_false-manual.html": [ + [ + "/wai-aria/listbox_readonly_false-manual.html", + {} + ] + ], + "wai-aria/listbox_readonly_true-manual.html": [ + [ + "/wai-aria/listbox_readonly_true-manual.html", + {} + ] + ], + "wai-aria/listbox_readonly_unspecified-manual.html": [ + [ + "/wai-aria/listbox_readonly_unspecified-manual.html", + {} + ] + ], + "wai-aria/listitem_setsize_-1-manual.html": [ + [ + "/wai-aria/listitem_setsize_-1-manual.html", + {} + ] + ], + "wai-aria/menu_orientation_horizontal-manual.html": [ + [ + "/wai-aria/menu_orientation_horizontal-manual.html", + {} + ] + ], + "wai-aria/menu_orientation_unspecified-manual.html": [ + [ + "/wai-aria/menu_orientation_unspecified-manual.html", + {} + ] + ], + "wai-aria/menu_orientation_vertical-manual.html": [ + [ + "/wai-aria/menu_orientation_vertical-manual.html", + {} + ] + ], + "wai-aria/menubar_busy_false-manual.html": [ + [ + "/wai-aria/menubar_busy_false-manual.html", + {} + ] + ], + "wai-aria/menubar_busy_true-manual.html": [ + [ + "/wai-aria/menubar_busy_true-manual.html", + {} + ] + ], + "wai-aria/menubar_orientation_horizontal-manual.html": [ + [ + "/wai-aria/menubar_orientation_horizontal-manual.html", + {} + ] + ], + "wai-aria/menubar_orientation_unspecified-manual.html": [ + [ + "/wai-aria/menubar_orientation_unspecified-manual.html", + {} + ] + ], + "wai-aria/menubar_orientation_vertical-manual.html": [ + [ + "/wai-aria/menubar_orientation_vertical-manual.html", + {} + ] + ], + "wai-aria/menuitem_posinset_and_setsize-manual.html": [ + [ + "/wai-aria/menuitem_posinset_and_setsize-manual.html", + {} + ] + ], + "wai-aria/menuitemcheckbox_posinset_and_setsize-manual.html": [ + [ + "/wai-aria/menuitemcheckbox_posinset_and_setsize-manual.html", + {} + ] + ], + "wai-aria/menuitemcheckbox_readonly_false-manual.html": [ + [ + "/wai-aria/menuitemcheckbox_readonly_false-manual.html", + {} + ] + ], + "wai-aria/menuitemcheckbox_readonly_true-manual.html": [ + [ + "/wai-aria/menuitemcheckbox_readonly_true-manual.html", + {} + ] + ], + "wai-aria/menuitemcheckbox_readonly_unspecified-manual.html": [ + [ + "/wai-aria/menuitemcheckbox_readonly_unspecified-manual.html", + {} + ] + ], + "wai-aria/menuitemradio_posinset_and_setsize-manual.html": [ + [ + "/wai-aria/menuitemradio_posinset_and_setsize-manual.html", + {} + ] + ], + "wai-aria/menuitemradio_readonly_false-manual.html": [ + [ + "/wai-aria/menuitemradio_readonly_false-manual.html", + {} + ] + ], + "wai-aria/menuitemradio_readonly_true-manual.html": [ + [ + "/wai-aria/menuitemradio_readonly_true-manual.html", + {} + ] + ], + "wai-aria/menuitemradio_readonly_unspecified-manual.html": [ + [ + "/wai-aria/menuitemradio_readonly_unspecified-manual.html", + {} + ] + ], + "wai-aria/none-manual.html": [ + [ + "/wai-aria/none-manual.html", + {} + ] + ], + "wai-aria/option_selected_false-manual.html": [ + [ + "/wai-aria/option_selected_false-manual.html", + {} + ] + ], + "wai-aria/option_selected_true-manual.html": [ + [ + "/wai-aria/option_selected_true-manual.html", + {} + ] + ], + "wai-aria/option_selected_undefined-manual.html": [ + [ + "/wai-aria/option_selected_undefined-manual.html", + {} + ] + ], + "wai-aria/option_selected_value_changes-manual.html": [ + [ + "/wai-aria/option_selected_value_changes-manual.html", + {} + ] + ], + "wai-aria/radiogroup_orientation_horizontal-manual.html": [ + [ + "/wai-aria/radiogroup_orientation_horizontal-manual.html", + {} + ] + ], + "wai-aria/radiogroup_orientation_unspecified-manual.html": [ + [ + "/wai-aria/radiogroup_orientation_unspecified-manual.html", + {} + ] + ], + "wai-aria/radiogroup_orientation_vertical-manual.html": [ + [ + "/wai-aria/radiogroup_orientation_vertical-manual.html", + {} + ] + ], + "wai-aria/radiogroup_readonly_false-manual.html": [ + [ + "/wai-aria/radiogroup_readonly_false-manual.html", + {} + ] + ], + "wai-aria/radiogroup_readonly_true-manual.html": [ + [ + "/wai-aria/radiogroup_readonly_true-manual.html", + {} + ] + ], + "wai-aria/radiogroup_readonly_unspecified-manual.html": [ + [ + "/wai-aria/radiogroup_readonly_unspecified-manual.html", + {} + ] + ], + "wai-aria/region_with_name-manual.html": [ + [ + "/wai-aria/region_with_name-manual.html", + {} + ] + ], + "wai-aria/region_without_name-manual.html": [ + [ + "/wai-aria/region_without_name-manual.html", + {} + ] + ], + "wai-aria/row_colindex_4-manual.html": [ + [ + "/wai-aria/row_colindex_4-manual.html", + {} + ] + ], + "wai-aria/row_rowindex_4-manual.html": [ + [ + "/wai-aria/row_rowindex_4-manual.html", + {} + ] + ], + "wai-aria/rowheader_aria-colspan_2_on_div-manual.html": [ + [ + "/wai-aria/rowheader_aria-colspan_2_on_div-manual.html", + {} + ] + ], + "wai-aria/rowheader_aria-rowspan_2_on_div-manual.html": [ + [ + "/wai-aria/rowheader_aria-rowspan_2_on_div-manual.html", + {} + ] + ], + "wai-aria/rowheader_colindex_4-manual.html": [ + [ + "/wai-aria/rowheader_colindex_4-manual.html", + {} + ] + ], + "wai-aria/rowheader_rowindex_4-manual.html": [ + [ + "/wai-aria/rowheader_rowindex_4-manual.html", + {} + ] + ], + "wai-aria/rowheader_selected_false_not_automatically_propagated-manual.html": [ + [ + "/wai-aria/rowheader_selected_false_not_automatically_propagated-manual.html", + {} + ] + ], + "wai-aria/rowheader_selected_true_not_automatically_propagated-manual.html": [ + [ + "/wai-aria/rowheader_selected_true_not_automatically_propagated-manual.html", + {} + ] + ], + "wai-aria/scrollbar_all_values_unspecified-manual.html": [ + [ + "/wai-aria/scrollbar_all_values_unspecified-manual.html", + {} + ] + ], + "wai-aria/scrollbar_only_valuenow_unspecified-manual.html": [ + [ + "/wai-aria/scrollbar_only_valuenow_unspecified-manual.html", + {} + ] + ], + "wai-aria/scrollbar_orientation_unspecified-manual.html": [ + [ + "/wai-aria/scrollbar_orientation_unspecified-manual.html", + {} + ] + ], + "wai-aria/searchbox-manual.html": [ + [ + "/wai-aria/searchbox-manual.html", + {} + ] + ], + "wai-aria/searchbox_activedescendant-manual.html": [ + [ + "/wai-aria/searchbox_activedescendant-manual.html", + {} + ] + ], + "wai-aria/searchbox_activedescendant_value_changes-manual.html": [ + [ + "/wai-aria/searchbox_activedescendant_value_changes-manual.html", + {} + ] + ], + "wai-aria/searchbox_autocomplete_both-manual.html": [ + [ + "/wai-aria/searchbox_autocomplete_both-manual.html", + {} + ] + ], + "wai-aria/searchbox_autocomplete_inline-manual.html": [ + [ + "/wai-aria/searchbox_autocomplete_inline-manual.html", + {} + ] + ], + "wai-aria/searchbox_autocomplete_list-manual.html": [ + [ + "/wai-aria/searchbox_autocomplete_list-manual.html", + {} + ] + ], + "wai-aria/searchbox_autocomplete_none-manual.html": [ + [ + "/wai-aria/searchbox_autocomplete_none-manual.html", + {} + ] + ], + "wai-aria/searchbox_autocomplete_unspecified-manual.html": [ + [ + "/wai-aria/searchbox_autocomplete_unspecified-manual.html", + {} + ] + ], + "wai-aria/searchbox_multiline_false-manual.html": [ + [ + "/wai-aria/searchbox_multiline_false-manual.html", + {} + ] + ], + "wai-aria/searchbox_multiline_true-manual.html": [ + [ + "/wai-aria/searchbox_multiline_true-manual.html", + {} + ] + ], + "wai-aria/searchbox_multiline_unspecified-manual.html": [ + [ + "/wai-aria/searchbox_multiline_unspecified-manual.html", + {} + ] + ], + "wai-aria/searchbox_placeholder-manual.html": [ + [ + "/wai-aria/searchbox_placeholder-manual.html", + {} + ] + ], + "wai-aria/searchbox_readonly_false-manual.html": [ + [ + "/wai-aria/searchbox_readonly_false-manual.html", + {} + ] + ], + "wai-aria/searchbox_readonly_true-manual.html": [ + [ + "/wai-aria/searchbox_readonly_true-manual.html", + {} + ] + ], + "wai-aria/searchbox_readonly_unspecified-manual.html": [ + [ + "/wai-aria/searchbox_readonly_unspecified-manual.html", + {} + ] + ], + "wai-aria/searchbox_required_false-manual.html": [ + [ + "/wai-aria/searchbox_required_false-manual.html", + {} + ] + ], + "wai-aria/searchbox_required_true-manual.html": [ + [ + "/wai-aria/searchbox_required_true-manual.html", + {} + ] + ], + "wai-aria/searchbox_required_unspecified-manual.html": [ + [ + "/wai-aria/searchbox_required_unspecified-manual.html", + {} + ] + ], + "wai-aria/separator_focusable_all_values_unspecified-manual.html": [ + [ + "/wai-aria/separator_focusable_all_values_unspecified-manual.html", + {} + ] + ], + "wai-aria/separator_focusable_only_valuenow_unspecified-manual.html": [ + [ + "/wai-aria/separator_focusable_only_valuenow_unspecified-manual.html", + {} + ] + ], + "wai-aria/separator_focusable_valuetext-manual.html": [ + [ + "/wai-aria/separator_focusable_valuetext-manual.html", + {} + ] + ], + "wai-aria/separator_orientation_unspecified-manual.html": [ + [ + "/wai-aria/separator_orientation_unspecified-manual.html", + {} + ] + ], + "wai-aria/separator_unfocusable_all_values_unspecified-manual.html": [ + [ + "/wai-aria/separator_unfocusable_all_values_unspecified-manual.html", + {} + ] + ], + "wai-aria/separator_unfocusable_valuetext-manual.html": [ + [ + "/wai-aria/separator_unfocusable_valuetext-manual.html", + {} + ] + ], + "wai-aria/slider_all_values_unspecified-manual.html": [ + [ + "/wai-aria/slider_all_values_unspecified-manual.html", + {} + ] + ], + "wai-aria/slider_only_valuenow_unspecified-manual.html": [ + [ + "/wai-aria/slider_only_valuenow_unspecified-manual.html", + {} + ] + ], + "wai-aria/slider_orientation_unspecified-manual.html": [ + [ + "/wai-aria/slider_orientation_unspecified-manual.html", + {} + ] + ], + "wai-aria/slider_readonly_false-manual.html": [ + [ + "/wai-aria/slider_readonly_false-manual.html", + {} + ] + ], + "wai-aria/slider_readonly_true-manual.html": [ + [ + "/wai-aria/slider_readonly_true-manual.html", + {} + ] + ], + "wai-aria/slider_readonly_unspecified-manual.html": [ + [ + "/wai-aria/slider_readonly_unspecified-manual.html", + {} + ] + ], + "wai-aria/spinbutton_all_values_unspecified-manual.html": [ + [ + "/wai-aria/spinbutton_all_values_unspecified-manual.html", + {} + ] + ], + "wai-aria/spinbutton_only_aria-valuenow_unspecified-manual.html": [ + [ + "/wai-aria/spinbutton_only_aria-valuenow_unspecified-manual.html", + {} + ] + ], + "wai-aria/spinbutton_readonly_false-manual.html": [ + [ + "/wai-aria/spinbutton_readonly_false-manual.html", + {} + ] + ], + "wai-aria/spinbutton_readonly_true-manual.html": [ + [ + "/wai-aria/spinbutton_readonly_true-manual.html", + {} + ] + ], + "wai-aria/spinbutton_readonly_unspecified-manual.html": [ + [ + "/wai-aria/spinbutton_readonly_unspecified-manual.html", + {} + ] + ], + "wai-aria/switch_checked_false-manual.html": [ + [ + "/wai-aria/switch_checked_false-manual.html", + {} + ] + ], + "wai-aria/switch_checked_mixed-manual.html": [ + [ + "/wai-aria/switch_checked_mixed-manual.html", + {} + ] + ], + "wai-aria/switch_checked_true-manual.html": [ + [ + "/wai-aria/switch_checked_true-manual.html", + {} + ] + ], + "wai-aria/switch_checked_undefined-manual.html": [ + [ + "/wai-aria/switch_checked_undefined-manual.html", + {} + ] + ], + "wai-aria/switch_checked_value_changes-manual.html": [ + [ + "/wai-aria/switch_checked_value_changes-manual.html", + {} + ] + ], + "wai-aria/switch_readonly_false-manual.html": [ + [ + "/wai-aria/switch_readonly_false-manual.html", + {} + ] + ], + "wai-aria/switch_readonly_true-manual.html": [ + [ + "/wai-aria/switch_readonly_true-manual.html", + {} + ] + ], + "wai-aria/switch_readonly_unspecified-manual.html": [ + [ + "/wai-aria/switch_readonly_unspecified-manual.html", + {} + ] + ], + "wai-aria/tab_posinset_and_setsize-manual.html": [ + [ + "/wai-aria/tab_posinset_and_setsize-manual.html", + {} + ] + ], + "wai-aria/table_colcount_-1-manual.html": [ + [ + "/wai-aria/table_colcount_-1-manual.html", + {} + ] + ], + "wai-aria/table_colcount_8-manual.html": [ + [ + "/wai-aria/table_colcount_8-manual.html", + {} + ] + ], + "wai-aria/table_rowcount_-1-manual.html": [ + [ + "/wai-aria/table_rowcount_-1-manual.html", + {} + ] + ], + "wai-aria/table_rowcount_3-manual.html": [ + [ + "/wai-aria/table_rowcount_3-manual.html", + {} + ] + ], + "wai-aria/tablist_orientation_horizontal-manual.html": [ + [ + "/wai-aria/tablist_orientation_horizontal-manual.html", + {} + ] + ], + "wai-aria/tablist_orientation_unspecified-manual.html": [ + [ + "/wai-aria/tablist_orientation_unspecified-manual.html", + {} + ] + ], + "wai-aria/tablist_orientation_vertical-manual.html": [ + [ + "/wai-aria/tablist_orientation_vertical-manual.html", + {} + ] + ], + "wai-aria/term_role-manual.html": [ + [ + "/wai-aria/term_role-manual.html", + {} + ] + ], + "wai-aria/textbox_placeholder-manual.html": [ + [ + "/wai-aria/textbox_placeholder-manual.html", + {} + ] + ], + "wai-aria/toolbar_orientation_horizontal-manual.html": [ + [ + "/wai-aria/toolbar_orientation_horizontal-manual.html", + {} + ] + ], + "wai-aria/toolbar_orientation_unspecified-manual.html": [ + [ + "/wai-aria/toolbar_orientation_unspecified-manual.html", + {} + ] + ], + "wai-aria/toolbar_orientation_vertical-manual.html": [ + [ + "/wai-aria/toolbar_orientation_vertical-manual.html", + {} + ] + ], + "wai-aria/tree_orientation_horizontal-manual.html": [ + [ + "/wai-aria/tree_orientation_horizontal-manual.html", + {} + ] + ], + "wai-aria/tree_orientation_unspecified-manual.html": [ + [ + "/wai-aria/tree_orientation_unspecified-manual.html", + {} + ] + ], + "wai-aria/tree_orientation_vertical-manual.html": [ + [ + "/wai-aria/tree_orientation_vertical-manual.html", + {} + ] + ], + "wai-aria/treegrid_colcount_8-manual.html": [ + [ + "/wai-aria/treegrid_colcount_8-manual.html", + {} + ] + ], + "wai-aria/treegrid_orientation_horizontal-manual.html": [ + [ + "/wai-aria/treegrid_orientation_horizontal-manual.html", + {} + ] + ], + "wai-aria/treegrid_orientation_unspecified-manual.html": [ + [ + "/wai-aria/treegrid_orientation_unspecified-manual.html", + {} + ] + ], + "wai-aria/treegrid_orientation_vertical-manual.html": [ + [ + "/wai-aria/treegrid_orientation_vertical-manual.html", + {} + ] + ], + "wai-aria/treegrid_rowcount_3-manual.html": [ + [ + "/wai-aria/treegrid_rowcount_3-manual.html", + {} + ] + ], + "wai-aria/treeitem_selected_false-manual.html": [ + [ + "/wai-aria/treeitem_selected_false-manual.html", + {} + ] + ], + "wai-aria/treeitem_selected_true-manual.html": [ + [ + "/wai-aria/treeitem_selected_true-manual.html", + {} + ] + ], + "wai-aria/treeitem_selected_undefined-manual.html": [ + [ + "/wai-aria/treeitem_selected_undefined-manual.html", + {} + ] + ], + "wai-aria/treeitem_selected_value_changes-manual.html": [ + [ + "/wai-aria/treeitem_selected_value_changes-manual.html", + {} + ] + ], "webstorage/storage_local-manual.html": [ [ "/webstorage/storage_local-manual.html", @@ -20055,6 +18069,18 @@ {} ] ], + "assumptions/ahem.html": [ + [ + "/assumptions/ahem.html", + [ + [ + "/assumptions/ahem-ref.html", + "==" + ] + ], + {} + ] + ], "assumptions/canvas-background.html": [ [ "/assumptions/canvas-background.html", @@ -20211,6 +18237,246 @@ {} ] ], + "css-font-display/font-display.html": [ + [ + "/css-font-display/font-display.html", + [ + [ + "/css-font-display/font-display-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/background-image-alpha.html": [ + [ + "/css-paint-api/background-image-alpha.html", + [ + [ + "/css-paint-api/background-image-alpha-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/background-image-multiple.html": [ + [ + "/css-paint-api/background-image-multiple.html", + [ + [ + "/css-paint-api/background-image-multiple-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/background-image-tiled.html": [ + [ + "/css-paint-api/background-image-tiled.html", + [ + [ + "/css-paint-api/background-image-tiled-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/invalid-image-constructor-error.html": [ + [ + "/css-paint-api/invalid-image-constructor-error.html", + [ + [ + "/css-paint-api/invalid-image-constructor-error-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/invalid-image-paint-error.html": [ + [ + "/css-paint-api/invalid-image-paint-error.html", + [ + [ + "/css-paint-api/invalid-image-paint-error-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/invalid-image-pending-script.html": [ + [ + "/css-paint-api/invalid-image-pending-script.html", + [ + [ + "/css-paint-api/invalid-image-pending-script-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/overdraw.html": [ + [ + "/css-paint-api/overdraw.html", + [ + [ + "/css-paint-api/overdraw-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/paint-arguments.html": [ + [ + "/css-paint-api/paint-arguments.html", + [ + [ + "/css-paint-api/paint-arguments-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/paint-function-arguments.html": [ + [ + "/css-paint-api/paint-function-arguments.html", + [ + [ + "/css-paint-api/paint-function-arguments-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/paint2d-composite.html": [ + [ + "/css-paint-api/paint2d-composite.html", + [ + [ + "/css-paint-api/paint2d-composite-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/paint2d-filter.html": [ + [ + "/css-paint-api/paint2d-filter.html", + [ + [ + "/css-paint-api/paint2d-filter-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/paint2d-gradient.html": [ + [ + "/css-paint-api/paint2d-gradient.html", + [ + [ + "/css-paint-api/paint2d-gradient-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/paint2d-image.html": [ + [ + "/css-paint-api/paint2d-image.html", + [ + [ + "/css-paint-api/paint2d-image-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/paint2d-paths.html": [ + [ + "/css-paint-api/paint2d-paths.html", + [ + [ + "/css-paint-api/paint2d-paths-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/paint2d-rects.html": [ + [ + "/css-paint-api/paint2d-rects.html", + [ + [ + "/css-paint-api/paint2d-rects-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/paint2d-shadows.html": [ + [ + "/css-paint-api/paint2d-shadows.html", + [ + [ + "/css-paint-api/paint2d-shadows-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/paint2d-transform.html": [ + [ + "/css-paint-api/paint2d-transform.html", + [ + [ + "/css-paint-api/paint2d-transform-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/valid-image-after-load.html": [ + [ + "/css-paint-api/valid-image-after-load.html", + [ + [ + "/css-paint-api/valid-image-after-load-ref.html", + "==" + ] + ], + {} + ] + ], + "css-paint-api/valid-image-before-load.html": [ + [ + "/css-paint-api/valid-image-before-load.html", + [ + [ + "/css-paint-api/valid-image-before-load-ref.html", + "==" + ] + ], + {} + ] + ], "css/CSS2/abspos/abspos-containing-block-initial-001.xht": [ [ "/css/CSS2/abspos/abspos-containing-block-initial-001.xht", @@ -104019,6 +102285,18 @@ {} ] ], + "css/css-display-3/display-contents-state-change-001.html": [ + [ + "/css/css-display-3/display-contents-state-change-001.html", + [ + [ + "/css/css-display-3/display-contents-state-change-001-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-display-3/display-contents-table-001.html": [ [ "/css/css-display-3/display-contents-table-001.html", @@ -104283,6 +102561,18 @@ {} ] ], + "css/css-flexbox-1/align-items-006.html": [ + [ + "/css/css-flexbox-1/align-items-006.html", + [ + [ + "/css/css-flexbox-1/reference/align-content-001-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-flexbox-1/align-self-001.html": [ [ "/css/css-flexbox-1/align-self-001.html", @@ -104499,18 +102789,6 @@ {} ] ], - "css/css-flexbox-1/css-flexbox-height-animation-stretch.html": [ - [ - "/css/css-flexbox-1/css-flexbox-height-animation-stretch.html", - [ - [ - "/css/css-flexbox-1/css-flexbox-height-animation-stretch-ref.html", - "==" - ] - ], - {} - ] - ], "css/css-flexbox-1/css-flexbox-img-expand-evenly.html": [ [ "/css/css-flexbox-1/css-flexbox-img-expand-evenly.html", @@ -108363,6 +106641,66 @@ {} ] ], + "css/css-fonts-3/font-kerning-01.html": [ + [ + "/css/css-fonts-3/font-kerning-01.html", + [ + [ + "/css/css-fonts-3/font-kerning-01-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-kerning-02.html": [ + [ + "/css/css-fonts-3/font-kerning-02.html", + [ + [ + "/css/css-fonts-3/font-kerning-02-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-kerning-03.html": [ + [ + "/css/css-fonts-3/font-kerning-03.html", + [ + [ + "/css/css-fonts-3/font-kerning-03-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-kerning-04.html": [ + [ + "/css/css-fonts-3/font-kerning-04.html", + [ + [ + "/css/css-fonts-3/font-kerning-04-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-kerning-05.html": [ + [ + "/css/css-fonts-3/font-kerning-05.html", + [ + [ + "/css/css-fonts-3/font-kerning-05-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-fonts-3/font-size-adjust-005.xht": [ [ "/css/css-fonts-3/font-size-adjust-005.xht", @@ -108411,6 +106749,354 @@ {} ] ], + "css/css-fonts-3/font-variant-01.html": [ + [ + "/css/css-fonts-3/font-variant-01.html", + [ + [ + "/css/css-fonts-3/font-variant-01-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-02.html": [ + [ + "/css/css-fonts-3/font-variant-02.html", + [ + [ + "/css/css-fonts-3/font-variant-02-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-03.html": [ + [ + "/css/css-fonts-3/font-variant-03.html", + [ + [ + "/css/css-fonts-3/font-variant-03-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-04.html": [ + [ + "/css/css-fonts-3/font-variant-04.html", + [ + [ + "/css/css-fonts-3/font-variant-04-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-alternates-01.html": [ + [ + "/css/css-fonts-3/font-variant-alternates-01.html", + [ + [ + "/css/css-fonts-3/font-variant-alternates-01-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-alternates-02.html": [ + [ + "/css/css-fonts-3/font-variant-alternates-02.html", + [ + [ + "/css/css-fonts-3/font-variant-alternates-02-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-alternates-03.html": [ + [ + "/css/css-fonts-3/font-variant-alternates-03.html", + [ + [ + "/css/css-fonts-3/font-variant-alternates-03-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-alternates-04.html": [ + [ + "/css/css-fonts-3/font-variant-alternates-04.html", + [ + [ + "/css/css-fonts-3/font-variant-alternates-04-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-alternates-05.html": [ + [ + "/css/css-fonts-3/font-variant-alternates-05.html", + [ + [ + "/css/css-fonts-3/font-variant-alternates-05-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-alternates-06.html": [ + [ + "/css/css-fonts-3/font-variant-alternates-06.html", + [ + [ + "/css/css-fonts-3/font-variant-alternates-06-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-alternates-07.html": [ + [ + "/css/css-fonts-3/font-variant-alternates-07.html", + [ + [ + "/css/css-fonts-3/font-variant-alternates-07-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-alternates-08.html": [ + [ + "/css/css-fonts-3/font-variant-alternates-08.html", + [ + [ + "/css/css-fonts-3/font-variant-alternates-08-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-alternates-09.html": [ + [ + "/css/css-fonts-3/font-variant-alternates-09.html", + [ + [ + "/css/css-fonts-3/font-variant-alternates-09-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-alternates-10.html": [ + [ + "/css/css-fonts-3/font-variant-alternates-10.html", + [ + [ + "/css/css-fonts-3/font-variant-alternates-10-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-alternates-11.html": [ + [ + "/css/css-fonts-3/font-variant-alternates-11.html", + [ + [ + "/css/css-fonts-3/font-variant-alternates-11-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-alternates-12.html": [ + [ + "/css/css-fonts-3/font-variant-alternates-12.html", + [ + [ + "/css/css-fonts-3/font-variant-alternates-12-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-alternates-13.html": [ + [ + "/css/css-fonts-3/font-variant-alternates-13.html", + [ + [ + "/css/css-fonts-3/font-variant-alternates-13-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-alternates-14.html": [ + [ + "/css/css-fonts-3/font-variant-alternates-14.html", + [ + [ + "/css/css-fonts-3/font-variant-alternates-14-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-alternates-15.html": [ + [ + "/css/css-fonts-3/font-variant-alternates-15.html", + [ + [ + "/css/css-fonts-3/font-variant-alternates-15-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-alternates-16.html": [ + [ + "/css/css-fonts-3/font-variant-alternates-16.html", + [ + [ + "/css/css-fonts-3/font-variant-alternates-16-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-alternates-17.html": [ + [ + "/css/css-fonts-3/font-variant-alternates-17.html", + [ + [ + "/css/css-fonts-3/font-variant-alternates-17-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-alternates-18.html": [ + [ + "/css/css-fonts-3/font-variant-alternates-18.html", + [ + [ + "/css/css-fonts-3/font-variant-alternates-18-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-caps-01.html": [ + [ + "/css/css-fonts-3/font-variant-caps-01.html", + [ + [ + "/css/css-fonts-3/font-variant-caps-01-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-caps-02.html": [ + [ + "/css/css-fonts-3/font-variant-caps-02.html", + [ + [ + "/css/css-fonts-3/font-variant-caps-02-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-caps-03.html": [ + [ + "/css/css-fonts-3/font-variant-caps-03.html", + [ + [ + "/css/css-fonts-3/font-variant-caps-03-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-caps-04.html": [ + [ + "/css/css-fonts-3/font-variant-caps-04.html", + [ + [ + "/css/css-fonts-3/font-variant-caps-04-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-caps-05.html": [ + [ + "/css/css-fonts-3/font-variant-caps-05.html", + [ + [ + "/css/css-fonts-3/font-variant-caps-05-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-caps-06.html": [ + [ + "/css/css-fonts-3/font-variant-caps-06.html", + [ + [ + "/css/css-fonts-3/font-variant-caps-06-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-caps-07.html": [ + [ + "/css/css-fonts-3/font-variant-caps-07.html", + [ + [ + "/css/css-fonts-3/font-variant-caps-07-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-fonts-3/font-variant-caps.html": [ [ "/css/css-fonts-3/font-variant-caps.html", @@ -108423,6 +107109,126 @@ {} ] ], + "css/css-fonts-3/font-variant-east-asian-01.html": [ + [ + "/css/css-fonts-3/font-variant-east-asian-01.html", + [ + [ + "/css/css-fonts-3/font-variant-east-asian-01-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-east-asian-02.html": [ + [ + "/css/css-fonts-3/font-variant-east-asian-02.html", + [ + [ + "/css/css-fonts-3/font-variant-east-asian-02-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-east-asian-03.html": [ + [ + "/css/css-fonts-3/font-variant-east-asian-03.html", + [ + [ + "/css/css-fonts-3/font-variant-east-asian-03-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-east-asian-04.html": [ + [ + "/css/css-fonts-3/font-variant-east-asian-04.html", + [ + [ + "/css/css-fonts-3/font-variant-east-asian-04-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-east-asian-05.html": [ + [ + "/css/css-fonts-3/font-variant-east-asian-05.html", + [ + [ + "/css/css-fonts-3/font-variant-east-asian-05-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-east-asian-06.html": [ + [ + "/css/css-fonts-3/font-variant-east-asian-06.html", + [ + [ + "/css/css-fonts-3/font-variant-east-asian-06-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-east-asian-07.html": [ + [ + "/css/css-fonts-3/font-variant-east-asian-07.html", + [ + [ + "/css/css-fonts-3/font-variant-east-asian-07-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-east-asian-08.html": [ + [ + "/css/css-fonts-3/font-variant-east-asian-08.html", + [ + [ + "/css/css-fonts-3/font-variant-east-asian-08-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-east-asian-09.html": [ + [ + "/css/css-fonts-3/font-variant-east-asian-09.html", + [ + [ + "/css/css-fonts-3/font-variant-east-asian-09-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-east-asian-10.html": [ + [ + "/css/css-fonts-3/font-variant-east-asian-10.html", + [ + [ + "/css/css-fonts-3/font-variant-east-asian-10-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-fonts-3/font-variant-east-asian.html": [ [ "/css/css-fonts-3/font-variant-east-asian.html", @@ -108435,6 +107241,138 @@ {} ] ], + "css/css-fonts-3/font-variant-ligatures-01.html": [ + [ + "/css/css-fonts-3/font-variant-ligatures-01.html", + [ + [ + "/css/css-fonts-3/font-variant-ligatures-01-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-ligatures-02.html": [ + [ + "/css/css-fonts-3/font-variant-ligatures-02.html", + [ + [ + "/css/css-fonts-3/font-variant-ligatures-02-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-ligatures-03.html": [ + [ + "/css/css-fonts-3/font-variant-ligatures-03.html", + [ + [ + "/css/css-fonts-3/font-variant-ligatures-03-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-ligatures-04.html": [ + [ + "/css/css-fonts-3/font-variant-ligatures-04.html", + [ + [ + "/css/css-fonts-3/font-variant-ligatures-04-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-ligatures-05.html": [ + [ + "/css/css-fonts-3/font-variant-ligatures-05.html", + [ + [ + "/css/css-fonts-3/font-variant-ligatures-05-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-ligatures-06.html": [ + [ + "/css/css-fonts-3/font-variant-ligatures-06.html", + [ + [ + "/css/css-fonts-3/font-variant-ligatures-06-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-ligatures-07.html": [ + [ + "/css/css-fonts-3/font-variant-ligatures-07.html", + [ + [ + "/css/css-fonts-3/font-variant-ligatures-07-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-ligatures-08.html": [ + [ + "/css/css-fonts-3/font-variant-ligatures-08.html", + [ + [ + "/css/css-fonts-3/font-variant-ligatures-08-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-ligatures-09.html": [ + [ + "/css/css-fonts-3/font-variant-ligatures-09.html", + [ + [ + "/css/css-fonts-3/font-variant-ligatures-09-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-ligatures-10.html": [ + [ + "/css/css-fonts-3/font-variant-ligatures-10.html", + [ + [ + "/css/css-fonts-3/font-variant-ligatures-10-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-ligatures-11.html": [ + [ + "/css/css-fonts-3/font-variant-ligatures-11.html", + [ + [ + "/css/css-fonts-3/font-variant-ligatures-11-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-fonts-3/font-variant-ligatures.html": [ [ "/css/css-fonts-3/font-variant-ligatures.html", @@ -108447,6 +107385,114 @@ {} ] ], + "css/css-fonts-3/font-variant-numeric-01.html": [ + [ + "/css/css-fonts-3/font-variant-numeric-01.html", + [ + [ + "/css/css-fonts-3/font-variant-numeric-01-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-numeric-02.html": [ + [ + "/css/css-fonts-3/font-variant-numeric-02.html", + [ + [ + "/css/css-fonts-3/font-variant-numeric-02-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-numeric-03.html": [ + [ + "/css/css-fonts-3/font-variant-numeric-03.html", + [ + [ + "/css/css-fonts-3/font-variant-numeric-03-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-numeric-04.html": [ + [ + "/css/css-fonts-3/font-variant-numeric-04.html", + [ + [ + "/css/css-fonts-3/font-variant-numeric-04-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-numeric-05.html": [ + [ + "/css/css-fonts-3/font-variant-numeric-05.html", + [ + [ + "/css/css-fonts-3/font-variant-numeric-05-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-numeric-06.html": [ + [ + "/css/css-fonts-3/font-variant-numeric-06.html", + [ + [ + "/css/css-fonts-3/font-variant-numeric-06-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-numeric-07.html": [ + [ + "/css/css-fonts-3/font-variant-numeric-07.html", + [ + [ + "/css/css-fonts-3/font-variant-numeric-07-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-numeric-08.html": [ + [ + "/css/css-fonts-3/font-variant-numeric-08.html", + [ + [ + "/css/css-fonts-3/font-variant-numeric-08-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-numeric-09.html": [ + [ + "/css/css-fonts-3/font-variant-numeric-09.html", + [ + [ + "/css/css-fonts-3/font-variant-numeric-09-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-fonts-3/font-variant-numeric.html": [ [ "/css/css-fonts-3/font-variant-numeric.html", @@ -108459,6 +107505,42 @@ {} ] ], + "css/css-fonts-3/font-variant-position-01.html": [ + [ + "/css/css-fonts-3/font-variant-position-01.html", + [ + [ + "/css/css-fonts-3/font-variant-position-01-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-position-02.html": [ + [ + "/css/css-fonts-3/font-variant-position-02.html", + [ + [ + "/css/css-fonts-3/font-variant-position-02-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-fonts-3/font-variant-position-03.html": [ + [ + "/css/css-fonts-3/font-variant-position-03.html", + [ + [ + "/css/css-fonts-3/font-variant-position-03-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-fonts-3/font-variant-position.html": [ [ "/css/css-fonts-3/font-variant-position.html", @@ -108471,6 +107553,1002 @@ {} ] ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-001.html": [ + [ + "/css/css-grid-1/abspos/orthogonal-positioned-grid-items-001.html", + [ + [ + "/css/css-grid-1/abspos/orthogonal-positioned-grid-items-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-002.html": [ + [ + "/css/css-grid-1/abspos/orthogonal-positioned-grid-items-002.html", + [ + [ + "/css/css-grid-1/abspos/orthogonal-positioned-grid-items-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-003.html": [ + [ + "/css/css-grid-1/abspos/orthogonal-positioned-grid-items-003.html", + [ + [ + "/css/css-grid-1/abspos/orthogonal-positioned-grid-items-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-004.html": [ + [ + "/css/css-grid-1/abspos/orthogonal-positioned-grid-items-004.html", + [ + [ + "/css/css-grid-1/abspos/orthogonal-positioned-grid-items-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-005.html": [ + [ + "/css/css-grid-1/abspos/orthogonal-positioned-grid-items-005.html", + [ + [ + "/css/css-grid-1/abspos/orthogonal-positioned-grid-items-005-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-006.html": [ + [ + "/css/css-grid-1/abspos/orthogonal-positioned-grid-items-006.html", + [ + [ + "/css/css-grid-1/abspos/orthogonal-positioned-grid-items-006-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-007.html": [ + [ + "/css/css-grid-1/abspos/orthogonal-positioned-grid-items-007.html", + [ + [ + "/css/css-grid-1/abspos/orthogonal-positioned-grid-items-007-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-008.html": [ + [ + "/css/css-grid-1/abspos/orthogonal-positioned-grid-items-008.html", + [ + [ + "/css/css-grid-1/abspos/orthogonal-positioned-grid-items-008-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-009.html": [ + [ + "/css/css-grid-1/abspos/orthogonal-positioned-grid-items-009.html", + [ + [ + "/css/css-grid-1/abspos/orthogonal-positioned-grid-items-009-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-010.html": [ + [ + "/css/css-grid-1/abspos/orthogonal-positioned-grid-items-010.html", + [ + [ + "/css/css-grid-1/abspos/orthogonal-positioned-grid-items-009-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-011.html": [ + [ + "/css/css-grid-1/abspos/orthogonal-positioned-grid-items-011.html", + [ + [ + "/css/css-grid-1/abspos/orthogonal-positioned-grid-items-011-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-012.html": [ + [ + "/css/css-grid-1/abspos/orthogonal-positioned-grid-items-012.html", + [ + [ + "/css/css-grid-1/abspos/orthogonal-positioned-grid-items-012-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-013.html": [ + [ + "/css/css-grid-1/abspos/orthogonal-positioned-grid-items-013.html", + [ + [ + "/css/css-grid-1/abspos/orthogonal-positioned-grid-items-013-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-014.html": [ + [ + "/css/css-grid-1/abspos/orthogonal-positioned-grid-items-014.html", + [ + [ + "/css/css-grid-1/abspos/orthogonal-positioned-grid-items-014-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-015.html": [ + [ + "/css/css-grid-1/abspos/orthogonal-positioned-grid-items-015.html", + [ + [ + "/css/css-grid-1/abspos/orthogonal-positioned-grid-items-015-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-016.html": [ + [ + "/css/css-grid-1/abspos/orthogonal-positioned-grid-items-016.html", + [ + [ + "/css/css-grid-1/abspos/orthogonal-positioned-grid-items-016-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-017.html": [ + [ + "/css/css-grid-1/abspos/orthogonal-positioned-grid-items-017.html", + [ + [ + "/css/css-grid-1/abspos/orthogonal-positioned-grid-items-017-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/abspos/positioned-grid-items-001.html": [ + [ + "/css/css-grid-1/abspos/positioned-grid-items-001.html", + [ + [ + "/css/css-grid-1/abspos/positioned-grid-items-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/abspos/positioned-grid-items-002.html": [ + [ + "/css/css-grid-1/abspos/positioned-grid-items-002.html", + [ + [ + "/css/css-grid-1/abspos/positioned-grid-items-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/abspos/positioned-grid-items-003.html": [ + [ + "/css/css-grid-1/abspos/positioned-grid-items-003.html", + [ + [ + "/css/css-grid-1/abspos/positioned-grid-items-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/abspos/positioned-grid-items-004.html": [ + [ + "/css/css-grid-1/abspos/positioned-grid-items-004.html", + [ + [ + "/css/css-grid-1/abspos/positioned-grid-items-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/abspos/positioned-grid-items-005.html": [ + [ + "/css/css-grid-1/abspos/positioned-grid-items-005.html", + [ + [ + "/css/css-grid-1/abspos/positioned-grid-items-005-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/abspos/positioned-grid-items-006.html": [ + [ + "/css/css-grid-1/abspos/positioned-grid-items-006.html", + [ + [ + "/css/css-grid-1/abspos/positioned-grid-items-006-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/abspos/positioned-grid-items-007.html": [ + [ + "/css/css-grid-1/abspos/positioned-grid-items-007.html", + [ + [ + "/css/css-grid-1/abspos/positioned-grid-items-007-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/abspos/positioned-grid-items-008.html": [ + [ + "/css/css-grid-1/abspos/positioned-grid-items-008.html", + [ + [ + "/css/css-grid-1/abspos/positioned-grid-items-008-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/abspos/positioned-grid-items-009.html": [ + [ + "/css/css-grid-1/abspos/positioned-grid-items-009.html", + [ + [ + "/css/css-grid-1/abspos/positioned-grid-items-009-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/abspos/positioned-grid-items-010.html": [ + [ + "/css/css-grid-1/abspos/positioned-grid-items-010.html", + [ + [ + "/css/css-grid-1/abspos/positioned-grid-items-009-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/abspos/positioned-grid-items-011.html": [ + [ + "/css/css-grid-1/abspos/positioned-grid-items-011.html", + [ + [ + "/css/css-grid-1/abspos/positioned-grid-items-011-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/abspos/positioned-grid-items-012.html": [ + [ + "/css/css-grid-1/abspos/positioned-grid-items-012.html", + [ + [ + "/css/css-grid-1/abspos/positioned-grid-items-012-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/abspos/positioned-grid-items-013.html": [ + [ + "/css/css-grid-1/abspos/positioned-grid-items-013.html", + [ + [ + "/css/css-grid-1/abspos/positioned-grid-items-013-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/abspos/positioned-grid-items-014.html": [ + [ + "/css/css-grid-1/abspos/positioned-grid-items-014.html", + [ + [ + "/css/css-grid-1/abspos/positioned-grid-items-014-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/abspos/positioned-grid-items-015.html": [ + [ + "/css/css-grid-1/abspos/positioned-grid-items-015.html", + [ + [ + "/css/css-grid-1/abspos/positioned-grid-items-015-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/abspos/positioned-grid-items-016.html": [ + [ + "/css/css-grid-1/abspos/positioned-grid-items-016.html", + [ + [ + "/css/css-grid-1/abspos/positioned-grid-items-016-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/abspos/positioned-grid-items-017.html": [ + [ + "/css/css-grid-1/abspos/positioned-grid-items-017.html", + [ + [ + "/css/css-grid-1/abspos/positioned-grid-items-017-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-001.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-001.html", + [ + [ + "/css/reference/ref-filled-green-200px-square.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-002.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-002.html", + [ + [ + "/css/reference/ref-filled-green-200px-square.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-003.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-003.html", + [ + [ + "/css/reference/ref-filled-green-200px-square.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-004.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-004.html", + [ + [ + "/css/reference/ref-filled-green-200px-square.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-005.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-005.html", + [ + [ + "/css/reference/ref-filled-green-200px-square.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-006.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-006.html", + [ + [ + "/css/reference/ref-filled-green-200px-square.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-007.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-007.html", + [ + [ + "/css/reference/ref-filled-green-200px-square.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-008.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-008.html", + [ + [ + "/css/reference/ref-filled-green-200px-square.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-009.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-009.html", + [ + [ + "/css/reference/ref-filled-green-200px-square.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-010.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-010.html", + [ + [ + "/css/reference/ref-filled-green-200px-square.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-011.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-011.html", + [ + [ + "/css/reference/ref-filled-green-200px-square.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-012.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-012.html", + [ + [ + "/css/reference/ref-filled-green-200px-square.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-013.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-013.html", + [ + [ + "/css/reference/ref-filled-green-200px-square.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-014.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-014.html", + [ + [ + "/css/reference/ref-filled-green-200px-square.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-015.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-015.html", + [ + [ + "/css/reference/ref-filled-green-200px-square.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-016.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-016.html", + [ + [ + "/css/reference/ref-filled-green-200px-square.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-017.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-017.html", + [ + [ + "/css/reference/ref-filled-green-300px-square.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-018.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-018.html", + [ + [ + "/css/reference/ref-filled-green-200px-square.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-019.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-019.html", + [ + [ + "/css/reference/ref-filled-green-200px-square.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-020.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-020.html", + [ + [ + "/css/reference/ref-filled-green-300px-square.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-021.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-021.html", + [ + [ + "/css/reference/ref-filled-green-200px-square.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-022.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-022.html", + [ + [ + "/css/reference/ref-filled-green-300px-square.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-023.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-023.html", + [ + [ + "/css/reference/ref-filled-green-200px-square.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-024.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-024.html", + [ + [ + "/css/reference/ref-filled-green-200px-square.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-025.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-025.html", + [ + [ + "/css/reference/ref-filled-green-300px-square.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-001.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-001.html", + [ + [ + "/css/reference/ref-filled-green-200px-square.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-002.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-002.html", + [ + [ + "/css/reference/ref-filled-green-200px-square.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-003.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-003.html", + [ + [ + "/css/reference/ref-filled-green-200px-square.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-004.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-004.html", + [ + [ + "/css/reference/ref-filled-green-200px-square.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-005.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-005.html", + [ + [ + "/css/reference/ref-filled-green-200px-square.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-006.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-006.html", + [ + [ + "/css/reference/ref-filled-green-200px-square.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-007.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-007.html", + [ + [ + "/css/reference/ref-filled-green-200px-square.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-008.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-008.html", + [ + [ + "/css/reference/ref-filled-green-200px-square.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-009.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-009.html", + [ + [ + "/css/reference/ref-filled-green-200px-square.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-010.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-010.html", + [ + [ + "/css/reference/ref-filled-green-200px-square.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-011.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-011.html", + [ + [ + "/css/reference/ref-filled-green-200px-square.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-012.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-012.html", + [ + [ + "/css/reference/ref-filled-green-200px-square.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-013.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-013.html", + [ + [ + "/css/reference/ref-filled-green-200px-square.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-014.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-014.html", + [ + [ + "/css/reference/ref-filled-green-200px-square.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-015.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-015.html", + [ + [ + "/css/reference/ref-filled-green-200px-square.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-016.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-016.html", + [ + [ + "/css/reference/ref-filled-green-300px-square.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-017.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-017.html", + [ + [ + "/css/reference/ref-filled-green-200px-square.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-018.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-018.html", + [ + [ + "/css/reference/ref-filled-green-200px-square.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-019.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-019.html", + [ + [ + "/css/reference/ref-filled-green-300px-square.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-020.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-020.html", + [ + [ + "/css/reference/ref-filled-green-200px-square.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-021.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-021.html", + [ + [ + "/css/reference/ref-filled-green-300px-square.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-022.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-022.html", + [ + [ + "/css/reference/ref-filled-green-200px-square.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-023.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-023.html", + [ + [ + "/css/reference/ref-filled-green-200px-square.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-024.html": [ + [ + "/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-024.html", + [ + [ + "/css/reference/ref-filled-green-300px-square.html", + "==" + ] + ], + {} + ] + ], "css/css-grid-1/grid-definition/fr-unit-with-percentage.html": [ [ "/css/css-grid-1/grid-definition/fr-unit-with-percentage.html", @@ -108531,9 +108609,9 @@ {} ] ], - "css/css-grid-1/grid-items/grid-inline-items-001.xht": [ + "css/css-grid-1/grid-items/grid-inline-items-001.html": [ [ - "/css/css-grid-1/grid-items/grid-inline-items-001.xht", + "/css/css-grid-1/grid-items/grid-inline-items-001.html", [ [ "/css/reference/ref-filled-green-100px-square.xht", @@ -108543,9 +108621,9 @@ {} ] ], - "css/css-grid-1/grid-items/grid-inline-items-002.xht": [ + "css/css-grid-1/grid-items/grid-inline-items-002.html": [ [ - "/css/css-grid-1/grid-items/grid-inline-items-002.xht", + "/css/css-grid-1/grid-items/grid-inline-items-002.html", [ [ "/css/reference/ref-filled-green-100px-square.xht", @@ -108555,9 +108633,9 @@ {} ] ], - "css/css-grid-1/grid-items/grid-inline-items-003.xht": [ + "css/css-grid-1/grid-items/grid-inline-items-003.html": [ [ - "/css/css-grid-1/grid-items/grid-inline-items-003.xht", + "/css/css-grid-1/grid-items/grid-inline-items-003.html", [ [ "/css/reference/ref-filled-green-100px-square.xht", @@ -108567,9 +108645,9 @@ {} ] ], - "css/css-grid-1/grid-items/grid-inline-items-inline-blocks-001.xht": [ + "css/css-grid-1/grid-items/grid-inline-items-inline-blocks-001.html": [ [ - "/css/css-grid-1/grid-items/grid-inline-items-inline-blocks-001.xht", + "/css/css-grid-1/grid-items/grid-inline-items-inline-blocks-001.html", [ [ "/css/reference/ref-filled-green-100px-square.xht", @@ -108579,69 +108657,69 @@ {} ] ], - "css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-001.xht": [ + "css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-001.html": [ [ - "/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-001.xht", + "/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-001.html", [ [ - "/css/css-grid-1/reference/grid-2x2-blue-yellow-lime-magenta.xht", + "/css/css-grid-1/reference/grid-2x2-blue-yellow-lime-magenta.html", "==" ] ], {} ] ], - "css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-002.xht": [ + "css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-002.html": [ [ - "/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-002.xht", + "/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-002.html", [ [ - "/css/css-grid-1/reference/grid-2x2-blue-yellow-lime-magenta.xht", + "/css/css-grid-1/reference/grid-2x2-blue-yellow-lime-magenta.html", "==" ] ], {} ] ], - "css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-003.xht": [ + "css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-003.html": [ [ - "/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-003.xht", + "/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-003.html", [ [ - "/css/css-grid-1/reference/grid-2x2-blue-yellow-lime-magenta.xht", + "/css/css-grid-1/reference/grid-2x2-blue-yellow-lime-magenta.html", "==" ] ], {} ] ], - "css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-004.xht": [ + "css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-004.html": [ [ - "/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-004.xht", + "/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-004.html", [ [ - "/css/css-grid-1/reference/grid-2x2-blue-yellow-lime-magenta.xht", + "/css/css-grid-1/reference/grid-2x2-blue-yellow-lime-magenta.html", "==" ] ], {} ] ], - "css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-005.xht": [ + "css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-005.html": [ [ - "/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-005.xht", + "/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-005.html", [ [ - "/css/css-grid-1/reference/grid-2x2-blue-yellow-lime-magenta.xht", + "/css/css-grid-1/reference/grid-2x2-blue-yellow-lime-magenta.html", "==" ] ], {} ] ], - "css/css-grid-1/grid-items/grid-inline-order-property-painting-001.xht": [ + "css/css-grid-1/grid-items/grid-inline-order-property-painting-001.html": [ [ - "/css/css-grid-1/grid-items/grid-inline-order-property-painting-001.xht", + "/css/css-grid-1/grid-items/grid-inline-order-property-painting-001.html", [ [ "/css/reference/ref-filled-green-100px-square.xht", @@ -108651,9 +108729,9 @@ {} ] ], - "css/css-grid-1/grid-items/grid-inline-order-property-painting-002.xht": [ + "css/css-grid-1/grid-items/grid-inline-order-property-painting-002.html": [ [ - "/css/css-grid-1/grid-items/grid-inline-order-property-painting-002.xht", + "/css/css-grid-1/grid-items/grid-inline-order-property-painting-002.html", [ [ "/css/reference/ref-filled-green-100px-square.xht", @@ -108663,9 +108741,9 @@ {} ] ], - "css/css-grid-1/grid-items/grid-inline-order-property-painting-003.xht": [ + "css/css-grid-1/grid-items/grid-inline-order-property-painting-003.html": [ [ - "/css/css-grid-1/grid-items/grid-inline-order-property-painting-003.xht", + "/css/css-grid-1/grid-items/grid-inline-order-property-painting-003.html", [ [ "/css/reference/ref-filled-green-100px-square.xht", @@ -108675,9 +108753,9 @@ {} ] ], - "css/css-grid-1/grid-items/grid-inline-order-property-painting-004.xht": [ + "css/css-grid-1/grid-items/grid-inline-order-property-painting-004.html": [ [ - "/css/css-grid-1/grid-items/grid-inline-order-property-painting-004.xht", + "/css/css-grid-1/grid-items/grid-inline-order-property-painting-004.html", [ [ "/css/reference/ref-filled-green-100px-square.xht", @@ -108687,9 +108765,9 @@ {} ] ], - "css/css-grid-1/grid-items/grid-inline-order-property-painting-005.xht": [ + "css/css-grid-1/grid-items/grid-inline-order-property-painting-005.html": [ [ - "/css/css-grid-1/grid-items/grid-inline-order-property-painting-005.xht", + "/css/css-grid-1/grid-items/grid-inline-order-property-painting-005.html", [ [ "/css/reference/ref-filled-green-100px-square.xht", @@ -108699,9 +108777,9 @@ {} ] ], - "css/css-grid-1/grid-items/grid-inline-z-axis-ordering-001.xht": [ + "css/css-grid-1/grid-items/grid-inline-z-axis-ordering-001.html": [ [ - "/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-001.xht", + "/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-001.html", [ [ "/css/reference/ref-filled-green-100px-square.xht", @@ -108711,9 +108789,9 @@ {} ] ], - "css/css-grid-1/grid-items/grid-inline-z-axis-ordering-002.xht": [ + "css/css-grid-1/grid-items/grid-inline-z-axis-ordering-002.html": [ [ - "/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-002.xht", + "/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-002.html", [ [ "/css/reference/ref-filled-green-100px-square.xht", @@ -108723,9 +108801,9 @@ {} ] ], - "css/css-grid-1/grid-items/grid-inline-z-axis-ordering-003.xht": [ + "css/css-grid-1/grid-items/grid-inline-z-axis-ordering-003.html": [ [ - "/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-003.xht", + "/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-003.html", [ [ "/css/reference/ref-filled-green-100px-square.xht", @@ -108735,9 +108813,9 @@ {} ] ], - "css/css-grid-1/grid-items/grid-inline-z-axis-ordering-004.xht": [ + "css/css-grid-1/grid-items/grid-inline-z-axis-ordering-004.html": [ [ - "/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-004.xht", + "/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-004.html", [ [ "/css/reference/ref-filled-green-100px-square.xht", @@ -108747,9 +108825,9 @@ {} ] ], - "css/css-grid-1/grid-items/grid-inline-z-axis-ordering-005.xht": [ + "css/css-grid-1/grid-items/grid-inline-z-axis-ordering-005.html": [ [ - "/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-005.xht", + "/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-005.html", [ [ "/css/reference/ref-filled-green-100px-square.xht", @@ -108759,72 +108837,72 @@ {} ] ], - "css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-001.xht": [ + "css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-001.html": [ [ - "/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-001.xht", + "/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-001.html", [ [ - "/css/css-grid-1/reference/grid-filled-blue-yellow-green-overlapped-100px-squares.xht", + "/css/css-grid-1/reference/grid-filled-blue-yellow-green-overlapped-100px-squares.html", "==" ] ], {} ] ], - "css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-002.xht": [ + "css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-002.html": [ [ - "/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-002.xht", + "/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-002.html", [ [ - "/css/css-grid-1/reference/grid-filled-blue-yellow-green-overlapped-100px-squares.xht", + "/css/css-grid-1/reference/grid-filled-blue-yellow-green-overlapped-100px-squares.html", "==" ] ], {} ] ], - "css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-003.xht": [ + "css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-003.html": [ [ - "/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-003.xht", + "/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-003.html", [ [ - "/css/css-grid-1/reference/grid-filled-blue-yellow-green-overlapped-100px-squares.xht", + "/css/css-grid-1/reference/grid-filled-blue-yellow-green-overlapped-100px-squares.html", "==" ] ], {} ] ], - "css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-004.xht": [ + "css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-004.html": [ [ - "/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-004.xht", + "/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-004.html", [ [ - "/css/css-grid-1/reference/grid-filled-blue-yellow-green-overlapped-100px-squares.xht", + "/css/css-grid-1/reference/grid-filled-blue-yellow-green-overlapped-100px-squares.html", "==" ] ], {} ] ], - "css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-005.xht": [ + "css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-005.html": [ [ - "/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-005.xht", + "/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-005.html", [ [ - "/css/css-grid-1/reference/grid-filled-blue-yellow-green-overlapped-100px-squares.xht", + "/css/css-grid-1/reference/grid-filled-blue-yellow-green-overlapped-100px-squares.html", "==" ] ], {} ] ], - "css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-006.xht": [ + "css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-006.html": [ [ - "/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-006.xht", + "/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-006.html", [ [ - "/css/css-grid-1/reference/grid-filled-blue-yellow-green-overlapped-100px-squares.xht", + "/css/css-grid-1/reference/grid-filled-blue-yellow-green-overlapped-100px-squares.html", "==" ] ], @@ -108879,9 +108957,9 @@ {} ] ], - "css/css-grid-1/grid-items/grid-items-001.xht": [ + "css/css-grid-1/grid-items/grid-items-001.html": [ [ - "/css/css-grid-1/grid-items/grid-items-001.xht", + "/css/css-grid-1/grid-items/grid-items-001.html", [ [ "/css/reference/ref-filled-green-100px-square.xht", @@ -108891,9 +108969,9 @@ {} ] ], - "css/css-grid-1/grid-items/grid-items-002.xht": [ + "css/css-grid-1/grid-items/grid-items-002.html": [ [ - "/css/css-grid-1/grid-items/grid-items-002.xht", + "/css/css-grid-1/grid-items/grid-items-002.html", [ [ "/css/reference/ref-filled-green-100px-square.xht", @@ -108903,9 +108981,9 @@ {} ] ], - "css/css-grid-1/grid-items/grid-items-003.xht": [ + "css/css-grid-1/grid-items/grid-items-003.html": [ [ - "/css/css-grid-1/grid-items/grid-items-003.xht", + "/css/css-grid-1/grid-items/grid-items-003.html", [ [ "/css/reference/ref-filled-green-100px-square.xht", @@ -108915,9 +108993,9 @@ {} ] ], - "css/css-grid-1/grid-items/grid-items-inline-blocks-001.xht": [ + "css/css-grid-1/grid-items/grid-items-inline-blocks-001.html": [ [ - "/css/css-grid-1/grid-items/grid-items-inline-blocks-001.xht", + "/css/css-grid-1/grid-items/grid-items-inline-blocks-001.html", [ [ "/css/reference/ref-filled-green-100px-square.xht", @@ -108975,9 +109053,9 @@ {} ] ], - "css/css-grid-1/grid-items/grid-minimum-size-grid-items-001.xht": [ + "css/css-grid-1/grid-items/grid-minimum-size-grid-items-001.html": [ [ - "/css/css-grid-1/grid-items/grid-minimum-size-grid-items-001.xht", + "/css/css-grid-1/grid-items/grid-minimum-size-grid-items-001.html", [ [ "/css/reference/ref-filled-green-100px-square.xht", @@ -108987,9 +109065,9 @@ {} ] ], - "css/css-grid-1/grid-items/grid-minimum-size-grid-items-002.xht": [ + "css/css-grid-1/grid-items/grid-minimum-size-grid-items-002.html": [ [ - "/css/css-grid-1/grid-items/grid-minimum-size-grid-items-002.xht", + "/css/css-grid-1/grid-items/grid-minimum-size-grid-items-002.html", [ [ "/css/reference/ref-filled-green-100px-square.xht", @@ -108999,9 +109077,9 @@ {} ] ], - "css/css-grid-1/grid-items/grid-minimum-size-grid-items-003.xht": [ + "css/css-grid-1/grid-items/grid-minimum-size-grid-items-003.html": [ [ - "/css/css-grid-1/grid-items/grid-minimum-size-grid-items-003.xht", + "/css/css-grid-1/grid-items/grid-minimum-size-grid-items-003.html", [ [ "/css/reference/ref-filled-green-100px-square.xht", @@ -109011,9 +109089,9 @@ {} ] ], - "css/css-grid-1/grid-items/grid-minimum-size-grid-items-004.xht": [ + "css/css-grid-1/grid-items/grid-minimum-size-grid-items-004.html": [ [ - "/css/css-grid-1/grid-items/grid-minimum-size-grid-items-004.xht", + "/css/css-grid-1/grid-items/grid-minimum-size-grid-items-004.html", [ [ "/css/reference/ref-filled-green-100px-square.xht", @@ -109023,9 +109101,9 @@ {} ] ], - "css/css-grid-1/grid-items/grid-minimum-size-grid-items-005.xht": [ + "css/css-grid-1/grid-items/grid-minimum-size-grid-items-005.html": [ [ - "/css/css-grid-1/grid-items/grid-minimum-size-grid-items-005.xht", + "/css/css-grid-1/grid-items/grid-minimum-size-grid-items-005.html", [ [ "/css/css-grid-1/grid-items/ref-filled-green-100px-square-image.html", @@ -109035,9 +109113,9 @@ {} ] ], - "css/css-grid-1/grid-items/grid-minimum-size-grid-items-006.xht": [ + "css/css-grid-1/grid-items/grid-minimum-size-grid-items-006.html": [ [ - "/css/css-grid-1/grid-items/grid-minimum-size-grid-items-006.xht", + "/css/css-grid-1/grid-items/grid-minimum-size-grid-items-006.html", [ [ "/css/css-grid-1/grid-items/ref-filled-green-100px-square-image.html", @@ -109047,9 +109125,9 @@ {} ] ], - "css/css-grid-1/grid-items/grid-minimum-size-grid-items-007.xht": [ + "css/css-grid-1/grid-items/grid-minimum-size-grid-items-007.html": [ [ - "/css/css-grid-1/grid-items/grid-minimum-size-grid-items-007.xht", + "/css/css-grid-1/grid-items/grid-minimum-size-grid-items-007.html", [ [ "/css/css-grid-1/grid-items/ref-filled-green-100px-square-image.html", @@ -109059,9 +109137,9 @@ {} ] ], - "css/css-grid-1/grid-items/grid-minimum-size-grid-items-008.xht": [ + "css/css-grid-1/grid-items/grid-minimum-size-grid-items-008.html": [ [ - "/css/css-grid-1/grid-items/grid-minimum-size-grid-items-008.xht", + "/css/css-grid-1/grid-items/grid-minimum-size-grid-items-008.html", [ [ "/css/css-grid-1/grid-items/ref-filled-green-100px-square-image.html", @@ -109071,9 +109149,9 @@ {} ] ], - "css/css-grid-1/grid-items/grid-minimum-size-grid-items-009.xht": [ + "css/css-grid-1/grid-items/grid-minimum-size-grid-items-009.html": [ [ - "/css/css-grid-1/grid-items/grid-minimum-size-grid-items-009.xht", + "/css/css-grid-1/grid-items/grid-minimum-size-grid-items-009.html", [ [ "/css/css-grid-1/grid-items/ref-filled-green-100px-square-image.html", @@ -109215,69 +109293,69 @@ {} ] ], - "css/css-grid-1/grid-items/grid-order-property-auto-placement-001.xht": [ + "css/css-grid-1/grid-items/grid-order-property-auto-placement-001.html": [ [ - "/css/css-grid-1/grid-items/grid-order-property-auto-placement-001.xht", + "/css/css-grid-1/grid-items/grid-order-property-auto-placement-001.html", [ [ - "/css/css-grid-1/reference/grid-2x2-blue-yellow-lime-magenta.xht", + "/css/css-grid-1/reference/grid-2x2-blue-yellow-lime-magenta.html", "==" ] ], {} ] ], - "css/css-grid-1/grid-items/grid-order-property-auto-placement-002.xht": [ + "css/css-grid-1/grid-items/grid-order-property-auto-placement-002.html": [ [ - "/css/css-grid-1/grid-items/grid-order-property-auto-placement-002.xht", + "/css/css-grid-1/grid-items/grid-order-property-auto-placement-002.html", [ [ - "/css/css-grid-1/reference/grid-2x2-blue-yellow-lime-magenta.xht", + "/css/css-grid-1/reference/grid-2x2-blue-yellow-lime-magenta.html", "==" ] ], {} ] ], - "css/css-grid-1/grid-items/grid-order-property-auto-placement-003.xht": [ + "css/css-grid-1/grid-items/grid-order-property-auto-placement-003.html": [ [ - "/css/css-grid-1/grid-items/grid-order-property-auto-placement-003.xht", + "/css/css-grid-1/grid-items/grid-order-property-auto-placement-003.html", [ [ - "/css/css-grid-1/reference/grid-2x2-blue-yellow-lime-magenta.xht", + "/css/css-grid-1/reference/grid-2x2-blue-yellow-lime-magenta.html", "==" ] ], {} ] ], - "css/css-grid-1/grid-items/grid-order-property-auto-placement-004.xht": [ + "css/css-grid-1/grid-items/grid-order-property-auto-placement-004.html": [ [ - "/css/css-grid-1/grid-items/grid-order-property-auto-placement-004.xht", + "/css/css-grid-1/grid-items/grid-order-property-auto-placement-004.html", [ [ - "/css/css-grid-1/reference/grid-2x2-blue-yellow-lime-magenta.xht", + "/css/css-grid-1/reference/grid-2x2-blue-yellow-lime-magenta.html", "==" ] ], {} ] ], - "css/css-grid-1/grid-items/grid-order-property-auto-placement-005.xht": [ + "css/css-grid-1/grid-items/grid-order-property-auto-placement-005.html": [ [ - "/css/css-grid-1/grid-items/grid-order-property-auto-placement-005.xht", + "/css/css-grid-1/grid-items/grid-order-property-auto-placement-005.html", [ [ - "/css/css-grid-1/reference/grid-2x2-blue-yellow-lime-magenta.xht", + "/css/css-grid-1/reference/grid-2x2-blue-yellow-lime-magenta.html", "==" ] ], {} ] ], - "css/css-grid-1/grid-items/grid-order-property-painting-001.xht": [ + "css/css-grid-1/grid-items/grid-order-property-painting-001.html": [ [ - "/css/css-grid-1/grid-items/grid-order-property-painting-001.xht", + "/css/css-grid-1/grid-items/grid-order-property-painting-001.html", [ [ "/css/reference/ref-filled-green-100px-square.xht", @@ -109287,9 +109365,9 @@ {} ] ], - "css/css-grid-1/grid-items/grid-order-property-painting-002.xht": [ + "css/css-grid-1/grid-items/grid-order-property-painting-002.html": [ [ - "/css/css-grid-1/grid-items/grid-order-property-painting-002.xht", + "/css/css-grid-1/grid-items/grid-order-property-painting-002.html", [ [ "/css/reference/ref-filled-green-100px-square.xht", @@ -109299,9 +109377,9 @@ {} ] ], - "css/css-grid-1/grid-items/grid-order-property-painting-003.xht": [ + "css/css-grid-1/grid-items/grid-order-property-painting-003.html": [ [ - "/css/css-grid-1/grid-items/grid-order-property-painting-003.xht", + "/css/css-grid-1/grid-items/grid-order-property-painting-003.html", [ [ "/css/reference/ref-filled-green-100px-square.xht", @@ -109311,9 +109389,9 @@ {} ] ], - "css/css-grid-1/grid-items/grid-order-property-painting-004.xht": [ + "css/css-grid-1/grid-items/grid-order-property-painting-004.html": [ [ - "/css/css-grid-1/grid-items/grid-order-property-painting-004.xht", + "/css/css-grid-1/grid-items/grid-order-property-painting-004.html", [ [ "/css/reference/ref-filled-green-100px-square.xht", @@ -109323,9 +109401,9 @@ {} ] ], - "css/css-grid-1/grid-items/grid-order-property-painting-005.xht": [ + "css/css-grid-1/grid-items/grid-order-property-painting-005.html": [ [ - "/css/css-grid-1/grid-items/grid-order-property-painting-005.xht", + "/css/css-grid-1/grid-items/grid-order-property-painting-005.html", [ [ "/css/reference/ref-filled-green-100px-square.xht", @@ -109335,9 +109413,9 @@ {} ] ], - "css/css-grid-1/grid-items/grid-z-axis-ordering-001.xht": [ + "css/css-grid-1/grid-items/grid-z-axis-ordering-001.html": [ [ - "/css/css-grid-1/grid-items/grid-z-axis-ordering-001.xht", + "/css/css-grid-1/grid-items/grid-z-axis-ordering-001.html", [ [ "/css/reference/ref-filled-green-100px-square.xht", @@ -109347,9 +109425,9 @@ {} ] ], - "css/css-grid-1/grid-items/grid-z-axis-ordering-002.xht": [ + "css/css-grid-1/grid-items/grid-z-axis-ordering-002.html": [ [ - "/css/css-grid-1/grid-items/grid-z-axis-ordering-002.xht", + "/css/css-grid-1/grid-items/grid-z-axis-ordering-002.html", [ [ "/css/reference/ref-filled-green-100px-square.xht", @@ -109359,9 +109437,9 @@ {} ] ], - "css/css-grid-1/grid-items/grid-z-axis-ordering-003.xht": [ + "css/css-grid-1/grid-items/grid-z-axis-ordering-003.html": [ [ - "/css/css-grid-1/grid-items/grid-z-axis-ordering-003.xht", + "/css/css-grid-1/grid-items/grid-z-axis-ordering-003.html", [ [ "/css/reference/ref-filled-green-100px-square.xht", @@ -109371,9 +109449,9 @@ {} ] ], - "css/css-grid-1/grid-items/grid-z-axis-ordering-004.xht": [ + "css/css-grid-1/grid-items/grid-z-axis-ordering-004.html": [ [ - "/css/css-grid-1/grid-items/grid-z-axis-ordering-004.xht", + "/css/css-grid-1/grid-items/grid-z-axis-ordering-004.html", [ [ "/css/reference/ref-filled-green-100px-square.xht", @@ -109383,9 +109461,9 @@ {} ] ], - "css/css-grid-1/grid-items/grid-z-axis-ordering-005.xht": [ + "css/css-grid-1/grid-items/grid-z-axis-ordering-005.html": [ [ - "/css/css-grid-1/grid-items/grid-z-axis-ordering-005.xht", + "/css/css-grid-1/grid-items/grid-z-axis-ordering-005.html", [ [ "/css/reference/ref-filled-green-100px-square.xht", @@ -109395,72 +109473,72 @@ {} ] ], - "css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-001.xht": [ + "css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-001.html": [ [ - "/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-001.xht", + "/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-001.html", [ [ - "/css/css-grid-1/reference/grid-filled-blue-yellow-green-overlapped-100px-squares.xht", + "/css/css-grid-1/reference/grid-filled-blue-yellow-green-overlapped-100px-squares.html", "==" ] ], {} ] ], - "css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-002.xht": [ + "css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-002.html": [ [ - "/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-002.xht", + "/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-002.html", [ [ - "/css/css-grid-1/reference/grid-filled-blue-yellow-green-overlapped-100px-squares.xht", + "/css/css-grid-1/reference/grid-filled-blue-yellow-green-overlapped-100px-squares.html", "==" ] ], {} ] ], - "css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-003.xht": [ + "css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-003.html": [ [ - "/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-003.xht", + "/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-003.html", [ [ - "/css/css-grid-1/reference/grid-filled-blue-yellow-green-overlapped-100px-squares.xht", + "/css/css-grid-1/reference/grid-filled-blue-yellow-green-overlapped-100px-squares.html", "==" ] ], {} ] ], - "css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-004.xht": [ + "css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-004.html": [ [ - "/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-004.xht", + "/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-004.html", [ [ - "/css/css-grid-1/reference/grid-filled-blue-yellow-green-overlapped-100px-squares.xht", + "/css/css-grid-1/reference/grid-filled-blue-yellow-green-overlapped-100px-squares.html", "==" ] ], {} ] ], - "css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-005.xht": [ + "css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-005.html": [ [ - "/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-005.xht", + "/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-005.html", [ [ - "/css/css-grid-1/reference/grid-filled-blue-yellow-green-overlapped-100px-squares.xht", + "/css/css-grid-1/reference/grid-filled-blue-yellow-green-overlapped-100px-squares.html", "==" ] ], {} ] ], - "css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-006.xht": [ + "css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-006.html": [ [ - "/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-006.xht", + "/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-006.html", [ [ - "/css/css-grid-1/reference/grid-filled-blue-yellow-green-overlapped-100px-squares.xht", + "/css/css-grid-1/reference/grid-filled-blue-yellow-green-overlapped-100px-squares.html", "==" ] ], @@ -109491,9 +109569,9 @@ {} ] ], - "css/css-grid-1/grid-model/grid-display-grid-001.xht": [ + "css/css-grid-1/grid-model/grid-display-grid-001.html": [ [ - "/css/css-grid-1/grid-model/grid-display-grid-001.xht", + "/css/css-grid-1/grid-model/grid-display-grid-001.html", [ [ "/css/reference/ref-filled-green-100px-square.xht", @@ -109503,9 +109581,9 @@ {} ] ], - "css/css-grid-1/grid-model/grid-display-inline-grid-001.xht": [ + "css/css-grid-1/grid-model/grid-display-inline-grid-001.html": [ [ - "/css/css-grid-1/grid-model/grid-display-inline-grid-001.xht", + "/css/css-grid-1/grid-model/grid-display-inline-grid-001.html", [ [ "/css/reference/ref-filled-green-100px-square.xht", @@ -109515,81 +109593,81 @@ {} ] ], - "css/css-grid-1/grid-model/grid-first-letter-001.xht": [ + "css/css-grid-1/grid-model/grid-first-letter-001.html": [ [ - "/css/css-grid-1/grid-model/grid-first-letter-001.xht", + "/css/css-grid-1/grid-model/grid-first-letter-001.html", [ [ - "/css/css-grid-1/reference/grid-text-green-margin-no-collapse-ref.xht", + "/css/css-grid-1/reference/grid-text-green-margin-no-collapse-ref.html", "==" ] ], {} ] ], - "css/css-grid-1/grid-model/grid-first-letter-002.xht": [ + "css/css-grid-1/grid-model/grid-first-letter-002.html": [ [ - "/css/css-grid-1/grid-model/grid-first-letter-002.xht", + "/css/css-grid-1/grid-model/grid-first-letter-002.html", [ [ - "/css/css-grid-1/reference/grid-text-green-margin-no-collapse-ref.xht", + "/css/css-grid-1/reference/grid-text-green-margin-no-collapse-ref.html", "==" ] ], {} ] ], - "css/css-grid-1/grid-model/grid-first-letter-003.xht": [ + "css/css-grid-1/grid-model/grid-first-letter-003.html": [ [ - "/css/css-grid-1/grid-model/grid-first-letter-003.xht", + "/css/css-grid-1/grid-model/grid-first-letter-003.html", [ [ - "/css/css-grid-1/reference/grid-first-letter-green-margin-no-collapse-ref.xht", + "/css/css-grid-1/reference/grid-first-letter-green-margin-no-collapse-ref.html", "==" ] ], {} ] ], - "css/css-grid-1/grid-model/grid-first-line-001.xht": [ + "css/css-grid-1/grid-model/grid-first-line-001.html": [ [ - "/css/css-grid-1/grid-model/grid-first-line-001.xht", + "/css/css-grid-1/grid-model/grid-first-line-001.html", [ [ - "/css/css-grid-1/reference/grid-text-green-margin-no-collapse-ref.xht", + "/css/css-grid-1/reference/grid-text-green-margin-no-collapse-ref.html", "==" ] ], {} ] ], - "css/css-grid-1/grid-model/grid-first-line-002.xht": [ + "css/css-grid-1/grid-model/grid-first-line-002.html": [ [ - "/css/css-grid-1/grid-model/grid-first-line-002.xht", + "/css/css-grid-1/grid-model/grid-first-line-002.html", [ [ - "/css/css-grid-1/reference/grid-text-green-margin-no-collapse-ref.xht", + "/css/css-grid-1/reference/grid-text-green-margin-no-collapse-ref.html", "==" ] ], {} ] ], - "css/css-grid-1/grid-model/grid-first-line-003.xht": [ + "css/css-grid-1/grid-model/grid-first-line-003.html": [ [ - "/css/css-grid-1/grid-model/grid-first-line-003.xht", + "/css/css-grid-1/grid-model/grid-first-line-003.html", [ [ - "/css/css-grid-1/reference/grid-text-green-margin-no-collapse-ref.xht", + "/css/css-grid-1/reference/grid-text-green-margin-no-collapse-ref.html", "==" ] ], {} ] ], - "css/css-grid-1/grid-model/grid-float-001.xht": [ + "css/css-grid-1/grid-model/grid-float-001.html": [ [ - "/css/css-grid-1/grid-model/grid-float-001.xht", + "/css/css-grid-1/grid-model/grid-float-001.html", [ [ "/css/reference/ref-filled-green-100px-square.xht", @@ -109599,9 +109677,9 @@ {} ] ], - "css/css-grid-1/grid-model/grid-floats-no-intrude-001.xht": [ + "css/css-grid-1/grid-model/grid-floats-no-intrude-001.html": [ [ - "/css/css-grid-1/grid-model/grid-floats-no-intrude-001.xht", + "/css/css-grid-1/grid-model/grid-floats-no-intrude-001.html", [ [ "/css/reference/ref-filled-green-100px-square.xht", @@ -109611,81 +109689,81 @@ {} ] ], - "css/css-grid-1/grid-model/grid-inline-first-letter-001.xht": [ + "css/css-grid-1/grid-model/grid-inline-first-letter-001.html": [ [ - "/css/css-grid-1/grid-model/grid-inline-first-letter-001.xht", + "/css/css-grid-1/grid-model/grid-inline-first-letter-001.html", [ [ - "/css/css-grid-1/reference/grid-text-green-margin-no-collapse-ref.xht", + "/css/css-grid-1/reference/grid-text-green-margin-no-collapse-ref.html", "==" ] ], {} ] ], - "css/css-grid-1/grid-model/grid-inline-first-letter-002.xht": [ + "css/css-grid-1/grid-model/grid-inline-first-letter-002.html": [ [ - "/css/css-grid-1/grid-model/grid-inline-first-letter-002.xht", + "/css/css-grid-1/grid-model/grid-inline-first-letter-002.html", [ [ - "/css/css-grid-1/reference/grid-text-green-margin-no-collapse-ref.xht", + "/css/css-grid-1/reference/grid-text-green-margin-no-collapse-ref.html", "==" ] ], {} ] ], - "css/css-grid-1/grid-model/grid-inline-first-letter-003.xht": [ + "css/css-grid-1/grid-model/grid-inline-first-letter-003.html": [ [ - "/css/css-grid-1/grid-model/grid-inline-first-letter-003.xht", + "/css/css-grid-1/grid-model/grid-inline-first-letter-003.html", [ [ - "/css/css-grid-1/reference/grid-first-letter-green-margin-no-collapse-ref.xht", + "/css/css-grid-1/reference/grid-first-letter-green-margin-no-collapse-ref.html", "==" ] ], {} ] ], - "css/css-grid-1/grid-model/grid-inline-first-line-001.xht": [ + "css/css-grid-1/grid-model/grid-inline-first-line-001.html": [ [ - "/css/css-grid-1/grid-model/grid-inline-first-line-001.xht", + "/css/css-grid-1/grid-model/grid-inline-first-line-001.html", [ [ - "/css/css-grid-1/reference/grid-text-green-margin-no-collapse-ref.xht", + "/css/css-grid-1/reference/grid-text-green-margin-no-collapse-ref.html", "==" ] ], {} ] ], - "css/css-grid-1/grid-model/grid-inline-first-line-002.xht": [ + "css/css-grid-1/grid-model/grid-inline-first-line-002.html": [ [ - "/css/css-grid-1/grid-model/grid-inline-first-line-002.xht", + "/css/css-grid-1/grid-model/grid-inline-first-line-002.html", [ [ - "/css/css-grid-1/reference/grid-text-green-margin-no-collapse-ref.xht", + "/css/css-grid-1/reference/grid-text-green-margin-no-collapse-ref.html", "==" ] ], {} ] ], - "css/css-grid-1/grid-model/grid-inline-first-line-003.xht": [ + "css/css-grid-1/grid-model/grid-inline-first-line-003.html": [ [ - "/css/css-grid-1/grid-model/grid-inline-first-line-003.xht", + "/css/css-grid-1/grid-model/grid-inline-first-line-003.html", [ [ - "/css/css-grid-1/reference/grid-text-green-margin-no-collapse-ref.xht", + "/css/css-grid-1/reference/grid-text-green-margin-no-collapse-ref.html", "==" ] ], {} ] ], - "css/css-grid-1/grid-model/grid-inline-float-001.xht": [ + "css/css-grid-1/grid-model/grid-inline-float-001.html": [ [ - "/css/css-grid-1/grid-model/grid-inline-float-001.xht", + "/css/css-grid-1/grid-model/grid-inline-float-001.html", [ [ "/css/reference/ref-filled-green-100px-square.xht", @@ -109695,9 +109773,9 @@ {} ] ], - "css/css-grid-1/grid-model/grid-inline-floats-no-intrude-001.xht": [ + "css/css-grid-1/grid-model/grid-inline-floats-no-intrude-001.html": [ [ - "/css/css-grid-1/grid-model/grid-inline-floats-no-intrude-001.xht", + "/css/css-grid-1/grid-model/grid-inline-floats-no-intrude-001.html", [ [ "/css/reference/ref-filled-green-100px-square.xht", @@ -109707,21 +109785,21 @@ {} ] ], - "css/css-grid-1/grid-model/grid-inline-margins-no-collapse-001.xht": [ + "css/css-grid-1/grid-model/grid-inline-margins-no-collapse-001.html": [ [ - "/css/css-grid-1/grid-model/grid-inline-margins-no-collapse-001.xht", + "/css/css-grid-1/grid-model/grid-inline-margins-no-collapse-001.html", [ [ - "/css/css-grid-1/reference/grid-text-green-margin-no-collapse-ref.xht", + "/css/css-grid-1/reference/grid-text-green-margin-no-collapse-ref.html", "==" ] ], {} ] ], - "css/css-grid-1/grid-model/grid-inline-multicol-001.xht": [ + "css/css-grid-1/grid-model/grid-inline-multicol-001.html": [ [ - "/css/css-grid-1/grid-model/grid-inline-multicol-001.xht", + "/css/css-grid-1/grid-model/grid-inline-multicol-001.html", [ [ "/css/reference/ref-filled-green-100px-square.xht", @@ -109731,9 +109809,9 @@ {} ] ], - "css/css-grid-1/grid-model/grid-inline-vertical-align-001.xht": [ + "css/css-grid-1/grid-model/grid-inline-vertical-align-001.html": [ [ - "/css/css-grid-1/grid-model/grid-inline-vertical-align-001.xht", + "/css/css-grid-1/grid-model/grid-inline-vertical-align-001.html", [ [ "/css/reference/ref-filled-green-100px-square.xht", @@ -109743,21 +109821,21 @@ {} ] ], - "css/css-grid-1/grid-model/grid-margins-no-collapse-001.xht": [ + "css/css-grid-1/grid-model/grid-margins-no-collapse-001.html": [ [ - "/css/css-grid-1/grid-model/grid-margins-no-collapse-001.xht", + "/css/css-grid-1/grid-model/grid-margins-no-collapse-001.html", [ [ - "/css/css-grid-1/reference/grid-text-green-margin-no-collapse-ref.xht", + "/css/css-grid-1/reference/grid-text-green-margin-no-collapse-ref.html", "==" ] ], {} ] ], - "css/css-grid-1/grid-model/grid-multicol-001.xht": [ + "css/css-grid-1/grid-model/grid-multicol-001.html": [ [ - "/css/css-grid-1/grid-model/grid-multicol-001.xht", + "/css/css-grid-1/grid-model/grid-multicol-001.html", [ [ "/css/reference/ref-filled-green-100px-square.xht", @@ -109767,9 +109845,9 @@ {} ] ], - "css/css-grid-1/grid-model/grid-vertical-align-001.xht": [ + "css/css-grid-1/grid-model/grid-vertical-align-001.html": [ [ - "/css/css-grid-1/grid-model/grid-vertical-align-001.xht", + "/css/css-grid-1/grid-model/grid-vertical-align-001.html", [ [ "/css/reference/ref-filled-green-100px-square.xht", @@ -109935,6 +110013,18 @@ {} ] ], + "css/css-images-3/gradients-with-border.html": [ + [ + "/css/css-images-3/gradients-with-border.html", + [ + [ + "/css/css-images-3/gradients-with-border-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-images-3/linear-gradient-1.html": [ [ "/css/css-images-3/linear-gradient-1.html", @@ -113787,6 +113877,150 @@ {} ] ], + "css/css-position-3/position-sticky-bottom.html": [ + [ + "/css/css-position-3/position-sticky-bottom.html", + [ + [ + "/css/css-position-3/position-sticky-bottom-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-position-3/position-sticky-left.html": [ + [ + "/css/css-position-3/position-sticky-left.html", + [ + [ + "/css/css-position-3/position-sticky-left-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-position-3/position-sticky-right.html": [ + [ + "/css/css-position-3/position-sticky-right.html", + [ + [ + "/css/css-position-3/position-sticky-right-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-position-3/position-sticky-table-tfoot-bottom.html": [ + [ + "/css/css-position-3/position-sticky-table-tfoot-bottom.html", + [ + [ + "/css/css-position-3/position-sticky-table-tfoot-bottom-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-position-3/position-sticky-table-th-bottom.html": [ + [ + "/css/css-position-3/position-sticky-table-th-bottom.html", + [ + [ + "/css/css-position-3/position-sticky-table-th-bottom-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-position-3/position-sticky-table-th-left.html": [ + [ + "/css/css-position-3/position-sticky-table-th-left.html", + [ + [ + "/css/css-position-3/position-sticky-table-th-left-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-position-3/position-sticky-table-th-right.html": [ + [ + "/css/css-position-3/position-sticky-table-th-right.html", + [ + [ + "/css/css-position-3/position-sticky-table-th-right-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-position-3/position-sticky-table-th-top.html": [ + [ + "/css/css-position-3/position-sticky-table-th-top.html", + [ + [ + "/css/css-position-3/position-sticky-table-th-top-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-position-3/position-sticky-table-thead-top.html": [ + [ + "/css/css-position-3/position-sticky-table-thead-top.html", + [ + [ + "/css/css-position-3/position-sticky-table-thead-top-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-position-3/position-sticky-table-tr-bottom.html": [ + [ + "/css/css-position-3/position-sticky-table-tr-bottom.html", + [ + [ + "/css/css-position-3/position-sticky-table-tr-bottom-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-position-3/position-sticky-table-tr-top.html": [ + [ + "/css/css-position-3/position-sticky-table-tr-top.html", + [ + [ + "/css/css-position-3/position-sticky-table-tr-top-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-position-3/position-sticky-top.html": [ + [ + "/css/css-position-3/position-sticky-top.html", + [ + [ + "/css/css-position-3/position-sticky-top-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-pseudo-4/first-letter-001.html": [ [ "/css/css-pseudo-4/first-letter-001.html", @@ -116263,6 +116497,18 @@ {} ] ], + "css/css-scoping-1/css-scoping-shadow-host-namespace.html": [ + [ + "/css/css-scoping-1/css-scoping-shadow-host-namespace.html", + [ + [ + "/css/css-scoping-1/reference/green-box.html", + "==" + ] + ], + {} + ] + ], "css/css-scoping-1/css-scoping-shadow-host-rule.html": [ [ "/css/css-scoping-1/css-scoping-shadow-host-rule.html", @@ -117763,6 +118009,5466 @@ {} ] ], + "css/css-text-3/i18n/css3-text-line-break-jazh-001.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-001.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-002.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-002.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-002-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-003.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-003.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-003-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-004.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-004.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-004-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-005.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-005.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-005-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-006.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-006.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-006-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-007.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-007.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-007-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-008.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-008.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-008-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-009.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-009.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-009-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-010.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-010.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-010-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-011.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-011.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-011-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-012.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-012.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-012-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-013.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-013.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-013-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-014.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-014.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-014-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-015.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-015.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-015-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-016.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-016.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-016-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-017.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-017.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-017-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-018.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-018.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-018-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-019.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-019.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-019-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-020.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-020.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-020-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-021.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-021.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-021-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-022.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-022.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-022-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-023.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-023.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-023-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-024.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-024.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-024-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-025.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-025.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-025-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-026.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-026.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-026-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-027.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-027.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-027-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-028.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-028.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-028-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-029.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-029.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-029-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-030.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-030.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-030-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-031.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-031.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-031-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-032.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-032.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-032-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-033.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-033.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-033-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-034.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-034.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-034-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-035.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-035.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-035-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-036.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-036.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-036-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-037.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-037.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-037-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-038.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-038.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-038-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-039.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-039.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-039-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-040.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-040.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-040-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-041.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-041.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-041-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-042.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-042.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-042-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-043.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-043.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-043-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-044.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-044.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-044-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-045.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-045.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-045-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-046.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-046.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-046-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-047.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-047.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-047-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-048.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-048.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-048-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-049.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-049.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-049-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-050.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-050.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-050-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-051.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-051.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-051-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-052.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-052.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-052-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-054.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-054.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-054-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-055.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-055.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-055-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-056.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-056.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-056-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-057.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-057.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-057-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-058.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-058.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-058-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-059.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-059.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-059-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-060.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-060.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-060-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-101.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-101.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-101-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-102.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-102.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-102-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-103.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-103.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-103-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-104.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-104.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-104-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-105.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-105.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-105-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-106.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-106.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-106-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-107.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-107.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-107-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-108.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-108.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-108-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-109.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-109.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-109-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-110.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-110.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-110-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-111.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-111.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-111-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-112.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-112.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-112-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-113.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-113.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-113-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-114.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-114.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-114-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-115.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-115.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-115-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-116.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-116.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-116-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-117.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-117.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-117-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-118.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-118.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-118-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-119.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-119.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-119-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-120.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-120.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-120-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-121.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-121.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-121-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-122.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-122.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-122-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-123.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-123.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-123-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-124.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-124.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-124-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-125.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-125.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-125-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-126.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-126.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-126-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-127.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-127.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-127-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-128.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-128.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-128-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-129.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-129.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-129-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-130.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-130.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-130-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-131.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-131.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-131-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-132.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-132.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-132-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-133.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-133.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-133-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-134.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-134.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-134-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-135.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-135.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-135-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-136.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-136.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-136-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-137.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-137.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-137-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-138.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-138.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-138-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-139.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-139.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-139-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-140.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-140.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-140-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-141.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-141.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-141-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-142.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-142.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-142-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-143.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-143.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-143-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-144.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-144.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-144-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-145.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-145.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-145-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-146.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-146.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-146-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-147.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-147.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-147-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-148.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-148.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-148-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-149.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-149.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-149-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-150.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-150.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-150-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-151.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-151.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-151-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-152.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-152.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-152-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-154.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-154.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-154-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-155.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-155.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-155-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-156.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-156.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-156-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-157.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-157.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-157-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-158.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-158.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-158-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-159.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-159.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-159-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-160.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-160.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-160-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-201.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-201.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-201-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-202.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-202.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-202-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-203.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-203.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-203-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-204.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-204.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-204-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-205.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-205.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-205-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-206.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-206.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-206-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-207.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-207.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-207-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-208.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-208.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-208-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-209.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-209.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-209-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-210.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-210.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-210-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-211.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-211.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-211-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-212.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-212.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-212-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-213.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-213.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-213-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-214.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-214.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-214-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-215.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-215.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-215-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-216.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-216.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-216-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-217.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-217.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-217-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-218.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-218.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-218-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-219.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-219.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-219-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-220.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-220.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-220-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-221.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-221.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-221-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-222.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-222.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-222-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-223.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-223.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-223-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-224.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-224.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-224-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-225.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-225.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-225-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-226.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-226.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-226-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-227.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-227.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-227-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-228.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-228.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-228-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-229.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-229.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-229-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-230.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-230.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-230-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-231.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-231.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-231-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-232.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-232.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-232-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-233.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-233.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-233-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-234.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-234.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-234-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-235.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-235.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-235-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-236.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-236.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-236-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-237.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-237.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-237-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-238.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-238.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-238-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-239.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-239.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-239-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-240.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-240.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-240-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-241.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-241.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-241-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-242.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-242.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-242-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-243.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-243.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-243-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-244.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-244.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-244-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-245.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-245.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-245-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-246.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-246.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-246-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-247.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-247.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-247-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-248.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-248.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-248-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-249.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-249.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-249-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-250.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-250.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-250-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-251.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-251.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-251-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-252.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-252.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-252-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-254.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-254.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-254-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-255.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-255.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-255-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-256.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-256.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-256-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-257.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-257.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-257-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-258.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-258.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-258-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-259.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-259.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-259-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-260.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-260.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-260-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-301.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-301.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-301-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-302.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-302.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-302-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-303.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-303.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-303-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-304.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-304.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-304-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-305.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-305.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-305-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-306.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-306.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-306-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-307.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-307.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-307-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-308.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-308.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-308-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-309.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-309.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-309-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-310.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-310.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-310-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-311.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-311.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-311-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-312.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-312.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-312-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-313.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-313.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-313-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-314.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-314.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-314-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-315.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-315.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-315-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-316.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-316.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-316-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-317.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-317.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-317-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-318.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-318.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-318-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-319.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-319.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-319-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-320.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-320.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-320-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-321.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-321.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-321-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-322.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-322.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-322-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-323.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-323.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-323-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-324.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-324.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-324-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-325.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-325.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-325-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-326.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-326.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-326-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-327.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-327.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-327-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-351.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-351.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-351-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-352.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-352.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-352-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-353.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-353.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-353-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-354.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-354.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-354-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-355.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-355.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-355-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-356.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-356.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-356-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-357.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-357.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-357-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-358.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-358.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-358-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-359.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-359.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-359-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-360.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-360.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-360-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-361.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-361.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-361-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-362.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-362.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-362-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-363.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-363.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-363-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-364.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-364.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-364-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-365.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-365.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-365-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-366.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-366.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-366-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-367.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-367.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-367-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-368.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-368.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-368-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-369.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-369.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-369-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-370.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-370.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-370-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-371.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-371.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-371-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-372.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-372.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-372-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-373.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-373.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-373-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-374.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-374.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-374-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-375.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-375.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-375-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-376.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-376.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-376-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-377.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-377.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-377-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-401.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-401.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-401-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-402.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-402.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-402-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-403.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-403.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-403-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-404.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-404.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-404-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-405.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-405.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-405-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-406.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-406.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-406-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-407.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-407.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-407-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-408.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-408.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-408-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-409.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-409.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-409-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-410.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-410.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-410-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-411.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-411.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-411-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-412.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-412.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-412-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-413.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-413.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-413-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-414.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-414.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-414-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-415.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-415.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-415-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-416.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-416.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-416-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-417.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-417.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-417-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-418.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-418.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-418-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-419.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-419.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-419-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-420.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-420.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-420-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-421.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-421.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-421-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-422.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-422.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-422-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-423.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-423.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-423-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-424.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-424.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-424-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-425.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-425.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-425-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-426.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-426.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-426-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-jazh-427.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-jazh-427.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-jazh-427-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-001.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-001.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-002.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-002.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-002-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-003.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-003.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-003-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-004.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-004.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-004-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-005.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-005.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-005-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-006.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-006.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-006-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-007.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-007.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-007-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-008.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-008.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-008-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-009.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-009.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-009-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-010.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-010.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-010-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-011.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-011.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-011-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-012.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-012.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-012-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-013.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-013.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-013-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-014.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-014.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-014-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-015.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-015.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-015-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-016.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-016.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-016-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-017.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-017.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-017-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-018.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-018.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-018-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-019.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-019.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-019-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-020.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-020.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-020-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-021.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-021.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-021-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-022.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-022.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-022-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-023.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-023.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-023-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-024.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-024.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-024-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-025.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-025.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-025-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-026.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-026.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-026-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-027.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-027.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-027-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-028.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-028.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-028-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-029.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-029.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-029-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-030.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-030.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-030-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-031.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-031.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-031-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-032.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-032.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-032-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-033.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-033.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-033-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-034.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-034.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-034-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-035.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-035.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-035-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-036.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-036.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-036-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-037.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-037.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-037-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-038.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-038.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-038-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-039.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-039.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-039-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-040.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-040.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-040-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-041.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-041.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-041-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-042.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-042.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-042-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-043.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-043.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-043-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-044.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-044.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-044-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-045.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-045.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-045-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-046.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-046.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-046-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-047.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-047.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-047-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-048.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-048.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-048-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-049.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-049.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-049-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-050.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-050.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-050-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-051.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-051.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-051-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-052.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-052.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-052-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-053.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-053.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-053-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-054.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-054.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-054-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-055.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-055.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-055-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-056.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-056.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-056-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-057.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-057.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-057-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-058.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-058.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-058-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-059.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-059.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-059-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-060.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-060.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-060-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-061.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-061.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-061-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-062.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-062.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-062-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-063.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-063.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-063-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-064.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-064.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-064-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-065.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-065.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-065-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-100.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-100.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-100-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-101.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-101.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-101-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-102.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-102.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-102-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-103.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-103.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-103-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-104.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-104.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-104-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-105.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-105.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-105-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-106.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-106.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-106-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-107.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-107.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-107-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-108.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-108.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-108-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-109.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-109.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-109-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-110.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-110.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-110-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-111.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-111.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-111-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-112.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-112.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-112-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-113.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-113.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-113-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-114.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-114.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-114-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-115.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-115.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-115-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-116.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-116.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-116-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-117.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-117.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-117-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-118.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-118.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-118-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-119.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-119.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-119-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-120.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-120.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-120-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-121.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-121.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-121-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-122.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-122.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-122-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-123.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-123.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-123-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-124.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-124.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-124-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-125.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-125.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-125-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-126.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-126.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-126-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-127.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-127.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-127-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-128.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-128.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-128-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-129.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-129.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-129-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-130.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-130.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-130-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-131.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-131.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-131-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-132.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-132.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-132-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-133.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-133.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-133-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-134.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-134.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-134-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-135.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-135.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-135-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-136.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-136.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-136-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-137.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-137.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-137-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-138.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-138.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-138-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-139.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-139.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-139-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-140.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-140.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-140-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-141.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-141.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-141-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-142.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-142.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-142-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-143.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-143.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-143-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-144.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-144.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-144-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-145.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-145.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-145-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-146.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-146.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-146-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-147.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-147.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-147-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-148.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-148.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-148-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-149.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-149.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-149-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-150.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-150.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-150-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-151.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-151.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-151-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-152.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-152.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-152-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-153.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-153.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-153-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-154.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-154.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-154-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-155.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-155.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-155-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-156.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-156.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-156-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-157.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-157.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-157-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-158.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-158.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-158-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-159.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-159.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-159-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-160.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-160.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-160-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-161.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-161.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-161-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-162.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-162.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-162-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-163.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-163.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-163-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-164.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-164.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-164-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-165.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-165.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-165-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-166.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-166.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-166-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-167.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-167.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-167-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-168.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-168.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-168-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-169.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-169.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-169-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-170.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-170.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-170-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-171.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-171.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-171-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-200.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-200.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-200-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-201.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-201.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-201-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-202.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-202.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-202-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-203.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-203.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-203-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-204.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-204.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-204-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-205.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-205.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-205-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-206.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-206.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-206-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-207.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-207.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-207-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-208.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-208.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-208-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-209.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-209.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-209-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-210.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-210.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-210-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-211.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-211.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-211-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-212.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-212.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-212-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-213.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-213.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-213-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-214.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-214.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-214-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-215.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-215.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-215-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-216.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-216.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-216-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-217.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-217.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-217-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-218.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-218.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-218-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-219.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-219.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-219-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-220.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-220.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-220-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-221.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-221.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-221-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-222.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-222.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-222-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-223.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-223.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-223-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-224.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-224.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-224-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-225.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-225.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-225-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-226.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-226.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-226-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-250.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-250.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-250-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-251.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-251.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-251-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-252.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-252.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-252-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-253.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-253.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-253-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-254.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-254.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-254-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-255.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-255.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-255-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-256.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-256.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-256-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-257.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-257.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-257-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-258.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-258.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-258-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-259.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-259.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-259-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-260.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-260.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-260-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-261.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-261.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-261-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-262.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-262.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-262-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-263.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-263.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-263-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-264.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-264.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-264-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-265.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-265.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-265-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-266.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-266.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-266-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-267.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-267.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-267-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-268.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-268.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-268-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-opclns-269.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-opclns-269.html", + [ + [ + "/css/css-text-3/i18n/reference/css3-text-line-break-opclns-269-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/line-break/line-break-normal-021.xht": [ + [ + "/css/css-text-3/line-break/line-break-normal-021.xht", + [ + [ + "/css/css-text-3/line-break/reference/line-break-normal-021-ref.xht", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/line-break/line-break-normal-022.xht": [ + [ + "/css/css-text-3/line-break/line-break-normal-022.xht", + [ + [ + "/css/css-text-3/line-break/reference/line-break-normal-022-ref.xht", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/line-break/line-break-normal-023.xht": [ + [ + "/css/css-text-3/line-break/line-break-normal-023.xht", + [ + [ + "/css/css-text-3/line-break/reference/line-break-normal-023-ref.xht", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/line-break/line-break-normal-024.xht": [ + [ + "/css/css-text-3/line-break/line-break-normal-024.xht", + [ + [ + "/css/css-text-3/line-break/reference/line-break-normal-024-ref.xht", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/line-break/line-break-normal-025.xht": [ + [ + "/css/css-text-3/line-break/line-break-normal-025.xht", + [ + [ + "/css/css-text-3/line-break/reference/line-break-normal-025-ref.xht", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/line-break/line-break-strict-011.xht": [ + [ + "/css/css-text-3/line-break/line-break-strict-011.xht", + [ + [ + "/css/css-text-3/line-break/reference/line-break-strict-011-ref.xht", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/line-break/line-break-strict-012.xht": [ + [ + "/css/css-text-3/line-break/line-break-strict-012.xht", + [ + [ + "/css/css-text-3/line-break/reference/line-break-strict-012-ref.xht", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/line-break/line-break-strict-013.xht": [ + [ + "/css/css-text-3/line-break/line-break-strict-013.xht", + [ + [ + "/css/css-text-3/line-break/reference/line-break-strict-013-ref.xht", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/line-break/line-break-strict-014.xht": [ + [ + "/css/css-text-3/line-break/line-break-strict-014.xht", + [ + [ + "/css/css-text-3/line-break/reference/line-break-strict-014-ref.xht", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/line-break/line-break-strict-015.xht": [ + [ + "/css/css-text-3/line-break/line-break-strict-015.xht", + [ + [ + "/css/css-text-3/line-break/reference/line-break-strict-015-ref.xht", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/line-break/line-break-strict-016.xht": [ + [ + "/css/css-text-3/line-break/line-break-strict-016.xht", + [ + [ + "/css/css-text-3/line-break/reference/line-break-strict-016-ref.xht", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/line-break/line-break-strict-017.xht": [ + [ + "/css/css-text-3/line-break/line-break-strict-017.xht", + [ + [ + "/css/css-text-3/line-break/reference/line-break-strict-017-ref.xht", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/line-break/line-break-strict-018.xht": [ + [ + "/css/css-text-3/line-break/line-break-strict-018.xht", + [ + [ + "/css/css-text-3/line-break/reference/line-break-strict-018-ref.xht", + "==" + ] + ], + {} + ] + ], "css/css-text-3/line-breaking/line-breaking-001.html": [ [ "/css/css-text-3/line-breaking/line-breaking-001.html", @@ -118843,6 +124549,66 @@ {} ] ], + "css/css-text-3/text-transform/text-transform-capitalize-022.html": [ + [ + "/css/css-text-3/text-transform/text-transform-capitalize-022.html", + [ + [ + "/css/css-text-3/text-transform/reference/text-transform-capitalize-022-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/text-transform/text-transform-capitalize-024.html": [ + [ + "/css/css-text-3/text-transform/text-transform-capitalize-024.html", + [ + [ + "/css/css-text-3/text-transform/reference/text-transform-capitalize-024-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/text-transform/text-transform-capitalize-026.html": [ + [ + "/css/css-text-3/text-transform/text-transform-capitalize-026.html", + [ + [ + "/css/css-text-3/text-transform/reference/text-transform-capitalize-026-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/text-transform/text-transform-capitalize-028.html": [ + [ + "/css/css-text-3/text-transform/text-transform-capitalize-028.html", + [ + [ + "/css/css-text-3/text-transform/reference/text-transform-capitalize-028-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/text-transform/text-transform-capitalize-030.html": [ + [ + "/css/css-text-3/text-transform/text-transform-capitalize-030.html", + [ + [ + "/css/css-text-3/text-transform/reference/text-transform-capitalize-030-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-text-3/text-transform/text-transform-capitalize-031.html": [ [ "/css/css-text-3/text-transform/text-transform-capitalize-031.html", @@ -119275,6 +125041,126 @@ {} ] ], + "css/css-text-3/text-transform/text-transform-upperlower-022.html": [ + [ + "/css/css-text-3/text-transform/text-transform-upperlower-022.html", + [ + [ + "/css/css-text-3/text-transform/reference/text-transform-upperlower-022-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/text-transform/text-transform-upperlower-023.html": [ + [ + "/css/css-text-3/text-transform/text-transform-upperlower-023.html", + [ + [ + "/css/css-text-3/text-transform/reference/text-transform-upperlower-023-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/text-transform/text-transform-upperlower-024.html": [ + [ + "/css/css-text-3/text-transform/text-transform-upperlower-024.html", + [ + [ + "/css/css-text-3/text-transform/reference/text-transform-upperlower-024-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/text-transform/text-transform-upperlower-025.html": [ + [ + "/css/css-text-3/text-transform/text-transform-upperlower-025.html", + [ + [ + "/css/css-text-3/text-transform/reference/text-transform-upperlower-025-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/text-transform/text-transform-upperlower-026.html": [ + [ + "/css/css-text-3/text-transform/text-transform-upperlower-026.html", + [ + [ + "/css/css-text-3/text-transform/reference/text-transform-upperlower-026-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/text-transform/text-transform-upperlower-027.html": [ + [ + "/css/css-text-3/text-transform/text-transform-upperlower-027.html", + [ + [ + "/css/css-text-3/text-transform/reference/text-transform-upperlower-027-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/text-transform/text-transform-upperlower-028.html": [ + [ + "/css/css-text-3/text-transform/text-transform-upperlower-028.html", + [ + [ + "/css/css-text-3/text-transform/reference/text-transform-upperlower-028-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/text-transform/text-transform-upperlower-029.html": [ + [ + "/css/css-text-3/text-transform/text-transform-upperlower-029.html", + [ + [ + "/css/css-text-3/text-transform/reference/text-transform-upperlower-029-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/text-transform/text-transform-upperlower-030.html": [ + [ + "/css/css-text-3/text-transform/text-transform-upperlower-030.html", + [ + [ + "/css/css-text-3/text-transform/reference/text-transform-upperlower-030-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/text-transform/text-transform-upperlower-031.html": [ + [ + "/css/css-text-3/text-transform/text-transform-upperlower-031.html", + [ + [ + "/css/css-text-3/text-transform/reference/text-transform-upperlower-031-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-text-3/text-transform/text-transform-upperlower-032.html": [ [ "/css/css-text-3/text-transform/text-transform-upperlower-032.html", @@ -119335,6 +125221,66 @@ {} ] ], + "css/css-text-3/text-transform/text-transform-upperlower-039.html": [ + [ + "/css/css-text-3/text-transform/text-transform-upperlower-039.html", + [ + [ + "/css/css-text-3/text-transform/reference/text-transform-upperlower-039-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/text-transform/text-transform-upperlower-040.html": [ + [ + "/css/css-text-3/text-transform/text-transform-upperlower-040.html", + [ + [ + "/css/css-text-3/text-transform/reference/text-transform-upperlower-040-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/text-transform/text-transform-upperlower-041.html": [ + [ + "/css/css-text-3/text-transform/text-transform-upperlower-041.html", + [ + [ + "/css/css-text-3/text-transform/reference/text-transform-upperlower-041-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/text-transform/text-transform-upperlower-042.html": [ + [ + "/css/css-text-3/text-transform/text-transform-upperlower-042.html", + [ + [ + "/css/css-text-3/text-transform/reference/text-transform-upperlower-042-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/text-transform/text-transform-upperlower-043.html": [ + [ + "/css/css-text-3/text-transform/text-transform-upperlower-043.html", + [ + [ + "/css/css-text-3/text-transform/reference/text-transform-upperlower-043-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-text-3/text-transform/text-transform-upperlower-101.html": [ [ "/css/css-text-3/text-transform/text-transform-upperlower-101.html", @@ -119347,6 +125293,42 @@ {} ] ], + "css/css-text-3/text-transform/text-transform-upperlower-102.html": [ + [ + "/css/css-text-3/text-transform/text-transform-upperlower-102.html", + [ + [ + "/css/css-text-3/text-transform/reference/text-transform-upperlower-102-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/text-transform/text-transform-upperlower-103.html": [ + [ + "/css/css-text-3/text-transform/text-transform-upperlower-103.html", + [ + [ + "/css/css-text-3/text-transform/reference/text-transform-upperlower-103-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text-3/text-transform/text-transform-upperlower-104.html": [ + [ + "/css/css-text-3/text-transform/text-transform-upperlower-104.html", + [ + [ + "/css/css-text-3/text-transform/reference/text-transform-upperlower-104-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-text-3/white-space/white-space-collapsing-discard-001.xht": [ [ "/css/css-text-3/white-space/white-space-collapsing-discard-001.xht", @@ -119731,6 +125713,54 @@ {} ] ], + "css/css-text-decor-3/text-decoration-line-010.xht": [ + [ + "/css/css-text-decor-3/text-decoration-line-010.xht", + [ + [ + "/css/css-text-decor-3/reference/text-decoration-line-010-ref.xht", + "==" + ] + ], + {} + ] + ], + "css/css-text-decor-3/text-decoration-line-011.xht": [ + [ + "/css/css-text-decor-3/text-decoration-line-011.xht", + [ + [ + "/css/css-text-decor-3/reference/text-decoration-line-011-ref.xht", + "==" + ] + ], + {} + ] + ], + "css/css-text-decor-3/text-decoration-line-012.xht": [ + [ + "/css/css-text-decor-3/text-decoration-line-012.xht", + [ + [ + "/css/css-text-decor-3/reference/text-decoration-line-012-ref.xht", + "==" + ] + ], + {} + ] + ], + "css/css-text-decor-3/text-decoration-line-013.xht": [ + [ + "/css/css-text-decor-3/text-decoration-line-013.xht", + [ + [ + "/css/css-text-decor-3/reference/text-decoration-line-013-ref.xht", + "==" + ] + ], + {} + ] + ], "css/css-text-decor-3/text-emphasis-color-001.xht": [ [ "/css/css-text-decor-3/text-emphasis-color-001.xht", @@ -120007,30 +126037,6 @@ {} ] ], - "css/css-transforms-1/backface-visibility-hidden-001.html": [ - [ - "/css/css-transforms-1/backface-visibility-hidden-001.html", - [ - [ - "/css/css-transforms-1/reference/backface-visibility-hidden-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/css-rotate-2d-3d-001.html": [ - [ - "/css/css-transforms-1/css-rotate-2d-3d-001.html", - [ - [ - "/css/css-transforms-1/css-rotate-2d-3d-001-ref.html", - "==" - ] - ], - {} - ] - ], "css/css-transforms-1/css-scale-nested-001.html": [ [ "/css/css-transforms-1/css-scale-nested-001.html", @@ -120067,162 +126073,6 @@ {} ] ], - "css/css-transforms-1/css-transform-3d-rotate3d-X-negative.html": [ - [ - "/css/css-transforms-1/css-transform-3d-rotate3d-X-negative.html", - [ - [ - "/css/css-transforms-1/reference/css-transform-3d-rotateX-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/css-transform-3d-rotate3d-X-positive.html": [ - [ - "/css/css-transforms-1/css-transform-3d-rotate3d-X-positive.html", - [ - [ - "/css/css-transforms-1/reference/css-transform-3d-rotateX-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/css-transform-3d-rotate3d-Y-negative.html": [ - [ - "/css/css-transforms-1/css-transform-3d-rotate3d-Y-negative.html", - [ - [ - "/css/css-transforms-1/reference/css-transform-3d-rotateX-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/css-transform-3d-rotate3d-Y-positive.html": [ - [ - "/css/css-transforms-1/css-transform-3d-rotate3d-Y-positive.html", - [ - [ - "/css/css-transforms-1/reference/css-transform-3d-rotateX-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/css-transform-3d-rotate3d-Z-negative.html": [ - [ - "/css/css-transforms-1/css-transform-3d-rotate3d-Z-negative.html", - [ - [ - "/css/css-transforms-1/reference/css-transform-3d-rotateZ-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/css-transform-3d-rotate3d-Z-positive.html": [ - [ - "/css/css-transforms-1/css-transform-3d-rotate3d-Z-positive.html", - [ - [ - "/css/css-transforms-1/reference/css-transform-3d-rotateZ-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/css-transform-3d-rotateX-negative.html": [ - [ - "/css/css-transforms-1/css-transform-3d-rotateX-negative.html", - [ - [ - "/css/css-transforms-1/reference/css-transform-3d-rotateX-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/css-transform-3d-rotateX-positive.html": [ - [ - "/css/css-transforms-1/css-transform-3d-rotateX-positive.html", - [ - [ - "/css/css-transforms-1/reference/css-transform-3d-rotateX-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/css-transform-3d-rotateY-negative.html": [ - [ - "/css/css-transforms-1/css-transform-3d-rotateY-negative.html", - [ - [ - "/css/css-transforms-1/reference/css-transform-3d-rotateX-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/css-transform-3d-rotateY-positive.html": [ - [ - "/css/css-transforms-1/css-transform-3d-rotateY-positive.html", - [ - [ - "/css/css-transforms-1/reference/css-transform-3d-rotateX-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/css-transform-3d-rotateZ-negative.html": [ - [ - "/css/css-transforms-1/css-transform-3d-rotateZ-negative.html", - [ - [ - "/css/css-transforms-1/reference/css-transform-3d-rotateZ-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/css-transform-3d-rotateZ-positive.html": [ - [ - "/css/css-transforms-1/css-transform-3d-rotateZ-positive.html", - [ - [ - "/css/css-transforms-1/reference/css-transform-3d-rotateZ-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/css-transform-3d-transform-style.html": [ - [ - "/css/css-transforms-1/css-transform-3d-transform-style.html", - [ - [ - "/css/css-transforms-1/reference/css-transform-3d-transform-style-ref.html", - "==" - ] - ], - {} - ] - ], "css/css-transforms-1/css-transform-scale-001.html": [ [ "/css/css-transforms-1/css-transform-scale-001.html", @@ -120247,18 +126097,6 @@ {} ] ], - "css/css-transforms-1/css-transforms-3d-on-anonymous-block-001.html": [ - [ - "/css/css-transforms-1/css-transforms-3d-on-anonymous-block-001.html", - [ - [ - "/css/css-transforms-1/reference/css-transforms-3d-anonymous-block-ref.html", - "==" - ] - ], - {} - ] - ], "css/css-transforms-1/css-transforms-transformlist.html": [ [ "/css/css-transforms-1/css-transforms-transformlist.html", @@ -120271,30 +126109,6 @@ {} ] ], - "css/css-transforms-1/css3-transform-perspective.html": [ - [ - "/css/css-transforms-1/css3-transform-perspective.html", - [ - [ - "/css/css-transforms-1/reference/css3-transform-perspective-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/css3-transform-rotateY.html": [ - [ - "/css/css-transforms-1/css3-transform-rotateY.html", - [ - [ - "/css/css-transforms-1/css3-transform-rotateY-ref.html", - "==" - ] - ], - {} - ] - ], "css/css-transforms-1/css3-transform-scale-002.html": [ [ "/css/css-transforms-1/css3-transform-scale-002.html", @@ -123595,138 +129409,6 @@ {} ] ], - "css/css-transforms-1/perspective-origin-001.html": [ - [ - "/css/css-transforms-1/perspective-origin-001.html", - [ - [ - "/css/reference/ref-filled-green-100px-square.xht", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/perspective-origin-002.html": [ - [ - "/css/css-transforms-1/perspective-origin-002.html", - [ - [ - "/css/reference/ref-filled-green-100px-square.xht", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/perspective-origin-003.html": [ - [ - "/css/css-transforms-1/perspective-origin-003.html", - [ - [ - "/css/reference/ref-filled-green-100px-square.xht", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/perspective-origin-004.html": [ - [ - "/css/css-transforms-1/perspective-origin-004.html", - [ - [ - "/css/reference/ref-filled-green-100px-square.xht", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/perspective-origin-005.html": [ - [ - "/css/css-transforms-1/perspective-origin-005.html", - [ - [ - "/css/reference/ref-filled-green-100px-square.xht", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/perspective-origin-006.html": [ - [ - "/css/css-transforms-1/perspective-origin-006.html", - [ - [ - "/css/reference/ref-filled-green-100px-square.xht", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/perspective-origin-x.html": [ - [ - "/css/css-transforms-1/perspective-origin-x.html", - [ - [ - "/css/css-transforms-1/reference/perspective-origin-reftest.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/perspective-origin-xy.html": [ - [ - "/css/css-transforms-1/perspective-origin-xy.html", - [ - [ - "/css/css-transforms-1/reference/perspective-reftest.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/perspective-translateZ-0.html": [ - [ - "/css/css-transforms-1/perspective-translateZ-0.html", - [ - [ - "/css/css-transforms-1/reference/perspective-reftest.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/perspective-translateZ-negative.html": [ - [ - "/css/css-transforms-1/perspective-translateZ-negative.html", - [ - [ - "/css/css-transforms-1/reference/perspective-reftest.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/perspective-translateZ-positive.html": [ - [ - "/css/css-transforms-1/perspective-translateZ-positive.html", - [ - [ - "/css/css-transforms-1/reference/perspective-reftest.html", - "==" - ] - ], - {} - ] - ], "css/css-transforms-1/rotate/svg-rotate-3args-001.html": [ [ "/css/css-transforms-1/rotate/svg-rotate-3args-001.html", @@ -124663,18 +130345,6 @@ {} ] ], - "css/css-transforms-1/rotateY.html": [ - [ - "/css/css-transforms-1/rotateY.html", - [ - [ - "/css/css-transforms-1/reference/rotateY-ref.html", - "==" - ] - ], - {} - ] - ], "css/css-transforms-1/rotate_45deg.html": [ [ "/css/css-transforms-1/rotate_45deg.html", @@ -124687,30 +130357,6 @@ {} ] ], - "css/css-transforms-1/rotate_x_45deg.html": [ - [ - "/css/css-transforms-1/rotate_x_45deg.html", - [ - [ - "/css/css-transforms-1/rotate_x_45deg-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/rotate_y_45deg.html": [ - [ - "/css/css-transforms-1/rotate_y_45deg.html", - [ - [ - "/css/css-transforms-1/rotate_y_45deg-ref.html", - "==" - ] - ], - {} - ] - ], "css/css-transforms-1/scale-optional-second-001.html": [ [ "/css/css-transforms-1/scale-optional-second-001.html", @@ -125719,30 +131365,6 @@ {} ] ], - "css/css-transforms-1/transform-3d-rotateY-stair-above-001.xht": [ - [ - "/css/css-transforms-1/transform-3d-rotateY-stair-above-001.xht", - [ - [ - "/css/css-transforms-1/reftest/transform-3d-rotateY-stair-above-ref-001.xht", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform-3d-rotateY-stair-below-001.xht": [ - [ - "/css/css-transforms-1/transform-3d-rotateY-stair-below-001.xht", - [ - [ - "/css/css-transforms-1/reftest/transform-3d-rotateY-stair-above-ref-001.xht", - "==" - ] - ], - {} - ] - ], "css/css-transforms-1/transform-abspos-001.html": [ [ "/css/css-transforms-1/transform-abspos-001.html", @@ -128939,822 +134561,6 @@ {} ] ], - "css/css-transforms-1/transform3d-backface-visibility-001.html": [ - [ - "/css/css-transforms-1/transform3d-backface-visibility-001.html", - [ - [ - "/css/css-transforms-1/transform-lime-square-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-backface-visibility-002.html": [ - [ - "/css/css-transforms-1/transform3d-backface-visibility-002.html", - [ - [ - "/css/css-transforms-1/transform-lime-square-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-backface-visibility-003.html": [ - [ - "/css/css-transforms-1/transform3d-backface-visibility-003.html", - [ - [ - "/css/css-transforms-1/transform-lime-square-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-backface-visibility-004.html": [ - [ - "/css/css-transforms-1/transform3d-backface-visibility-004.html", - [ - [ - "/css/css-transforms-1/transform-lime-square-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-backface-visibility-005.html": [ - [ - "/css/css-transforms-1/transform3d-backface-visibility-005.html", - [ - [ - "/css/css-transforms-1/transform-lime-square-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-backface-visibility-006.html": [ - [ - "/css/css-transforms-1/transform3d-backface-visibility-006.html", - [ - [ - "/css/css-transforms-1/transform-lime-square-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-backface-visibility-007.html": [ - [ - "/css/css-transforms-1/transform3d-backface-visibility-007.html", - [ - [ - "/css/css-transforms-1/transform-lime-square-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-backface-visibility-008.html": [ - [ - "/css/css-transforms-1/transform3d-backface-visibility-008.html", - [ - [ - "/css/reference/ref-filled-green-100px-square.xht", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-image-scale-001.html": [ - [ - "/css/css-transforms-1/transform3d-image-scale-001.html", - [ - [ - "/css/css-transforms-1/transform-lime-square-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-image-scale-002.html": [ - [ - "/css/css-transforms-1/transform3d-image-scale-002.html", - [ - [ - "/css/css-transforms-1/transform-lime-square-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-matrix3d-001.html": [ - [ - "/css/css-transforms-1/transform3d-matrix3d-001.html", - [ - [ - "/css/css-transforms-1/transform3d-matrix3d-001-ref.html", - "==" - ], - [ - "/css/css-transforms-1/transform-lime-square-ref.html", - "!=" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-matrix3d-002.html": [ - [ - "/css/css-transforms-1/transform3d-matrix3d-002.html", - [ - [ - "/css/css-transforms-1/transform3d-matrix3d-002-ref.html", - "==" - ], - [ - "/css/css-transforms-1/transform-lime-square-ref.html", - "!=" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-matrix3d-003.html": [ - [ - "/css/css-transforms-1/transform3d-matrix3d-003.html", - [ - [ - "/css/css-transforms-1/transform3d-matrix3d-003-ref.html", - "==" - ], - [ - "/css/css-transforms-1/transform-lime-square-ref.html", - "!=" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-matrix3d-004.html": [ - [ - "/css/css-transforms-1/transform3d-matrix3d-004.html", - [ - [ - "/css/css-transforms-1/transform3d-matrix3d-004-ref.html", - "==" - ], - [ - "/css/css-transforms-1/transform-lime-square-ref.html", - "!=" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-matrix3d-005.html": [ - [ - "/css/css-transforms-1/transform3d-matrix3d-005.html", - [ - [ - "/css/css-transforms-1/transform3d-matrix3d-005-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-perspective-001.html": [ - [ - "/css/css-transforms-1/transform3d-perspective-001.html", - [ - [ - "/css/css-transforms-1/transform3d-perspective-001-ref.html", - "==" - ], - [ - "/css/css-transforms-1/transform-lime-square-ref.html", - "!=" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-perspective-002.html": [ - [ - "/css/css-transforms-1/transform3d-perspective-002.html", - [ - [ - "/css/css-transforms-1/transform3d-perspective-001-ref.html", - "==" - ], - [ - "/css/css-transforms-1/transform-lime-square-ref.html", - "!=" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-perspective-003.html": [ - [ - "/css/css-transforms-1/transform3d-perspective-003.html", - [ - [ - "/css/css-transforms-1/transform-lime-square-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-perspective-004.html": [ - [ - "/css/css-transforms-1/transform3d-perspective-004.html", - [ - [ - "/css/css-transforms-1/transform-lime-square-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-perspective-005.html": [ - [ - "/css/css-transforms-1/transform3d-perspective-005.html", - [ - [ - "/css/css-transforms-1/transform-lime-square-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-perspective-006.html": [ - [ - "/css/css-transforms-1/transform3d-perspective-006.html", - [ - [ - "/css/css-transforms-1/transform-lime-square-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-perspective-007.html": [ - [ - "/css/css-transforms-1/transform3d-perspective-007.html", - [ - [ - "/css/css-transforms-1/transform3d-perspective-001-ref.html", - "==" - ], - [ - "/css/css-transforms-1/transform-lime-square-ref.html", - "!=" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-perspective-008.html": [ - [ - "/css/css-transforms-1/transform3d-perspective-008.html", - [ - [ - "/css/css-transforms-1/transform-lime-square-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-perspective-009.html": [ - [ - "/css/css-transforms-1/transform3d-perspective-009.html", - [ - [ - "/css/css-transforms-1/transform3d-perspective-009-ref.html", - "==" - ], - [ - "/css/css-transforms-1/transform-lime-square-ref.html", - "!=" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-perspective-origin-001.html": [ - [ - "/css/css-transforms-1/transform3d-perspective-origin-001.html", - [ - [ - "/css/css-transforms-1/transform3d-perspective-origin-ref.html", - "==" - ], - [ - "/css/css-transforms-1/transform3d-rotatex-perspective-001.html", - "!=" - ], - [ - "/css/css-transforms-1/transform3d-rotatex-ref.html", - "!=" - ], - [ - "/css/css-transforms-1/transform-lime-square-ref.html", - "!=" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-preserve3d-001.html": [ - [ - "/css/css-transforms-1/transform3d-preserve3d-001.html", - [ - [ - "/css/css-transforms-1/transform3d-preserve3d-001-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-preserve3d-002.html": [ - [ - "/css/css-transforms-1/transform3d-preserve3d-002.html", - [ - [ - "/css/css-transforms-1/transform-lime-square-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-preserve3d-003.html": [ - [ - "/css/css-transforms-1/transform3d-preserve3d-003.html", - [ - [ - "/css/css-transforms-1/transform-lime-square-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-preserve3d-004.html": [ - [ - "/css/css-transforms-1/transform3d-preserve3d-004.html", - [ - [ - "/css/css-transforms-1/transform-lime-square-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-preserve3d-005.html": [ - [ - "/css/css-transforms-1/transform3d-preserve3d-005.html", - [ - [ - "/css/css-transforms-1/transform-lime-square-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-preserve3d-006.html": [ - [ - "/css/css-transforms-1/transform3d-preserve3d-006.html", - [ - [ - "/css/css-transforms-1/transform-lime-square-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-preserve3d-007.html": [ - [ - "/css/css-transforms-1/transform3d-preserve3d-007.html", - [ - [ - "/css/css-transforms-1/transform-lime-square-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-preserve3d-008.html": [ - [ - "/css/css-transforms-1/transform3d-preserve3d-008.html", - [ - [ - "/css/css-transforms-1/transform-lime-square-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-preserve3d-009.html": [ - [ - "/css/css-transforms-1/transform3d-preserve3d-009.html", - [ - [ - "/css/css-transforms-1/transform-lime-square-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-preserve3d-010.html": [ - [ - "/css/css-transforms-1/transform3d-preserve3d-010.html", - [ - [ - "/css/css-transforms-1/transform-lime-square-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-preserve3d-011.html": [ - [ - "/css/css-transforms-1/transform3d-preserve3d-011.html", - [ - [ - "/css/css-transforms-1/transform-lime-square-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-preserve3d-012.html": [ - [ - "/css/css-transforms-1/transform3d-preserve3d-012.html", - [ - [ - "/css/css-transforms-1/transform-blank-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-preserve3d-013.html": [ - [ - "/css/css-transforms-1/transform3d-preserve3d-013.html", - [ - [ - "/css/css-transforms-1/transform3d-preserve3d-013-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-rotate3d-001.html": [ - [ - "/css/css-transforms-1/transform3d-rotate3d-001.html", - [ - [ - "/css/css-transforms-1/transform3d-rotatex-ref.html", - "==" - ], - [ - "/css/css-transforms-1/transform-lime-square-ref.html", - "!=" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-rotate3d-002.html": [ - [ - "/css/css-transforms-1/transform3d-rotate3d-002.html", - [ - [ - "/css/css-transforms-1/transform3d-rotatey-ref.html", - "==" - ], - [ - "/css/css-transforms-1/transform-lime-square-ref.html", - "!=" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-rotatex-001.html": [ - [ - "/css/css-transforms-1/transform3d-rotatex-001.html", - [ - [ - "/css/css-transforms-1/transform3d-rotatex-ref.html", - "==" - ], - [ - "/css/css-transforms-1/transform-lime-square-ref.html", - "!=" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-rotatex-perspective-002.html": [ - [ - "/css/css-transforms-1/transform3d-rotatex-perspective-002.html", - [ - [ - "/css/css-transforms-1/transform3d-rotatex-ref.html", - "!=" - ], - [ - "/css/css-transforms-1/transform-lime-square-ref.html", - "!=" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-rotatex-perspective-003.html": [ - [ - "/css/css-transforms-1/transform3d-rotatex-perspective-003.html", - [ - [ - "/css/css-transforms-1/transform3d-rotatex-perspective-ref.html", - "==" - ], - [ - "/css/css-transforms-1/transform3d-rotatex-perspective-notref.html", - "!=" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-rotatex-transformorigin-001.html": [ - [ - "/css/css-transforms-1/transform3d-rotatex-transformorigin-001.html", - [ - [ - "/css/css-transforms-1/transform3d-rotatex-transformorigin-ref.html", - "==" - ], - [ - "/css/css-transforms-1/transform-lime-square-ref.html", - "!=" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-rotatey-001.html": [ - [ - "/css/css-transforms-1/transform3d-rotatey-001.html", - [ - [ - "/css/css-transforms-1/transform3d-rotatey-ref.html", - "==" - ], - [ - "/css/css-transforms-1/transform-lime-square-ref.html", - "!=" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-scale-001.html": [ - [ - "/css/css-transforms-1/transform3d-scale-001.html", - [ - [ - "/css/css-transforms-1/transform3d-scale-001-ref.html", - "==" - ], - [ - "/css/css-transforms-1/transform3d-scale-001-notref.html", - "!=" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-scale-002.html": [ - [ - "/css/css-transforms-1/transform3d-scale-002.html", - [ - [ - "/css/css-transforms-1/transform3d-scale-001-ref.html", - "==" - ], - [ - "/css/css-transforms-1/transform3d-scale-001-notref.html", - "!=" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-scale-003.html": [ - [ - "/css/css-transforms-1/transform3d-scale-003.html", - [ - [ - "/css/css-transforms-1/transform3d-scale-001-ref.html", - "==" - ], - [ - "/css/css-transforms-1/transform3d-scale-001-notref.html", - "!=" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-scale-004.html": [ - [ - "/css/css-transforms-1/transform3d-scale-004.html", - [ - [ - "/css/css-transforms-1/transform-blank-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-scale-005.html": [ - [ - "/css/css-transforms-1/transform3d-scale-005.html", - [ - [ - "/css/css-transforms-1/transform3d-scale-005-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-scale-006.html": [ - [ - "/css/css-transforms-1/transform3d-scale-006.html", - [ - [ - "/css/css-transforms-1/transform3d-scale-005-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-scale-007.html": [ - [ - "/css/css-transforms-1/transform3d-scale-007.html", - [ - [ - "/css/css-transforms-1/transform3d-scale-007-ref.html", - "==" - ], - [ - "/css/css-transforms-1/transform3d-scale-001-notref.html", - "!=" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-sorting-001.html": [ - [ - "/css/css-transforms-1/transform3d-sorting-001.html", - [ - [ - "/css/css-transforms-1/transform-lime-square-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-sorting-002.html": [ - [ - "/css/css-transforms-1/transform3d-sorting-002.html", - [ - [ - "/css/css-transforms-1/transform-lime-square-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-sorting-003.html": [ - [ - "/css/css-transforms-1/transform3d-sorting-003.html", - [ - [ - "/css/css-transforms-1/transform-lime-square-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-sorting-004.html": [ - [ - "/css/css-transforms-1/transform3d-sorting-004.html", - [ - [ - "/css/css-transforms-1/transform-lime-square-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-sorting-005.html": [ - [ - "/css/css-transforms-1/transform3d-sorting-005.html", - [ - [ - "/css/css-transforms-1/transform-lime-square-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-sorting-006.html": [ - [ - "/css/css-transforms-1/transform3d-sorting-006.html", - [ - [ - "/css/css-transforms-1/transform3d-sorting-006-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-translate3d-001.html": [ - [ - "/css/css-transforms-1/transform3d-translate3d-001.html", - [ - [ - "/css/css-transforms-1/transform3d-translate3d-ref.html", - "==" - ], - [ - "/css/css-transforms-1/transform-lime-square-ref.html", - "!=" - ] - ], - {} - ] - ], - "css/css-transforms-1/transform3d-translatez-001.html": [ - [ - "/css/css-transforms-1/transform3d-translatez-001.html", - [ - [ - "/css/css-transforms-1/transform3d-translatez-ref.html", - "==" - ], - [ - "/css/css-transforms-1/transform3d-translatez-notref.html", - "!=" - ] - ], - {} - ] - ], "css/css-transforms-1/transforms-rotate-degree-45.html": [ [ "/css/css-transforms-1/transforms-rotate-degree-45.html", @@ -129791,18 +134597,6 @@ {} ] ], - "css/css-transforms-1/transforms-rotateY-degree-60.html": [ - [ - "/css/css-transforms-1/transforms-rotateY-degree-60.html", - [ - [ - "/css/css-transforms-1/reference/transforms-rotateY-degree-60-ref.html", - "==" - ] - ], - {} - ] - ], "css/css-transforms-1/transforms-skewX.html": [ [ "/css/css-transforms-1/transforms-skewX.html", @@ -132239,66 +137033,6 @@ {} ] ], - "css/css-transforms-1/transofrmed-preserve-3d-1.html": [ - [ - "/css/css-transforms-1/transofrmed-preserve-3d-1.html", - [ - [ - "/css/css-transforms-1/reference/transofrmed-preserve-3d-1-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/transofrmed-rotateX-3.html": [ - [ - "/css/css-transforms-1/transofrmed-rotateX-3.html", - [ - [ - "/css/css-transforms-1/reference/transofrmed-rotateX-3-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/transofrmed-rotateY-1.html": [ - [ - "/css/css-transforms-1/transofrmed-rotateY-1.html", - [ - [ - "/css/css-transforms-1/reference/transofrmed-rotateY-1-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/ttwf-css-3d-polygon-cycle-mismatch.html": [ - [ - "/css/css-transforms-1/ttwf-css-3d-polygon-cycle-mismatch.html", - [ - [ - "/css/css-transforms-1/reference/ttwf-css-3d-polygon-cycle-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms-1/ttwf-css-3d-polygon-cycle.html": [ - [ - "/css/css-transforms-1/ttwf-css-3d-polygon-cycle.html", - [ - [ - "/css/css-transforms-1/reference/ttwf-css-3d-polygon-cycle-ref.html", - "==" - ] - ], - {} - ] - ], "css/css-transforms-1/ttwf-reftest-rotate.html": [ [ "/css/css-transforms-1/ttwf-reftest-rotate.html", @@ -132359,6 +137093,1302 @@ {} ] ], + "css/css-transforms-2/backface-visibility-hidden-001.html": [ + [ + "/css/css-transforms-2/backface-visibility-hidden-001.html", + [ + [ + "/css/css-transforms-2/reference/backface-visibility-hidden-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/css-rotate-2d-3d-001.html": [ + [ + "/css/css-transforms-2/css-rotate-2d-3d-001.html", + [ + [ + "/css/css-transforms-2/css-rotate-2d-3d-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/css-transform-3d-rotate3d-X-negative.html": [ + [ + "/css/css-transforms-2/css-transform-3d-rotate3d-X-negative.html", + [ + [ + "/css/css-transforms-2/reference/css-transform-3d-rotateX-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/css-transform-3d-rotate3d-X-positive.html": [ + [ + "/css/css-transforms-2/css-transform-3d-rotate3d-X-positive.html", + [ + [ + "/css/css-transforms-2/reference/css-transform-3d-rotateX-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/css-transform-3d-rotate3d-Y-negative.html": [ + [ + "/css/css-transforms-2/css-transform-3d-rotate3d-Y-negative.html", + [ + [ + "/css/css-transforms-2/reference/css-transform-3d-rotateX-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/css-transform-3d-rotate3d-Y-positive.html": [ + [ + "/css/css-transforms-2/css-transform-3d-rotate3d-Y-positive.html", + [ + [ + "/css/css-transforms-2/reference/css-transform-3d-rotateX-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/css-transform-3d-rotate3d-Z-negative.html": [ + [ + "/css/css-transforms-2/css-transform-3d-rotate3d-Z-negative.html", + [ + [ + "/css/css-transforms-2/reference/css-transform-3d-rotateZ-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/css-transform-3d-rotate3d-Z-positive.html": [ + [ + "/css/css-transforms-2/css-transform-3d-rotate3d-Z-positive.html", + [ + [ + "/css/css-transforms-2/reference/css-transform-3d-rotateZ-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/css-transform-3d-rotateX-negative.html": [ + [ + "/css/css-transforms-2/css-transform-3d-rotateX-negative.html", + [ + [ + "/css/css-transforms-2/reference/css-transform-3d-rotateX-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/css-transform-3d-rotateX-positive.html": [ + [ + "/css/css-transforms-2/css-transform-3d-rotateX-positive.html", + [ + [ + "/css/css-transforms-2/reference/css-transform-3d-rotateX-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/css-transform-3d-rotateY-negative.html": [ + [ + "/css/css-transforms-2/css-transform-3d-rotateY-negative.html", + [ + [ + "/css/css-transforms-2/reference/css-transform-3d-rotateX-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/css-transform-3d-rotateY-positive.html": [ + [ + "/css/css-transforms-2/css-transform-3d-rotateY-positive.html", + [ + [ + "/css/css-transforms-2/reference/css-transform-3d-rotateX-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/css-transform-3d-rotateZ-negative.html": [ + [ + "/css/css-transforms-2/css-transform-3d-rotateZ-negative.html", + [ + [ + "/css/css-transforms-2/reference/css-transform-3d-rotateZ-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/css-transform-3d-rotateZ-positive.html": [ + [ + "/css/css-transforms-2/css-transform-3d-rotateZ-positive.html", + [ + [ + "/css/css-transforms-2/reference/css-transform-3d-rotateZ-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/css-transform-3d-transform-style.html": [ + [ + "/css/css-transforms-2/css-transform-3d-transform-style.html", + [ + [ + "/css/css-transforms-2/reference/css-transform-3d-transform-style-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/css-transforms-3d-on-anonymous-block-001.html": [ + [ + "/css/css-transforms-2/css-transforms-3d-on-anonymous-block-001.html", + [ + [ + "/css/css-transforms-2/reference/css-transforms-3d-anonymous-block-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/css3-transform-perspective.html": [ + [ + "/css/css-transforms-2/css3-transform-perspective.html", + [ + [ + "/css/css-transforms-2/reference/css3-transform-perspective-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/css3-transform-rotateY.html": [ + [ + "/css/css-transforms-2/css3-transform-rotateY.html", + [ + [ + "/css/css-transforms-2/css3-transform-rotateY-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/perspective-origin-001.html": [ + [ + "/css/css-transforms-2/perspective-origin-001.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/perspective-origin-002.html": [ + [ + "/css/css-transforms-2/perspective-origin-002.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/perspective-origin-003.html": [ + [ + "/css/css-transforms-2/perspective-origin-003.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/perspective-origin-004.html": [ + [ + "/css/css-transforms-2/perspective-origin-004.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/perspective-origin-005.html": [ + [ + "/css/css-transforms-2/perspective-origin-005.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/perspective-origin-006.html": [ + [ + "/css/css-transforms-2/perspective-origin-006.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/perspective-origin-x.html": [ + [ + "/css/css-transforms-2/perspective-origin-x.html", + [ + [ + "/css/css-transforms-2/reference/perspective-origin-reftest.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/perspective-origin-xy.html": [ + [ + "/css/css-transforms-2/perspective-origin-xy.html", + [ + [ + "/css/css-transforms-2/reference/perspective-reftest.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/perspective-translateZ-0.html": [ + [ + "/css/css-transforms-2/perspective-translateZ-0.html", + [ + [ + "/css/css-transforms-2/reference/perspective-reftest.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/perspective-translateZ-negative.html": [ + [ + "/css/css-transforms-2/perspective-translateZ-negative.html", + [ + [ + "/css/css-transforms-2/reference/perspective-reftest.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/perspective-translateZ-positive.html": [ + [ + "/css/css-transforms-2/perspective-translateZ-positive.html", + [ + [ + "/css/css-transforms-2/reference/perspective-reftest.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/rotateY.html": [ + [ + "/css/css-transforms-2/rotateY.html", + [ + [ + "/css/css-transforms-2/reference/rotateY-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/rotate_x_45deg.html": [ + [ + "/css/css-transforms-2/rotate_x_45deg.html", + [ + [ + "/css/css-transforms-2/rotate_x_45deg-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/rotate_y_45deg.html": [ + [ + "/css/css-transforms-2/rotate_y_45deg.html", + [ + [ + "/css/css-transforms-2/rotate_y_45deg-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform-3d-rotateY-stair-above-001.xht": [ + [ + "/css/css-transforms-2/transform-3d-rotateY-stair-above-001.xht", + [ + [ + "/css/css-transforms-2/reftest/transform-3d-rotateY-stair-above-ref-001.xht", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform-3d-rotateY-stair-below-001.xht": [ + [ + "/css/css-transforms-2/transform-3d-rotateY-stair-below-001.xht", + [ + [ + "/css/css-transforms-2/reftest/transform-3d-rotateY-stair-above-ref-001.xht", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-backface-visibility-001.html": [ + [ + "/css/css-transforms-2/transform3d-backface-visibility-001.html", + [ + [ + "/css/css-transforms-2/transform-lime-square-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-backface-visibility-002.html": [ + [ + "/css/css-transforms-2/transform3d-backface-visibility-002.html", + [ + [ + "/css/css-transforms-2/transform-lime-square-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-backface-visibility-003.html": [ + [ + "/css/css-transforms-2/transform3d-backface-visibility-003.html", + [ + [ + "/css/css-transforms-2/transform-lime-square-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-backface-visibility-004.html": [ + [ + "/css/css-transforms-2/transform3d-backface-visibility-004.html", + [ + [ + "/css/css-transforms-2/transform-lime-square-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-backface-visibility-005.html": [ + [ + "/css/css-transforms-2/transform3d-backface-visibility-005.html", + [ + [ + "/css/css-transforms-2/transform-lime-square-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-backface-visibility-006.html": [ + [ + "/css/css-transforms-2/transform3d-backface-visibility-006.html", + [ + [ + "/css/css-transforms-2/transform-lime-square-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-backface-visibility-007.html": [ + [ + "/css/css-transforms-2/transform3d-backface-visibility-007.html", + [ + [ + "/css/css-transforms-2/transform-lime-square-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-backface-visibility-008.html": [ + [ + "/css/css-transforms-2/transform3d-backface-visibility-008.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-image-scale-001.html": [ + [ + "/css/css-transforms-2/transform3d-image-scale-001.html", + [ + [ + "/css/css-transforms-2/transform-lime-square-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-image-scale-002.html": [ + [ + "/css/css-transforms-2/transform3d-image-scale-002.html", + [ + [ + "/css/css-transforms-2/transform-lime-square-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-matrix3d-001.html": [ + [ + "/css/css-transforms-2/transform3d-matrix3d-001.html", + [ + [ + "/css/css-transforms-2/transform3d-matrix3d-001-ref.html", + "==" + ], + [ + "/css/css-transforms-2/transform-lime-square-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-matrix3d-002.html": [ + [ + "/css/css-transforms-2/transform3d-matrix3d-002.html", + [ + [ + "/css/css-transforms-2/transform3d-matrix3d-002-ref.html", + "==" + ], + [ + "/css/css-transforms-2/transform-lime-square-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-matrix3d-003.html": [ + [ + "/css/css-transforms-2/transform3d-matrix3d-003.html", + [ + [ + "/css/css-transforms-2/transform3d-matrix3d-003-ref.html", + "==" + ], + [ + "/css/css-transforms-2/transform-lime-square-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-matrix3d-004.html": [ + [ + "/css/css-transforms-2/transform3d-matrix3d-004.html", + [ + [ + "/css/css-transforms-2/transform3d-matrix3d-004-ref.html", + "==" + ], + [ + "/css/css-transforms-2/transform-lime-square-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-matrix3d-005.html": [ + [ + "/css/css-transforms-2/transform3d-matrix3d-005.html", + [ + [ + "/css/css-transforms-2/transform3d-matrix3d-005-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-perspective-001.html": [ + [ + "/css/css-transforms-2/transform3d-perspective-001.html", + [ + [ + "/css/css-transforms-2/transform3d-perspective-001-ref.html", + "==" + ], + [ + "/css/css-transforms-2/transform-lime-square-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-perspective-002.html": [ + [ + "/css/css-transforms-2/transform3d-perspective-002.html", + [ + [ + "/css/css-transforms-2/transform3d-perspective-001-ref.html", + "==" + ], + [ + "/css/css-transforms-2/transform-lime-square-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-perspective-003.html": [ + [ + "/css/css-transforms-2/transform3d-perspective-003.html", + [ + [ + "/css/css-transforms-2/transform-lime-square-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-perspective-004.html": [ + [ + "/css/css-transforms-2/transform3d-perspective-004.html", + [ + [ + "/css/css-transforms-2/transform-lime-square-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-perspective-005.html": [ + [ + "/css/css-transforms-2/transform3d-perspective-005.html", + [ + [ + "/css/css-transforms-2/transform-lime-square-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-perspective-006.html": [ + [ + "/css/css-transforms-2/transform3d-perspective-006.html", + [ + [ + "/css/css-transforms-2/transform-lime-square-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-perspective-007.html": [ + [ + "/css/css-transforms-2/transform3d-perspective-007.html", + [ + [ + "/css/css-transforms-2/transform3d-perspective-001-ref.html", + "==" + ], + [ + "/css/css-transforms-2/transform-lime-square-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-perspective-008.html": [ + [ + "/css/css-transforms-2/transform3d-perspective-008.html", + [ + [ + "/css/css-transforms-2/transform-lime-square-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-perspective-009.html": [ + [ + "/css/css-transforms-2/transform3d-perspective-009.html", + [ + [ + "/css/css-transforms-2/transform3d-perspective-009-ref.html", + "==" + ], + [ + "/css/css-transforms-2/transform-lime-square-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-perspective-origin-001.html": [ + [ + "/css/css-transforms-2/transform3d-perspective-origin-001.html", + [ + [ + "/css/css-transforms-2/transform3d-perspective-origin-ref.html", + "==" + ], + [ + "/css/css-transforms-2/transform3d-rotatex-perspective-001.html", + "!=" + ], + [ + "/css/css-transforms-2/transform3d-rotatex-ref.html", + "!=" + ], + [ + "/css/css-transforms-2/transform-lime-square-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-preserve3d-001.html": [ + [ + "/css/css-transforms-2/transform3d-preserve3d-001.html", + [ + [ + "/css/css-transforms-2/transform3d-preserve3d-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-preserve3d-002.html": [ + [ + "/css/css-transforms-2/transform3d-preserve3d-002.html", + [ + [ + "/css/css-transforms-2/transform-lime-square-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-preserve3d-003.html": [ + [ + "/css/css-transforms-2/transform3d-preserve3d-003.html", + [ + [ + "/css/css-transforms-2/transform-lime-square-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-preserve3d-004.html": [ + [ + "/css/css-transforms-2/transform3d-preserve3d-004.html", + [ + [ + "/css/css-transforms-2/transform-lime-square-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-preserve3d-005.html": [ + [ + "/css/css-transforms-2/transform3d-preserve3d-005.html", + [ + [ + "/css/css-transforms-2/transform-lime-square-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-preserve3d-006.html": [ + [ + "/css/css-transforms-2/transform3d-preserve3d-006.html", + [ + [ + "/css/css-transforms-2/transform-lime-square-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-preserve3d-007.html": [ + [ + "/css/css-transforms-2/transform3d-preserve3d-007.html", + [ + [ + "/css/css-transforms-2/transform-lime-square-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-preserve3d-008.html": [ + [ + "/css/css-transforms-2/transform3d-preserve3d-008.html", + [ + [ + "/css/css-transforms-2/transform-lime-square-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-preserve3d-009.html": [ + [ + "/css/css-transforms-2/transform3d-preserve3d-009.html", + [ + [ + "/css/css-transforms-2/transform-lime-square-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-preserve3d-010.html": [ + [ + "/css/css-transforms-2/transform3d-preserve3d-010.html", + [ + [ + "/css/css-transforms-2/transform-lime-square-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-preserve3d-011.html": [ + [ + "/css/css-transforms-2/transform3d-preserve3d-011.html", + [ + [ + "/css/css-transforms-2/transform-lime-square-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-preserve3d-012.html": [ + [ + "/css/css-transforms-2/transform3d-preserve3d-012.html", + [ + [ + "/css/css-transforms-2/transform-blank-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-preserve3d-013.html": [ + [ + "/css/css-transforms-2/transform3d-preserve3d-013.html", + [ + [ + "/css/css-transforms-2/transform3d-preserve3d-013-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-rotate3d-001.html": [ + [ + "/css/css-transforms-2/transform3d-rotate3d-001.html", + [ + [ + "/css/css-transforms-2/transform3d-rotatex-ref.html", + "==" + ], + [ + "/css/css-transforms-2/transform-lime-square-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-rotate3d-002.html": [ + [ + "/css/css-transforms-2/transform3d-rotate3d-002.html", + [ + [ + "/css/css-transforms-2/transform3d-rotatey-ref.html", + "==" + ], + [ + "/css/css-transforms-2/transform-lime-square-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-rotatex-001.html": [ + [ + "/css/css-transforms-2/transform3d-rotatex-001.html", + [ + [ + "/css/css-transforms-2/transform3d-rotatex-ref.html", + "==" + ], + [ + "/css/css-transforms-2/transform-lime-square-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-rotatex-perspective-002.html": [ + [ + "/css/css-transforms-2/transform3d-rotatex-perspective-002.html", + [ + [ + "/css/css-transforms-2/transform3d-rotatex-ref.html", + "!=" + ], + [ + "/css/css-transforms-2/transform-lime-square-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-rotatex-perspective-003.html": [ + [ + "/css/css-transforms-2/transform3d-rotatex-perspective-003.html", + [ + [ + "/css/css-transforms-2/transform3d-rotatex-perspective-ref.html", + "==" + ], + [ + "/css/css-transforms-2/transform3d-rotatex-perspective-notref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-rotatex-transformorigin-001.html": [ + [ + "/css/css-transforms-2/transform3d-rotatex-transformorigin-001.html", + [ + [ + "/css/css-transforms-2/transform3d-rotatex-transformorigin-ref.html", + "==" + ], + [ + "/css/css-transforms-2/transform-lime-square-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-rotatey-001.html": [ + [ + "/css/css-transforms-2/transform3d-rotatey-001.html", + [ + [ + "/css/css-transforms-2/transform3d-rotatey-ref.html", + "==" + ], + [ + "/css/css-transforms-2/transform-lime-square-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-scale-001.html": [ + [ + "/css/css-transforms-2/transform3d-scale-001.html", + [ + [ + "/css/css-transforms-2/transform3d-scale-001-ref.html", + "==" + ], + [ + "/css/css-transforms-2/transform3d-scale-001-notref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-scale-002.html": [ + [ + "/css/css-transforms-2/transform3d-scale-002.html", + [ + [ + "/css/css-transforms-2/transform3d-scale-001-ref.html", + "==" + ], + [ + "/css/css-transforms-2/transform3d-scale-001-notref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-scale-003.html": [ + [ + "/css/css-transforms-2/transform3d-scale-003.html", + [ + [ + "/css/css-transforms-2/transform3d-scale-001-ref.html", + "==" + ], + [ + "/css/css-transforms-2/transform3d-scale-001-notref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-scale-004.html": [ + [ + "/css/css-transforms-2/transform3d-scale-004.html", + [ + [ + "/css/css-transforms-2/transform-blank-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-scale-005.html": [ + [ + "/css/css-transforms-2/transform3d-scale-005.html", + [ + [ + "/css/css-transforms-2/transform3d-scale-005-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-scale-006.html": [ + [ + "/css/css-transforms-2/transform3d-scale-006.html", + [ + [ + "/css/css-transforms-2/transform3d-scale-005-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-scale-007.html": [ + [ + "/css/css-transforms-2/transform3d-scale-007.html", + [ + [ + "/css/css-transforms-2/transform3d-scale-007-ref.html", + "==" + ], + [ + "/css/css-transforms-2/transform3d-scale-001-notref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-sorting-001.html": [ + [ + "/css/css-transforms-2/transform3d-sorting-001.html", + [ + [ + "/css/css-transforms-2/transform-lime-square-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-sorting-002.html": [ + [ + "/css/css-transforms-2/transform3d-sorting-002.html", + [ + [ + "/css/css-transforms-2/transform-lime-square-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-sorting-003.html": [ + [ + "/css/css-transforms-2/transform3d-sorting-003.html", + [ + [ + "/css/css-transforms-2/transform-lime-square-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-sorting-004.html": [ + [ + "/css/css-transforms-2/transform3d-sorting-004.html", + [ + [ + "/css/css-transforms-2/transform-lime-square-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-sorting-005.html": [ + [ + "/css/css-transforms-2/transform3d-sorting-005.html", + [ + [ + "/css/css-transforms-2/transform-lime-square-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-sorting-006.html": [ + [ + "/css/css-transforms-2/transform3d-sorting-006.html", + [ + [ + "/css/css-transforms-2/transform3d-sorting-006-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-translate3d-001.html": [ + [ + "/css/css-transforms-2/transform3d-translate3d-001.html", + [ + [ + "/css/css-transforms-2/transform3d-translate3d-ref.html", + "==" + ], + [ + "/css/css-transforms-2/transform-lime-square-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-transforms-2/transform3d-translatez-001.html": [ + [ + "/css/css-transforms-2/transform3d-translatez-001.html", + [ + [ + "/css/css-transforms-2/transform3d-translatez-ref.html", + "==" + ], + [ + "/css/css-transforms-2/transform3d-translatez-notref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-transforms-2/transforms-rotateY-degree-60.html": [ + [ + "/css/css-transforms-2/transforms-rotateY-degree-60.html", + [ + [ + "/css/css-transforms-2/reference/transforms-rotateY-degree-60-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/transofrmed-preserve-3d-1.html": [ + [ + "/css/css-transforms-2/transofrmed-preserve-3d-1.html", + [ + [ + "/css/css-transforms-2/reference/transofrmed-preserve-3d-1-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/transofrmed-rotateX-3.html": [ + [ + "/css/css-transforms-2/transofrmed-rotateX-3.html", + [ + [ + "/css/css-transforms-2/reference/transofrmed-rotateX-3-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/transofrmed-rotateY-1.html": [ + [ + "/css/css-transforms-2/transofrmed-rotateY-1.html", + [ + [ + "/css/css-transforms-2/reference/transofrmed-rotateY-1-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/ttwf-css-3d-polygon-cycle-mismatch.html": [ + [ + "/css/css-transforms-2/ttwf-css-3d-polygon-cycle-mismatch.html", + [ + [ + "/css/css-transforms-2/reference/ttwf-css-3d-polygon-cycle-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms-2/ttwf-css-3d-polygon-cycle.html": [ + [ + "/css/css-transforms-2/ttwf-css-3d-polygon-cycle.html", + [ + [ + "/css/css-transforms-2/reference/ttwf-css-3d-polygon-cycle-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-transitions-1/transition-test.html": [ [ "/css/css-transitions-1/transition-test.html", @@ -143927,6 +149957,54 @@ {} ] ], + "css/css-writing-modes-3/text-orientation-mixed-vlr-100.html": [ + [ + "/css/css-writing-modes-3/text-orientation-mixed-vlr-100.html", + [ + [ + "/css/css-writing-modes-3/text-orientation-mixed-vlr-100-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-writing-modes-3/text-orientation-mixed-vrl-100.html": [ + [ + "/css/css-writing-modes-3/text-orientation-mixed-vrl-100.html", + [ + [ + "/css/css-writing-modes-3/text-orientation-mixed-vrl-100-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-writing-modes-3/text-orientation-sideways-vlr-100.html": [ + [ + "/css/css-writing-modes-3/text-orientation-sideways-vlr-100.html", + [ + [ + "/css/css-writing-modes-3/text-orientation-sideways-vlr-100-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-writing-modes-3/text-orientation-sideways-vrl-100.html": [ + [ + "/css/css-writing-modes-3/text-orientation-sideways-vrl-100.html", + [ + [ + "/css/css-writing-modes-3/text-orientation-sideways-vrl-100-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-writing-modes-3/text-orientation-upright-srl-018.xht": [ [ "/css/css-writing-modes-3/text-orientation-upright-srl-018.xht", @@ -143939,6 +150017,30 @@ {} ] ], + "css/css-writing-modes-3/text-orientation-upright-vlr-100.html": [ + [ + "/css/css-writing-modes-3/text-orientation-upright-vlr-100.html", + [ + [ + "/css/css-writing-modes-3/text-orientation-upright-vlr-100-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-writing-modes-3/text-orientation-upright-vrl-100.html": [ + [ + "/css/css-writing-modes-3/text-orientation-upright-vrl-100.html", + [ + [ + "/css/css-writing-modes-3/text-orientation-upright-vrl-100-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-writing-modes-3/vertical-alignment-002.xht": [ [ "/css/css-writing-modes-3/vertical-alignment-002.xht", @@ -145703,6 +151805,54 @@ {} ] ], + "css/motion-1/offset-path-ray.html": [ + [ + "/css/motion-1/offset-path-ray.html", + [ + [ + "/css/motion-1/offset-path-ray-ref.html", + "==" + ] + ], + {} + ] + ], + "css/motion-1/offset-path-string.html": [ + [ + "/css/motion-1/offset-path-string.html", + [ + [ + "/css/motion-1/offset-path-string-ref.html", + "==" + ] + ], + {} + ] + ], + "css/motion-1/offset-rotate-001.html": [ + [ + "/css/motion-1/offset-rotate-001.html", + [ + [ + "/css/motion-1/offset-rotate-ref.html", + "==" + ] + ], + {} + ] + ], + "css/motion-1/offset-rotate-002.html": [ + [ + "/css/motion-1/offset-rotate-002.html", + [ + [ + "/css/motion-1/offset-rotate-ref.html", + "==" + ] + ], + {} + ] + ], "css/selectors4/focus-within-001.html": [ [ "/css/selectors4/focus-within-001.html", @@ -145768,7 +151918,7 @@ "/css/selectors4/focus-within-006.html", [ [ - "/css/selectors4/focus-within-001-ref.html", + "/css/selectors4/focus-within-006-ref.html", "==" ] ], @@ -145799,6 +151949,18 @@ {} ] ], + "css/selectors4/focus-within-010.html": [ + [ + "/css/selectors4/focus-within-010.html", + [ + [ + "/css/selectors4/focus-within-shadow-001-ref.html", + "==" + ] + ], + {} + ] + ], "css/selectors4/focus-within-shadow-001.html": [ [ "/css/selectors4/focus-within-shadow-001.html", @@ -152519,6 +158681,18 @@ {} ] ], + "css/vendor-imports/mozilla/mozilla-central-reftests/masking/mask-composite-1d.html": [ + [ + "/css/vendor-imports/mozilla/mozilla-central-reftests/masking/mask-composite-1d.html", + [ + [ + "/css/vendor-imports/mozilla/mozilla-central-reftests/masking/mask-composite-1-ref.html", + "==" + ] + ], + {} + ] + ], "css/vendor-imports/mozilla/mozilla-central-reftests/masking/mask-composite-2a.html": [ [ "/css/vendor-imports/mozilla/mozilla-central-reftests/masking/mask-composite-2a.html", @@ -152807,6 +158981,18 @@ {} ] ], + "css/vendor-imports/mozilla/mozilla-central-reftests/masking/mask-mode-d.html": [ + [ + "/css/vendor-imports/mozilla/mozilla-central-reftests/masking/mask-mode-d.html", + [ + [ + "/css/vendor-imports/mozilla/mozilla-central-reftests/masking/mask-mode-ref.html", + "==" + ] + ], + {} + ] + ], "css/vendor-imports/mozilla/mozilla-central-reftests/masking/mask-mode-to-mask-type.html": [ [ "/css/vendor-imports/mozilla/mozilla-central-reftests/masking/mask-mode-to-mask-type.html", @@ -153527,6 +159713,18 @@ {} ] ], + "css/vendor-imports/mozilla/mozilla-central-reftests/selectors4/class-id-attr-selector-invalidation-01.html": [ + [ + "/css/vendor-imports/mozilla/mozilla-central-reftests/selectors4/class-id-attr-selector-invalidation-01.html", + [ + [ + "/css/vendor-imports/mozilla/mozilla-central-reftests/selectors4/class-id-attr-selector-invalidation-01-ref.html", + "==" + ] + ], + {} + ] + ], "css/vendor-imports/mozilla/mozilla-central-reftests/selectors4/dir-style-01a.html": [ [ "/css/vendor-imports/mozilla/mozilla-central-reftests/selectors4/dir-style-01a.html", @@ -161087,6 +167285,126 @@ {} ] ], + "html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-001.html": [ + [ + "/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-001.html", + [ + [ + "/html/editing/editing-0/spelling-and-grammar-checking/references/spelling-markers-001-ref.html", + "==" + ] + ], + {} + ] + ], + "html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-002.html": [ + [ + "/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-002.html", + [ + [ + "/html/editing/editing-0/spelling-and-grammar-checking/references/spelling-markers-001-ref.html", + "==" + ] + ], + {} + ] + ], + "html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-003.html": [ + [ + "/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-003.html", + [ + [ + "/html/editing/editing-0/spelling-and-grammar-checking/references/spelling-markers-001-ref.html", + "==" + ] + ], + {} + ] + ], + "html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-004.html": [ + [ + "/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-004.html", + [ + [ + "/html/editing/editing-0/spelling-and-grammar-checking/references/spelling-markers-001-ref.html", + "==" + ] + ], + {} + ] + ], + "html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-005.html": [ + [ + "/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-005.html", + [ + [ + "/html/editing/editing-0/spelling-and-grammar-checking/references/spelling-markers-001-ref.html", + "==" + ] + ], + {} + ] + ], + "html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-006.html": [ + [ + "/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-006.html", + [ + [ + "/html/editing/editing-0/spelling-and-grammar-checking/references/spelling-markers-001-ref.html", + "==" + ] + ], + {} + ] + ], + "html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-007.html": [ + [ + "/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-007.html", + [ + [ + "/html/editing/editing-0/spelling-and-grammar-checking/references/spelling-markers-001-ref.html", + "==" + ] + ], + {} + ] + ], + "html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-008.html": [ + [ + "/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-008.html", + [ + [ + "/html/editing/editing-0/spelling-and-grammar-checking/references/spelling-markers-001-ref.html", + "==" + ] + ], + {} + ] + ], + "html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-009.html": [ + [ + "/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-009.html", + [ + [ + "/html/editing/editing-0/spelling-and-grammar-checking/references/spelling-markers-001-ref.html", + "==" + ] + ], + {} + ] + ], + "html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-010.html": [ + [ + "/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-010.html", + [ + [ + "/html/editing/editing-0/spelling-and-grammar-checking/references/spelling-markers-001-ref.html", + "==" + ] + ], + {} + ] + ], "html/editing/the-hidden-attribute/hidden-1a.html": [ [ "/html/editing/the-hidden-attribute/hidden-1a.html", @@ -161903,6 +168221,18 @@ {} ] ], + "html/rendering/replaced-elements/the-option-element/option-with-br.html": [ + [ + "/html/rendering/replaced-elements/the-option-element/option-with-br.html", + [ + [ + "/html/rendering/replaced-elements/the-option-element/option-with-br-ref.html", + "==" + ] + ], + {} + ] + ], "html/semantics/document-metadata/the-link-element/stylesheet-change-href.html": [ [ "/html/semantics/document-metadata/the-link-element/stylesheet-change-href.html", @@ -167053,24 +173383,24 @@ {} ] ], - "css/css-transforms-1/transform3d-rotatex-perspective-001.html": [ + "css/css-transforms-2/transform3d-rotatex-perspective-001.html": [ [ - "/css/css-transforms-1/transform3d-rotatex-perspective-001.html", + "/css/css-transforms-2/transform3d-rotatex-perspective-001.html", [ [ - "/css/css-transforms-1/transform3d-rotatex-ref.html", + "/css/css-transforms-2/transform3d-rotatex-ref.html", "!=" ] ], {} ] ], - "css/css-transforms-1/transform3d-rotatex-ref.html": [ + "css/css-transforms-2/transform3d-rotatex-ref.html": [ [ - "/css/css-transforms-1/transform3d-rotatex-ref.html", + "/css/css-transforms-2/transform3d-rotatex-ref.html", [ [ - "/css/css-transforms-1/transform-lime-square-ref.html", + "/css/css-transforms-2/transform-lime-square-ref.html", "!=" ] ], @@ -167477,6 +173807,11 @@ ] }, "support": { + "./.codecov.yml": [ + [ + {} + ] + ], "./.gitignore": [ [ {} @@ -167512,6 +173847,11 @@ {} ] ], + "./check_stability.ini": [ + [ + {} + ] + ], "./check_stability.py": [ [ {} @@ -167532,6 +173872,11 @@ {} ] ], + "./ci_unittest.sh": [ + [ + {} + ] + ], "./config.default.json": [ [ {} @@ -167572,6 +173917,11 @@ {} ] ], + "./wptrun": [ + [ + {} + ] + ], "2dcontext/2x2.png": [ [ {} @@ -168787,11 +175137,6 @@ {} ] ], - "DOM-parsing/todo/internalSubset.html": [ - [ - {} - ] - ], "FileAPI/BlobURL/support/file_test1.js": [ [ {} @@ -169052,11 +175397,21 @@ {} ] ], + "WebCryptoAPI/util/worker-report-crypto-subtle-presence.js": [ + [ + {} + ] + ], "WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey.js": [ [ {} ] ], + "WebIDL/OWNERS": [ + [ + {} + ] + ], "WebIDL/ecmascript-binding/es-exceptions/constructor-object.js": [ [ {} @@ -169687,6 +176042,11 @@ {} ] ], + "XMLHttpRequest/resources/base.xml": [ + [ + {} + ] + ], "XMLHttpRequest/resources/chunked.py": [ [ {} @@ -169962,7 +176322,7 @@ {} ] ], - "ambient-light/AmbientLightSensor.js": [ + "accelerometer/support-iframe.html": [ [ {} ] @@ -172467,6 +178827,11 @@ {} ] ], + "assumptions/ahem-ref.html": [ + [ + {} + ] + ], "assumptions/canvas-background-ref.html": [ [ {} @@ -172487,6 +178852,16 @@ {} ] ], + "assumptions/tools/ahem-generate-table.py": [ + [ + {} + ] + ], + "assumptions/tools/build.sh": [ + [ + {} + ] + ], "auxclick/OWNERS": [ [ {} @@ -172507,11 +178882,6 @@ {} ] ], - "battery-status/support-iframe-initial.html": [ - [ - {} - ] - ], "battery-status/support-iframe.html": [ [ {} @@ -172527,6 +178897,11 @@ {} ] ], + "beacon/resources/content-type.py": [ + [ + {} + ] + ], "beacon/resources/inspect-header.py": [ [ {} @@ -172597,6 +178972,11 @@ {} ] ], + "common/css-paint-tests.js": [ + [ + {} + ] + ], "common/css-red.txt": [ [ {} @@ -172642,6 +179022,16 @@ {} ] ], + "common/object-association.js": [ + [ + {} + ] + ], + "common/performance-timeline-utils.js": [ + [ + {} + ] + ], "common/redirect-opt-in.py": [ [ {} @@ -179132,7 +185522,7 @@ {} ] ], - "conformance-checkers/html-svg/animate-elem-77-t-novalid.html": [ + "conformance-checkers/html-svg/animate-elem-77-t-isvalid.html": [ [ {} ] @@ -179897,7 +186287,7 @@ {} ] ], - "conformance-checkers/html-svg/linking-a-10-f-novalid.html": [ + "conformance-checkers/html-svg/linking-a-10-f-isvalid.html": [ [ {} ] @@ -194502,12 +200892,57 @@ {} ] ], - "conformance-checkers/xhtml/elements/menu/001-haswarn.xhtml": [ + "conformance-checkers/xhtml/elements/menu/embed-contextmenu-isvalid.xhtml": [ [ {} ] ], - "conformance-checkers/xhtml/elements/menu/001-novalid.xhtml": [ + "conformance-checkers/xhtml/elements/menu/menu-containing-hr-novalid.xhtml": [ + [ + {} + ] + ], + "conformance-checkers/xhtml/elements/menu/menu-containing-menu-novalid.xhtml": [ + [ + {} + ] + ], + "conformance-checkers/xhtml/elements/menu/menu-containing-text-novalid.xhtml": [ + [ + {} + ] + ], + "conformance-checkers/xhtml/elements/menu/menu-type-context-novalid.xhtml": [ + [ + {} + ] + ], + "conformance-checkers/xhtml/elements/menu/menu-type-popup-novalid.xhtml": [ + [ + {} + ] + ], + "conformance-checkers/xhtml/elements/menu/menu-type-toolbar-novalid.xhtml": [ + [ + {} + ] + ], + "conformance-checkers/xhtml/elements/menu/menu-valid.xhtml": [ + [ + {} + ] + ], + "conformance-checkers/xhtml/elements/menu/menuitem-children-novalid.xhtml": [ + [ + {} + ] + ], + "conformance-checkers/xhtml/elements/menu/menuitem-label-novalid.xhtml": [ + [ + {} + ] + ], + "conformance-checkers/xhtml/elements/menu/p-contextmenu-novalid.xhtml": [ [ {} ] @@ -194717,11 +201152,6 @@ {} ] ], - "content-security-policy/base-uri/base-uri_iframe_sandbox.sub.html.headers": [ - [ - {} - ] - ], "content-security-policy/blink-contrib-2/allowed.css": [ [ {} @@ -195657,12 +202087,12 @@ {} ] ], - "content-security-policy/embedded-enforcement/support/echo-embedding-csp.py": [ + "content-security-policy/embedded-enforcement/support/echo-policy-multiple.py": [ [ {} ] ], - "content-security-policy/embedded-enforcement/support/echo-policy-multiple.py": [ + "content-security-policy/embedded-enforcement/support/echo-required-csp.py": [ [ {} ] @@ -195707,6 +202137,21 @@ {} ] ], + "content-security-policy/frame-src/frame-src-redirect.html.headers": [ + [ + {} + ] + ], + "content-security-policy/frame-src/support/frame.html": [ + [ + {} + ] + ], + "content-security-policy/frame-src/support/testharness-helper.sub.js": [ + [ + {} + ] + ], "content-security-policy/generic/fail-0_1.js": [ [ {} @@ -195872,6 +202317,16 @@ {} ] ], + "content-security-policy/nonce-hiding/script-nonces-hidden.tentative.html.headers": [ + [ + {} + ] + ], + "content-security-policy/nonce-hiding/svgscript-nonces-hidden.tentative.html.headers": [ + [ + {} + ] + ], "content-security-policy/object-src/object-src-2_1.html.sub.headers": [ [ {} @@ -196062,6 +202517,11 @@ {} ] ], + "content-security-policy/securitypolicyviolation/img-src-redirect-upgrade-reporting.https.html.headers": [ + [ + {} + ] + ], "content-security-policy/securitypolicyviolation/support/inside-worker.sub.js": [ [ {} @@ -196072,6 +202532,16 @@ {} ] ], + "content-security-policy/securitypolicyviolation/support/testharness-helper.sub.js": [ + [ + {} + ] + ], + "content-security-policy/securitypolicyviolation/upgrade-insecure-requests-reporting.https.html.headers": [ + [ + {} + ] + ], "content-security-policy/style-src/resources/style-src-import.sub.css": [ [ {} @@ -196277,6 +202747,16 @@ {} ] ], + "cors/resources/access-control-expose-headers-parsing-2.asis": [ + [ + {} + ] + ], + "cors/resources/access-control-expose-headers-parsing.asis": [ + [ + {} + ] + ], "cors/resources/checkandremove.py": [ [ {} @@ -196317,12 +202797,122 @@ {} ] ], - "css-timing-1/OWNERS": [ + "css-font-display/font-display-ref.html": [ [ {} ] ], - "css-timing-1/testcommon.js": [ + "css-font-display/resources/slow-ahem-loading.py": [ + [ + {} + ] + ], + "css-paint-api/OWNERS": [ + [ + {} + ] + ], + "css-paint-api/background-image-alpha-ref.html": [ + [ + {} + ] + ], + "css-paint-api/background-image-multiple-ref.html": [ + [ + {} + ] + ], + "css-paint-api/background-image-tiled-ref.html": [ + [ + {} + ] + ], + "css-paint-api/invalid-image-constructor-error-ref.html": [ + [ + {} + ] + ], + "css-paint-api/invalid-image-paint-error-ref.html": [ + [ + {} + ] + ], + "css-paint-api/invalid-image-pending-script-ref.html": [ + [ + {} + ] + ], + "css-paint-api/overdraw-ref.html": [ + [ + {} + ] + ], + "css-paint-api/paint-arguments-ref.html": [ + [ + {} + ] + ], + "css-paint-api/paint-function-arguments-ref.html": [ + [ + {} + ] + ], + "css-paint-api/paint2d-composite-ref.html": [ + [ + {} + ] + ], + "css-paint-api/paint2d-filter-ref.html": [ + [ + {} + ] + ], + "css-paint-api/paint2d-gradient-ref.html": [ + [ + {} + ] + ], + "css-paint-api/paint2d-image-ref.html": [ + [ + {} + ] + ], + "css-paint-api/paint2d-paths-ref.html": [ + [ + {} + ] + ], + "css-paint-api/paint2d-rects-ref.html": [ + [ + {} + ] + ], + "css-paint-api/paint2d-shadows-ref.html": [ + [ + {} + ] + ], + "css-paint-api/paint2d-transform-ref.html": [ + [ + {} + ] + ], + "css-paint-api/valid-image-after-load-ref.html": [ + [ + {} + ] + ], + "css-paint-api/valid-image-before-load-ref.html": [ + [ + {} + ] + ], + "css-timing/OWNERS": [ + [ + {} + ] + ], + "css-timing/testcommon.js": [ [ {} ] @@ -217077,11 +223667,6 @@ {} ] ], - "css/WOFF2/support/valid-009.woff2": [ - [ - {} - ] - ], "css/WOFF2/tabledata-bad-origlength-loca-001-ref.xht": [ [ {} @@ -217232,11 +223817,6 @@ {} ] ], - "css/WOFF2/valid-009-ref.xht": [ - [ - {} - ] - ], "css/build-css-testsuites.sh": [ [ {} @@ -219022,6 +225602,11 @@ {} ] ], + "css/css-display-3/display-contents-state-change-001-ref.html": [ + [ + {} + ] + ], "css/css-display-3/display-contents-table-001-ref.html": [ [ {} @@ -220432,6 +227017,176 @@ {} ] ], + "css/css-fonts-3/font-kerning-01-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-kerning-02-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-kerning-03-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-kerning-04-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-kerning-05-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-01-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-02-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-03-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-04-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-alternates-01-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-alternates-02-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-alternates-03-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-alternates-04-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-alternates-05-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-alternates-06-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-alternates-07-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-alternates-08-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-alternates-09-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-alternates-10-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-alternates-11-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-alternates-12-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-alternates-13-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-alternates-14-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-alternates-15-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-alternates-16-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-alternates-17-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-alternates-18-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-caps-01-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-caps-02-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-caps-03-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-caps-04-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-caps-05-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-caps-06-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-caps-07-ref.html": [ + [ + {} + ] + ], "css/css-fonts-3/font-variant-caps-ref.html": [ [ {} @@ -220442,21 +227197,186 @@ {} ] ], + "css/css-fonts-3/font-variant-east-asian-01-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-east-asian-02-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-east-asian-03-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-east-asian-04-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-east-asian-05-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-east-asian-06-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-east-asian-07-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-east-asian-08-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-east-asian-09-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-east-asian-10-ref.html": [ + [ + {} + ] + ], "css/css-fonts-3/font-variant-east-asian-ref.html": [ [ {} ] ], + "css/css-fonts-3/font-variant-ligatures-01-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-ligatures-02-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-ligatures-03-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-ligatures-04-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-ligatures-05-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-ligatures-06-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-ligatures-07-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-ligatures-08-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-ligatures-09-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-ligatures-10-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-ligatures-11-ref.html": [ + [ + {} + ] + ], "css/css-fonts-3/font-variant-ligatures-ref.html": [ [ {} ] ], + "css/css-fonts-3/font-variant-numeric-01-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-numeric-02-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-numeric-03-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-numeric-04-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-numeric-05-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-numeric-06-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-numeric-07-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-numeric-08-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-numeric-09-ref.html": [ + [ + {} + ] + ], "css/css-fonts-3/font-variant-numeric-ref.html": [ [ {} ] ], + "css/css-fonts-3/font-variant-position-01-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-position-02-ref.html": [ + [ + {} + ] + ], + "css/css-fonts-3/font-variant-position-03-ref.html": [ + [ + {} + ] + ], "css/css-fonts-3/font-variant-position-ref.html": [ [ {} @@ -220597,6 +227517,11 @@ {} ] ], + "css/css-fonts-3/support/fonts/FontWithFancyFeatures.otf": [ + [ + {} + ] + ], "css/css-fonts-3/support/fonts/FontWithFeatures.otf": [ [ {} @@ -220607,6 +227532,11 @@ {} ] ], + "css/css-fonts-3/support/fonts/Lato-Medium.ttf": [ + [ + {} + ] + ], "css/css-fonts-3/support/fonts/LigatureSymbolsWithSpaces.woff": [ [ {} @@ -228057,6 +234987,136 @@ {} ] ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-001-ref.html": [ + [ + {} + ] + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-005-ref.html": [ + [ + {} + ] + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-006-ref.html": [ + [ + {} + ] + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-007-ref.html": [ + [ + {} + ] + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-008-ref.html": [ + [ + {} + ] + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-009-ref.html": [ + [ + {} + ] + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-011-ref.html": [ + [ + {} + ] + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-012-ref.html": [ + [ + {} + ] + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-013-ref.html": [ + [ + {} + ] + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-014-ref.html": [ + [ + {} + ] + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-015-ref.html": [ + [ + {} + ] + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-016-ref.html": [ + [ + {} + ] + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-017-ref.html": [ + [ + {} + ] + ], + "css/css-grid-1/abspos/positioned-grid-items-001-ref.html": [ + [ + {} + ] + ], + "css/css-grid-1/abspos/positioned-grid-items-005-ref.html": [ + [ + {} + ] + ], + "css/css-grid-1/abspos/positioned-grid-items-006-ref.html": [ + [ + {} + ] + ], + "css/css-grid-1/abspos/positioned-grid-items-007-ref.html": [ + [ + {} + ] + ], + "css/css-grid-1/abspos/positioned-grid-items-008-ref.html": [ + [ + {} + ] + ], + "css/css-grid-1/abspos/positioned-grid-items-009-ref.html": [ + [ + {} + ] + ], + "css/css-grid-1/abspos/positioned-grid-items-011-ref.html": [ + [ + {} + ] + ], + "css/css-grid-1/abspos/positioned-grid-items-012-ref.html": [ + [ + {} + ] + ], + "css/css-grid-1/abspos/positioned-grid-items-013-ref.html": [ + [ + {} + ] + ], + "css/css-grid-1/abspos/positioned-grid-items-014-ref.html": [ + [ + {} + ] + ], + "css/css-grid-1/abspos/positioned-grid-items-015-ref.html": [ + [ + {} + ] + ], + "css/css-grid-1/abspos/positioned-grid-items-016-ref.html": [ + [ + {} + ] + ], + "css/css-grid-1/abspos/positioned-grid-items-017-ref.html": [ + [ + {} + ] + ], "css/css-grid-1/grid-definition/support/testing-utils.js": [ [ {} @@ -228087,6 +235147,11 @@ {} ] ], + "css/css-grid-1/grid-items/support/500x500-green.png": [ + [ + {} + ] + ], "css/css-grid-1/grid-items/support/50x100-green.png": [ [ {} @@ -228117,17 +235182,17 @@ {} ] ], - "css/css-grid-1/reference/grid-2x2-blue-yellow-lime-magenta.xht": [ + "css/css-grid-1/reference/grid-2x2-blue-yellow-lime-magenta.html": [ [ {} ] ], - "css/css-grid-1/reference/grid-filled-blue-yellow-green-overlapped-100px-squares.xht": [ + "css/css-grid-1/reference/grid-filled-blue-yellow-green-overlapped-100px-squares.html": [ [ {} ] ], - "css/css-grid-1/reference/grid-first-letter-green-margin-no-collapse-ref.xht": [ + "css/css-grid-1/reference/grid-first-letter-green-margin-no-collapse-ref.html": [ [ {} ] @@ -228162,7 +235227,12 @@ {} ] ], - "css/css-grid-1/reference/grid-text-green-margin-no-collapse-ref.xht": [ + "css/css-grid-1/reference/grid-text-green-margin-no-collapse-ref.html": [ + [ + {} + ] + ], + "css/css-grid-1/support/check-layout-th.js": [ [ {} ] @@ -228192,6 +235262,11 @@ {} ] ], + "css/css-images-3/gradients-with-border-ref.html": [ + [ + {} + ] + ], "css/css-images-3/linear-gradient-ref.html": [ [ {} @@ -229662,6 +236737,66 @@ {} ] ], + "css/css-position-3/position-sticky-bottom-ref.html": [ + [ + {} + ] + ], + "css/css-position-3/position-sticky-left-ref.html": [ + [ + {} + ] + ], + "css/css-position-3/position-sticky-right-ref.html": [ + [ + {} + ] + ], + "css/css-position-3/position-sticky-table-tfoot-bottom-ref.html": [ + [ + {} + ] + ], + "css/css-position-3/position-sticky-table-th-bottom-ref.html": [ + [ + {} + ] + ], + "css/css-position-3/position-sticky-table-th-left-ref.html": [ + [ + {} + ] + ], + "css/css-position-3/position-sticky-table-th-right-ref.html": [ + [ + {} + ] + ], + "css/css-position-3/position-sticky-table-th-top-ref.html": [ + [ + {} + ] + ], + "css/css-position-3/position-sticky-table-thead-top-ref.html": [ + [ + {} + ] + ], + "css/css-position-3/position-sticky-table-tr-bottom-ref.html": [ + [ + {} + ] + ], + "css/css-position-3/position-sticky-table-tr-top-ref.html": [ + [ + {} + ] + ], + "css/css-position-3/position-sticky-top-ref.html": [ + [ + {} + ] + ], "css/css-pseudo-4/OWNERS": [ [ {} @@ -235167,11 +242302,6 @@ {} ] ], - "css/css-transforms-1/css-rotate-2d-3d-001-ref.html": [ - [ - {} - ] - ], "css/css-transforms-1/css-skew-001-ref.html": [ [ {} @@ -235182,11 +242312,6 @@ {} ] ], - "css/css-transforms-1/css3-transform-rotateY-ref.html": [ - [ - {} - ] - ], "css/css-transforms-1/css3-transform-scale-ref-002.html": [ [ {} @@ -235277,31 +242402,11 @@ {} ] ], - "css/css-transforms-1/reference/backface-visibility-hidden-ref.html": [ - [ - {} - ] - ], "css/css-transforms-1/reference/css-scale-nested-ref.html": [ [ {} ] ], - "css/css-transforms-1/reference/css-transform-3d-rotateX-ref.html": [ - [ - {} - ] - ], - "css/css-transforms-1/reference/css-transform-3d-rotateZ-ref.html": [ - [ - {} - ] - ], - "css/css-transforms-1/reference/css-transform-3d-transform-style-ref.html": [ - [ - {} - ] - ], "css/css-transforms-1/reference/css-transform-scale-ref-001.html": [ [ {} @@ -235312,36 +242417,16 @@ {} ] ], - "css/css-transforms-1/reference/css-transforms-3d-anonymous-block-ref.html": [ - [ - {} - ] - ], "css/css-transforms-1/reference/css-transforms-transformlist-ref.html": [ [ {} ] ], - "css/css-transforms-1/reference/css3-transform-perspective-ref.html": [ - [ - {} - ] - ], "css/css-transforms-1/reference/css3-transform-scale-ref.html": [ [ {} ] ], - "css/css-transforms-1/reference/perspective-origin-reftest.html": [ - [ - {} - ] - ], - "css/css-transforms-1/reference/perspective-reftest.html": [ - [ - {} - ] - ], "css/css-transforms-1/reference/rotate-180-degrees-001.html": [ [ {} @@ -235357,11 +242442,6 @@ {} ] ], - "css/css-transforms-1/reference/rotateY-ref.html": [ - [ - {} - ] - ], "css/css-transforms-1/reference/scale-optional-second-ref.html": [ [ {} @@ -235407,11 +242487,6 @@ {} ] ], - "css/css-transforms-1/reference/transforms-rotateY-degree-60-ref.html": [ - [ - {} - ] - ], "css/css-transforms-1/reference/transforms-skewX-ref.html": [ [ {} @@ -235427,26 +242502,6 @@ {} ] ], - "css/css-transforms-1/reference/transofrmed-preserve-3d-1-ref.html": [ - [ - {} - ] - ], - "css/css-transforms-1/reference/transofrmed-rotateX-3-ref.html": [ - [ - {} - ] - ], - "css/css-transforms-1/reference/transofrmed-rotateY-1-ref.html": [ - [ - {} - ] - ], - "css/css-transforms-1/reference/ttwf-css-3d-polygon-cycle-ref.html": [ - [ - {} - ] - ], "css/css-transforms-1/reference/ttwf-reftest-rotate-ref.html": [ [ {} @@ -235472,11 +242527,6 @@ {} ] ], - "css/css-transforms-1/reftest/transform-3d-rotateY-stair-above-ref-001.xht": [ - [ - {} - ] - ], "css/css-transforms-1/reftest/transform-applies-to-001-ref.xht": [ [ {} @@ -235512,16 +242562,6 @@ {} ] ], - "css/css-transforms-1/rotate_x_45deg-ref.html": [ - [ - {} - ] - ], - "css/css-transforms-1/rotate_y_45deg-ref.html": [ - [ - {} - ] - ], "css/css-transforms-1/scale/reference/svg-scale-ref.html": [ [ {} @@ -236332,116 +243372,6 @@ {} ] ], - "css/css-transforms-1/transform3d-matrix3d-001-ref.html": [ - [ - {} - ] - ], - "css/css-transforms-1/transform3d-matrix3d-002-ref.html": [ - [ - {} - ] - ], - "css/css-transforms-1/transform3d-matrix3d-003-ref.html": [ - [ - {} - ] - ], - "css/css-transforms-1/transform3d-matrix3d-004-ref.html": [ - [ - {} - ] - ], - "css/css-transforms-1/transform3d-matrix3d-005-ref.html": [ - [ - {} - ] - ], - "css/css-transforms-1/transform3d-perspective-001-ref.html": [ - [ - {} - ] - ], - "css/css-transforms-1/transform3d-perspective-009-ref.html": [ - [ - {} - ] - ], - "css/css-transforms-1/transform3d-perspective-origin-ref.html": [ - [ - {} - ] - ], - "css/css-transforms-1/transform3d-preserve3d-001-ref.html": [ - [ - {} - ] - ], - "css/css-transforms-1/transform3d-preserve3d-013-ref.html": [ - [ - {} - ] - ], - "css/css-transforms-1/transform3d-rotatex-perspective-notref.html": [ - [ - {} - ] - ], - "css/css-transforms-1/transform3d-rotatex-perspective-ref.html": [ - [ - {} - ] - ], - "css/css-transforms-1/transform3d-rotatex-transformorigin-ref.html": [ - [ - {} - ] - ], - "css/css-transforms-1/transform3d-rotatey-ref.html": [ - [ - {} - ] - ], - "css/css-transforms-1/transform3d-scale-001-notref.html": [ - [ - {} - ] - ], - "css/css-transforms-1/transform3d-scale-001-ref.html": [ - [ - {} - ] - ], - "css/css-transforms-1/transform3d-scale-005-ref.html": [ - [ - {} - ] - ], - "css/css-transforms-1/transform3d-scale-007-ref.html": [ - [ - {} - ] - ], - "css/css-transforms-1/transform3d-sorting-006-ref.html": [ - [ - {} - ] - ], - "css/css-transforms-1/transform3d-translate3d-ref.html": [ - [ - {} - ] - ], - "css/css-transforms-1/transform3d-translatez-notref.html": [ - [ - {} - ] - ], - "css/css-transforms-1/transform3d-translatez-ref.html": [ - [ - {} - ] - ], "css/css-transforms-1/translate-ref.html": [ [ {} @@ -236497,6 +243427,226 @@ {} ] ], + "css/css-transforms-2/css-rotate-2d-3d-001-ref.html": [ + [ + {} + ] + ], + "css/css-transforms-2/css3-transform-rotateY-ref.html": [ + [ + {} + ] + ], + "css/css-transforms-2/parsing/resources/parsing-testcommon.js": [ + [ + {} + ] + ], + "css/css-transforms-2/reference/backface-visibility-hidden-ref.html": [ + [ + {} + ] + ], + "css/css-transforms-2/reference/css-transform-3d-rotateX-ref.html": [ + [ + {} + ] + ], + "css/css-transforms-2/reference/css-transform-3d-rotateZ-ref.html": [ + [ + {} + ] + ], + "css/css-transforms-2/reference/css-transform-3d-transform-style-ref.html": [ + [ + {} + ] + ], + "css/css-transforms-2/reference/css-transforms-3d-anonymous-block-ref.html": [ + [ + {} + ] + ], + "css/css-transforms-2/reference/css3-transform-perspective-ref.html": [ + [ + {} + ] + ], + "css/css-transforms-2/reference/perspective-origin-reftest.html": [ + [ + {} + ] + ], + "css/css-transforms-2/reference/perspective-reftest.html": [ + [ + {} + ] + ], + "css/css-transforms-2/reference/rotateY-ref.html": [ + [ + {} + ] + ], + "css/css-transforms-2/reference/transforms-rotateY-degree-60-ref.html": [ + [ + {} + ] + ], + "css/css-transforms-2/reference/transofrmed-preserve-3d-1-ref.html": [ + [ + {} + ] + ], + "css/css-transforms-2/reference/transofrmed-rotateX-3-ref.html": [ + [ + {} + ] + ], + "css/css-transforms-2/reference/transofrmed-rotateY-1-ref.html": [ + [ + {} + ] + ], + "css/css-transforms-2/reference/ttwf-css-3d-polygon-cycle-ref.html": [ + [ + {} + ] + ], + "css/css-transforms-2/reftest/transform-3d-rotateY-stair-above-ref-001.xht": [ + [ + {} + ] + ], + "css/css-transforms-2/rotate_x_45deg-ref.html": [ + [ + {} + ] + ], + "css/css-transforms-2/rotate_y_45deg-ref.html": [ + [ + {} + ] + ], + "css/css-transforms-2/transform-blank-ref.html": [ + [ + {} + ] + ], + "css/css-transforms-2/transform-lime-square-ref.html": [ + [ + {} + ] + ], + "css/css-transforms-2/transform3d-matrix3d-001-ref.html": [ + [ + {} + ] + ], + "css/css-transforms-2/transform3d-matrix3d-002-ref.html": [ + [ + {} + ] + ], + "css/css-transforms-2/transform3d-matrix3d-003-ref.html": [ + [ + {} + ] + ], + "css/css-transforms-2/transform3d-matrix3d-004-ref.html": [ + [ + {} + ] + ], + "css/css-transforms-2/transform3d-matrix3d-005-ref.html": [ + [ + {} + ] + ], + "css/css-transforms-2/transform3d-perspective-001-ref.html": [ + [ + {} + ] + ], + "css/css-transforms-2/transform3d-perspective-009-ref.html": [ + [ + {} + ] + ], + "css/css-transforms-2/transform3d-perspective-origin-ref.html": [ + [ + {} + ] + ], + "css/css-transforms-2/transform3d-preserve3d-001-ref.html": [ + [ + {} + ] + ], + "css/css-transforms-2/transform3d-preserve3d-013-ref.html": [ + [ + {} + ] + ], + "css/css-transforms-2/transform3d-rotatex-perspective-notref.html": [ + [ + {} + ] + ], + "css/css-transforms-2/transform3d-rotatex-perspective-ref.html": [ + [ + {} + ] + ], + "css/css-transforms-2/transform3d-rotatex-transformorigin-ref.html": [ + [ + {} + ] + ], + "css/css-transforms-2/transform3d-rotatey-ref.html": [ + [ + {} + ] + ], + "css/css-transforms-2/transform3d-scale-001-notref.html": [ + [ + {} + ] + ], + "css/css-transforms-2/transform3d-scale-001-ref.html": [ + [ + {} + ] + ], + "css/css-transforms-2/transform3d-scale-005-ref.html": [ + [ + {} + ] + ], + "css/css-transforms-2/transform3d-scale-007-ref.html": [ + [ + {} + ] + ], + "css/css-transforms-2/transform3d-sorting-006-ref.html": [ + [ + {} + ] + ], + "css/css-transforms-2/transform3d-translate3d-ref.html": [ + [ + {} + ] + ], + "css/css-transforms-2/transform3d-translatez-notref.html": [ + [ + {} + ] + ], + "css/css-transforms-2/transform3d-translatez-ref.html": [ + [ + {} + ] + ], "css/css-transitions-1/OWNERS": [ [ {} @@ -238332,6 +245482,16 @@ {} ] ], + "css/css-variables-1/resources/variable-reference-refresh-iframe.css": [ + [ + {} + ] + ], + "css/css-variables-1/resources/variable-reference-refresh-iframe.html": [ + [ + {} + ] + ], "css/css-writing-modes-3/OWNERS": [ [ {} @@ -243612,6 +250772,11 @@ {} ] ], + "css/geometry-1/support/interfaces.js": [ + [ + {} + ] + ], "css/mediaqueries-3/OWNERS": [ [ {} @@ -243632,6 +250797,26 @@ {} ] ], + "css/motion-1/offset-path-ray-ref.html": [ + [ + {} + ] + ], + "css/motion-1/offset-path-string-ref.html": [ + [ + {} + ] + ], + "css/motion-1/offset-rotate-ref.html": [ + [ + {} + ] + ], + "css/motion-1/parsing/resources/parsing-testcommon.js": [ + [ + {} + ] + ], "css/reference/OWNERS": [ [ {} @@ -243692,6 +250877,16 @@ {} ] ], + "css/reference/ref-filled-green-200px-square.html": [ + [ + {} + ] + ], + "css/reference/ref-filled-green-300px-square.html": [ + [ + {} + ] + ], "css/reference/single_square_list_marker.xht": [ [ {} @@ -243712,6 +250907,11 @@ {} ] ], + "css/selectors4/focus-within-006-ref.html": [ + [ + {} + ] + ], "css/selectors4/focus-within-007-ref.html": [ [ {} @@ -246497,6 +253697,11 @@ {} ] ], + "css/vendor-imports/mozilla/mozilla-central-reftests/selectors4/class-id-attr-selector-invalidation-01-ref.html": [ + [ + {} + ] + ], "css/vendor-imports/mozilla/mozilla-central-reftests/selectors4/dir-style-01-ref.html": [ [ {} @@ -263522,11 +270727,6 @@ {} ] ], - "css/work-in-progress/hixie/comments-010.xht": [ - [ - {} - ] - ], "css/work-in-progress/hixie/css3-box/box-compact-001-alt.html": [ [ {} @@ -274702,6 +281902,11 @@ {} ] ], + "cssom/support/import-charset.css": [ + [ + {} + ] + ], "cssom/support/import-green.css": [ [ {} @@ -275002,7 +282207,7 @@ {} ] ], - "docs/_writing-tests/idlharness.html": [ + "docs/_writing-tests/idlharness.md": [ [ {} ] @@ -275042,7 +282247,7 @@ {} ] ], - "docs/_writing-tests/testharness-api.html": [ + "docs/_writing-tests/testharness-api.md": [ [ {} ] @@ -275687,6 +282892,11 @@ {} ] ], + "editing/data/README.md": [ + [ + {} + ] + ], "editing/data/backcolor.js": [ [ {} @@ -275702,6 +282912,11 @@ {} ] ], + "editing/data/delete-list-items-in-table-cells.js": [ + [ + {} + ] + ], "editing/data/delete.js": [ [ {} @@ -275912,6 +283127,551 @@ {} ] ], + "encoding/legacy-mb-japanese/shift_jis/jis0208_index.js": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-decoder.js": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-csshiftjis.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-han.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-hangul.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-misc.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms932.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms_kanji.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-shift-jis.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-sjis.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-windows-31j.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-x-sjis.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-han.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-hangul.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-misc.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-href.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encoder.js": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis_chars-csshiftjis.html": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis_chars-csshiftjis.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis_chars-ms932.html": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis_chars-ms932.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis_chars-ms_kanji.html": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis_chars-ms_kanji.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis_chars-shift-jis.html": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis_chars-shift-jis.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis_chars-sjis.html": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis_chars-sjis.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis_chars-windows-31j.html": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis_chars-windows-31j.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis_chars-x-sjis.html": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis_chars-x-sjis.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis_chars.html": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis_chars.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis_errors.html": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis_errors.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-decoder.js": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-cseuckr.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-han.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-hangul.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-misc.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc5601.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-windows-949.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-han.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-misc.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-href.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encoder.js": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr_chars-cseuckr.html": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr_chars-cseuckr.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr_chars-csksc56011987.html": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr_chars-csksc56011987.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr_chars-iso-ir-149.html": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr_chars-iso-ir-149.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr_chars-korean.html": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr_chars-korean.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr_chars-ks_c_5601-1987.html": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr_chars-ks_c_5601-1987.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr_chars-ks_c_5601-1989.html": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr_chars-ks_c_5601-1989.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr_chars-ksc5601.html": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr_chars-ksc5601.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr_chars-ksc_5601.html": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr_chars-ksc_5601.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr_chars-windows-949.html": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr_chars-windows-949.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr_chars.html": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr_chars.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr_errors.html": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr_errors.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr_index.js": [ + [ + {} + ] + ], + "encoding/legacy-mb-tchinese/big5/big5-decoder.js": [ + [ + {} + ] + ], + "encoding/legacy-mb-tchinese/big5/big5-enc-ascii.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-form-big5-hkscs.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-form-cn-big5.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-form-csbig5.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBa.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBb.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-han.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-hangul.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-misc.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-form-x-x-big5.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-form.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-han.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-hangul.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-misc.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-href.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-tchinese/big5/big5-encoder.js": [ + [ + {} + ] + ], + "encoding/legacy-mb-tchinese/big5/big5_chars-big5-hkscs.html": [ + [ + {} + ] + ], + "encoding/legacy-mb-tchinese/big5/big5_chars-big5-hkscs.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-tchinese/big5/big5_chars-cn-big5.html": [ + [ + {} + ] + ], + "encoding/legacy-mb-tchinese/big5/big5_chars-cn-big5.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-tchinese/big5/big5_chars-csbig5.html": [ + [ + {} + ] + ], + "encoding/legacy-mb-tchinese/big5/big5_chars-csbig5.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-tchinese/big5/big5_chars-x-x-big5.html": [ + [ + {} + ] + ], + "encoding/legacy-mb-tchinese/big5/big5_chars-x-x-big5.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-tchinese/big5/big5_chars.html": [ + [ + {} + ] + ], + "encoding/legacy-mb-tchinese/big5/big5_chars.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-tchinese/big5/big5_chars_extra.html": [ + [ + {} + ] + ], + "encoding/legacy-mb-tchinese/big5/big5_chars_extra.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-tchinese/big5/big5_errors.html": [ + [ + {} + ] + ], + "encoding/legacy-mb-tchinese/big5/big5_errors.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-tchinese/big5/big5_index.js": [ + [ + {} + ] + ], "encoding/resources/encodings.js": [ [ {} @@ -276957,7 +284717,7 @@ {} ] ], - "fonts/CanvasTest.sfd": [ + "fetch/security/support/embedded-credential-window.sub.html": [ [ {} ] @@ -277327,6 +285087,11 @@ {} ] ], + "generic-sensor/generic-sensor-tests.js": [ + [ + {} + ] + ], "geolocation-API/OWNERS": [ [ {} @@ -277342,6 +285107,11 @@ {} ] ], + "gyroscope/support-iframe.html": [ + [ + {} + ] + ], "hr-time/OWNERS": [ [ {} @@ -278327,6 +286097,11 @@ {} ] ], + "html/browsers/history/the-location-interface/resources/post-your-origin.html": [ + [ + {} + ] + ], "html/browsers/history/the-location-interface/resources/post-your-protocol.html": [ [ {} @@ -278522,6 +286297,11 @@ {} ] ], + "html/browsers/origin/relaxing-the-same-origin-restriction/support/document_domain_frame.html": [ + [ + {} + ] + ], "html/browsers/sandboxing/.gitkeep": [ [ {} @@ -279677,21 +287457,11 @@ {} ] ], - "html/dom/resources/interfaces.idl": [ - [ - {} - ] - ], "html/dom/resources/self-origin-subframe.html": [ [ {} ] ], - "html/dom/resources/untested-interfaces.idl": [ - [ - {} - ] - ], "html/editing/.gitkeep": [ [ {} @@ -284122,6 +291892,11 @@ {} ] ], + "html/editing/editing-0/spelling-and-grammar-checking/references/spelling-markers-001-ref.html": [ + [ + {} + ] + ], "html/editing/focus/.gitkeep": [ [ {} @@ -284437,6 +292212,106 @@ {} ] ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-worker-success.js": [ + [ + {} + ] + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/blank.html": [ + [ + {} + ] + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/broadcastchannel-iframe.html": [ + [ + {} + ] + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/broadcastchannel-sharedworker.js": [ + [ + {} + ] + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/broadcastchannel-worker.js": [ + [ + {} + ] + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/echo-iframe.html": [ + [ + {} + ] + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/echo-worker.js": [ + [ + {} + ] + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/incrementer-iframe-domain.sub.html": [ + [ + {} + ] + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/incrementer-iframe.html": [ + [ + {} + ] + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/incrementer-popup.html": [ + [ + {} + ] + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/incrementer-worker-with-channel.js": [ + [ + {} + ] + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/incrementer-worker.js": [ + [ + {} + ] + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-iframe-1.html": [ + [ + {} + ] + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-iframe-2.html": [ + [ + {} + ] + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-iframe-3.html": [ + [ + {} + ] + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-iframe-4-incrementer.html": [ + [ + {} + ] + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/serviceworker-failure.js": [ + [ + {} + ] + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/sharedworker-failure.js": [ + [ + {} + ] + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/test-incrementer.js": [ + [ + {} + ] + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/test-sab.js": [ + [ + {} + ] + ], "html/infrastructure/terminology/.gitkeep": [ [ {} @@ -285052,6 +292927,16 @@ {} ] ], + "html/rendering/non-replaced-elements/the-page/support/body-marginwidth-marginheight.html": [ + [ + {} + ] + ], + "html/rendering/non-replaced-elements/the-page/support/body-topmargin-leftmargin.html": [ + [ + {} + ] + ], "html/rendering/non-replaced-elements/the-page/test-body.xhtml": [ [ {} @@ -285137,6 +293022,11 @@ {} ] ], + "html/rendering/replaced-elements/the-option-element/option-with-br-ref.html": [ + [ + {} + ] + ], "html/rendering/replaced-elements/toolbars-0/.gitkeep": [ [ {} @@ -285937,6 +293827,21 @@ {} ] ], + "html/semantics/embedded-content/the-img-element/ismap/img-ismap-coordinates-iframe-after.html": [ + [ + {} + ] + ], + "html/semantics/embedded-content/the-img-element/ismap/img-ismap-coordinates-iframe-before.html": [ + [ + {} + ] + ], + "html/semantics/embedded-content/the-img-element/ismap/img-ismap-coordinates-iframe-inside.html": [ + [ + {} + ] + ], "html/semantics/embedded-content/the-img-element/resources/cat.jpg": [ [ {} @@ -286137,7 +294042,22 @@ {} ] ], - "html/semantics/forms/the-form-element/resources/form-action-url-iframe.html": [ + "html/semantics/forms/the-form-element/resources/form-no-action-with-base.html": [ + [ + {} + ] + ], + "html/semantics/forms/the-form-element/resources/form-no-action.html": [ + [ + {} + ] + ], + "html/semantics/forms/the-form-element/resources/form-with-action-and-base.sub.html": [ + [ + {} + ] + ], + "html/semantics/forms/the-form-element/resources/form-with-action.sub.html": [ [ {} ] @@ -286397,11 +294317,6 @@ {} ] ], - "html/semantics/interactive-elements/the-command-element/.gitkeep": [ - [ - {} - ] - ], "html/semantics/interactive-elements/the-details-element/.gitkeep": [ [ {} @@ -286422,11 +294337,6 @@ {} ] ], - "html/semantics/interactive-elements/the-menu-element/contains.json": [ - [ - {} - ] - ], "html/semantics/interactive-elements/the-summary-element/.gitkeep": [ [ {} @@ -286567,6 +294477,11 @@ {} ] ], + "html/semantics/scripting-1/the-script-element/module/bad-module-specifier.js": [ + [ + {} + ] + ], "html/semantics/scripting-1/the-script-element/module/crossorigin-common.js": [ [ {} @@ -286617,6 +294532,31 @@ {} ] ], + "html/semantics/scripting-1/the-script-element/module/currentscript.js": [ + [ + {} + ] + ], + "html/semantics/scripting-1/the-script-element/module/cycle-tdz-access-a.js": [ + [ + {} + ] + ], + "html/semantics/scripting-1/the-script-element/module/cycle-tdz-access.js": [ + [ + {} + ] + ], + "html/semantics/scripting-1/the-script-element/module/cycle-unresolvable-a.js": [ + [ + {} + ] + ], + "html/semantics/scripting-1/the-script-element/module/cycle-unresolvable.js": [ + [ + {} + ] + ], "html/semantics/scripting-1/the-script-element/module/errorhandling-parseerror-common.js": [ [ {} @@ -286702,6 +294642,26 @@ {} ] ], + "html/semantics/scripting-1/the-script-element/module/export-something-nested.js": [ + [ + {} + ] + ], + "html/semantics/scripting-1/the-script-element/module/export-something.js": [ + [ + {} + ] + ], + "html/semantics/scripting-1/the-script-element/module/fetch-error-2.js": [ + [ + {} + ] + ], + "html/semantics/scripting-1/the-script-element/module/import-something-namespace.js": [ + [ + {} + ] + ], "html/semantics/scripting-1/the-script-element/module/imports-a.js": [ [ {} @@ -286752,6 +294712,76 @@ {} ] ], + "html/semantics/scripting-1/the-script-element/module/instantiation-error-1.js": [ + [ + {} + ] + ], + "html/semantics/scripting-1/the-script-element/module/missing-export-nested.js": [ + [ + {} + ] + ], + "html/semantics/scripting-1/the-script-element/module/missing-export.js": [ + [ + {} + ] + ], + "html/semantics/scripting-1/the-script-element/module/nested-missing-export.js": [ + [ + {} + ] + ], + "html/semantics/scripting-1/the-script-element/module/resources/delayed-modulescript.py": [ + [ + {} + ] + ], + "html/semantics/scripting-1/the-script-element/module/set-currentScript-on-window.js": [ + [ + {} + ] + ], + "html/semantics/scripting-1/the-script-element/module/slow-module-graph-a.js": [ + [ + {} + ] + ], + "html/semantics/scripting-1/the-script-element/module/slow-module-graph-b.js": [ + [ + {} + ] + ], + "html/semantics/scripting-1/the-script-element/module/syntaxerror-nested.js": [ + [ + {} + ] + ], + "html/semantics/scripting-1/the-script-element/module/syntaxerror.js": [ + [ + {} + ] + ], + "html/semantics/scripting-1/the-script-element/module/this-nested.js": [ + [ + {} + ] + ], + "html/semantics/scripting-1/the-script-element/module/this.js": [ + [ + {} + ] + ], + "html/semantics/scripting-1/the-script-element/module/throw-nested.js": [ + [ + {} + ] + ], + "html/semantics/scripting-1/the-script-element/module/throw.js": [ + [ + {} + ] + ], "html/semantics/scripting-1/the-script-element/resources/cocoa-module.js": [ [ {} @@ -287747,6 +295777,16 @@ {} ] ], + "html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/worker-that-requires-failure.js": [ + [ + {} + ] + ], + "html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/worker-that-requires-success.js": [ + [ + {} + ] + ], "html/webappapis/scripting/processing-model-2/support/syntax-error-in-setInterval.js": [ [ {} @@ -287802,11 +295842,6 @@ {} ] ], - "html/webappapis/system-state-and-capabilities/the-navigator-object/NavigatorID.js": [ - [ - {} - ] - ], "html/webappapis/system-state-and-capabilities/the-navigator-object/contains.json": [ [ {} @@ -288082,6 +296117,61 @@ {} ] ], + "interfaces/OWNERS": [ + [ + {} + ] + ], + "interfaces/cssom.idl": [ + [ + {} + ] + ], + "interfaces/dom.idl": [ + [ + {} + ] + ], + "interfaces/fullscreen.idl": [ + [ + {} + ] + ], + "interfaces/geometry.idl": [ + [ + {} + ] + ], + "interfaces/html.idl": [ + [ + {} + ] + ], + "interfaces/mediacapture-main.idl": [ + [ + {} + ] + ], + "interfaces/remoteplayback.idl": [ + [ + {} + ] + ], + "interfaces/touchevents.idl": [ + [ + {} + ] + ], + "interfaces/uievents.idl": [ + [ + {} + ] + ], + "interfaces/webrtc-pc.idl": [ + [ + {} + ] + ], "js/builtins/Math.maxmin.js": [ [ {} @@ -288122,6 +296212,11 @@ {} ] ], + "magnetometer/support-iframe.html": [ + [ + {} + ] + ], "mathml/README.md": [ [ {} @@ -288647,11 +296742,6 @@ {} ] ], - "media/CanvasTest.ttf": [ - [ - {} - ] - ], "media/OWNERS": [ [ {} @@ -289732,11 +297822,6 @@ {} ] ], - "old-tests/submission/Microsoft/sandbox/iframe_sandbox_009.htm": [ - [ - {} - ] - ], "old-tests/submission/Microsoft/sandbox/iframe_sandbox_010.htm": [ [ {} @@ -290747,6 +298832,11 @@ {} ] ], + "orientation-sensor/OWNERS": [ + [ + {} + ] + ], "page-visibility/OWNERS": [ [ {} @@ -290787,6 +298877,16 @@ {} ] ], + "payment-request/payment-request-canmakepayment-method.https.http": [ + [ + {} + ] + ], + "payment-request/payment-request-response-id.html": [ + [ + {} + ] + ], "performance-timeline/OWNERS": [ [ {} @@ -290937,6 +299037,16 @@ {} ] ], + "presentation-api/receiving-ua/support/PresentationConnectionList_onconnectionavailable_receiving-ua.html": [ + [ + {} + ] + ], + "presentation-api/receiving-ua/support/PresentationConnection_onclose_receiving-ua.html": [ + [ + {} + ] + ], "presentation-api/receiving-ua/support/PresentationConnection_onmessage_receiving-ua.html": [ [ {} @@ -290947,6 +299057,11 @@ {} ] ], + "presentation-api/receiving-ua/support/PresentationConnection_terminate_receiving-ua.html": [ + [ + {} + ] + ], "presentation-api/receiving-ua/support/PresentationReceiver_create_receiving-ua.html": [ [ {} @@ -290967,6 +299082,11 @@ {} ] ], + "presentation-api/receiving-ua/support/iframe.html": [ + [ + {} + ] + ], "presentation-api/receiving-ua/support/serviceworker.js": [ [ {} @@ -293652,6 +301772,11 @@ {} ] ], + "resource-timing/resources/TAOResponse.py": [ + [ + {} + ] + ], "resource-timing/resources/fake_responses.html": [ [ {} @@ -293667,6 +301792,51 @@ {} ] ], + "resource-timing/resources/iframe_TAO_match_origin.html": [ + [ + {} + ] + ], + "resource-timing/resources/iframe_TAO_match_wildcard.html": [ + [ + {} + ] + ], + "resource-timing/resources/iframe_TAO_multi.html": [ + [ + {} + ] + ], + "resource-timing/resources/iframe_TAO_null.html": [ + [ + {} + ] + ], + "resource-timing/resources/iframe_TAO_origin.html": [ + [ + {} + ] + ], + "resource-timing/resources/iframe_TAO_origin_uppercase.html": [ + [ + {} + ] + ], + "resource-timing/resources/iframe_TAO_space.html": [ + [ + {} + ] + ], + "resource-timing/resources/iframe_TAO_wildcard.html": [ + [ + {} + ] + ], + "resource-timing/resources/iframe_TAO_zero.html": [ + [ + {} + ] + ], "resource-timing/resources/inject_resource_test.html": [ [ {} @@ -293727,6 +301897,11 @@ {} ] ], + "scroll-anchoring/README.md": [ + [ + {} + ] + ], "secure-contexts/basic-popup-and-iframe-tests.https.js": [ [ {} @@ -293812,11 +301987,6 @@ {} ] ], - "selectors-api/tests/submissions/Opera/ParentNode-query-queryAll.js": [ - [ - {} - ] - ], "selectors/attribute-selectors/attribute-case/resources/semantics-quirks.html": [ [ {} @@ -293837,6 +302007,31 @@ {} ] ], + "server-timing/resources/blue.png": [ + [ + {} + ] + ], + "server-timing/resources/blue.png.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/green.png": [ + [ + {} + ] + ], + "server-timing/resources/green.png.sub.headers": [ + [ + {} + ] + ], + "server-timing/test_server_timing.html.sub.headers": [ + [ + {} + ] + ], "service-workers/OWNERS": [ [ {} @@ -294112,6 +302307,16 @@ {} ] ], + "service-workers/service-worker/navigation-preload/resources/resource-timing-scope.py": [ + [ + {} + ] + ], + "service-workers/service-worker/navigation-preload/resources/resource-timing-worker.js": [ + [ + {} + ] + ], "service-workers/service-worker/navigation-preload/resources/wait-for-activate-worker.js": [ [ {} @@ -294177,6 +302382,11 @@ {} ] ], + "service-workers/service-worker/resources/clients-get-client-types-frame-worker.js": [ + [ + {} + ] + ], "service-workers/service-worker/resources/clients-get-client-types-frame.html": [ [ {} @@ -294187,6 +302397,11 @@ {} ] ], + "service-workers/service-worker/resources/clients-get-client-types-worker.js": [ + [ + {} + ] + ], "service-workers/service-worker/resources/clients-get-cross-origin-frame.html": [ [ {} @@ -294207,6 +302422,11 @@ {} ] ], + "service-workers/service-worker/resources/clients-matchall-client-types-dedicated-worker.js": [ + [ + {} + ] + ], "service-workers/service-worker/resources/clients-matchall-client-types-iframe.html": [ [ {} @@ -294357,6 +302577,36 @@ {} ] ], + "service-workers/service-worker/resources/fetch-event-respond-with-argument-iframe.html": [ + [ + {} + ] + ], + "service-workers/service-worker/resources/fetch-event-respond-with-argument-worker.js": [ + [ + {} + ] + ], + "service-workers/service-worker/resources/fetch-event-respond-with-readable-stream-iframe.html": [ + [ + {} + ] + ], + "service-workers/service-worker/resources/fetch-event-respond-with-readable-stream-worker.js": [ + [ + {} + ] + ], + "service-workers/service-worker/resources/fetch-event-respond-with-response-body-with-invalid-chunk-iframe.html": [ + [ + {} + ] + ], + "service-workers/service-worker/resources/fetch-event-respond-with-response-body-with-invalid-chunk-worker.js": [ + [ + {} + ] + ], "service-workers/service-worker/resources/fetch-event-respond-with-stops-propagation-worker.js": [ [ {} @@ -294407,6 +302657,36 @@ {} ] ], + "service-workers/service-worker/resources/fetch-request-css-cross-origin-mime-check-cross.css": [ + [ + {} + ] + ], + "service-workers/service-worker/resources/fetch-request-css-cross-origin-mime-check-cross.html": [ + [ + {} + ] + ], + "service-workers/service-worker/resources/fetch-request-css-cross-origin-mime-check-iframe.html": [ + [ + {} + ] + ], + "service-workers/service-worker/resources/fetch-request-css-cross-origin-mime-check-same.css": [ + [ + {} + ] + ], + "service-workers/service-worker/resources/fetch-request-css-cross-origin-mime-check-same.html": [ + [ + {} + ] + ], + "service-workers/service-worker/resources/fetch-request-css-cross-origin-mime-check-worker.js": [ + [ + {} + ] + ], "service-workers/service-worker/resources/fetch-request-fallback-iframe.html": [ [ {} @@ -294417,6 +302697,16 @@ {} ] ], + "service-workers/service-worker/resources/fetch-request-html-imports-iframe.html": [ + [ + {} + ] + ], + "service-workers/service-worker/resources/fetch-request-html-imports-worker.js": [ + [ + {} + ] + ], "service-workers/service-worker/resources/fetch-request-no-freshness-headers-iframe.html": [ [ {} @@ -294447,11 +302737,26 @@ {} ] ], + "service-workers/service-worker/resources/fetch-request-xhr-sync-iframe.html": [ + [ + {} + ] + ], + "service-workers/service-worker/resources/fetch-request-xhr-sync-worker.js": [ + [ + {} + ] + ], "service-workers/service-worker/resources/fetch-request-xhr-worker.js": [ [ {} ] ], + "service-workers/service-worker/resources/fetch-response-taint-iframe.html": [ + [ + {} + ] + ], "service-workers/service-worker/resources/fetch-response-xhr-iframe.https.html": [ [ {} @@ -294462,6 +302767,16 @@ {} ] ], + "service-workers/service-worker/resources/fetch-rewrite-worker-referrer-policy.js": [ + [ + {} + ] + ], + "service-workers/service-worker/resources/fetch-rewrite-worker-referrer-policy.js.headers": [ + [ + {} + ] + ], "service-workers/service-worker/resources/fetch-rewrite-worker.js": [ [ {} @@ -294512,11 +302827,41 @@ {} ] ], + "service-workers/service-worker/resources/http-to-https-redirect-and-register-iframe.html": [ + [ + {} + ] + ], + "service-workers/service-worker/resources/iframe-register-link-element.html": [ + [ + {} + ] + ], "service-workers/service-worker/resources/import-mime-type-worker.py": [ [ {} ] ], + "service-workers/service-worker/resources/import-scripts-echo.py": [ + [ + {} + ] + ], + "service-workers/service-worker/resources/import-scripts-resource-map-worker.js": [ + [ + {} + ] + ], + "service-workers/service-worker/resources/import-scripts-updated-flag-worker.js": [ + [ + {} + ] + ], + "service-workers/service-worker/resources/import-scripts-version.py": [ + [ + {} + ] + ], "service-workers/service-worker/resources/indexeddb-worker.js": [ [ {} @@ -294572,6 +302917,16 @@ {} ] ], + "service-workers/service-worker/resources/iso-latin1-header-iframe.html": [ + [ + {} + ] + ], + "service-workers/service-worker/resources/iso-latin1-header-worker.js": [ + [ + {} + ] + ], "service-workers/service-worker/resources/link-header.py": [ [ {} @@ -294607,6 +302962,16 @@ {} ] ], + "service-workers/service-worker/resources/navigation-redirect-body-worker.js": [ + [ + {} + ] + ], + "service-workers/service-worker/resources/navigation-redirect-body.py": [ + [ + {} + ] + ], "service-workers/service-worker/resources/navigation-redirect-other-origin.html": [ [ {} @@ -294627,6 +302992,16 @@ {} ] ], + "service-workers/service-worker/resources/navigation-redirect-to-http-iframe.html": [ + [ + {} + ] + ], + "service-workers/service-worker/resources/navigation-redirect-to-http-worker.js": [ + [ + {} + ] + ], "service-workers/service-worker/resources/navigation-redirect-worker.js": [ [ {} @@ -294692,6 +303067,16 @@ {} ] ], + "service-workers/service-worker/resources/opaque-response-preloaded-iframe.html": [ + [ + {} + ] + ], + "service-workers/service-worker/resources/opaque-response-preloaded-worker.js": [ + [ + {} + ] + ], "service-workers/service-worker/resources/other.html": [ [ {} @@ -294722,6 +303107,11 @@ {} ] ], + "service-workers/service-worker/resources/postmessage-transferables-worker.js": [ + [ + {} + ] + ], "service-workers/service-worker/resources/postmessage-worker.js": [ [ {} @@ -294737,11 +303127,26 @@ {} ] ], + "service-workers/service-worker/resources/referrer-policy-iframe.html": [ + [ + {} + ] + ], "service-workers/service-worker/resources/register-closed-window-iframe.html": [ [ {} ] ], + "service-workers/service-worker/resources/register-foreign-fetch-errors-worker.js": [ + [ + {} + ] + ], + "service-workers/service-worker/resources/register-iframe.html": [ + [ + {} + ] + ], "service-workers/service-worker/resources/registration-tests.js": [ [ {} @@ -294762,6 +303167,16 @@ {} ] ], + "service-workers/service-worker/resources/request-body-blob-iframe.html": [ + [ + {} + ] + ], + "service-workers/service-worker/resources/request-body-blob-worker.js": [ + [ + {} + ] + ], "service-workers/service-worker/resources/request-end-to-end-worker.js": [ [ {} @@ -294862,16 +303277,6 @@ {} ] ], - "service-workers/service-worker/resources/update-max-aged-worker-imported-script.py": [ - [ - {} - ] - ], - "service-workers/service-worker/resources/update-max-aged-worker.py": [ - [ - {} - ] - ], "service-workers/service-worker/resources/update-nocookie-worker.py": [ [ {} @@ -294902,6 +303307,11 @@ {} ] ], + "service-workers/service-worker/resources/windowclient-navigate-worker.js": [ + [ + {} + ] + ], "service-workers/service-worker/resources/worker-interception-iframe.https.html": [ [ {} @@ -295042,6 +303452,11 @@ {} ] ], + "storage/storage-persisted.js": [ + [ + {} + ] + ], "streams/OWNERS": [ [ {} @@ -296012,6 +304427,11 @@ {} ] ], + "url/toascii.json": [ + [ + {} + ] + ], "url/urltestdata.json": [ [ {} @@ -296037,6 +304457,16 @@ {} ] ], + "viewport/OWNERS": [ + [ + {} + ] + ], + "viewport/viewport_support.js": [ + [ + {} + ] + ], "wai-aria/OWNERS": [ [ {} @@ -296047,6 +304477,76 @@ {} ] ], + "wai-aria/scripts/ATTAcomm.js": [ + [ + {} + ] + ], + "wai-aria/scripts/manual.css": [ + [ + {} + ] + ], + "wai-aria/tools/convert_wiki.pl": [ + [ + {} + ] + ], + "wai-aria/tools/make_tests.pl": [ + [ + {} + ] + ], + "wasm/compile_worker.js": [ + [ + {} + ] + ], + "wasm/incrementer.wasm": [ + [ + {} + ] + ], + "wasm/resources/blank.html": [ + [ + {} + ] + ], + "wasm/resources/frame.html": [ + [ + {} + ] + ], + "wasm/resources/incrementer.wasm": [ + [ + {} + ] + ], + "wasm/resources/load_wasm.js": [ + [ + {} + ] + ], + "wasm/resources/service-worker.js": [ + [ + {} + ] + ], + "wasm/wasm_indexeddb_test.js": [ + [ + {} + ] + ], + "wasm/wasm_serialization_tests.js": [ + [ + {} + ] + ], + "wasm/wasm_serialization_worker.js": [ + [ + {} + ] + ], "web-animations/OWNERS": [ [ {} @@ -304667,6 +313167,11 @@ {} ] ], + "webmessaging/broadcastchannel/resources/origin.html": [ + [ + {} + ] + ], "webmessaging/broadcastchannel/resources/sandboxed.html": [ [ {} @@ -304717,6 +313222,11 @@ {} ] ], + "webrtc/RTCPeerConnection-helper.js": [ + [ + {} + ] + ], "websockets/OWNERS": [ [ {} @@ -304982,6 +313492,26 @@ {} ] ], + "webusb/resources/check-availability.html": [ + [ + {} + ] + ], + "webusb/resources/featurepolicytest.js": [ + [ + {} + ] + ], + "webusb/usb-allowed-by-feature-policy.https.sub.html.headers": [ + [ + {} + ] + ], + "webusb/usb-disabled-by-feature-policy.https.sub.html.headers": [ + [ + {} + ] + ], "webvr/OWNERS": [ [ {} @@ -307387,6 +315917,11 @@ {} ] ], + "workers/support/name.js": [ + [ + {} + ] + ], "workers/support/nosiniff-error-worker.py": [ [ {} @@ -307396,6 +315931,26 @@ [ {} ] + ], + "workers/support/shared-name.js": [ + [ + {} + ] + ], + "x-frame-options/support/helper.js": [ + [ + {} + ] + ], + "x-frame-options/support/nested.py": [ + [ + {} + ] + ], + "x-frame-options/support/xfo.py": [ + [ + {} + ] ] }, "testharness": { @@ -312993,6 +321548,12 @@ {} ] ], + "IndexedDB/idbfactory-deleteDatabase-request-success.html": [ + [ + "/IndexedDB/idbfactory-deleteDatabase-request-success.html", + {} + ] + ], "IndexedDB/idbfactory-open-error-properties.html": [ [ "/IndexedDB/idbfactory-open-error-properties.html", @@ -313005,6 +321566,18 @@ {} ] ], + "IndexedDB/idbfactory-open-request-error.html": [ + [ + "/IndexedDB/idbfactory-open-request-error.html", + {} + ] + ], + "IndexedDB/idbfactory-open-request-success.html": [ + [ + "/IndexedDB/idbfactory-open-request-success.html", + {} + ] + ], "IndexedDB/idbfactory_cmp.htm": [ [ "/IndexedDB/idbfactory_cmp.htm", @@ -314097,6 +322670,22 @@ } ] ], + "IndexedDB/large-nested-cloning.html": [ + [ + "/IndexedDB/large-nested-cloning.html", + { + "timeout": "long" + } + ] + ], + "IndexedDB/large-requests-abort.html": [ + [ + "/IndexedDB/large-requests-abort.html", + { + "timeout": "long" + } + ] + ], "IndexedDB/list_ordering.htm": [ [ "/IndexedDB/list_ordering.htm", @@ -314129,6 +322718,22 @@ } ] ], + "IndexedDB/request-abort-ordering.html": [ + [ + "/IndexedDB/request-abort-ordering.html", + { + "timeout": "long" + } + ] + ], + "IndexedDB/request-event-ordering.html": [ + [ + "/IndexedDB/request-event-ordering.html", + { + "timeout": "long" + } + ] + ], "IndexedDB/request_bubble-and-capture.htm": [ [ "/IndexedDB/request_bubble-and-capture.htm", @@ -314283,33 +322888,97 @@ } ] ], - "WebCryptoAPI/derive_bits_keys/test_ecdh_bits.html": [ + "WebCryptoAPI/derive_bits_keys/test_ecdh_bits.https.html": [ [ - "/WebCryptoAPI/derive_bits_keys/test_ecdh_bits.html", + "/WebCryptoAPI/derive_bits_keys/test_ecdh_bits.https.html", { "timeout": "long" } ] ], - "WebCryptoAPI/derive_bits_keys/test_ecdh_keys.html": [ + "WebCryptoAPI/derive_bits_keys/test_ecdh_keys.https.html": [ [ - "/WebCryptoAPI/derive_bits_keys/test_ecdh_keys.html", + "/WebCryptoAPI/derive_bits_keys/test_ecdh_keys.https.html", { "timeout": "long" } ] ], - "WebCryptoAPI/derive_bits_keys/test_hkdf.html": [ + "WebCryptoAPI/derive_bits_keys/test_hkdf.https.html": [ [ - "/WebCryptoAPI/derive_bits_keys/test_hkdf.html", + "/WebCryptoAPI/derive_bits_keys/test_hkdf.https.html", { "timeout": "long" } ] ], - "WebCryptoAPI/derive_bits_keys/test_pbkdf2.html": [ + "WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_empty.https.html": [ [ - "/WebCryptoAPI/derive_bits_keys/test_pbkdf2.html", + "/WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_empty.https.html", + { + "timeout": "long" + } + ] + ], + "WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_long.https.html": [ + [ + "/WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_long.https.html", + { + "timeout": "long" + } + ] + ], + "WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_short.https.html": [ + [ + "/WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_short.https.html", + { + "timeout": "long" + } + ] + ], + "WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_empty.https.html": [ + [ + "/WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_empty.https.html", + { + "timeout": "long" + } + ] + ], + "WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_long.https.html": [ + [ + "/WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_long.https.html", + { + "timeout": "long" + } + ] + ], + "WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_short.https.html": [ + [ + "/WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_short.https.html", + { + "timeout": "long" + } + ] + ], + "WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_empty.https.html": [ + [ + "/WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_empty.https.html", + { + "timeout": "long" + } + ] + ], + "WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_long.https.html": [ + [ + "/WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_long.https.html", + { + "timeout": "long" + } + ] + ], + "WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_short.https.html": [ + [ + "/WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_short.https.html", { "timeout": "long" } @@ -314321,9 +322990,9 @@ {} ] ], - "WebCryptoAPI/digest/test_digest.html": [ + "WebCryptoAPI/digest/test_digest.https.html": [ [ - "/WebCryptoAPI/digest/test_digest.html", + "/WebCryptoAPI/digest/test_digest.https.html", { "timeout": "long" } @@ -314353,33 +323022,33 @@ {} ] ], - "WebCryptoAPI/encrypt_decrypt/test_aes_cbc.html": [ + "WebCryptoAPI/encrypt_decrypt/test_aes_cbc.https.html": [ [ - "/WebCryptoAPI/encrypt_decrypt/test_aes_cbc.html", + "/WebCryptoAPI/encrypt_decrypt/test_aes_cbc.https.html", { "timeout": "long" } ] ], - "WebCryptoAPI/encrypt_decrypt/test_aes_ctr.html": [ + "WebCryptoAPI/encrypt_decrypt/test_aes_ctr.https.html": [ [ - "/WebCryptoAPI/encrypt_decrypt/test_aes_ctr.html", + "/WebCryptoAPI/encrypt_decrypt/test_aes_ctr.https.html", { "timeout": "long" } ] ], - "WebCryptoAPI/encrypt_decrypt/test_aes_gcm.html": [ + "WebCryptoAPI/encrypt_decrypt/test_aes_gcm.https.html": [ [ - "/WebCryptoAPI/encrypt_decrypt/test_aes_gcm.html", + "/WebCryptoAPI/encrypt_decrypt/test_aes_gcm.https.html", { "timeout": "long" } ] ], - "WebCryptoAPI/encrypt_decrypt/test_rsa_oaep.html": [ + "WebCryptoAPI/encrypt_decrypt/test_rsa_oaep.https.html": [ [ - "/WebCryptoAPI/encrypt_decrypt/test_rsa_oaep.html", + "/WebCryptoAPI/encrypt_decrypt/test_rsa_oaep.https.html", { "timeout": "long" } @@ -314557,193 +323226,185 @@ } ] ], - "WebCryptoAPI/generateKey/test_aes-cbc.html": [ + "WebCryptoAPI/generateKey/test_aes-cbc.https.html": [ [ - "/WebCryptoAPI/generateKey/test_aes-cbc.html", + "/WebCryptoAPI/generateKey/test_aes-cbc.https.html", { "timeout": "long" } ] ], - "WebCryptoAPI/generateKey/test_aes-ctr.html": [ + "WebCryptoAPI/generateKey/test_aes-ctr.https.html": [ [ - "/WebCryptoAPI/generateKey/test_aes-ctr.html", + "/WebCryptoAPI/generateKey/test_aes-ctr.https.html", { "timeout": "long" } ] ], - "WebCryptoAPI/generateKey/test_failures.html": [ + "WebCryptoAPI/generateKey/test_failures.https.html": [ [ - "/WebCryptoAPI/generateKey/test_failures.html", + "/WebCryptoAPI/generateKey/test_failures.https.html", { "timeout": "long" } ] ], - "WebCryptoAPI/generateKey/test_failures_AES-CBC.html": [ + "WebCryptoAPI/generateKey/test_failures_AES-CBC.https.html": [ [ - "/WebCryptoAPI/generateKey/test_failures_AES-CBC.html", + "/WebCryptoAPI/generateKey/test_failures_AES-CBC.https.html", { "timeout": "long" } ] ], - "WebCryptoAPI/generateKey/test_failures_AES-CTR.html": [ + "WebCryptoAPI/generateKey/test_failures_AES-CTR.https.html": [ [ - "/WebCryptoAPI/generateKey/test_failures_AES-CTR.html", + "/WebCryptoAPI/generateKey/test_failures_AES-CTR.https.html", { "timeout": "long" } ] ], - "WebCryptoAPI/generateKey/test_failures_AES-GCM.html": [ + "WebCryptoAPI/generateKey/test_failures_AES-GCM.https.html": [ [ - "/WebCryptoAPI/generateKey/test_failures_AES-GCM.html", + "/WebCryptoAPI/generateKey/test_failures_AES-GCM.https.html", { "timeout": "long" } ] ], - "WebCryptoAPI/generateKey/test_failures_AES-KW.html": [ + "WebCryptoAPI/generateKey/test_failures_AES-KW.https.html": [ [ - "/WebCryptoAPI/generateKey/test_failures_AES-KW.html", + "/WebCryptoAPI/generateKey/test_failures_AES-KW.https.html", { "timeout": "long" } ] ], - "WebCryptoAPI/generateKey/test_failures_ECDH.html": [ + "WebCryptoAPI/generateKey/test_failures_ECDH.https.html": [ [ - "/WebCryptoAPI/generateKey/test_failures_ECDH.html", + "/WebCryptoAPI/generateKey/test_failures_ECDH.https.html", { "timeout": "long" } ] ], - "WebCryptoAPI/generateKey/test_failures_ECDSA.html": [ + "WebCryptoAPI/generateKey/test_failures_ECDSA.https.html": [ [ - "/WebCryptoAPI/generateKey/test_failures_ECDSA.html", + "/WebCryptoAPI/generateKey/test_failures_ECDSA.https.html", { "timeout": "long" } ] ], - "WebCryptoAPI/generateKey/test_failures_HMAC.html": [ + "WebCryptoAPI/generateKey/test_failures_HMAC.https.html": [ [ - "/WebCryptoAPI/generateKey/test_failures_HMAC.html", + "/WebCryptoAPI/generateKey/test_failures_HMAC.https.html", { "timeout": "long" } ] ], - "WebCryptoAPI/generateKey/test_failures_RSA-OAEP.html": [ + "WebCryptoAPI/generateKey/test_failures_RSA-OAEP.https.html": [ [ - "/WebCryptoAPI/generateKey/test_failures_RSA-OAEP.html", + "/WebCryptoAPI/generateKey/test_failures_RSA-OAEP.https.html", { "timeout": "long" } ] ], - "WebCryptoAPI/generateKey/test_failures_RSA-PSS.html": [ + "WebCryptoAPI/generateKey/test_failures_RSA-PSS.https.html": [ [ - "/WebCryptoAPI/generateKey/test_failures_RSA-PSS.html", + "/WebCryptoAPI/generateKey/test_failures_RSA-PSS.https.html", { "timeout": "long" } ] ], - "WebCryptoAPI/generateKey/test_failures_RSASSA-PKCS1-v1_5.html": [ + "WebCryptoAPI/generateKey/test_failures_RSASSA-PKCS1-v1_5.https.html": [ [ - "/WebCryptoAPI/generateKey/test_failures_RSASSA-PKCS1-v1_5.html", + "/WebCryptoAPI/generateKey/test_failures_RSASSA-PKCS1-v1_5.https.html", { "timeout": "long" } ] ], - "WebCryptoAPI/generateKey/test_successes.html": [ + "WebCryptoAPI/generateKey/test_successes_AES-CBC.https.html": [ [ - "/WebCryptoAPI/generateKey/test_successes.html", + "/WebCryptoAPI/generateKey/test_successes_AES-CBC.https.html", { "timeout": "long" } ] ], - "WebCryptoAPI/generateKey/test_successes_AES-CBC.html": [ + "WebCryptoAPI/generateKey/test_successes_AES-CTR.https.html": [ [ - "/WebCryptoAPI/generateKey/test_successes_AES-CBC.html", + "/WebCryptoAPI/generateKey/test_successes_AES-CTR.https.html", { "timeout": "long" } ] ], - "WebCryptoAPI/generateKey/test_successes_AES-CTR.html": [ + "WebCryptoAPI/generateKey/test_successes_AES-GCM.https.html": [ [ - "/WebCryptoAPI/generateKey/test_successes_AES-CTR.html", + "/WebCryptoAPI/generateKey/test_successes_AES-GCM.https.html", { "timeout": "long" } ] ], - "WebCryptoAPI/generateKey/test_successes_AES-GCM.html": [ + "WebCryptoAPI/generateKey/test_successes_AES-KW.https.html": [ [ - "/WebCryptoAPI/generateKey/test_successes_AES-GCM.html", + "/WebCryptoAPI/generateKey/test_successes_AES-KW.https.html", { "timeout": "long" } ] ], - "WebCryptoAPI/generateKey/test_successes_AES-KW.html": [ + "WebCryptoAPI/generateKey/test_successes_ECDH.https.html": [ [ - "/WebCryptoAPI/generateKey/test_successes_AES-KW.html", + "/WebCryptoAPI/generateKey/test_successes_ECDH.https.html", { "timeout": "long" } ] ], - "WebCryptoAPI/generateKey/test_successes_ECDH.html": [ + "WebCryptoAPI/generateKey/test_successes_ECDSA.https.html": [ [ - "/WebCryptoAPI/generateKey/test_successes_ECDH.html", + "/WebCryptoAPI/generateKey/test_successes_ECDSA.https.html", { "timeout": "long" } ] ], - "WebCryptoAPI/generateKey/test_successes_ECDSA.html": [ + "WebCryptoAPI/generateKey/test_successes_HMAC.https.html": [ [ - "/WebCryptoAPI/generateKey/test_successes_ECDSA.html", + "/WebCryptoAPI/generateKey/test_successes_HMAC.https.html", { "timeout": "long" } ] ], - "WebCryptoAPI/generateKey/test_successes_HMAC.html": [ + "WebCryptoAPI/generateKey/test_successes_RSA-OAEP.https.html": [ [ - "/WebCryptoAPI/generateKey/test_successes_HMAC.html", + "/WebCryptoAPI/generateKey/test_successes_RSA-OAEP.https.html", { "timeout": "long" } ] ], - "WebCryptoAPI/generateKey/test_successes_RSA-OAEP.html": [ + "WebCryptoAPI/generateKey/test_successes_RSA-PSS.https.html": [ [ - "/WebCryptoAPI/generateKey/test_successes_RSA-OAEP.html", + "/WebCryptoAPI/generateKey/test_successes_RSA-PSS.https.html", { "timeout": "long" } ] ], - "WebCryptoAPI/generateKey/test_successes_RSA-PSS.html": [ + "WebCryptoAPI/generateKey/test_successes_RSASSA-PKCS1-v1_5.https.html": [ [ - "/WebCryptoAPI/generateKey/test_successes_RSA-PSS.html", - { - "timeout": "long" - } - ] - ], - "WebCryptoAPI/generateKey/test_successes_RSASSA-PKCS1-v1_5.html": [ - [ - "/WebCryptoAPI/generateKey/test_successes_RSASSA-PKCS1-v1_5.html", + "/WebCryptoAPI/generateKey/test_successes_RSASSA-PKCS1-v1_5.https.html", { "timeout": "long" } @@ -314765,6 +323426,12 @@ {} ] ], + "WebCryptoAPI/idlharness.https.html": [ + [ + "/WebCryptoAPI/idlharness.https.html", + {} + ] + ], "WebCryptoAPI/idlharness.worker.js": [ [ "/WebCryptoAPI/idlharness.worker.html", @@ -314789,21 +323456,33 @@ {} ] ], - "WebCryptoAPI/import_export/test_ec_importKey.html": [ + "WebCryptoAPI/import_export/test_ec_importKey.https.html": [ [ - "/WebCryptoAPI/import_export/test_ec_importKey.html", + "/WebCryptoAPI/import_export/test_ec_importKey.https.html", {} ] ], - "WebCryptoAPI/import_export/test_rsa_importKey.html": [ + "WebCryptoAPI/import_export/test_rsa_importKey.https.html": [ [ - "/WebCryptoAPI/import_export/test_rsa_importKey.html", + "/WebCryptoAPI/import_export/test_rsa_importKey.https.html", {} ] ], - "WebCryptoAPI/import_export/test_symmetric_importKey.html": [ + "WebCryptoAPI/import_export/test_symmetric_importKey.https.html": [ [ - "/WebCryptoAPI/import_export/test_symmetric_importKey.html", + "/WebCryptoAPI/import_export/test_symmetric_importKey.https.html", + {} + ] + ], + "WebCryptoAPI/secure_context/crypto-subtle-non-secure-context-not-available.sub.html": [ + [ + "/WebCryptoAPI/secure_context/crypto-subtle-non-secure-context-not-available.sub.html", + {} + ] + ], + "WebCryptoAPI/secure_context/crypto-subtle-secure-context-available.https.sub.html": [ + [ + "/WebCryptoAPI/secure_context/crypto-subtle-secure-context-available.https.sub.html", {} ] ], @@ -314831,41 +323510,41 @@ {} ] ], - "WebCryptoAPI/sign_verify/test_ecdsa.html": [ + "WebCryptoAPI/sign_verify/test_ecdsa.https.html": [ [ - "/WebCryptoAPI/sign_verify/test_ecdsa.html", + "/WebCryptoAPI/sign_verify/test_ecdsa.https.html", { "timeout": "long" } ] ], - "WebCryptoAPI/sign_verify/test_hmac.html": [ + "WebCryptoAPI/sign_verify/test_hmac.https.html": [ [ - "/WebCryptoAPI/sign_verify/test_hmac.html", + "/WebCryptoAPI/sign_verify/test_hmac.https.html", { "timeout": "long" } ] ], - "WebCryptoAPI/sign_verify/test_rsa_pkcs.html": [ + "WebCryptoAPI/sign_verify/test_rsa_pkcs.https.html": [ [ - "/WebCryptoAPI/sign_verify/test_rsa_pkcs.html", + "/WebCryptoAPI/sign_verify/test_rsa_pkcs.https.html", { "timeout": "long" } ] ], - "WebCryptoAPI/sign_verify/test_rsa_pss.html": [ + "WebCryptoAPI/sign_verify/test_rsa_pss.https.html": [ [ - "/WebCryptoAPI/sign_verify/test_rsa_pss.html", + "/WebCryptoAPI/sign_verify/test_rsa_pss.https.html", { "timeout": "long" } ] ], - "WebCryptoAPI/wrapKey_unwrapKey/test_wrapKey_unwrapKey.html": [ + "WebCryptoAPI/wrapKey_unwrapKey/test_wrapKey_unwrapKey.https.html": [ [ - "/WebCryptoAPI/wrapKey_unwrapKey/test_wrapKey_unwrapKey.html", + "/WebCryptoAPI/wrapKey_unwrapKey/test_wrapKey_unwrapKey.https.html", { "timeout": "long" } @@ -314927,6 +323606,30 @@ {} ] ], + "WebIDL/ecmascript-binding/interface-prototype-object.html": [ + [ + "/WebIDL/ecmascript-binding/interface-prototype-object.html", + {} + ] + ], + "WebIDL/ecmascript-binding/legacy-callback-interface-object.html": [ + [ + "/WebIDL/ecmascript-binding/legacy-callback-interface-object.html", + {} + ] + ], + "WebIDL/ecmascript-binding/put-forwards.html": [ + [ + "/WebIDL/ecmascript-binding/put-forwards.html", + {} + ] + ], + "WebIDL/ecmascript-binding/sequence-conversion.html": [ + [ + "/WebIDL/ecmascript-binding/sequence-conversion.html", + {} + ] + ], "XMLHttpRequest/FormData-append.html": [ [ "/XMLHttpRequest/FormData-append.html", @@ -315755,6 +324458,12 @@ {} ] ], + "XMLHttpRequest/send-data-arraybufferview.htm": [ + [ + "/XMLHttpRequest/send-data-arraybufferview.htm", + {} + ] + ], "XMLHttpRequest/send-data-blob.htm": [ [ "/XMLHttpRequest/send-data-blob.htm", @@ -316275,15 +324984,27 @@ {} ] ], + "accelerometer/Accelerometer.https.html": [ + [ + "/accelerometer/Accelerometer.https.html", + {} + ] + ], + "accelerometer/Accelerometer_insecure_context.html": [ + [ + "/accelerometer/Accelerometer_insecure_context.html", + {} + ] + ], "accelerometer/idlharness.https.html": [ [ "/accelerometer/idlharness.https.html", {} ] ], - "ambient-light/AmbientLightSensor_browsing_context.https.html": [ + "ambient-light/AmbientLightSensor.https.html": [ [ - "/ambient-light/AmbientLightSensor_browsing_context.https.html", + "/ambient-light/AmbientLightSensor.https.html", {} ] ], @@ -316293,38 +325014,6 @@ {} ] ], - "ambient-light/AmbientLightSensor_onchange.https.html": [ - [ - "/ambient-light/AmbientLightSensor_onchange.https.html", - {} - ] - ], - "ambient-light/AmbientLightSensor_reading.https.html": [ - [ - "/ambient-light/AmbientLightSensor_reading.https.html", - {} - ] - ], - "ambient-light/AmbientLightSensor_start.https.html": [ - [ - "/ambient-light/AmbientLightSensor_start.https.html", - {} - ] - ], - "ambient-light/AmbientLightSensor_stop.https.html": [ - [ - "/ambient-light/AmbientLightSensor_stop.https.html", - {} - ] - ], - "ambient-light/AmbientLightSensor_tests.html": [ - [ - "/ambient-light/AmbientLightSensor_tests.html", - { - "timeout": "long" - } - ] - ], "ambient-light/idlharness.https.html": [ [ "/ambient-light/idlharness.https.html", @@ -316361,27 +325050,39 @@ {} ] ], - "battery-status/battery-interface-idlharness.html": [ + "battery-status/battery-iframe.https.html": [ [ - "/battery-status/battery-interface-idlharness.html", + "/battery-status/battery-iframe.https.html", {} ] ], - "battery-status/battery-promise-iframe.html": [ + "battery-status/battery-insecure-context.html": [ [ - "/battery-status/battery-promise-iframe.html", + "/battery-status/battery-insecure-context.html", {} ] ], - "battery-status/battery-promise-window.html": [ + "battery-status/battery-interface-idlharness.https.html": [ [ - "/battery-status/battery-promise-window.html", + "/battery-status/battery-interface-idlharness.https.html", {} ] ], - "battery-status/battery-promise.html": [ + "battery-status/battery-promise-window.https.html": [ [ - "/battery-status/battery-promise.html", + "/battery-status/battery-promise-window.https.html", + {} + ] + ], + "battery-status/battery-promise.https.html": [ + [ + "/battery-status/battery-promise.https.html", + {} + ] + ], + "beacon/headers/header-content-type.html": [ + [ + "/beacon/headers/header-content-type.html", {} ] ], @@ -316491,6 +325192,18 @@ {} ] ], + "content-security-policy/base-uri/base-uri-allow.sub.html": [ + [ + "/content-security-policy/base-uri/base-uri-allow.sub.html", + {} + ] + ], + "content-security-policy/base-uri/base-uri-deny.sub.html": [ + [ + "/content-security-policy/base-uri/base-uri-deny.sub.html", + {} + ] + ], "content-security-policy/base-uri/base-uri_iframe_sandbox.sub.html": [ [ "/content-security-policy/base-uri/base-uri_iframe_sandbox.sub.html", @@ -317271,24 +325984,18 @@ {} ] ], - "content-security-policy/embedded-enforcement/embedding_csp-header-invalid-format.html": [ - [ - "/content-security-policy/embedded-enforcement/embedding_csp-header-invalid-format.html", - {} - ] - ], - "content-security-policy/embedded-enforcement/embedding_csp-header.html": [ - [ - "/content-security-policy/embedded-enforcement/embedding_csp-header.html", - {} - ] - ], "content-security-policy/embedded-enforcement/iframe-csp-attribute.html": [ [ "/content-security-policy/embedded-enforcement/iframe-csp-attribute.html", {} ] ], + "content-security-policy/embedded-enforcement/required_csp-header.html": [ + [ + "/content-security-policy/embedded-enforcement/required_csp-header.html", + {} + ] + ], "content-security-policy/embedded-enforcement/subsumption_algorithm-general.html": [ [ "/content-security-policy/embedded-enforcement/subsumption_algorithm-general.html", @@ -317325,6 +326032,12 @@ {} ] ], + "content-security-policy/embedded-enforcement/subsumption_algorithm-nonces.html": [ + [ + "/content-security-policy/embedded-enforcement/subsumption_algorithm-nonces.html", + {} + ] + ], "content-security-policy/embedded-enforcement/subsumption_algorithm-none.html": [ [ "/content-security-policy/embedded-enforcement/subsumption_algorithm-none.html", @@ -317565,6 +326278,18 @@ {} ] ], + "content-security-policy/frame-src/frame-src-redirect.html": [ + [ + "/content-security-policy/frame-src/frame-src-redirect.html", + {} + ] + ], + "content-security-policy/frame-src/frame-src-self-unique-origin.html": [ + [ + "/content-security-policy/frame-src/frame-src-self-unique-origin.html", + {} + ] + ], "content-security-policy/generic/generic-0_1-img-src.html": [ [ "/content-security-policy/generic/generic-0_1-img-src.html", @@ -317661,6 +326386,12 @@ {} ] ], + "content-security-policy/img-src/img-src-self-unique-origin.html": [ + [ + "/content-security-policy/img-src/img-src-self-unique-origin.html", + {} + ] + ], "content-security-policy/img-src/img-src-wildcard-allowed.html": [ [ "/content-security-policy/img-src/img-src-wildcard-allowed.html", @@ -317757,9 +326488,39 @@ {} ] ], - "content-security-policy/navigation/to-javascript-url.html": [ + "content-security-policy/navigation/to-javascript-url-frame-src.html": [ [ - "/content-security-policy/navigation/to-javascript-url.html", + "/content-security-policy/navigation/to-javascript-url-frame-src.html", + {} + ] + ], + "content-security-policy/navigation/to-javascript-url-script-src.html": [ + [ + "/content-security-policy/navigation/to-javascript-url-script-src.html", + {} + ] + ], + "content-security-policy/nonce-hiding/script-nonces-hidden-meta.tentative.html": [ + [ + "/content-security-policy/nonce-hiding/script-nonces-hidden-meta.tentative.html", + {} + ] + ], + "content-security-policy/nonce-hiding/script-nonces-hidden.tentative.html": [ + [ + "/content-security-policy/nonce-hiding/script-nonces-hidden.tentative.html", + {} + ] + ], + "content-security-policy/nonce-hiding/svgscript-nonces-hidden-meta.tentative.html": [ + [ + "/content-security-policy/nonce-hiding/svgscript-nonces-hidden-meta.tentative.html", + {} + ] + ], + "content-security-policy/nonce-hiding/svgscript-nonces-hidden.tentative.html": [ + [ + "/content-security-policy/nonce-hiding/svgscript-nonces-hidden.tentative.html", {} ] ], @@ -317965,6 +326726,12 @@ {} ] ], + "content-security-policy/securitypolicyviolation/img-src-redirect-upgrade-reporting.https.html": [ + [ + "/content-security-policy/securitypolicyviolation/img-src-redirect-upgrade-reporting.https.html", + {} + ] + ], "content-security-policy/securitypolicyviolation/inside-dedicated-worker.html": [ [ "/content-security-policy/securitypolicyviolation/inside-dedicated-worker.html", @@ -318037,6 +326804,12 @@ {} ] ], + "content-security-policy/securitypolicyviolation/upgrade-insecure-requests-reporting.https.html": [ + [ + "/content-security-policy/securitypolicyviolation/upgrade-insecure-requests-reporting.https.html", + {} + ] + ], "content-security-policy/style-src/style-src-error-event-fires.html": [ [ "/content-security-policy/style-src/style-src-error-event-fires.html", @@ -318319,6 +327092,12 @@ {} ] ], + "cors/access-control-expose-headers-parsing.window.js": [ + [ + "/cors/access-control-expose-headers-parsing.window.html", + {} + ] + ], "cors/allow-headers.htm": [ [ "/cors/allow-headers.htm", @@ -318429,27 +327208,45 @@ {} ] ], - "css-timing-1/cubic-bezier-timing-functions-output.html": [ + "credential-management/credentialscontainer-create-basics.https.html": [ [ - "/css-timing-1/cubic-bezier-timing-functions-output.html", + "/credential-management/credentialscontainer-create-basics.https.html", {} ] ], - "css-timing-1/frames-timing-functions-output.html": [ + "credential-management/idl.https.html": [ [ - "/css-timing-1/frames-timing-functions-output.html", + "/credential-management/idl.https.html", {} ] ], - "css-timing-1/frames-timing-functions-syntax.html": [ + "css-font-loading/fontfacesetloadevent-constructor.html": [ [ - "/css-timing-1/frames-timing-functions-syntax.html", + "/css-font-loading/fontfacesetloadevent-constructor.html", {} ] ], - "css-timing-1/step-timing-functions-output.html": [ + "css-timing/cubic-bezier-timing-functions-output.html": [ [ - "/css-timing-1/step-timing-functions-output.html", + "/css-timing/cubic-bezier-timing-functions-output.html", + {} + ] + ], + "css-timing/frames-timing-functions-output.html": [ + [ + "/css-timing/frames-timing-functions-output.html", + {} + ] + ], + "css-timing/frames-timing-functions-syntax.html": [ + [ + "/css-timing/frames-timing-functions-syntax.html", + {} + ] + ], + "css-timing/step-timing-functions-output.html": [ + [ + "/css-timing/step-timing-functions-output.html", {} ] ], @@ -319205,75 +328002,369 @@ {} ] ], - "css/css-grid-1/grid-definition/grid-inline-support-flexible-lengths-001.xht": [ + "css/css-grid-1/alignment/grid-self-alignment-stretch-001.html": [ [ - "/css/css-grid-1/grid-definition/grid-inline-support-flexible-lengths-001.xht", + "/css/css-grid-1/alignment/grid-self-alignment-stretch-001.html", {} ] ], - "css/css-grid-1/grid-definition/grid-inline-support-grid-template-areas-001.xht": [ + "css/css-grid-1/alignment/grid-self-alignment-stretch-002.html": [ [ - "/css/css-grid-1/grid-definition/grid-inline-support-grid-template-areas-001.xht", + "/css/css-grid-1/alignment/grid-self-alignment-stretch-002.html", {} ] ], - "css/css-grid-1/grid-definition/grid-inline-support-grid-template-columns-rows-001.xht": [ + "css/css-grid-1/alignment/grid-self-alignment-stretch-003.html": [ [ - "/css/css-grid-1/grid-definition/grid-inline-support-grid-template-columns-rows-001.xht", + "/css/css-grid-1/alignment/grid-self-alignment-stretch-003.html", {} ] ], - "css/css-grid-1/grid-definition/grid-inline-support-named-grid-lines-001.xht": [ + "css/css-grid-1/alignment/grid-self-alignment-stretch-004.html": [ [ - "/css/css-grid-1/grid-definition/grid-inline-support-named-grid-lines-001.xht", + "/css/css-grid-1/alignment/grid-self-alignment-stretch-004.html", {} ] ], - "css/css-grid-1/grid-definition/grid-inline-support-repeat-001.xht": [ + "css/css-grid-1/alignment/grid-self-alignment-stretch-005.html": [ [ - "/css/css-grid-1/grid-definition/grid-inline-support-repeat-001.xht", + "/css/css-grid-1/alignment/grid-self-alignment-stretch-005.html", {} ] ], - "css/css-grid-1/grid-definition/grid-inline-template-columns-rows-resolved-values-001.xht": [ + "css/css-grid-1/alignment/grid-self-alignment-stretch-006.html": [ [ - "/css/css-grid-1/grid-definition/grid-inline-template-columns-rows-resolved-values-001.xht", + "/css/css-grid-1/alignment/grid-self-alignment-stretch-006.html", {} ] ], - "css/css-grid-1/grid-definition/grid-support-flexible-lengths-001.xht": [ + "css/css-grid-1/alignment/grid-self-alignment-stretch-007.html": [ [ - "/css/css-grid-1/grid-definition/grid-support-flexible-lengths-001.xht", + "/css/css-grid-1/alignment/grid-self-alignment-stretch-007.html", {} ] ], - "css/css-grid-1/grid-definition/grid-support-grid-template-areas-001.xht": [ + "css/css-grid-1/alignment/grid-self-alignment-stretch-008.html": [ [ - "/css/css-grid-1/grid-definition/grid-support-grid-template-areas-001.xht", + "/css/css-grid-1/alignment/grid-self-alignment-stretch-008.html", {} ] ], - "css/css-grid-1/grid-definition/grid-support-grid-template-columns-rows-001.xht": [ + "css/css-grid-1/alignment/grid-self-alignment-stretch-009.html": [ [ - "/css/css-grid-1/grid-definition/grid-support-grid-template-columns-rows-001.xht", + "/css/css-grid-1/alignment/grid-self-alignment-stretch-009.html", {} ] ], - "css/css-grid-1/grid-definition/grid-support-named-grid-lines-001.xht": [ + "css/css-grid-1/alignment/grid-self-alignment-stretch-010.html": [ [ - "/css/css-grid-1/grid-definition/grid-support-named-grid-lines-001.xht", + "/css/css-grid-1/alignment/grid-self-alignment-stretch-010.html", {} ] ], - "css/css-grid-1/grid-definition/grid-support-repeat-001.xht": [ + "css/css-grid-1/alignment/grid-self-alignment-stretch-011.html": [ [ - "/css/css-grid-1/grid-definition/grid-support-repeat-001.xht", + "/css/css-grid-1/alignment/grid-self-alignment-stretch-011.html", {} ] ], - "css/css-grid-1/grid-definition/grid-template-columns-rows-resolved-values-001.xht": [ + "css/css-grid-1/alignment/grid-self-alignment-stretch-012.html": [ [ - "/css/css-grid-1/grid-definition/grid-template-columns-rows-resolved-values-001.xht", + "/css/css-grid-1/alignment/grid-self-alignment-stretch-012.html", + {} + ] + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-013.html": [ + [ + "/css/css-grid-1/alignment/grid-self-alignment-stretch-013.html", + {} + ] + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-014.html": [ + [ + "/css/css-grid-1/alignment/grid-self-alignment-stretch-014.html", + {} + ] + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-015.html": [ + [ + "/css/css-grid-1/alignment/grid-self-alignment-stretch-015.html", + {} + ] + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-016.html": [ + [ + "/css/css-grid-1/alignment/grid-self-alignment-stretch-016.html", + {} + ] + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-001.html": [ + [ + "/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-001.html", + {} + ] + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-002.html": [ + [ + "/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-002.html", + {} + ] + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-003.html": [ + [ + "/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-003.html", + {} + ] + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-004.html": [ + [ + "/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-004.html", + {} + ] + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-005.html": [ + [ + "/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-005.html", + {} + ] + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-006.html": [ + [ + "/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-006.html", + {} + ] + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-007.html": [ + [ + "/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-007.html", + {} + ] + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-008.html": [ + [ + "/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-008.html", + {} + ] + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-009.html": [ + [ + "/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-009.html", + {} + ] + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-010.html": [ + [ + "/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-010.html", + {} + ] + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-011.html": [ + [ + "/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-011.html", + {} + ] + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-012.html": [ + [ + "/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-012.html", + {} + ] + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-013.html": [ + [ + "/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-013.html", + {} + ] + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-014.html": [ + [ + "/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-014.html", + {} + ] + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-015.html": [ + [ + "/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-015.html", + {} + ] + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-016.html": [ + [ + "/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-016.html", + {} + ] + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-001.html": [ + [ + "/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-001.html", + {} + ] + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-002.html": [ + [ + "/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-002.html", + {} + ] + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-003.html": [ + [ + "/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-003.html", + {} + ] + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-004.html": [ + [ + "/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-004.html", + {} + ] + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-005.html": [ + [ + "/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-005.html", + {} + ] + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-006.html": [ + [ + "/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-006.html", + {} + ] + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-007.html": [ + [ + "/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-007.html", + {} + ] + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-008.html": [ + [ + "/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-008.html", + {} + ] + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-009.html": [ + [ + "/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-009.html", + {} + ] + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-010.html": [ + [ + "/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-010.html", + {} + ] + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-011.html": [ + [ + "/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-011.html", + {} + ] + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-012.html": [ + [ + "/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-012.html", + {} + ] + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-013.html": [ + [ + "/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-013.html", + {} + ] + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-014.html": [ + [ + "/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-014.html", + {} + ] + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-015.html": [ + [ + "/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-015.html", + {} + ] + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-016.html": [ + [ + "/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-016.html", + {} + ] + ], + "css/css-grid-1/grid-definition/grid-inline-support-flexible-lengths-001.html": [ + [ + "/css/css-grid-1/grid-definition/grid-inline-support-flexible-lengths-001.html", + {} + ] + ], + "css/css-grid-1/grid-definition/grid-inline-support-grid-template-areas-001.html": [ + [ + "/css/css-grid-1/grid-definition/grid-inline-support-grid-template-areas-001.html", + {} + ] + ], + "css/css-grid-1/grid-definition/grid-inline-support-grid-template-columns-rows-001.html": [ + [ + "/css/css-grid-1/grid-definition/grid-inline-support-grid-template-columns-rows-001.html", + {} + ] + ], + "css/css-grid-1/grid-definition/grid-inline-support-named-grid-lines-001.html": [ + [ + "/css/css-grid-1/grid-definition/grid-inline-support-named-grid-lines-001.html", + {} + ] + ], + "css/css-grid-1/grid-definition/grid-inline-support-repeat-001.html": [ + [ + "/css/css-grid-1/grid-definition/grid-inline-support-repeat-001.html", + {} + ] + ], + "css/css-grid-1/grid-definition/grid-inline-template-columns-rows-resolved-values-001.html": [ + [ + "/css/css-grid-1/grid-definition/grid-inline-template-columns-rows-resolved-values-001.html", + {} + ] + ], + "css/css-grid-1/grid-definition/grid-support-flexible-lengths-001.html": [ + [ + "/css/css-grid-1/grid-definition/grid-support-flexible-lengths-001.html", + {} + ] + ], + "css/css-grid-1/grid-definition/grid-support-grid-template-areas-001.html": [ + [ + "/css/css-grid-1/grid-definition/grid-support-grid-template-areas-001.html", + {} + ] + ], + "css/css-grid-1/grid-definition/grid-support-grid-template-columns-rows-001.html": [ + [ + "/css/css-grid-1/grid-definition/grid-support-grid-template-columns-rows-001.html", + {} + ] + ], + "css/css-grid-1/grid-definition/grid-support-named-grid-lines-001.html": [ + [ + "/css/css-grid-1/grid-definition/grid-support-named-grid-lines-001.html", + {} + ] + ], + "css/css-grid-1/grid-definition/grid-support-repeat-001.html": [ + [ + "/css/css-grid-1/grid-definition/grid-support-repeat-001.html", + {} + ] + ], + "css/css-grid-1/grid-definition/grid-template-columns-rows-resolved-values-001.html": [ + [ + "/css/css-grid-1/grid-definition/grid-template-columns-rows-resolved-values-001.html", + {} + ] + ], + "css/css-grid-1/grid-items/grid-minimum-size-grid-items-021.html": [ + [ + "/css/css-grid-1/grid-items/grid-minimum-size-grid-items-021.html", {} ] ], @@ -319283,15 +328374,15 @@ {} ] ], - "css/css-grid-1/grid-model/grid-computed-value-display-floated-items-001.xht": [ + "css/css-grid-1/grid-model/grid-computed-value-display-floated-items-001.html": [ [ - "/css/css-grid-1/grid-model/grid-computed-value-display-floated-items-001.xht", + "/css/css-grid-1/grid-model/grid-computed-value-display-floated-items-001.html", {} ] ], - "css/css-grid-1/grid-model/grid-support-display-001.xht": [ + "css/css-grid-1/grid-model/grid-support-display-001.html": [ [ - "/css/css-grid-1/grid-model/grid-support-display-001.xht", + "/css/css-grid-1/grid-model/grid-support-display-001.html", {} ] ], @@ -319325,6 +328416,18 @@ {} ] ], + "css/css-position-3/position-sticky-get-bounding-client-rect.html": [ + [ + "/css/css-position-3/position-sticky-get-bounding-client-rect.html", + {} + ] + ], + "css/css-position-3/position-sticky-parsing.html": [ + [ + "/css/css-position-3/position-sticky-parsing.html", + {} + ] + ], "css/css-regions-1/cssomview-apis-no-region-chain-001.html": [ [ "/css/css-regions-1/cssomview-apis-no-region-chain-001.html", @@ -320027,6 +329130,690 @@ {} ] ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-001.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-001.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-002.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-002.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-003.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-003.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-004.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-004.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-005.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-005.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-006.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-006.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-007.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-007.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-008.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-008.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-009.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-009.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-010.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-010.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-011.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-011.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-012.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-012.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-014.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-014.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-015.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-015.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-016.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-016.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-017.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-017.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-018.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-018.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-019.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-019.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-020.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-020.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-021.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-021.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-022.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-022.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-023.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-023.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-024.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-024.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-025.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-025.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-026.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-026.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-030.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-030.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-031.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-031.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-032.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-032.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-033.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-033.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-034.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-034.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-035.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-035.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-036.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-036.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-037.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-037.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-038.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-038.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-039.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-039.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-040.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-040.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-041.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-041.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-042.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-042.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-043.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-043.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-044.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-044.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-045.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-045.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-046.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-046.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-047.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-047.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-048.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-048.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-049.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-049.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-050.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-050.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-051.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-051.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-052.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-052.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-060.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-060.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-061.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-061.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-062.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-062.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-063.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-063.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-064.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-064.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-065.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-065.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-066.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-066.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-067.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-067.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-068.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-068.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-069.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-069.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-070.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-070.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-071.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-071.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-072.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-072.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-073.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-073.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-074.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-074.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-075.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-075.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-076.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-076.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-077.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-077.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-078.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-078.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-080.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-080.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-081.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-081.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-082.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-082.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-083.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-083.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-084.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-084.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-085.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-085.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-086.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-086.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-090.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-090.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-091.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-091.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-092.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-092.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-093.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-093.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-094.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-094.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-095.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-095.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-096.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-096.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-097.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-097.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-098.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-098.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-099.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-099.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-100.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-100.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-101.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-101.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-102.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-102.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-103.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-103.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-104.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-104.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-105.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-105.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-106.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-106.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-107.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-107.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-108.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-108.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-109.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-109.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-110.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-110.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-111.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-111.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-112.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-112.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-113.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-113.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-114.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-114.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-115.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-115.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-116.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-116.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-117.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-117.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-118.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-118.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-120.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-120.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-121.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-121.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-122.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-122.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-123.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-123.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-124.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-124.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-125.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-125.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-126.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-126.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-127.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-127.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-128.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-128.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-130.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-130.html", + {} + ] + ], + "css/css-text-3/i18n/css3-text-line-break-baspglwj-131.html": [ + [ + "/css/css-text-3/i18n/css3-text-line-break-baspglwj-131.html", + {} + ] + ], "css/css-text-3/white-space/seg-break-transformation-000.html": [ [ "/css/css-text-3/white-space/seg-break-transformation-000.html", @@ -320213,6 +330000,42 @@ {} ] ], + "css/css-transforms-2/parsing/rotate-parsing-invalid.html": [ + [ + "/css/css-transforms-2/parsing/rotate-parsing-invalid.html", + {} + ] + ], + "css/css-transforms-2/parsing/rotate-parsing-valid.html": [ + [ + "/css/css-transforms-2/parsing/rotate-parsing-valid.html", + {} + ] + ], + "css/css-transforms-2/parsing/scale-parsing-invalid.html": [ + [ + "/css/css-transforms-2/parsing/scale-parsing-invalid.html", + {} + ] + ], + "css/css-transforms-2/parsing/scale-parsing-valid.html": [ + [ + "/css/css-transforms-2/parsing/scale-parsing-valid.html", + {} + ] + ], + "css/css-transforms-2/parsing/translate-parsing-invalid.html": [ + [ + "/css/css-transforms-2/parsing/translate-parsing-invalid.html", + {} + ] + ], + "css/css-transforms-2/parsing/translate-parsing-valid.html": [ + [ + "/css/css-transforms-2/parsing/translate-parsing-valid.html", + {} + ] + ], "css/css-transitions-1/before-DOMContentLoaded-001.html": [ [ "/css/css-transitions-1/before-DOMContentLoaded-001.html", @@ -320471,6 +330294,252 @@ {} ] ], + "css/css-variables-1/variable-animation-from-to.html": [ + [ + "/css/css-variables-1/variable-animation-from-to.html", + {} + ] + ], + "css/css-variables-1/variable-animation-over-transition.html": [ + [ + "/css/css-variables-1/variable-animation-over-transition.html", + {} + ] + ], + "css/css-variables-1/variable-animation-substitute-into-keyframe-shorthand.html": [ + [ + "/css/css-variables-1/variable-animation-substitute-into-keyframe-shorthand.html", + {} + ] + ], + "css/css-variables-1/variable-animation-substitute-into-keyframe-transform.html": [ + [ + "/css/css-variables-1/variable-animation-substitute-into-keyframe-transform.html", + {} + ] + ], + "css/css-variables-1/variable-animation-substitute-into-keyframe.html": [ + [ + "/css/css-variables-1/variable-animation-substitute-into-keyframe.html", + {} + ] + ], + "css/css-variables-1/variable-animation-substitute-within-keyframe-fallback.html": [ + [ + "/css/css-variables-1/variable-animation-substitute-within-keyframe-fallback.html", + {} + ] + ], + "css/css-variables-1/variable-animation-substitute-within-keyframe-multiple.html": [ + [ + "/css/css-variables-1/variable-animation-substitute-within-keyframe-multiple.html", + {} + ] + ], + "css/css-variables-1/variable-animation-substitute-within-keyframe.html": [ + [ + "/css/css-variables-1/variable-animation-substitute-within-keyframe.html", + {} + ] + ], + "css/css-variables-1/variable-animation-to-only.html": [ + [ + "/css/css-variables-1/variable-animation-to-only.html", + {} + ] + ], + "css/css-variables-1/variable-created-document.html": [ + [ + "/css/css-variables-1/variable-created-document.html", + {} + ] + ], + "css/css-variables-1/variable-created-element.html": [ + [ + "/css/css-variables-1/variable-created-element.html", + {} + ] + ], + "css/css-variables-1/variable-cssText.html": [ + [ + "/css/css-variables-1/variable-cssText.html", + {} + ] + ], + "css/css-variables-1/variable-definition-border-shorthand-serialize.html": [ + [ + "/css/css-variables-1/variable-definition-border-shorthand-serialize.html", + {} + ] + ], + "css/css-variables-1/variable-definition-cascading.html": [ + [ + "/css/css-variables-1/variable-definition-cascading.html", + {} + ] + ], + "css/css-variables-1/variable-definition-keywords.html": [ + [ + "/css/css-variables-1/variable-definition-keywords.html", + {} + ] + ], + "css/css-variables-1/variable-definition.html": [ + [ + "/css/css-variables-1/variable-definition.html", + {} + ] + ], + "css/css-variables-1/variable-first-letter.html": [ + [ + "/css/css-variables-1/variable-first-letter.html", + {} + ] + ], + "css/css-variables-1/variable-first-line.html": [ + [ + "/css/css-variables-1/variable-first-line.html", + {} + ] + ], + "css/css-variables-1/variable-invalidation.html": [ + [ + "/css/css-variables-1/variable-invalidation.html", + {} + ] + ], + "css/css-variables-1/variable-presentation-attribute.html": [ + [ + "/css/css-variables-1/variable-presentation-attribute.html", + {} + ] + ], + "css/css-variables-1/variable-pseudo-element.html": [ + [ + "/css/css-variables-1/variable-pseudo-element.html", + {} + ] + ], + "css/css-variables-1/variable-reference-cssom.html": [ + [ + "/css/css-variables-1/variable-reference-cssom.html", + {} + ] + ], + "css/css-variables-1/variable-reference-refresh.html": [ + [ + "/css/css-variables-1/variable-reference-refresh.html", + {} + ] + ], + "css/css-variables-1/variable-reference-shorthands-cssom.html": [ + [ + "/css/css-variables-1/variable-reference-shorthands-cssom.html", + {} + ] + ], + "css/css-variables-1/variable-reference-shorthands.html": [ + [ + "/css/css-variables-1/variable-reference-shorthands.html", + {} + ] + ], + "css/css-variables-1/variable-reference-variable.html": [ + [ + "/css/css-variables-1/variable-reference-variable.html", + {} + ] + ], + "css/css-variables-1/variable-reference.html": [ + [ + "/css/css-variables-1/variable-reference.html", + {} + ] + ], + "css/css-variables-1/variable-substitution-background-properties.html": [ + [ + "/css/css-variables-1/variable-substitution-background-properties.html", + {} + ] + ], + "css/css-variables-1/variable-substitution-basic.html": [ + [ + "/css/css-variables-1/variable-substitution-basic.html", + {} + ] + ], + "css/css-variables-1/variable-substitution-filters.html": [ + [ + "/css/css-variables-1/variable-substitution-filters.html", + {} + ] + ], + "css/css-variables-1/variable-substitution-plus-box-shadow.html": [ + [ + "/css/css-variables-1/variable-substitution-plus-box-shadow.html", + {} + ] + ], + "css/css-variables-1/variable-substitution-replaced-size.html": [ + [ + "/css/css-variables-1/variable-substitution-replaced-size.html", + {} + ] + ], + "css/css-variables-1/variable-substitution-shadow-properties.html": [ + [ + "/css/css-variables-1/variable-substitution-shadow-properties.html", + {} + ] + ], + "css/css-variables-1/variable-substitution-shorthands.html": [ + [ + "/css/css-variables-1/variable-substitution-shorthands.html", + {} + ] + ], + "css/css-variables-1/variable-substitution-variable-declaration.html": [ + [ + "/css/css-variables-1/variable-substitution-variable-declaration.html", + {} + ] + ], + "css/css-variables-1/variable-transitions-from-no-value.html": [ + [ + "/css/css-variables-1/variable-transitions-from-no-value.html", + {} + ] + ], + "css/css-variables-1/variable-transitions-to-no-value.html": [ + [ + "/css/css-variables-1/variable-transitions-to-no-value.html", + {} + ] + ], + "css/css-variables-1/variable-transitions-transition-property-all-before-value.html": [ + [ + "/css/css-variables-1/variable-transitions-transition-property-all-before-value.html", + {} + ] + ], + "css/css-variables-1/variable-transitions-transition-property-variable-before-value.html": [ + [ + "/css/css-variables-1/variable-transitions-transition-property-variable-before-value.html", + {} + ] + ], + "css/css-variables-1/variable-transitions-value-before-transition-property-all.html": [ + [ + "/css/css-variables-1/variable-transitions-value-before-transition-property-all.html", + {} + ] + ], + "css/css-variables-1/variable-transitions-value-before-transition-property-variable.html": [ + [ + "/css/css-variables-1/variable-transitions-value-before-transition-property-variable.html", + {} + ] + ], "css/css-variables-1/vars-border-shorthand-serialize.html": [ [ "/css/css-variables-1/vars-border-shorthand-serialize.html", @@ -320669,6 +330738,114 @@ {} ] ], + "css/css-writing-modes-3/text-orientation-script-001.html": [ + [ + "/css/css-writing-modes-3/text-orientation-script-001.html", + {} + ] + ], + "css/css-writing-modes-3/text-orientation-script-001a.html": [ + [ + "/css/css-writing-modes-3/text-orientation-script-001a.html", + {} + ] + ], + "css/css-writing-modes-3/text-orientation-script-001b.html": [ + [ + "/css/css-writing-modes-3/text-orientation-script-001b.html", + {} + ] + ], + "css/css-writing-modes-3/text-orientation-script-001c.html": [ + [ + "/css/css-writing-modes-3/text-orientation-script-001c.html", + {} + ] + ], + "css/css-writing-modes-3/text-orientation-script-001d.html": [ + [ + "/css/css-writing-modes-3/text-orientation-script-001d.html", + {} + ] + ], + "css/css-writing-modes-3/text-orientation-script-001e.html": [ + [ + "/css/css-writing-modes-3/text-orientation-script-001e.html", + {} + ] + ], + "css/css-writing-modes-3/text-orientation-script-001f.html": [ + [ + "/css/css-writing-modes-3/text-orientation-script-001f.html", + {} + ] + ], + "css/css-writing-modes-3/text-orientation-script-001g.html": [ + [ + "/css/css-writing-modes-3/text-orientation-script-001g.html", + {} + ] + ], + "css/css-writing-modes-3/text-orientation-script-001h.html": [ + [ + "/css/css-writing-modes-3/text-orientation-script-001h.html", + {} + ] + ], + "css/css-writing-modes-3/text-orientation-script-001i.html": [ + [ + "/css/css-writing-modes-3/text-orientation-script-001i.html", + {} + ] + ], + "css/css-writing-modes-3/text-orientation-script-001j.html": [ + [ + "/css/css-writing-modes-3/text-orientation-script-001j.html", + {} + ] + ], + "css/css-writing-modes-3/text-orientation-script-001k.html": [ + [ + "/css/css-writing-modes-3/text-orientation-script-001k.html", + {} + ] + ], + "css/css-writing-modes-3/text-orientation-script-001l.html": [ + [ + "/css/css-writing-modes-3/text-orientation-script-001l.html", + {} + ] + ], + "css/css-writing-modes-3/text-orientation-script-001m.html": [ + [ + "/css/css-writing-modes-3/text-orientation-script-001m.html", + {} + ] + ], + "css/css-writing-modes-3/text-orientation-script-001n.html": [ + [ + "/css/css-writing-modes-3/text-orientation-script-001n.html", + {} + ] + ], + "css/css-writing-modes-3/text-orientation-script-001o.html": [ + [ + "/css/css-writing-modes-3/text-orientation-script-001o.html", + {} + ] + ], + "css/css-writing-modes-3/text-orientation-script-001p.html": [ + [ + "/css/css-writing-modes-3/text-orientation-script-001p.html", + {} + ] + ], + "css/css-writing-modes-3/text-orientation-script-001q.html": [ + [ + "/css/css-writing-modes-3/text-orientation-script-001q.html", + {} + ] + ], "css/css-writing-modes-3/unicode-bidi-parsing-001.html": [ [ "/css/css-writing-modes-3/unicode-bidi-parsing-001.html", @@ -320975,6 +331152,36 @@ {} ] ], + "css/geometry-1/DOMMatrix-a-f-alias.html": [ + [ + "/css/geometry-1/DOMMatrix-a-f-alias.html", + {} + ] + ], + "css/geometry-1/DOMMatrix-css-string.worker.js": [ + [ + "/css/geometry-1/DOMMatrix-css-string.worker.html", + {} + ] + ], + "css/geometry-1/DOMMatrix-newobject.html": [ + [ + "/css/geometry-1/DOMMatrix-newobject.html", + {} + ] + ], + "css/geometry-1/DOMMatrix-stringifier.html": [ + [ + "/css/geometry-1/DOMMatrix-stringifier.html", + {} + ] + ], + "css/geometry-1/DOMMatrixInit-validate-fixup.html": [ + [ + "/css/geometry-1/DOMMatrixInit-validate-fixup.html", + {} + ] + ], "css/geometry-1/DOMPoint-001.html": [ [ "/css/geometry-1/DOMPoint-001.html", @@ -320993,24 +331200,150 @@ {} ] ], + "css/geometry-1/DOMQuad-002.html": [ + [ + "/css/geometry-1/DOMQuad-002.html", + {} + ] + ], "css/geometry-1/DOMRect-001.html": [ [ "/css/geometry-1/DOMRect-001.html", {} ] ], + "css/geometry-1/WebKitCSSMatrix.html": [ + [ + "/css/geometry-1/WebKitCSSMatrix.html", + {} + ] + ], + "css/geometry-1/WebKitCSSMatrix.worker.js": [ + [ + "/css/geometry-1/WebKitCSSMatrix.worker.html", + {} + ] + ], + "css/geometry-1/historical.html": [ + [ + "/css/geometry-1/historical.html", + {} + ] + ], + "css/geometry-1/interfaces.html": [ + [ + "/css/geometry-1/interfaces.html", + {} + ] + ], + "css/geometry-1/interfaces.worker.js": [ + [ + "/css/geometry-1/interfaces.worker.html", + {} + ] + ], + "css/geometry-1/structured-serialization.html": [ + [ + "/css/geometry-1/structured-serialization.html", + {} + ] + ], "css/mediaqueries-3/test_media_queries.html": [ [ "/css/mediaqueries-3/test_media_queries.html", {} ] ], + "css/motion-1/parsing/offset-anchor-parsing-invalid.html": [ + [ + "/css/motion-1/parsing/offset-anchor-parsing-invalid.html", + {} + ] + ], + "css/motion-1/parsing/offset-anchor-parsing-valid.html": [ + [ + "/css/motion-1/parsing/offset-anchor-parsing-valid.html", + {} + ] + ], + "css/motion-1/parsing/offset-distance-parsing-invalid.html": [ + [ + "/css/motion-1/parsing/offset-distance-parsing-invalid.html", + {} + ] + ], + "css/motion-1/parsing/offset-distance-parsing-valid.html": [ + [ + "/css/motion-1/parsing/offset-distance-parsing-valid.html", + {} + ] + ], + "css/motion-1/parsing/offset-parsing-invalid.html": [ + [ + "/css/motion-1/parsing/offset-parsing-invalid.html", + {} + ] + ], + "css/motion-1/parsing/offset-parsing-valid.html": [ + [ + "/css/motion-1/parsing/offset-parsing-valid.html", + {} + ] + ], + "css/motion-1/parsing/offset-path-parsing-invalid.html": [ + [ + "/css/motion-1/parsing/offset-path-parsing-invalid.html", + {} + ] + ], + "css/motion-1/parsing/offset-path-parsing-valid.html": [ + [ + "/css/motion-1/parsing/offset-path-parsing-valid.html", + {} + ] + ], + "css/motion-1/parsing/offset-position-parsing-invalid.html": [ + [ + "/css/motion-1/parsing/offset-position-parsing-invalid.html", + {} + ] + ], + "css/motion-1/parsing/offset-position-parsing-valid.html": [ + [ + "/css/motion-1/parsing/offset-position-parsing-valid.html", + {} + ] + ], + "css/motion-1/parsing/offset-rotate-parsing-invalid.html": [ + [ + "/css/motion-1/parsing/offset-rotate-parsing-invalid.html", + {} + ] + ], + "css/motion-1/parsing/offset-rotate-parsing-valid.html": [ + [ + "/css/motion-1/parsing/offset-rotate-parsing-valid.html", + {} + ] + ], + "css/selectors4/focus-display-none-001.html": [ + [ + "/css/selectors4/focus-display-none-001.html", + {} + ] + ], "css/selectors4/focus-within-009.html": [ [ "/css/selectors4/focus-within-009.html", {} ] ], + "css/selectors4/focus-within-display-none-001.html": [ + [ + "/css/selectors4/focus-within-display-none-001.html", + {} + ] + ], "cssom-view/CaretPosition-001.html": [ [ "/cssom-view/CaretPosition-001.html", @@ -321155,6 +331488,24 @@ {} ] ], + "cssom-view/scrollIntoView-empty-args.html": [ + [ + "/cssom-view/scrollIntoView-empty-args.html", + {} + ] + ], + "cssom-view/scrollIntoView-shadow.html": [ + [ + "/cssom-view/scrollIntoView-shadow.html", + {} + ] + ], + "cssom-view/scrollIntoView-smooth.html": [ + [ + "/cssom-view/scrollIntoView-smooth.html", + {} + ] + ], "cssom-view/scrollWidthHeight.xht": [ [ "/cssom-view/scrollWidthHeight.xht", @@ -321173,6 +331524,12 @@ {} ] ], + "cssom-view/scrolling-quirks-vs-nonquirks.html": [ + [ + "/cssom-view/scrolling-quirks-vs-nonquirks.html", + {} + ] + ], "cssom-view/scrollingElement.html": [ [ "/cssom-view/scrollingElement.html", @@ -321353,6 +331710,12 @@ {} ] ], + "cssom/getComputedStyle-pseudo.html": [ + [ + "/cssom/getComputedStyle-pseudo.html", + {} + ] + ], "cssom/historical.html": [ [ "/cssom/historical.html", @@ -321383,6 +331746,30 @@ {} ] ], + "cssom/insertRule-charset-no-index.html": [ + [ + "/cssom/insertRule-charset-no-index.html", + {} + ] + ], + "cssom/insertRule-import-no-index.html": [ + [ + "/cssom/insertRule-import-no-index.html", + {} + ] + ], + "cssom/insertRule-namespace-no-index.html": [ + [ + "/cssom/insertRule-namespace-no-index.html", + {} + ] + ], + "cssom/insertRule-no-index.html": [ + [ + "/cssom/insertRule-no-index.html", + {} + ] + ], "cssom/interfaces.html": [ [ "/cssom/interfaces.html", @@ -321491,6 +331878,12 @@ {} ] ], + "cssom/variable-names.html": [ + [ + "/cssom/variable-names.html", + {} + ] + ], "custom-elements/CustomElementRegistry.html": [ [ "/custom-elements/CustomElementRegistry.html", @@ -321539,6 +331932,12 @@ {} ] ], + "custom-elements/custom-element-registry/per-global.html": [ + [ + "/custom-elements/custom-element-registry/per-global.html", + {} + ] + ], "custom-elements/disconnected-callbacks.html": [ [ "/custom-elements/disconnected-callbacks.html", @@ -321551,6 +331950,12 @@ {} ] ], + "custom-elements/microtasks-and-constructors.html": [ + [ + "/custom-elements/microtasks-and-constructors.html", + {} + ] + ], "custom-elements/parser/parser-constructs-custom-element-in-document-write.html": [ [ "/custom-elements/parser/parser-constructs-custom-element-in-document-write.html", @@ -322213,6 +332618,18 @@ } ] ], + "dom/nodes/Document-constructor-svg.svg": [ + [ + "/dom/nodes/Document-constructor-svg.svg", + {} + ] + ], + "dom/nodes/Document-constructor-xml.xml": [ + [ + "/dom/nodes/Document-constructor-xml.xml", + {} + ] + ], "dom/nodes/Document-constructor.html": [ [ "/dom/nodes/Document-constructor.html", @@ -323553,6 +333970,12 @@ {} ] ], + "domparsing/DOMParser-parseFromString-xml-internal-subset.html": [ + [ + "/domparsing/DOMParser-parseFromString-xml-internal-subset.html", + {} + ] + ], "domparsing/DOMParser-parseFromString-xml.html": [ [ "/domparsing/DOMParser-parseFromString-xml.html", @@ -323691,6 +334114,12 @@ {} ] ], + "editing/other/extra-text-nodes.html": [ + [ + "/editing/other/extra-text-nodes.html", + {} + ] + ], "editing/other/restoration.html": [ [ "/editing/other/restoration.html", @@ -323715,6 +334144,12 @@ {} ] ], + "editing/run/delete-list-items-in-table-cell.html": [ + [ + "/editing/run/delete-list-items-in-table-cell.html", + {} + ] + ], "editing/run/delete.html": [ [ "/editing/run/delete.html", @@ -323961,6 +334396,598 @@ {} ] ], + "encoding/legacy-mb-japanese/shift_jis/sjis-decode-csshiftjis.html": [ + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-csshiftjis.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-decode-errors.html": [ + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-errors.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms932.html": [ + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms932.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms_kanji.html": [ + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms_kanji.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-decode-shift-jis.html": [ + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-shift-jis.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-decode-sjis.html": [ + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-sjis.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-decode-windows-31j.html": [ + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-windows-31j.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-decode-x-sjis.html": [ + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-x-sjis.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-decode.html": [ + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-csshiftjis.html": [ + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-csshiftjis.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-han.html": [ + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-han.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-hangul.html": [ + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-hangul.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-misc.html": [ + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-misc.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms932.html": [ + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms932.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms_kanji.html": [ + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms_kanji.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-shift-jis.html": [ + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-shift-jis.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-sjis.html": [ + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-sjis.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-windows-31j.html": [ + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-windows-31j.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-x-sjis.html": [ + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-x-sjis.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form.html": [ + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-han.html": [ + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-han.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-hangul.html": [ + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-hangul.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-misc.html": [ + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-misc.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-href.html": [ + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-decode-cseuckr.html": [ + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-decode-cseuckr.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-decode-csksc56011987.html": [ + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-decode-csksc56011987.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-decode-errors.html": [ + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-decode-errors.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-decode-iso-ir-149.html": [ + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-decode-iso-ir-149.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-decode-korean.html": [ + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-decode-korean.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-decode-ks_c_5601-1987.html": [ + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-decode-ks_c_5601-1987.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-decode-ks_c_5601-1989.html": [ + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-decode-ks_c_5601-1989.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-decode-ksc5601.html": [ + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-decode-ksc5601.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-decode-ksc_5601.html": [ + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-decode-ksc_5601.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-decode-windows-949.html": [ + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-decode-windows-949.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-decode.html": [ + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-decode.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-cseuckr.html": [ + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-cseuckr.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987.html": [ + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-han.html": [ + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-han.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-hangul.html": [ + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-hangul.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-misc.html": [ + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-misc.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149.html": [ + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean.html": [ + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987.html": [ + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989.html": [ + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc5601.html": [ + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc5601.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601.html": [ + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-windows-949.html": [ + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-windows-949.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form.html": [ + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-han.html": [ + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-han.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-misc.html": [ + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-misc.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-href.html": [ + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-tchinese/big5/big5-decode-big5-hkscs.html": [ + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode-big5-hkscs.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-tchinese/big5/big5-decode-cn-big5.html": [ + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode-cn-big5.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-tchinese/big5/big5-decode-csbig5.html": [ + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode-csbig5.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-tchinese/big5/big5-decode-errors.html": [ + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode-errors.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-tchinese/big5/big5-decode-extra.html": [ + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode-extra.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-tchinese/big5/big5-decode-x-x-big5.html": [ + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode-x-x-big5.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-tchinese/big5/big5-decode.html": [ + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-tchinese/big5/big5-enc-ascii.html": [ + [ + "/encoding/legacy-mb-tchinese/big5/big5-enc-ascii.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-form-big5-hkscs.html": [ + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-big5-hkscs.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-form-cn-big5.html": [ + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-cn-big5.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-form-csbig5.html": [ + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-csbig5.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBa.html": [ + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBa.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBb.html": [ + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBb.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-han.html": [ + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-han.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-hangul.html": [ + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-hangul.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-misc.html": [ + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-misc.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-pua.html": [ + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-pua.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-form-x-x-big5.html": [ + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-x-x-big5.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-form.html": [ + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-han.html": [ + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-han.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-hangul.html": [ + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-hangul.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-misc.html": [ + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-misc.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-href.html": [ + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-href.html", + { + "timeout": "long" + } + ] + ], "encoding/single-byte-decoder.html": [ [ "/encoding/single-byte-decoder.html", @@ -326037,6 +337064,18 @@ {} ] ], + "fetch/security/dangling-markup-mitigation.tentative.html": [ + [ + "/fetch/security/dangling-markup-mitigation.tentative.html", + {} + ] + ], + "fetch/security/embedded-credentials.tentative.sub.html": [ + [ + "/fetch/security/embedded-credentials.tentative.sub.html", + {} + ] + ], "fullscreen/api/document-exit-fullscreen-active-document.html": [ [ "/fullscreen/api/document-exit-fullscreen-active-document.html", @@ -326061,6 +337100,12 @@ {} ] ], + "fullscreen/api/element-request-fullscreen-active-document.html": [ + [ + "/fullscreen/api/element-request-fullscreen-active-document.html", + {} + ] + ], "fullscreen/api/element-request-fullscreen-not-allowed.html": [ [ "/fullscreen/api/element-request-fullscreen-not-allowed.html", @@ -326073,6 +337118,12 @@ {} ] ], + "fullscreen/interfaces.html": [ + [ + "/fullscreen/interfaces.html", + {} + ] + ], "gamepad/idlharness.html": [ [ "/gamepad/idlharness.html", @@ -326139,6 +337190,18 @@ {} ] ], + "gyroscope/Gyroscope.https.html": [ + [ + "/gyroscope/Gyroscope.https.html", + {} + ] + ], + "gyroscope/Gyroscope_insecure_context.html": [ + [ + "/gyroscope/Gyroscope_insecure_context.html", + {} + ] + ], "gyroscope/idlharness.https.html": [ [ "/gyroscope/idlharness.https.html", @@ -327033,6 +338096,12 @@ {} ] ], + "html/browsers/history/the-location-interface/location-origin-idna.sub.window.js": [ + [ + "/html/browsers/history/the-location-interface/location-origin-idna.sub.window.html", + {} + ] + ], "html/browsers/history/the-location-interface/location-pathname-setter-question-mark.html": [ [ "/html/browsers/history/the-location-interface/location-pathname-setter-question-mark.html", @@ -327195,6 +338264,12 @@ {} ] ], + "html/browsers/history/the-location-interface/per-global.window.js": [ + [ + "/html/browsers/history/the-location-interface/per-global.window.html", + {} + ] + ], "html/browsers/history/the-location-interface/reload_document_open_write.html": [ [ "/html/browsers/history/the-location-interface/reload_document_open_write.html", @@ -327349,6 +338424,18 @@ {} ] ], + "html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_setter_null.tentative.html": [ + [ + "/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_setter_null.tentative.html", + {} + ] + ], + "html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_setter_srcdoc.html": [ + [ + "/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_setter_srcdoc.html", + {} + ] + ], "html/browsers/sandboxing/sandbox-allow-same-origin.html": [ [ "/html/browsers/sandboxing/sandbox-allow-same-origin.html", @@ -327601,6 +338688,12 @@ {} ] ], + "html/browsers/the-window-object/historical.window.js": [ + [ + "/html/browsers/the-window-object/historical.window.html", + {} + ] + ], "html/browsers/the-window-object/named-access-on-the-window-object/named-objects.html": [ [ "/html/browsers/the-window-object/named-access-on-the-window-object/named-objects.html", @@ -328105,6 +339198,18 @@ {} ] ], + "html/dom/documents/dom-tree-accessors/nameditem-07.html": [ + [ + "/html/dom/documents/dom-tree-accessors/nameditem-07.html", + {} + ] + ], + "html/dom/documents/dom-tree-accessors/nameditem-08.html": [ + [ + "/html/dom/documents/dom-tree-accessors/nameditem-08.html", + {} + ] + ], "html/dom/documents/resource-metadata-management/document-compatmode-01.html": [ [ "/html/dom/documents/resource-metadata-management/document-compatmode-01.html", @@ -329059,6 +340164,12 @@ {} ] ], + "html/editing/dnd/datastore/datatransfer-types.html": [ + [ + "/html/editing/dnd/datastore/datatransfer-types.html", + {} + ] + ], "html/editing/dnd/dom/draggable.html": [ [ "/html/editing/dnd/dom/draggable.html", @@ -329209,6 +340320,104 @@ {} ] ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/broadcastchannel-success-and-failure.html": [ + [ + "/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/broadcastchannel-success-and-failure.html", + {} + ] + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/broadcastchannel-success.html": [ + [ + "/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/broadcastchannel-success.html", + {} + ] + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/identity-not-preserved.html": [ + [ + "/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/identity-not-preserved.html", + {} + ] + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-worker-success-dedicatedworker.html": [ + [ + "/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-worker-success-dedicatedworker.html", + {} + ] + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-worker-success-sharedworker.html": [ + [ + "/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-worker-success-sharedworker.html", + {} + ] + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-transferring.html": [ + [ + "/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-transferring.html", + {} + ] + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-history.html": [ + [ + "/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-history.html", + {} + ] + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-idb.any.js": [ + [ + "/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-idb.any.html", + {} + ], + [ + "/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-idb.any.worker.html", + {} + ] + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-notifications-api.any.js": [ + [ + "/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-notifications-api.any.html", + {} + ], + [ + "/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-notifications-api.any.worker.html", + {} + ] + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-domain-success.sub.html": [ + [ + "/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-domain-success.sub.html", + {} + ] + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-messagechannel-success.html": [ + [ + "/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-messagechannel-success.html", + {} + ] + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-serviceworker-failure.https.html": [ + [ + "/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-serviceworker-failure.https.html", + {} + ] + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-sharedworker-failure.html": [ + [ + "/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-sharedworker-failure.html", + {} + ] + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-similar-but-cross-origin-success.sub.html": [ + [ + "/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-similar-but-cross-origin-success.sub.html", + {} + ] + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-simple-success.html": [ + [ + "/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-simple-success.html", + {} + ] + ], "html/infrastructure/safe-passing-of-structured-data/structured_clone_blob.html": [ [ "/html/infrastructure/safe-passing-of-structured-data/structured_clone_blob.html", @@ -329387,6 +340596,42 @@ {} ] ], + "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-block-formatting-context.html": [ + [ + "/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-block-formatting-context.html", + {} + ] + ], + "html/rendering/non-replaced-elements/the-fieldset-element-0/legend.html": [ + [ + "/html/rendering/non-replaced-elements/the-fieldset-element-0/legend.html", + {} + ] + ], + "html/rendering/non-replaced-elements/the-hr-element-0/hr.html": [ + [ + "/html/rendering/non-replaced-elements/the-hr-element-0/hr.html", + {} + ] + ], + "html/rendering/non-replaced-elements/the-hr-element-0/setting-overflow-visible.html": [ + [ + "/html/rendering/non-replaced-elements/the-hr-element-0/setting-overflow-visible.html", + {} + ] + ], + "html/rendering/non-replaced-elements/the-page/iframe-body-margin-attributes.html": [ + [ + "/html/rendering/non-replaced-elements/the-page/iframe-body-margin-attributes.html", + {} + ] + ], + "html/rendering/non-replaced-elements/the-page/iframe-marginwidth-marginheight.html": [ + [ + "/html/rendering/non-replaced-elements/the-page/iframe-marginwidth-marginheight.html", + {} + ] + ], "html/rendering/replaced-elements/svg-embedded-sizing/svg-in-iframe-auto.html": [ [ "/html/rendering/replaced-elements/svg-embedded-sizing/svg-in-iframe-auto.html", @@ -332053,6 +343298,12 @@ {} ] ], + "html/semantics/forms/resetting-a-form/reset-form-2.html": [ + [ + "/html/semantics/forms/resetting-a-form/reset-form-2.html", + {} + ] + ], "html/semantics/forms/resetting-a-form/reset-form-event-realm.html": [ [ "/html/semantics/forms/resetting-a-form/reset-form-event-realm.html", @@ -332129,6 +343380,12 @@ {} ] ], + "html/semantics/forms/the-button-element/button-click-submits.html": [ + [ + "/html/semantics/forms/the-button-element/button-click-submits.html", + {} + ] + ], "html/semantics/forms/the-button-element/button-events.html": [ [ "/html/semantics/forms/the-button-element/button-events.html", @@ -332141,6 +343398,12 @@ {} ] ], + "html/semantics/forms/the-button-element/button-type.html": [ + [ + "/html/semantics/forms/the-button-element/button-type.html", + {} + ] + ], "html/semantics/forms/the-button-element/button-validation.html": [ [ "/html/semantics/forms/the-button-element/button-validation.html", @@ -332171,9 +343434,27 @@ {} ] ], - "html/semantics/forms/the-form-element/form-action-url.html": [ + "html/semantics/forms/the-form-element/form-action-reflection-with-base-url.html": [ [ - "/html/semantics/forms/the-form-element/form-action-url.html", + "/html/semantics/forms/the-form-element/form-action-reflection-with-base-url.html", + {} + ] + ], + "html/semantics/forms/the-form-element/form-action-reflection.html": [ + [ + "/html/semantics/forms/the-form-element/form-action-reflection.html", + {} + ] + ], + "html/semantics/forms/the-form-element/form-action-submission-with-base-url.html": [ + [ + "/html/semantics/forms/the-form-element/form-action-submission-with-base-url.html", + {} + ] + ], + "html/semantics/forms/the-form-element/form-action-submission.html": [ + [ + "/html/semantics/forms/the-form-element/form-action-submission.html", {} ] ], @@ -332183,6 +343464,12 @@ {} ] ], + "html/semantics/forms/the-form-element/form-elements-filter.html": [ + [ + "/html/semantics/forms/the-form-element/form-elements-filter.html", + {} + ] + ], "html/semantics/forms/the-form-element/form-elements-interfaces-01.html": [ [ "/html/semantics/forms/the-form-element/form-elements-interfaces-01.html", @@ -332231,6 +343518,12 @@ {} ] ], + "html/semantics/forms/the-input-element/checkbox-click-events.html": [ + [ + "/html/semantics/forms/the-input-element/checkbox-click-events.html", + {} + ] + ], "html/semantics/forms/the-input-element/checkbox.html": [ [ "/html/semantics/forms/the-input-element/checkbox.html", @@ -332351,6 +343644,12 @@ {} ] ], + "html/semantics/forms/the-input-element/radio-input-cancel.html": [ + [ + "/html/semantics/forms/the-input-element/radio-input-cancel.html", + {} + ] + ], "html/semantics/forms/the-input-element/radio.html": [ [ "/html/semantics/forms/the-input-element/radio.html", @@ -332453,6 +343752,12 @@ {} ] ], + "html/semantics/forms/the-label-element/proxy-click-to-associated-element.html": [ + [ + "/html/semantics/forms/the-label-element/proxy-click-to-associated-element.html", + {} + ] + ], "html/semantics/forms/the-legend-element/legend-form.html": [ [ "/html/semantics/forms/the-legend-element/legend-form.html", @@ -332465,12 +343770,24 @@ {} ] ], + "html/semantics/forms/the-option-element/option-element-constructor.html": [ + [ + "/html/semantics/forms/the-option-element/option-element-constructor.html", + {} + ] + ], "html/semantics/forms/the-option-element/option-form.html": [ [ "/html/semantics/forms/the-option-element/option-form.html", {} ] ], + "html/semantics/forms/the-option-element/option-index.html": [ + [ + "/html/semantics/forms/the-option-element/option-index.html", + {} + ] + ], "html/semantics/forms/the-option-element/option-label.html": [ [ "/html/semantics/forms/the-option-element/option-label.html", @@ -332555,6 +343872,12 @@ {} ] ], + "html/semantics/forms/the-select-element/select-multiple.html": [ + [ + "/html/semantics/forms/the-select-element/select-multiple.html", + {} + ] + ], "html/semantics/forms/the-select-element/select-named-getter.html": [ [ "/html/semantics/forms/the-select-element/select-named-getter.html", @@ -332567,6 +343890,12 @@ {} ] ], + "html/semantics/forms/the-select-element/select-selectedOptions.html": [ + [ + "/html/semantics/forms/the-select-element/select-selectedOptions.html", + {} + ] + ], "html/semantics/forms/the-select-element/select-validity.html": [ [ "/html/semantics/forms/the-select-element/select-validity.html", @@ -332597,6 +343926,12 @@ {} ] ], + "html/semantics/forms/the-textarea-element/value-defaultValue-textContent.html": [ + [ + "/html/semantics/forms/the-textarea-element/value-defaultValue-textContent.html", + {} + ] + ], "html/semantics/grouping-content/the-dd-element/grouping-dd.html": [ [ "/html/semantics/grouping-content/the-dd-element/grouping-dd.html", @@ -332681,6 +344016,12 @@ {} ] ], + "html/semantics/interactive-elements/contextmenu-historical.html": [ + [ + "/html/semantics/interactive-elements/contextmenu-historical.html", + {} + ] + ], "html/semantics/interactive-elements/the-details-element/details.html": [ [ "/html/semantics/interactive-elements/the-details-element/details.html", @@ -332855,18 +344196,66 @@ {} ] ], + "html/semantics/scripting-1/the-script-element/module/compilation-error-1.html": [ + [ + "/html/semantics/scripting-1/the-script-element/module/compilation-error-1.html", + {} + ] + ], + "html/semantics/scripting-1/the-script-element/module/compilation-error-2.html": [ + [ + "/html/semantics/scripting-1/the-script-element/module/compilation-error-2.html", + {} + ] + ], "html/semantics/scripting-1/the-script-element/module/crossorigin.html": [ [ "/html/semantics/scripting-1/the-script-element/module/crossorigin.html", {} ] ], + "html/semantics/scripting-1/the-script-element/module/currentScript-null.html": [ + [ + "/html/semantics/scripting-1/the-script-element/module/currentScript-null.html", + {} + ] + ], + "html/semantics/scripting-1/the-script-element/module/error-and-slow-dependency.html": [ + [ + "/html/semantics/scripting-1/the-script-element/module/error-and-slow-dependency.html", + {} + ] + ], "html/semantics/scripting-1/the-script-element/module/errorhandling.html": [ [ "/html/semantics/scripting-1/the-script-element/module/errorhandling.html", {} ] ], + "html/semantics/scripting-1/the-script-element/module/evaluation-error-1.html": [ + [ + "/html/semantics/scripting-1/the-script-element/module/evaluation-error-1.html", + {} + ] + ], + "html/semantics/scripting-1/the-script-element/module/evaluation-error-2.html": [ + [ + "/html/semantics/scripting-1/the-script-element/module/evaluation-error-2.html", + {} + ] + ], + "html/semantics/scripting-1/the-script-element/module/evaluation-error-3.html": [ + [ + "/html/semantics/scripting-1/the-script-element/module/evaluation-error-3.html", + {} + ] + ], + "html/semantics/scripting-1/the-script-element/module/evaluation-error-4.html": [ + [ + "/html/semantics/scripting-1/the-script-element/module/evaluation-error-4.html", + {} + ] + ], "html/semantics/scripting-1/the-script-element/module/execorder.html": [ [ "/html/semantics/scripting-1/the-script-element/module/execorder.html", @@ -332875,12 +344264,108 @@ } ] ], + "html/semantics/scripting-1/the-script-element/module/fetch-error-1.html": [ + [ + "/html/semantics/scripting-1/the-script-element/module/fetch-error-1.html", + {} + ] + ], + "html/semantics/scripting-1/the-script-element/module/fetch-error-2.html": [ + [ + "/html/semantics/scripting-1/the-script-element/module/fetch-error-2.html", + {} + ] + ], + "html/semantics/scripting-1/the-script-element/module/import-subgraph-404.html": [ + [ + "/html/semantics/scripting-1/the-script-element/module/import-subgraph-404.html", + {} + ] + ], "html/semantics/scripting-1/the-script-element/module/imports.html": [ [ "/html/semantics/scripting-1/the-script-element/module/imports.html", {} ] ], + "html/semantics/scripting-1/the-script-element/module/instantiation-error-1.html": [ + [ + "/html/semantics/scripting-1/the-script-element/module/instantiation-error-1.html", + {} + ] + ], + "html/semantics/scripting-1/the-script-element/module/instantiation-error-2.html": [ + [ + "/html/semantics/scripting-1/the-script-element/module/instantiation-error-2.html", + {} + ] + ], + "html/semantics/scripting-1/the-script-element/module/instantiation-error-3.html": [ + [ + "/html/semantics/scripting-1/the-script-element/module/instantiation-error-3.html", + {} + ] + ], + "html/semantics/scripting-1/the-script-element/module/late-namespace-request.html": [ + [ + "/html/semantics/scripting-1/the-script-element/module/late-namespace-request.html", + {} + ] + ], + "html/semantics/scripting-1/the-script-element/module/late-star-export-request.html": [ + [ + "/html/semantics/scripting-1/the-script-element/module/late-star-export-request.html", + {} + ] + ], + "html/semantics/scripting-1/the-script-element/module/module-vs-script-1.html": [ + [ + "/html/semantics/scripting-1/the-script-element/module/module-vs-script-1.html", + {} + ] + ], + "html/semantics/scripting-1/the-script-element/module/module-vs-script-2.html": [ + [ + "/html/semantics/scripting-1/the-script-element/module/module-vs-script-2.html", + {} + ] + ], + "html/semantics/scripting-1/the-script-element/module/nomodule-attribute.html": [ + [ + "/html/semantics/scripting-1/the-script-element/module/nomodule-attribute.html", + {} + ] + ], + "html/semantics/scripting-1/the-script-element/module/script-for-event.html": [ + [ + "/html/semantics/scripting-1/the-script-element/module/script-for-event.html", + {} + ] + ], + "html/semantics/scripting-1/the-script-element/module/single-evaluation-1.html": [ + [ + "/html/semantics/scripting-1/the-script-element/module/single-evaluation-1.html", + {} + ] + ], + "html/semantics/scripting-1/the-script-element/module/single-evaluation-2.html": [ + [ + "/html/semantics/scripting-1/the-script-element/module/single-evaluation-2.html", + {} + ] + ], + "html/semantics/scripting-1/the-script-element/module/slow-cycle.html": [ + [ + "/html/semantics/scripting-1/the-script-element/module/slow-cycle.html", + {} + ] + ], + "html/semantics/scripting-1/the-script-element/module/specifier-error.html": [ + [ + "/html/semantics/scripting-1/the-script-element/module/specifier-error.html", + {} + ] + ], "html/semantics/scripting-1/the-script-element/nomodule-reflect.html": [ [ "/html/semantics/scripting-1/the-script-element/nomodule-reflect.html", @@ -333253,6 +344738,18 @@ {} ] ], + "html/semantics/tabular-data/processing-model-1/col-span-limits.html": [ + [ + "/html/semantics/tabular-data/processing-model-1/col-span-limits.html", + {} + ] + ], + "html/semantics/tabular-data/processing-model-1/span-limits.html": [ + [ + "/html/semantics/tabular-data/processing-model-1/span-limits.html", + {} + ] + ], "html/semantics/tabular-data/the-caption-element/caption_001.html": [ [ "/html/semantics/tabular-data/the-caption-element/caption_001.html", @@ -334767,6 +346264,86 @@ {} ] ], + "html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-1.htm": [ + [ + "/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-1.htm", + { + "timeout": "long" + } + ] + ], + "html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-10.htm": [ + [ + "/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-10.htm", + { + "timeout": "long" + } + ] + ], + "html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-2.htm": [ + [ + "/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-2.htm", + { + "timeout": "long" + } + ] + ], + "html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-3.htm": [ + [ + "/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-3.htm", + { + "timeout": "long" + } + ] + ], + "html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-4.htm": [ + [ + "/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-4.htm", + { + "timeout": "long" + } + ] + ], + "html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-5.htm": [ + [ + "/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-5.htm", + { + "timeout": "long" + } + ] + ], + "html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-6.htm": [ + [ + "/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-6.htm", + { + "timeout": "long" + } + ] + ], + "html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-7.htm": [ + [ + "/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-7.htm", + { + "timeout": "long" + } + ] + ], + "html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-8.htm": [ + [ + "/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-8.htm", + { + "timeout": "long" + } + ] + ], + "html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-9.htm": [ + [ + "/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-9.htm", + { + "timeout": "long" + } + ] + ], "html/webappapis/animation-frames/callback-exception.html": [ [ "/html/webappapis/animation-frames/callback-exception.html", @@ -334929,6 +346506,12 @@ {} ] ], + "html/webappapis/scripting/events/event-handler-all-global-events.html": [ + [ + "/html/webappapis/scripting/events/event-handler-all-global-events.html", + {} + ] + ], "html/webappapis/scripting/events/event-handler-attributes-body-window.html": [ [ "/html/webappapis/scripting/events/event-handler-attributes-body-window.html", @@ -334941,12 +346524,6 @@ {} ] ], - "html/webappapis/scripting/events/event-handler-onauxclick.html": [ - [ - "/html/webappapis/scripting/events/event-handler-onauxclick.html", - {} - ] - ], "html/webappapis/scripting/events/event-handler-onresize.html": [ [ "/html/webappapis/scripting/events/event-handler-onresize.html", @@ -335169,6 +346746,30 @@ {} ] ], + "html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/canblock-dedicatedworker.html": [ + [ + "/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/canblock-dedicatedworker.html", + {} + ] + ], + "html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/canblock-serviceworker.https.html": [ + [ + "/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/canblock-serviceworker.https.html", + {} + ] + ], + "html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/canblock-sharedworker.html": [ + [ + "/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/canblock-sharedworker.html", + {} + ] + ], + "html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/canblock-window.html": [ + [ + "/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/canblock-window.html", + {} + ] + ], "html/webappapis/scripting/processing-model-2/runtime-error-cross-origin-setInterval.html": [ [ "/html/webappapis/scripting/processing-model-2/runtime-error-cross-origin-setInterval.html", @@ -335337,18 +346938,6 @@ {} ] ], - "html/webappapis/system-state-and-capabilities/the-navigator-object/NavigatorID.html": [ - [ - "/html/webappapis/system-state-and-capabilities/the-navigator-object/NavigatorID.html", - {} - ] - ], - "html/webappapis/system-state-and-capabilities/the-navigator-object/NavigatorID.worker.js": [ - [ - "/html/webappapis/system-state-and-capabilities/the-navigator-object/NavigatorID.worker.html", - {} - ] - ], "html/webappapis/system-state-and-capabilities/the-navigator-object/content.html": [ [ "/html/webappapis/system-state-and-capabilities/the-navigator-object/content.html", @@ -335397,6 +346986,22 @@ {} ] ], + "html/webappapis/system-state-and-capabilities/the-navigator-object/navigator-pluginarray.html": [ + [ + "/html/webappapis/system-state-and-capabilities/the-navigator-object/navigator-pluginarray.html", + {} + ] + ], + "html/webappapis/system-state-and-capabilities/the-navigator-object/navigator.any.js": [ + [ + "/html/webappapis/system-state-and-capabilities/the-navigator-object/navigator.any.html", + {} + ], + [ + "/html/webappapis/system-state-and-capabilities/the-navigator-object/navigator.any.worker.html", + {} + ] + ], "html/webappapis/system-state-and-capabilities/the-navigator-object/navigatorlanguage.html": [ [ "/html/webappapis/system-state-and-capabilities/the-navigator-object/navigatorlanguage.html", @@ -335487,6 +347092,30 @@ {} ] ], + "image-decodes/image-decode-iframe.html": [ + [ + "/image-decodes/image-decode-iframe.html", + { + "timeout": "long" + } + ] + ], + "image-decodes/image-decode-path-changes.html": [ + [ + "/image-decodes/image-decode-path-changes.html", + { + "timeout": "long" + } + ] + ], + "image-decodes/image-decode.html": [ + [ + "/image-decodes/image-decode.html", + { + "timeout": "long" + } + ] + ], "imagebitmap-renderingcontext/bitmaprenderer-as-imagesource.html": [ [ "/imagebitmap-renderingcontext/bitmaprenderer-as-imagesource.html", @@ -335631,6 +347260,36 @@ {} ] ], + "keyboard-lock/idlharness.https.html": [ + [ + "/keyboard-lock/idlharness.https.html", + {} + ] + ], + "keyboard-lock/navigator-cancelKeyboardLock.https.html": [ + [ + "/keyboard-lock/navigator-cancelKeyboardLock.https.html", + {} + ] + ], + "keyboard-lock/navigator-requestKeyboardLock-two-parallel-requests.https.html": [ + [ + "/keyboard-lock/navigator-requestKeyboardLock-two-parallel-requests.https.html", + {} + ] + ], + "keyboard-lock/navigator-requestKeyboardLock-two-sequential-requests.https.html": [ + [ + "/keyboard-lock/navigator-requestKeyboardLock-two-sequential-requests.https.html", + {} + ] + ], + "keyboard-lock/navigator-requestKeyboardLock.https.html": [ + [ + "/keyboard-lock/navigator-requestKeyboardLock.https.html", + {} + ] + ], "longtask-timing/longtask-attributes.html": [ [ "/longtask-timing/longtask-attributes.html", @@ -335679,6 +347338,18 @@ {} ] ], + "magnetometer/Magnetometer.https.html": [ + [ + "/magnetometer/Magnetometer.https.html", + {} + ] + ], + "magnetometer/Magnetometer_insecure_context.html": [ + [ + "/magnetometer/Magnetometer_insecure_context.html", + {} + ] + ], "magnetometer/idlharness.https.html": [ [ "/magnetometer/idlharness.https.html", @@ -336207,6 +347878,12 @@ {} ] ], + "mediacapture-image/idlharness.html": [ + [ + "/mediacapture-image/idlharness.html", + {} + ] + ], "mediacapture-record/BlobEvent-constructor.html": [ [ "/mediacapture-record/BlobEvent-constructor.html", @@ -336261,6 +347938,18 @@ {} ] ], + "mediacapture-streams/MediaDevices-IDL-all.html": [ + [ + "/mediacapture-streams/MediaDevices-IDL-all.html", + {} + ] + ], + "mediacapture-streams/MediaDevices-IDL-enumerateDevices.html": [ + [ + "/mediacapture-streams/MediaDevices-IDL-enumerateDevices.html", + {} + ] + ], "mediacapture-streams/MediaDevices-enumerateDevices.https.html": [ [ "/mediacapture-streams/MediaDevices-enumerateDevices.https.html", @@ -337641,6 +349330,12 @@ {} ] ], + "mixed-content/imageset.https.sub.html": [ + [ + "/mixed-content/imageset.https.sub.html", + {} + ] + ], "mixed-content/optionally-blockable/http-csp/cross-origin-http/audio-tag/top-level/keep-scheme-redirect/opt-in-blocks.https.html": [ [ "/mixed-content/optionally-blockable/http-csp/cross-origin-http/audio-tag/top-level/keep-scheme-redirect/opt-in-blocks.https.html", @@ -338223,6 +349918,12 @@ {} ] ], + "netinfo/netinfo-basics.html": [ + [ + "/netinfo/netinfo-basics.html", + {} + ] + ], "notifications/constructor-basic.html": [ [ "/notifications/constructor-basic.html", @@ -348281,6 +359982,12 @@ {} ] ], + "orientation-sensor/idlharness.https.html": [ + [ + "/orientation-sensor/idlharness.https.html", + {} + ] + ], "page-visibility/idlharness.html": [ [ "/page-visibility/idlharness.html", @@ -348395,12 +360102,72 @@ {} ] ], + "payment-request/payment-request-abort-method.https.html": [ + [ + "/payment-request/payment-request-abort-method.https.html", + {} + ] + ], + "payment-request/payment-request-constructor-crash.https.html": [ + [ + "/payment-request/payment-request-constructor-crash.https.html", + {} + ] + ], + "payment-request/payment-request-constructor.https.html": [ + [ + "/payment-request/payment-request-constructor.https.html", + {} + ] + ], + "payment-request/payment-request-id.https.html": [ + [ + "/payment-request/payment-request-id.https.html", + {} + ] + ], "payment-request/payment-request-in-iframe.html": [ [ "/payment-request/payment-request-in-iframe.html", {} ] ], + "payment-request/payment-request-onshippingaddresschange-attribute.https.html": [ + [ + "/payment-request/payment-request-onshippingaddresschange-attribute.https.html", + {} + ] + ], + "payment-request/payment-request-onshippingoptionchange-attribute.https.html": [ + [ + "/payment-request/payment-request-onshippingoptionchange-attribute.https.html", + {} + ] + ], + "payment-request/payment-request-show-method.https.html": [ + [ + "/payment-request/payment-request-show-method.https.html", + {} + ] + ], + "payment-request/payment-request-update-event-constructor.http.html": [ + [ + "/payment-request/payment-request-update-event-constructor.http.html", + {} + ] + ], + "payment-request/payment-request-update-event-constructor.https.html": [ + [ + "/payment-request/payment-request-update-event-constructor.https.html", + {} + ] + ], + "payment-request/payment-request-update-event-updatewith-method.https.html": [ + [ + "/payment-request/payment-request-update-event-updatewith-method.https.html", + {} + ] + ], "performance-timeline/case-sensitivity.any.js": [ [ "/performance-timeline/case-sensitivity.any.html", @@ -348463,6 +360230,12 @@ {} ] ], + "performance-timeline/po-observe.html": [ + [ + "/performance-timeline/po-observe.html", + {} + ] + ], "performance-timeline/po-resource.html": [ [ "/performance-timeline/po-resource.html", @@ -348595,6 +360368,12 @@ {} ] ], + "preload/reflected-as-value.html": [ + [ + "/preload/reflected-as-value.html", + {} + ] + ], "preload/single-download-late-used-preload.html": [ [ "/preload/single-download-late-used-preload.html", @@ -348643,6 +360422,12 @@ {} ] ], + "presentation-api/controlling-ua/defaultRequest.https.html": [ + [ + "/presentation-api/controlling-ua/defaultRequest.https.html", + {} + ] + ], "presentation-api/controlling-ua/getAvailability.https.html": [ [ "/presentation-api/controlling-ua/getAvailability.https.html", @@ -356823,6 +368608,12 @@ {} ] ], + "remote-playback/idlharness.html": [ + [ + "/remote-playback/idlharness.html", + {} + ] + ], "remote-playback/watch-availability-initial-callback.html": [ [ "/remote-playback/watch-availability-initial-callback.html", @@ -356841,6 +368632,60 @@ {} ] ], + "resource-timing/resource_TAO_match_origin.htm": [ + [ + "/resource-timing/resource_TAO_match_origin.htm", + {} + ] + ], + "resource-timing/resource_TAO_match_wildcard.htm": [ + [ + "/resource-timing/resource_TAO_match_wildcard.htm", + {} + ] + ], + "resource-timing/resource_TAO_multi.htm": [ + [ + "/resource-timing/resource_TAO_multi.htm", + {} + ] + ], + "resource-timing/resource_TAO_null.htm": [ + [ + "/resource-timing/resource_TAO_null.htm", + {} + ] + ], + "resource-timing/resource_TAO_origin.htm": [ + [ + "/resource-timing/resource_TAO_origin.htm", + {} + ] + ], + "resource-timing/resource_TAO_origin_uppercase.htm": [ + [ + "/resource-timing/resource_TAO_origin_uppercase.htm", + {} + ] + ], + "resource-timing/resource_TAO_space.htm": [ + [ + "/resource-timing/resource_TAO_space.htm", + {} + ] + ], + "resource-timing/resource_TAO_wildcard.htm": [ + [ + "/resource-timing/resource_TAO_wildcard.htm", + {} + ] + ], + "resource-timing/resource_TAO_zero.htm": [ + [ + "/resource-timing/resource_TAO_zero.htm", + {} + ] + ], "resource-timing/resource_cached.htm": [ [ "/resource-timing/resource_cached.htm", @@ -356907,6 +368752,120 @@ {} ] ], + "scroll-anchoring/abspos-containing-block-outside-scroller.html": [ + [ + "/scroll-anchoring/abspos-containing-block-outside-scroller.html", + {} + ] + ], + "scroll-anchoring/abspos-contributes-to-static-parent-bounds.html": [ + [ + "/scroll-anchoring/abspos-contributes-to-static-parent-bounds.html", + {} + ] + ], + "scroll-anchoring/ancestor-change-heuristic.html": [ + [ + "/scroll-anchoring/ancestor-change-heuristic.html", + {} + ] + ], + "scroll-anchoring/anchor-updates-after-explicit-scroll.html": [ + [ + "/scroll-anchoring/anchor-updates-after-explicit-scroll.html", + {} + ] + ], + "scroll-anchoring/anchoring-with-bounds-clamping-div.html": [ + [ + "/scroll-anchoring/anchoring-with-bounds-clamping-div.html", + {} + ] + ], + "scroll-anchoring/anchoring-with-bounds-clamping.html": [ + [ + "/scroll-anchoring/anchoring-with-bounds-clamping.html", + {} + ] + ], + "scroll-anchoring/anonymous-block-box.html": [ + [ + "/scroll-anchoring/anonymous-block-box.html", + {} + ] + ], + "scroll-anchoring/basic.html": [ + [ + "/scroll-anchoring/basic.html", + {} + ] + ], + "scroll-anchoring/clipped-scrollers-skipped.html": [ + [ + "/scroll-anchoring/clipped-scrollers-skipped.html", + {} + ] + ], + "scroll-anchoring/descend-into-container-with-float.html": [ + [ + "/scroll-anchoring/descend-into-container-with-float.html", + {} + ] + ], + "scroll-anchoring/descend-into-container-with-overflow.html": [ + [ + "/scroll-anchoring/descend-into-container-with-overflow.html", + {} + ] + ], + "scroll-anchoring/exclude-fixed-position.html": [ + [ + "/scroll-anchoring/exclude-fixed-position.html", + {} + ] + ], + "scroll-anchoring/inline-block.html": [ + [ + "/scroll-anchoring/inline-block.html", + {} + ] + ], + "scroll-anchoring/negative-layout-overflow.html": [ + [ + "/scroll-anchoring/negative-layout-overflow.html", + {} + ] + ], + "scroll-anchoring/opt-out.html": [ + [ + "/scroll-anchoring/opt-out.html", + {} + ] + ], + "scroll-anchoring/position-change-heuristic.html": [ + [ + "/scroll-anchoring/position-change-heuristic.html", + {} + ] + ], + "scroll-anchoring/start-edge-in-block-layout-direction.html": [ + [ + "/scroll-anchoring/start-edge-in-block-layout-direction.html", + {} + ] + ], + "scroll-anchoring/subtree-exclusion.html": [ + [ + "/scroll-anchoring/subtree-exclusion.html", + {} + ] + ], + "scroll-anchoring/wrapped-text.html": [ + [ + "/scroll-anchoring/wrapped-text.html", + {} + ] + ], "secure-contexts/basic-dedicated-worker.html": [ [ "/secure-contexts/basic-dedicated-worker.html", @@ -357089,6 +369048,14 @@ } ] ], + "selection/collapse-15.html": [ + [ + "/selection/collapse-15.html", + { + "timeout": "long" + } + ] + ], "selection/collapse-30.html": [ [ "/selection/collapse-30.html", @@ -357097,6 +369064,14 @@ } ] ], + "selection/collapse-45.html": [ + [ + "/selection/collapse-45.html", + { + "timeout": "long" + } + ] + ], "selection/collapseToStartEnd.html": [ [ "/selection/collapseToStartEnd.html", @@ -357183,9 +369158,9 @@ {} ] ], - "selectors-api/tests/submissions/Opera/ParentNode-query-queryAll.html": [ + "selection/type.html": [ [ - "/selectors-api/tests/submissions/Opera/ParentNode-query-queryAll.html", + "/selection/type.html", {} ] ], @@ -357213,6 +369188,12 @@ {} ] ], + "server-timing/test_server_timing.html": [ + [ + "/server-timing/test_server_timing.html", + {} + ] + ], "service-workers/cache-storage/common.https.html": [ [ "/service-workers/cache-storage/common.https.html", @@ -357705,6 +369686,24 @@ } ] ], + "service-workers/service-worker/fetch-event-respond-with-argument.https.html": [ + [ + "/service-workers/service-worker/fetch-event-respond-with-argument.https.html", + {} + ] + ], + "service-workers/service-worker/fetch-event-respond-with-readable-stream.https.html": [ + [ + "/service-workers/service-worker/fetch-event-respond-with-readable-stream.https.html", + {} + ] + ], + "service-workers/service-worker/fetch-event-respond-with-response-body-with-invalid-chunk.https.html": [ + [ + "/service-workers/service-worker/fetch-event-respond-with-response-body-with-invalid-chunk.https.html", + {} + ] + ], "service-workers/service-worker/fetch-event-respond-with-stops-propagation.https.html": [ [ "/service-workers/service-worker/fetch-event-respond-with-stops-propagation.https.html", @@ -357765,6 +369764,12 @@ {} ] ], + "service-workers/service-worker/fetch-request-css-cross-origin-mime-check.https.html": [ + [ + "/service-workers/service-worker/fetch-request-css-cross-origin-mime-check.https.html", + {} + ] + ], "service-workers/service-worker/fetch-request-css-images.https.html": [ [ "/service-workers/service-worker/fetch-request-css-images.https.html", @@ -357777,6 +369782,12 @@ {} ] ], + "service-workers/service-worker/fetch-request-html-imports.https.html": [ + [ + "/service-workers/service-worker/fetch-request-html-imports.https.html", + {} + ] + ], "service-workers/service-worker/fetch-request-no-freshness-headers.https.html": [ [ "/service-workers/service-worker/fetch-request-no-freshness-headers.https.html", @@ -357797,12 +369808,26 @@ {} ] ], + "service-workers/service-worker/fetch-request-xhr-sync.https.html": [ + [ + "/service-workers/service-worker/fetch-request-xhr-sync.https.html", + {} + ] + ], "service-workers/service-worker/fetch-request-xhr.https.html": [ [ "/service-workers/service-worker/fetch-request-xhr.https.html", {} ] ], + "service-workers/service-worker/fetch-response-taint.https.html": [ + [ + "/service-workers/service-worker/fetch-response-taint.https.html", + { + "timeout": "long" + } + ] + ], "service-workers/service-worker/fetch-response-xhr.https.html": [ [ "/service-workers/service-worker/fetch-response-xhr.https.html", @@ -357853,6 +369878,30 @@ {} ] ], + "service-workers/service-worker/http-to-https-redirect-and-register.https.html": [ + [ + "/service-workers/service-worker/http-to-https-redirect-and-register.https.html", + {} + ] + ], + "service-workers/service-worker/iframe-sandbox-register-link-element.https.html": [ + [ + "/service-workers/service-worker/iframe-sandbox-register-link-element.https.html", + {} + ] + ], + "service-workers/service-worker/import-scripts-resource-map.https.html": [ + [ + "/service-workers/service-worker/import-scripts-resource-map.https.html", + {} + ] + ], + "service-workers/service-worker/import-scripts-updated-flag.https.html": [ + [ + "/service-workers/service-worker/import-scripts-updated-flag.https.html", + {} + ] + ], "service-workers/service-worker/indexeddb.https.html": [ [ "/service-workers/service-worker/indexeddb.https.html", @@ -357889,6 +369938,12 @@ {} ] ], + "service-workers/service-worker/iso-latin1-header.https.html": [ + [ + "/service-workers/service-worker/iso-latin1-header.https.html", + {} + ] + ], "service-workers/service-worker/multi-globals/url-parsing.https.html": [ [ "/service-workers/service-worker/multi-globals/url-parsing.https.html", @@ -357949,6 +370004,24 @@ {} ] ], + "service-workers/service-worker/navigation-preload/resource-timing.https.html": [ + [ + "/service-workers/service-worker/navigation-preload/resource-timing.https.html", + {} + ] + ], + "service-workers/service-worker/navigation-redirect-body.https.html": [ + [ + "/service-workers/service-worker/navigation-redirect-body.https.html", + {} + ] + ], + "service-workers/service-worker/navigation-redirect-to-http.https.html": [ + [ + "/service-workers/service-worker/navigation-redirect-to-http.https.html", + {} + ] + ], "service-workers/service-worker/navigation-redirect.https.html": [ [ "/service-workers/service-worker/navigation-redirect.https.html", @@ -357967,6 +370040,12 @@ {} ] ], + "service-workers/service-worker/opaque-response-preloaded.https.html": [ + [ + "/service-workers/service-worker/opaque-response-preloaded.https.html", + {} + ] + ], "service-workers/service-worker/performance-timeline.https.html": [ [ "/service-workers/service-worker/performance-timeline.https.html", @@ -358009,12 +370088,24 @@ {} ] ], + "service-workers/service-worker/redirected-response.https.html": [ + [ + "/service-workers/service-worker/redirected-response.https.html", + {} + ] + ], "service-workers/service-worker/referer.https.html": [ [ "/service-workers/service-worker/referer.https.html", {} ] ], + "service-workers/service-worker/referrer-policy-header.https.html": [ + [ + "/service-workers/service-worker/referrer-policy-header.https.html", + {} + ] + ], "service-workers/service-worker/register-closed-window.https.html": [ [ "/service-workers/service-worker/register-closed-window.https.html", @@ -358029,6 +370120,12 @@ {} ] ], + "service-workers/service-worker/register-foreign-fetch-errors.https.html": [ + [ + "/service-workers/service-worker/register-foreign-fetch-errors.https.html", + {} + ] + ], "service-workers/service-worker/register-link-element.https.html": [ [ "/service-workers/service-worker/register-link-element.https.html", @@ -358077,12 +370174,6 @@ {} ] ], - "service-workers/service-worker/registration-useCache.https.html": [ - [ - "/service-workers/service-worker/registration-useCache.https.html", - {} - ] - ], "service-workers/service-worker/registration.https.html": [ [ "/service-workers/service-worker/registration.https.html", @@ -358095,6 +370186,12 @@ {} ] ], + "service-workers/service-worker/request-body-blob.https.html": [ + [ + "/service-workers/service-worker/request-body-blob.https.html", + {} + ] + ], "service-workers/service-worker/request-end-to-end.https.html": [ [ "/service-workers/service-worker/request-end-to-end.https.html", @@ -358251,6 +370348,12 @@ {} ] ], + "service-workers/service-worker/windowclient-navigate.https.html": [ + [ + "/service-workers/service-worker/windowclient-navigate.https.html", + {} + ] + ], "service-workers/service-worker/worker-interception.https.html": [ [ "/service-workers/service-worker/worker-interception.https.html", @@ -358317,6 +370420,12 @@ {} ] ], + "shadow-dom/Range-prototype-insertNode.html": [ + [ + "/shadow-dom/Range-prototype-insertNode.html", + {} + ] + ], "shadow-dom/ShadowRoot-interface.html": [ [ "/shadow-dom/ShadowRoot-interface.html", @@ -358401,6 +370510,12 @@ {} ] ], + "shadow-dom/slots-fallback-in-document.html": [ + [ + "/shadow-dom/slots-fallback-in-document.html", + {} + ] + ], "shadow-dom/slots-fallback.html": [ [ "/shadow-dom/slots-fallback.html", @@ -358779,6 +370894,18 @@ {} ] ], + "storage/persisted-worker.https.html": [ + [ + "/storage/persisted-worker.https.html", + {} + ] + ], + "storage/persisted.https.html": [ + [ + "/storage/persisted.https.html", + {} + ] + ], "storage/storagemanager-estimate.https.html": [ [ "/storage/storagemanager-estimate.https.html", @@ -359933,21 +372060,29 @@ {} ] ], - "url/historical.html": [ + "url/historical.any.js": [ [ - "/url/historical.html", + "/url/historical.any.html", + {} + ], + [ + "/url/historical.any.worker.html", {} ] ], - "url/historical.worker.js": [ + "url/interfaces.any.js": [ [ - "/url/historical.worker.html", + "/url/interfaces.any.html", + {} + ], + [ + "/url/interfaces.any.worker.html", {} ] ], - "url/interfaces.html": [ + "url/toascii.window.js": [ [ - "/url/interfaces.html", + "/url/toascii.window.html", {} ] ], @@ -360213,6 +372348,108 @@ {} ] ], + "viewport/viewport-no-resize-event-on-overflow-recalc.html": [ + [ + "/viewport/viewport-no-resize-event-on-overflow-recalc.html", + {} + ] + ], + "viewport/viewport-read-size-causes-layout.html": [ + [ + "/viewport/viewport-read-size-causes-layout.html", + {} + ] + ], + "viewport/viewport-read-size-in-iframe-causes-layout.html": [ + [ + "/viewport/viewport-read-size-in-iframe-causes-layout.html", + {} + ] + ], + "viewport/viewport-resize-event-on-load-overflowing-page.html": [ + [ + "/viewport/viewport-resize-event-on-load-overflowing-page.html", + {} + ] + ], + "viewport/viewport-scrollbars-cause-resize.html": [ + [ + "/viewport/viewport-scrollbars-cause-resize.html", + {} + ] + ], + "viewport/viewport-type.html": [ + [ + "/viewport/viewport-type.html", + {} + ] + ], + "viewport/viewport-unscaled-scale-iframe.html": [ + [ + "/viewport/viewport-unscaled-scale-iframe.html", + {} + ] + ], + "viewport/viewport-unscaled-scale.html": [ + [ + "/viewport/viewport-unscaled-scale.html", + {} + ] + ], + "viewport/viewport-unscaled-scroll-iframe.html": [ + [ + "/viewport/viewport-unscaled-scroll-iframe.html", + {} + ] + ], + "viewport/viewport-unscaled-scroll.html": [ + [ + "/viewport/viewport-unscaled-scroll.html", + {} + ] + ], + "viewport/viewport-unscaled-size-iframe.html": [ + [ + "/viewport/viewport-unscaled-size-iframe.html", + {} + ] + ], + "viewport/viewport-unscaled-size.html": [ + [ + "/viewport/viewport-unscaled-size.html", + {} + ] + ], + "wasm/wasm_indexeddb_test.html": [ + [ + "/wasm/wasm_indexeddb_test.html", + {} + ] + ], + "wasm/wasm_local_iframe_test.html": [ + [ + "/wasm/wasm_local_iframe_test.html", + {} + ] + ], + "wasm/wasm_serialization_tests.html": [ + [ + "/wasm/wasm_serialization_tests.html", + {} + ] + ], + "wasm/wasm_service_worker_test.html": [ + [ + "/wasm/wasm_service_worker_test.html", + {} + ] + ], + "web-animations/animation-model/animation-types/accumulation-per-property.html": [ + [ + "/web-animations/animation-model/animation-types/accumulation-per-property.html", + {} + ] + ], "web-animations/animation-model/animation-types/addition-per-property.html": [ [ "/web-animations/animation-model/animation-types/addition-per-property.html", @@ -360381,12 +372618,6 @@ {} ] ], - "web-animations/interfaces/Animation/reverse.html": [ - [ - "/web-animations/interfaces/Animation/reverse.html", - {} - ] - ], "web-animations/interfaces/Animation/startTime.html": [ [ "/web-animations/interfaces/Animation/startTime.html", @@ -360603,6 +372834,12 @@ {} ] ], + "web-animations/timing-model/animations/reversing-an-animation.html": [ + [ + "/web-animations/timing-model/animations/reversing-an-animation.html", + {} + ] + ], "web-animations/timing-model/animations/set-the-animation-start-time.html": [ [ "/web-animations/timing-model/animations/set-the-animation-start-time.html", @@ -364983,6 +377220,12 @@ {} ] ], + "webmessaging/broadcastchannel/origin.window.js": [ + [ + "/webmessaging/broadcastchannel/origin.window.html", + {} + ] + ], "webmessaging/broadcastchannel/sandbox.html": [ [ "/webmessaging/broadcastchannel/sandbox.html", @@ -365055,6 +377298,12 @@ {} ] ], + "webmessaging/messageerror.html": [ + [ + "/webmessaging/messageerror.html", + {} + ] + ], "webmessaging/postMessage_ArrayBuffer.sub.htm": [ [ "/webmessaging/postMessage_ArrayBuffer.sub.htm", @@ -365457,24 +377706,198 @@ {} ] ], + "webrtc/RTCCertificate.html": [ + [ + "/webrtc/RTCCertificate.html", + {} + ] + ], + "webrtc/RTCConfiguration-iceCandidatePoolSize.html": [ + [ + "/webrtc/RTCConfiguration-iceCandidatePoolSize.html", + {} + ] + ], + "webrtc/RTCDataChannel-bufferedAmount.html": [ + [ + "/webrtc/RTCDataChannel-bufferedAmount.html", + {} + ] + ], + "webrtc/RTCDataChannel-id.html": [ + [ + "/webrtc/RTCDataChannel-id.html", + {} + ] + ], + "webrtc/RTCDataChannel-send.html": [ + [ + "/webrtc/RTCDataChannel-send.html", + {} + ] + ], "webrtc/RTCDataChannelEvent-constructor.html": [ [ "/webrtc/RTCDataChannelEvent-constructor.html", {} ] ], + "webrtc/RTCIceCandidate-constructor.html": [ + [ + "/webrtc/RTCIceCandidate-constructor.html", + {} + ] + ], + "webrtc/RTCPeerConnection-addIceCandidate.html": [ + [ + "/webrtc/RTCPeerConnection-addIceCandidate.html", + {} + ] + ], + "webrtc/RTCPeerConnection-addTransceiver.html": [ + [ + "/webrtc/RTCPeerConnection-addTransceiver.html", + {} + ] + ], + "webrtc/RTCPeerConnection-canTrickleIceCandidates.html": [ + [ + "/webrtc/RTCPeerConnection-canTrickleIceCandidates.html", + {} + ] + ], + "webrtc/RTCPeerConnection-connectionState.html": [ + [ + "/webrtc/RTCPeerConnection-connectionState.html", + {} + ] + ], + "webrtc/RTCPeerConnection-constructor.html": [ + [ + "/webrtc/RTCPeerConnection-constructor.html", + {} + ] + ], + "webrtc/RTCPeerConnection-createAnswer.html": [ + [ + "/webrtc/RTCPeerConnection-createAnswer.html", + {} + ] + ], + "webrtc/RTCPeerConnection-createDataChannel.html": [ + [ + "/webrtc/RTCPeerConnection-createDataChannel.html", + {} + ] + ], + "webrtc/RTCPeerConnection-createOffer.html": [ + [ + "/webrtc/RTCPeerConnection-createOffer.html", + {} + ] + ], + "webrtc/RTCPeerConnection-generateCertificate.html": [ + [ + "/webrtc/RTCPeerConnection-generateCertificate.html", + {} + ] + ], + "webrtc/RTCPeerConnection-getTransceivers.html": [ + [ + "/webrtc/RTCPeerConnection-getTransceivers.html", + {} + ] + ], + "webrtc/RTCPeerConnection-iceConnectionState.html": [ + [ + "/webrtc/RTCPeerConnection-iceConnectionState.html", + {} + ] + ], + "webrtc/RTCPeerConnection-iceGatheringState.html": [ + [ + "/webrtc/RTCPeerConnection-iceGatheringState.html", + {} + ] + ], + "webrtc/RTCPeerConnection-idl.html": [ + [ + "/webrtc/RTCPeerConnection-idl.html", + {} + ] + ], + "webrtc/RTCPeerConnection-ondatachannel.html": [ + [ + "/webrtc/RTCPeerConnection-ondatachannel.html", + {} + ] + ], + "webrtc/RTCPeerConnection-onnegotiationneeded.html": [ + [ + "/webrtc/RTCPeerConnection-onnegotiationneeded.html", + {} + ] + ], + "webrtc/RTCPeerConnection-removeTrack.html": [ + [ + "/webrtc/RTCPeerConnection-removeTrack.html", + {} + ] + ], + "webrtc/RTCPeerConnection-setLocalDescription.html": [ + [ + "/webrtc/RTCPeerConnection-setLocalDescription.html", + {} + ] + ], + "webrtc/RTCPeerConnection-setRemoteDescription.html": [ + [ + "/webrtc/RTCPeerConnection-setRemoteDescription.html", + {} + ] + ], "webrtc/RTCPeerConnectionIceEvent-constructor.html": [ [ "/webrtc/RTCPeerConnectionIceEvent-constructor.html", {} ] ], + "webrtc/RTCRtpSender-replaceTrack.html": [ + [ + "/webrtc/RTCRtpSender-replaceTrack.html", + {} + ] + ], + "webrtc/RTCSctpTransport-constructor.html": [ + [ + "/webrtc/RTCSctpTransport-constructor.html", + {} + ] + ], "webrtc/datachannel-emptystring.html": [ [ "/webrtc/datachannel-emptystring.html", {} ] ], + "webrtc/datachannel-idlharness.html": [ + [ + "/webrtc/datachannel-idlharness.html", + {} + ] + ], + "webrtc/getstats.html": [ + [ + "/webrtc/getstats.html", + {} + ] + ], + "webrtc/interfaces.html": [ + [ + "/webrtc/interfaces.html", + {} + ] + ], "webrtc/no-media-call.html": [ [ "/webrtc/no-media-call.html", @@ -365487,42 +377910,6 @@ {} ] ], - "webrtc/rtcpeerconnection/canTrickleIceCandidates.html": [ - [ - "/webrtc/rtcpeerconnection/canTrickleIceCandidates.html", - {} - ] - ], - "webrtc/rtcpeerconnection/iceGatheringState.html": [ - [ - "/webrtc/rtcpeerconnection/iceGatheringState.html", - {} - ] - ], - "webrtc/rtcpeerconnection/rtcconfiguration-icecandidatepoolsize.html": [ - [ - "/webrtc/rtcpeerconnection/rtcconfiguration-icecandidatepoolsize.html", - {} - ] - ], - "webrtc/rtcpeerconnection/rtcpeerconnection-constructor.html": [ - [ - "/webrtc/rtcpeerconnection/rtcpeerconnection-constructor.html", - {} - ] - ], - "webrtc/rtcpeerconnection/rtcpeerconnection-idl.html": [ - [ - "/webrtc/rtcpeerconnection/rtcpeerconnection-idl.html", - {} - ] - ], - "webrtc/rtcpeerconnection/setRemoteDescription.html": [ - [ - "/webrtc/rtcpeerconnection/setRemoteDescription.html", - {} - ] - ], "webrtc/simplecall.html": [ [ "/webrtc/simplecall.html", @@ -367515,9 +379902,33 @@ {} ] ], - "webusb/idlharness.html": [ + "webusb/idlharness.https.html": [ [ - "/webusb/idlharness.html", + "/webusb/idlharness.https.html", + {} + ] + ], + "webusb/usb-allowed-by-feature-policy-attribute.https.sub.html": [ + [ + "/webusb/usb-allowed-by-feature-policy-attribute.https.sub.html", + {} + ] + ], + "webusb/usb-allowed-by-feature-policy.https.sub.html": [ + [ + "/webusb/usb-allowed-by-feature-policy.https.sub.html", + {} + ] + ], + "webusb/usb-default-feature-policy.https.sub.html": [ + [ + "/webusb/usb-default-feature-policy.https.sub.html", + {} + ] + ], + "webusb/usb-disabled-by-feature-policy.https.sub.html": [ + [ + "/webusb/usb-disabled-by-feature-policy.https.sub.html", {} ] ], @@ -368709,6 +381120,12 @@ {} ] ], + "workers/name-property.html": [ + [ + "/workers/name-property.html", + {} + ] + ], "workers/nested_worker.worker.js": [ [ "/workers/nested_worker.worker.html", @@ -368960,6 +381377,36 @@ "/workers/semantics/xhr/006.html", {} ] + ], + "workers/shared-worker-name-via-options.html": [ + [ + "/workers/shared-worker-name-via-options.html", + {} + ] + ], + "x-frame-options/deny.sub.html": [ + [ + "/x-frame-options/deny.sub.html", + {} + ] + ], + "x-frame-options/invalid.sub.html": [ + [ + "/x-frame-options/invalid.sub.html", + {} + ] + ], + "x-frame-options/multiple.sub.html": [ + [ + "/x-frame-options/multiple.sub.html", + {} + ] + ], + "x-frame-options/sameorigin.sub.html": [ + [ + "/x-frame-options/sameorigin.sub.html", + {} + ] ] }, "visual": { @@ -388217,6 +400664,12 @@ {} ] ], + "css/css-fonts-3/language-specific-01.html": [ + [ + "/css/css-fonts-3/language-specific-01.html", + {} + ] + ], "css/css-images-3/image-fit-001.xht": [ [ "/css/css-images-3/image-fit-001.xht", @@ -389254,9 +401707,7 @@ "webdriver/actions/key.py": [ [ "/webdriver/actions/key.py", - { - "timeout": "long" - } + {} ] ], "webdriver/actions/mouse.py": [ @@ -389271,6 +401722,14 @@ {} ] ], + "webdriver/actions/special_keys.py": [ + [ + "/webdriver/actions/special_keys.py", + { + "timeout": "long" + } + ] + ], "webdriver/conftest.py": [ [ "/webdriver/conftest.py", @@ -389283,6 +401742,18 @@ {} ] ], + "webdriver/elements/active.py": [ + [ + "/webdriver/elements/active.py", + {} + ] + ], + "webdriver/get_title.py": [ + [ + "/webdriver/get_title.py", + {} + ] + ], "webdriver/navigation.py": [ [ "/webdriver/navigation.py", @@ -389292,16 +401763,20 @@ } }, "paths": { + "./.codecov.yml": [ + "e2322808739a5977e90896b4755cfc20f4ab2046", + "support" + ], "./.gitignore": [ - "a74e35d1ce44dcca7ecb513a8cbd6194fe0f2c58", + "db3d1dc9d2e7ff65681a28e4dfcaeaaa8290afac", "support" ], "./.gitmodules": [ - "078f9de776005fb33e6c58bf1aad5deab425ab39", + "525f7d93f00f11086aabc1f652cf06623e21986c", "support" ], "./.travis.yml": [ - "412ca6450f30e77589d7f6aea15d111ccb394b9d", + "130d5c86ee06fc2bff6779ec8db90a86db7f0547", "support" ], "./CONTRIBUTING.md": [ @@ -389317,11 +401792,15 @@ "support" ], "./README.md": [ - "8b7d5a19ca22280bea4475be804faee03bbe237d", + "3858f125599899a11b0949715318e43135711609", + "support" + ], + "./check_stability.ini": [ + "4ee10945191db8ce3e1d8bfae86bc3f0ad40868f", "support" ], "./check_stability.py": [ - "f818356e2394747a7c0828cd1e2eabeb73265601", + "164119b28e9dee2e29eff569dc3a59ec94a04a59", "support" ], "./ci_built_diff.sh": [ @@ -389336,16 +401815,20 @@ "2d54d770ed8439a93e98961b3105b3248684744d", "support" ], + "./ci_unittest.sh": [ + "c3a982f623844d363af376e1add4c4616294f657", + "support" + ], "./config.default.json": [ "26f2c0e4aced7e1787adacb36e11c3cbf44bbd48", "support" ], "./lint": [ - "1ea93927bbc5cf570fdd6feefca4f39570b9aa37", + "ab5e8d20914f329be7e14690a21af641dd33f752", "support" ], "./lint.whitelist": [ - "6ca96c50b84670517ffb4baff14b424fd8c54f88", + "59074d9f9b155631ac1bf03a9b4b40175ca8b538", "support" ], "./manifest": [ @@ -389365,7 +401848,11 @@ "support" ], "./update-built-tests.sh": [ - "75ea35a5ce9d8e3e32e8d0c336dc12e04691d16a", + "99b5beb84b30521fa4c4a8a061acc309ee3d0d4a", + "support" + ], + "./wptrun": [ + "43c9d3fce7085be3c51a34cced8a69706c125219", "support" ], "2dcontext/2x2.png": [ @@ -390317,11 +402804,11 @@ "support" ], "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_1.html": [ - "4cf7e12dd343026fdca5c4ace01350611462c427", + "8cff9e2344fbbe84b2ce315f260e69c6ad92dd51", "reftest" ], "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_10.html": [ - "38bb230bfd728aa83b2fdc42399c636752c0566d", + "ca239d9a40410e4331863f2d11daabae3e590af3", "reftest" ], "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_10_ref.html": [ @@ -390329,7 +402816,7 @@ "support" ], "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_11.html": [ - "1f2b7cc7812397f72027be9eac72c9c82d4b56ee", + "04415ce09b3b52561f5d179e7a6a8050199189c9", "reftest" ], "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_11_ref.html": [ @@ -390337,7 +402824,7 @@ "support" ], "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_12.html": [ - "aa347c02404b76ced3e655ac1761c28992aa028c", + "efee9a63933437315c9adec573113d8dee786659", "reftest" ], "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_12_ref.html": [ @@ -390373,7 +402860,7 @@ "support" ], "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_2.html": [ - "0c897c0461b9d10b8a37d35c522f4e5a03bbc4e2", + "b03f11e43e455e2d1f453ecc2a4de00e00005ebc", "reftest" ], "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_2_ref.html": [ @@ -390381,7 +402868,7 @@ "support" ], "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_3.html": [ - "d432916c8acf40cf690798c1f674ad2eda0119aa", + "134fa026f56880acb111a8e91efe3a8bcc03bb6b", "reftest" ], "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_3_ref.html": [ @@ -390389,7 +402876,7 @@ "support" ], "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_4.html": [ - "567cdc9438977c4d2e0eeccb939ec0665eb74465", + "5d7254f7bbc8c6feffb2a4fcfeecb06fe6ed3d6c", "reftest" ], "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_4_ref.html": [ @@ -390397,7 +402884,7 @@ "support" ], "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_5.html": [ - "c0c2b5bc706030695e1353bd82ab5ab5bc5907a8", + "6a02b961aa4a5eb013366cd85dbea06fd2c08da0", "reftest" ], "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_5_ref.html": [ @@ -390405,7 +402892,7 @@ "support" ], "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_6.html": [ - "46e38d00ab7281af843982fd78810ed2d038180a", + "ce7cbe3b76274177301acca263f7cdd6c4033aa1", "reftest" ], "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_6_ref.html": [ @@ -390413,7 +402900,7 @@ "support" ], "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_7.html": [ - "7ec5d8007e4b2f823abb41724f7462de82ce8fa1", + "f5469ba799e0845bc59766d76713ee052f3e6966", "reftest" ], "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_7_ref.html": [ @@ -390421,7 +402908,7 @@ "support" ], "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_8.html": [ - "d96f3c4b998ff31694f59ba4026d893c9d5b7114", + "37958b2fb55bd90567c7c0b64b599165b20992b9", "reftest" ], "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_8_ref.html": [ @@ -393629,7 +406116,7 @@ "support" ], "2dcontext/transformations/canvas_transformations_scale_001.htm": [ - "f0c75517fd67a2228af2e5f88b0f02813a533eb6", + "5a350b586cd0fb9e3fafb2f86043cb274de70c9a", "reftest" ], "2dcontext/transformations/transform_a.html": [ @@ -393640,10 +406127,6 @@ "73f0071c06f429c3d47eac8d0863e11f1d6e8c25", "support" ], - "DOM-parsing/todo/internalSubset.html": [ - "68aaadc2e18de8c3dc2cc0fdc463847c85dbd219", - "support" - ], "FileAPI/BlobURL/support/file_test1.js": [ "f917ccbca3184f5e1aa0646fdc4fe1c74261b6bc", "support" @@ -393945,11 +406428,11 @@ "testharness" ], "IndexedDB/idb_webworkers.htm": [ - "e57fd8321a437f3b6082c5d75025ad63bd007450", + "8956db4b23f21532383fd5629468fddec6611391", "testharness" ], "IndexedDB/idbcursor-advance-continue-async.htm": [ - "6dbb08d166c7c8c2cd5c918b83bb1b15fad50dce", + "4ed7d1efe3763e8b1e0bb95f529df91c137fa0f5", "testharness" ], "IndexedDB/idbcursor-advance-exception-order.html": [ @@ -393957,11 +406440,11 @@ "testharness" ], "IndexedDB/idbcursor-advance-invalid.htm": [ - "ddb2a1394f4846396f965e60a618f2bde1f57cf9", + "52aa1102409c464e09977d55a35f018a7e3ed390", "testharness" ], "IndexedDB/idbcursor-advance.htm": [ - "7becf54b03320a3b905c4ebfa476476f22409307", + "b7968addaeadd088544c146613f7343cb887f702", "testharness" ], "IndexedDB/idbcursor-continue-exception-order.htm": [ @@ -393969,15 +406452,15 @@ "testharness" ], "IndexedDB/idbcursor-continue.htm": [ - "953ae4b03fcfe2be3652df09577df2e3829dd53a", + "15f5ef0a1e0d396b30c5c8ef740918d69e405507", "testharness" ], "IndexedDB/idbcursor-continuePrimaryKey-exception-order.htm": [ - "85dba064e12f6ee4c7f7a9ab288a8ecb11063298", + "4803def9e592d876f7d5f79d9e5b616d09bbc6f1", "testharness" ], "IndexedDB/idbcursor-continuePrimaryKey-exceptions.htm": [ - "7c2ddb95ce4b7c588ddb2907367a365902eba349", + "1ce0f8e83e296f593aafbd2de72f6437bf9c8b19", "testharness" ], "IndexedDB/idbcursor-continuePrimaryKey.htm": [ @@ -393989,23 +406472,23 @@ "testharness" ], "IndexedDB/idbcursor-direction-index-keyrange.htm": [ - "3b7f8b093301e1eb89d4398c76bd36101490d5e6", + "453d7b510cec23f777924f15919183f6d43849f9", "testharness" ], "IndexedDB/idbcursor-direction-index.htm": [ - "91dde42de3c1511b0cb5f45d9702368c814879bb", + "58e3d34b153e9c415c14db160921364f1765855a", "testharness" ], "IndexedDB/idbcursor-direction-objectstore-keyrange.htm": [ - "7834cd03a20e4e52ce4b55b4966c9c73e0a00301", + "fa5374e9f0cbcbef19b1819449c9e0fd6f87824a", "testharness" ], "IndexedDB/idbcursor-direction-objectstore.htm": [ - "14bda466bc9fb084b76101a9925acdc22cddaa29", + "e09e4f3196aee6ad096f87d1de9dd30521425eaf", "testharness" ], "IndexedDB/idbcursor-direction.htm": [ - "3185189d3b3ca40a908e69c074e68d9474b609c5", + "44f0410fa4997df37a758204e2d446187393ba1b", "testharness" ], "IndexedDB/idbcursor-key.htm": [ @@ -394021,7 +406504,7 @@ "testharness" ], "IndexedDB/idbcursor-source.htm": [ - "0677de106509b9b3f4d1e38780f479d9aaace626", + "e92b1e5ec888594a4b05c695761fd57fea52fd19", "testharness" ], "IndexedDB/idbcursor-update-exception-order.htm": [ @@ -394181,7 +406664,7 @@ "testharness" ], "IndexedDB/idbcursor_iterating.htm": [ - "6d5ed40df4126027ad48876f3d96f039c91b5d6a", + "cc86676b686c6545547ce7f59e140a6027279d5e", "testharness" ], "IndexedDB/idbcursor_iterating_index.htm": [ @@ -394193,11 +406676,11 @@ "testharness" ], "IndexedDB/idbcursor_iterating_objectstore.htm": [ - "79896d7345a47cd134204b79960dd4d38026a679", + "728242c9f1b72b7348c68c2723b25765bab64332", "testharness" ], "IndexedDB/idbcursor_iterating_objectstore2.htm": [ - "afdaeecc80f29426c884c2c852912db957fcdc28", + "811427a853df6d79e671569b87a95e51b3e06070", "testharness" ], "IndexedDB/idbcursor_update_index.htm": [ @@ -394281,7 +406764,7 @@ "testharness" ], "IndexedDB/idbdatabase_close.htm": [ - "6b0a32c465f735544b89da588bb043bbfbb66230", + "34b8d6cebcd0e5d0e781630b89d52606151df140", "testharness" ], "IndexedDB/idbdatabase_close2.htm": [ @@ -394380,6 +406863,10 @@ "faebbda16f92e9d993086578e12fd5ccdb794749", "testharness" ], + "IndexedDB/idbfactory-deleteDatabase-request-success.html": [ + "70f44f137b7f3e1d89d964e4943bed97cc4a1416", + "testharness" + ], "IndexedDB/idbfactory-open-error-properties.html": [ "bf539f5a577759908e5cc3ff1ab1c115dbed9df0", "testharness" @@ -394388,6 +406875,14 @@ "f29edb81b7c6cf534d48e1485f219d51c047c02e", "testharness" ], + "IndexedDB/idbfactory-open-request-error.html": [ + "8c2075f5879e3ff0ff82e6edfc7b4a98c64a8e33", + "testharness" + ], + "IndexedDB/idbfactory-open-request-success.html": [ + "57b0bed7aebc166a76ad4be016aacddcd643b60a", + "testharness" + ], "IndexedDB/idbfactory_cmp.htm": [ "6a00456a5f0011cf389d2f327f370b21829713cd", "testharness" @@ -394425,11 +406920,11 @@ "testharness" ], "IndexedDB/idbfactory_open10.htm": [ - "580e789cc170cc477ad41a9958766b227e85e02d", + "e4750592975b9c6b4c20db92e617bfe0dad47b9b", "testharness" ], "IndexedDB/idbfactory_open11.htm": [ - "daae03bbc5edf280cf84bb52d77e27d36392c526", + "1ec2c59be1cab46f3466dbb5b29d95048bdd62cf", "testharness" ], "IndexedDB/idbfactory_open12.htm": [ @@ -394441,7 +406936,7 @@ "testharness" ], "IndexedDB/idbfactory_open3.htm": [ - "0abe9c45c058e827689f645a8dd04acf247861ee", + "4b4df0401e63d47e6711dc43f6a51343f7b024bf", "testharness" ], "IndexedDB/idbfactory_open4.htm": [ @@ -394453,11 +406948,11 @@ "testharness" ], "IndexedDB/idbfactory_open6.htm": [ - "35480d3728b630a107e0115656b8db8488779917", + "0715543ef0b2e71913cde6c84024baf6cf9f84dd", "testharness" ], "IndexedDB/idbfactory_open7.htm": [ - "58ecaaea2690baddf916ed848636a6ed8f171670", + "828118b68ad6f80e849bc4dfef245115d6b74f1b", "testharness" ], "IndexedDB/idbfactory_open8.htm": [ @@ -394553,11 +407048,11 @@ "testharness" ], "IndexedDB/idbindex_getAll.html": [ - "68e9f7f0e45fde88f7eceb2b2949e55e828af698", + "c28603db8b1d5941db7bb724d10d66312e77d0ab", "testharness" ], "IndexedDB/idbindex_getAllKeys.html": [ - "2bdca6e57b2b8733d10a5237b6b8b75bb7d9837f", + "16582e1aeb223503b3a5ed06eeb9aa6835997693", "testharness" ], "IndexedDB/idbindex_getKey.htm": [ @@ -394865,7 +407360,7 @@ "testharness" ], "IndexedDB/idbobjectstore_deleteIndex.htm": [ - "37f3a9de39abb19b9c6d524baf28c1379efdaf90", + "05db6e5cb1388765d64bae8310553ad87d2fa0f7", "testharness" ], "IndexedDB/idbobjectstore_deleted.htm": [ @@ -394901,15 +407396,15 @@ "testharness" ], "IndexedDB/idbobjectstore_getAll.html": [ - "c9387cbe39891986a41d494b64e640f3db28704f", + "3070820db1168a459cf8357f4e7d545084e56334", "testharness" ], "IndexedDB/idbobjectstore_getAllKeys.html": [ - "bfb992f18be3cea8e6febebc22b2a524bfc8cb3a", + "e9f7529ff25900b75aef37edea45b9635802e1b7", "testharness" ], "IndexedDB/idbobjectstore_getKey.html": [ - "76906dde291ad82b93070aef7b1fcecae80adfff", + "d34c54405b817f6eac937532adcc130385c05865", "testharness" ], "IndexedDB/idbobjectstore_index.htm": [ @@ -394921,11 +407416,11 @@ "testharness" ], "IndexedDB/idbobjectstore_openCursor_invalid.htm": [ - "f8bb8abce5872a2543a9a9c85d3b25cc7c9c24d9", + "5457297bc3d408f30d1c9466d0b5d404f6adf473", "testharness" ], "IndexedDB/idbobjectstore_openKeyCursor.htm": [ - "45066f081f2229a16a4ec89ddcee858666651e87", + "fac19308e8e42d2ce3874406b527bb5dd29eba11", "testharness" ], "IndexedDB/idbobjectstore_put.htm": [ @@ -394993,7 +407488,7 @@ "testharness" ], "IndexedDB/idbrequest-onupgradeneeded.htm": [ - "b3b93705a62981706d810ebddaf73f4bee6d1612", + "db880099d6c54ae1168d8b7886680fe2a3332b83", "testharness" ], "IndexedDB/idbrequest_error.html": [ @@ -395017,7 +407512,7 @@ "testharness" ], "IndexedDB/idbtransaction.htm": [ - "2d058dd87d864ad538d975e7c10e235fca82f74c", + "af3ddcf5367fbcd5d838c29842f6482e1cbcfb49", "testharness" ], "IndexedDB/idbtransaction_abort.htm": [ @@ -395025,7 +407520,7 @@ "testharness" ], "IndexedDB/idbtransaction_objectStoreNames.html": [ - "3a2bb014fe738ebcafc87e449002feec25ae86f6", + "88418b8a79548ed39204153d7110fe7215e20c3d", "testharness" ], "IndexedDB/idbversionchangeevent.htm": [ @@ -395112,6 +407607,14 @@ "ef0680b2623521388e23654b5428cbfb553b4ee8", "testharness" ], + "IndexedDB/large-nested-cloning.html": [ + "831510a9d36a19081cf037940b19092e37303e19", + "testharness" + ], + "IndexedDB/large-requests-abort.html": [ + "7b8b1ccb8b7f9d737b648ceade5192a57c4ad690", + "testharness" + ], "IndexedDB/list_ordering.htm": [ "64544e2f7700d28590e791e54447a59d167d3813", "testharness" @@ -395132,6 +407635,14 @@ "22588cdd7dc2d565e57a393f5f6e7e85139f03b7", "testharness" ], + "IndexedDB/request-abort-ordering.html": [ + "8d848f3ef41d81a3abfe9c8ed29303d1ce0bad58", + "testharness" + ], + "IndexedDB/request-event-ordering.html": [ + "44e8124ba121e64d82e47a99735e1a1df4f8ed44", + "testharness" + ], "IndexedDB/request_bubble-and-capture.htm": [ "9c486babd57c2d14bb251d5bba202b3dbd6c802d", "testharness" @@ -395141,11 +407652,11 @@ "testharness" ], "IndexedDB/support-promises.js": [ - "64bd991aa7b4cdd85b8c69e7d8e9c432d82cf4b5", + "3f1413bc2bf958cd6f5f41996f41112bc9f83f1a", "support" ], "IndexedDB/support.js": [ - "6544b743611f07c4f6ef2533e9bd0213a23fba07", + "1a2e89e3be7ba2af3352d5d284666465a5663fb5", "support" ], "IndexedDB/transaction-abort-generator-revert.html": [ @@ -395265,7 +407776,7 @@ "support" ], "WebCryptoAPI/derive_bits_keys/pbkdf2.js": [ - "f881616857e5f523338f338ffcbded34f1c6b9e9", + "dfd8eea5707720186820549837c8a1a319a8ecc4", "support" ], "WebCryptoAPI/derive_bits_keys/pbkdf2.worker.js": [ @@ -395276,20 +407787,52 @@ "0a073cb726ad239110545eb3cecada2a0ce5daf7", "support" ], - "WebCryptoAPI/derive_bits_keys/test_ecdh_bits.html": [ + "WebCryptoAPI/derive_bits_keys/test_ecdh_bits.https.html": [ "eb82990143fa33de7b62cdacd2db566512d74d44", "testharness" ], - "WebCryptoAPI/derive_bits_keys/test_ecdh_keys.html": [ + "WebCryptoAPI/derive_bits_keys/test_ecdh_keys.https.html": [ "d896626491b4f710970b28d30eb89604034fb8c4", "testharness" ], - "WebCryptoAPI/derive_bits_keys/test_hkdf.html": [ + "WebCryptoAPI/derive_bits_keys/test_hkdf.https.html": [ "6d0def388fed4db1606d03f2cbfd59020bd00c56", "testharness" ], - "WebCryptoAPI/derive_bits_keys/test_pbkdf2.html": [ - "07703342a2b5b80585d541ec47d4633381fd785c", + "WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_empty.https.html": [ + "48b0c6ac60cc130a5bc109fd43b5b1da74bad6da", + "testharness" + ], + "WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_long.https.html": [ + "9f28363c1c182c354d688a44249abe3f6c6e9ff5", + "testharness" + ], + "WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_short.https.html": [ + "2a6b28ee191cc62575872c19a21b402f668cd0d5", + "testharness" + ], + "WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_empty.https.html": [ + "e1d654a4ccefef12b57ef32388debf5df170e938", + "testharness" + ], + "WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_long.https.html": [ + "2e3e354fe0b4b96d2429bd6e3b5b702a327d9e84", + "testharness" + ], + "WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_short.https.html": [ + "b53dd1eb6d350d6546e71e77d829eb3da4fc4c68", + "testharness" + ], + "WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_empty.https.html": [ + "d36de62c712d53d29aa8cc6995851493d814654f", + "testharness" + ], + "WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_long.https.html": [ + "518afb29e8f859a793e0e39317c6516aae99fb67", + "testharness" + ], + "WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_short.https.html": [ + "5e776aa3f202bb72a328947983b020f03ba6ec4d", "testharness" ], "WebCryptoAPI/digest/digest.js": [ @@ -395300,7 +407843,7 @@ "a9a6b7a15bf0b795729190a94bdda6ed1ddc013d", "testharness" ], - "WebCryptoAPI/digest/test_digest.html": [ + "WebCryptoAPI/digest/test_digest.https.html": [ "1f5893b2c01a60e1e49b8ba5dee8f3d6507cc604", "testharness" ], @@ -395344,19 +407887,19 @@ "e833d10f83ac5cff26e076371a545d60a8d37b8f", "support" ], - "WebCryptoAPI/encrypt_decrypt/test_aes_cbc.html": [ + "WebCryptoAPI/encrypt_decrypt/test_aes_cbc.https.html": [ "f79d96aaa96347302cf08c641c5064b9dc2e974c", "testharness" ], - "WebCryptoAPI/encrypt_decrypt/test_aes_ctr.html": [ + "WebCryptoAPI/encrypt_decrypt/test_aes_ctr.https.html": [ "a3d4d1e4ea38587d170f583061d58ce02224d81e", "testharness" ], - "WebCryptoAPI/encrypt_decrypt/test_aes_gcm.html": [ + "WebCryptoAPI/encrypt_decrypt/test_aes_gcm.https.html": [ "f545fb559442624770696da2addb489cb5534530", "testharness" ], - "WebCryptoAPI/encrypt_decrypt/test_rsa_oaep.html": [ + "WebCryptoAPI/encrypt_decrypt/test_rsa_oaep.https.html": [ "4905875dd185403d093361afb8e75bef50ce0c34", "testharness" ], @@ -395409,7 +407952,7 @@ "testharness" ], "WebCryptoAPI/generateKey/successes.js": [ - "a048156c0d724a735093a6f1209c8fed8281ffd1", + "9623250b44a270bd23f6d892e8a8296351fac708", "support" ], "WebCryptoAPI/generateKey/successes.worker.js": [ @@ -395456,99 +407999,95 @@ "b9e9790245742b8eeb4af7679cc0144710380c07", "testharness" ], - "WebCryptoAPI/generateKey/test_aes-cbc.html": [ + "WebCryptoAPI/generateKey/test_aes-cbc.https.html": [ "9c92564d0b64784bded21d3c337da125da1c0225", "testharness" ], - "WebCryptoAPI/generateKey/test_aes-ctr.html": [ + "WebCryptoAPI/generateKey/test_aes-ctr.https.html": [ "3804433a5bd2c382c8bd9afbd1b41792d9f927c1", "testharness" ], - "WebCryptoAPI/generateKey/test_failures.html": [ + "WebCryptoAPI/generateKey/test_failures.https.html": [ "a1458bc27b594b9051bfbb7e537aebe2c95b6859", "testharness" ], - "WebCryptoAPI/generateKey/test_failures_AES-CBC.html": [ + "WebCryptoAPI/generateKey/test_failures_AES-CBC.https.html": [ "bf4b12efa09c2602bed73b4ae2b94ebdf5bf9749", "testharness" ], - "WebCryptoAPI/generateKey/test_failures_AES-CTR.html": [ + "WebCryptoAPI/generateKey/test_failures_AES-CTR.https.html": [ "2d33a87c30f30d76e547cb6e4b9637292c2e7b6e", "testharness" ], - "WebCryptoAPI/generateKey/test_failures_AES-GCM.html": [ + "WebCryptoAPI/generateKey/test_failures_AES-GCM.https.html": [ "aaeb0182a48f680fd7f421a8ba7efa29561ad7fb", "testharness" ], - "WebCryptoAPI/generateKey/test_failures_AES-KW.html": [ + "WebCryptoAPI/generateKey/test_failures_AES-KW.https.html": [ "4dc9d4cff709a8a84569f6fc6eb2225a59fe8db4", "testharness" ], - "WebCryptoAPI/generateKey/test_failures_ECDH.html": [ + "WebCryptoAPI/generateKey/test_failures_ECDH.https.html": [ "6eca49b0a06e1c468c28dffab3435cf14972095c", "testharness" ], - "WebCryptoAPI/generateKey/test_failures_ECDSA.html": [ + "WebCryptoAPI/generateKey/test_failures_ECDSA.https.html": [ "decb88cd07b2ef2f2c07d1a1fd8e7dfc46e22350", "testharness" ], - "WebCryptoAPI/generateKey/test_failures_HMAC.html": [ + "WebCryptoAPI/generateKey/test_failures_HMAC.https.html": [ "ffd768d80a38ae9e9ae029c3372a227681b020dd", "testharness" ], - "WebCryptoAPI/generateKey/test_failures_RSA-OAEP.html": [ + "WebCryptoAPI/generateKey/test_failures_RSA-OAEP.https.html": [ "ea5fab99e5fdc1b4232aa4c9eed96657f64b1e67", "testharness" ], - "WebCryptoAPI/generateKey/test_failures_RSA-PSS.html": [ + "WebCryptoAPI/generateKey/test_failures_RSA-PSS.https.html": [ "1e03b7b789b75bb25e3491fe8bcfc198dd53b46d", "testharness" ], - "WebCryptoAPI/generateKey/test_failures_RSASSA-PKCS1-v1_5.html": [ + "WebCryptoAPI/generateKey/test_failures_RSASSA-PKCS1-v1_5.https.html": [ "749e526a3f67c246a328a99abd4c1da728571413", "testharness" ], - "WebCryptoAPI/generateKey/test_successes.html": [ - "6dd8fd836361a4c02c602149fbde996d0131607a", - "testharness" - ], - "WebCryptoAPI/generateKey/test_successes_AES-CBC.html": [ + "WebCryptoAPI/generateKey/test_successes_AES-CBC.https.html": [ "e8ee3bdfb8aef171d6db35cc69a482f1a992d089", "testharness" ], - "WebCryptoAPI/generateKey/test_successes_AES-CTR.html": [ + "WebCryptoAPI/generateKey/test_successes_AES-CTR.https.html": [ "07f55a63a2327ee8804548ba5e802fcdba09010e", "testharness" ], - "WebCryptoAPI/generateKey/test_successes_AES-GCM.html": [ + "WebCryptoAPI/generateKey/test_successes_AES-GCM.https.html": [ "ebec06754972d621026a4284c316c882be362dc3", "testharness" ], - "WebCryptoAPI/generateKey/test_successes_AES-KW.html": [ + "WebCryptoAPI/generateKey/test_successes_AES-KW.https.html": [ "e76258a60418fb1467d16a17b4e01da1d99bd036", "testharness" ], - "WebCryptoAPI/generateKey/test_successes_ECDH.html": [ + "WebCryptoAPI/generateKey/test_successes_ECDH.https.html": [ "b2b7d0a233473a51e67a760638abf1f532d1232b", "testharness" ], - "WebCryptoAPI/generateKey/test_successes_ECDSA.html": [ + "WebCryptoAPI/generateKey/test_successes_ECDSA.https.html": [ "c21190c7c74eb856a9fce3a4913723b46fa1887a", "testharness" ], - "WebCryptoAPI/generateKey/test_successes_HMAC.html": [ + "WebCryptoAPI/generateKey/test_successes_HMAC.https.html": [ "ccfe6cefe42764a46dd817046b026034be033e97", "testharness" ], - "WebCryptoAPI/generateKey/test_successes_RSA-OAEP.html": [ - "7ebe1df33a5df5f5a2cead014af5502246b6b833", + "WebCryptoAPI/generateKey/test_successes_RSA-OAEP.https.html": [ + "04b89d631e81fd7822049c8513984c3af3711efd", "testharness" ], - "WebCryptoAPI/generateKey/test_successes_RSA-PSS.html": [ + "WebCryptoAPI/generateKey/test_successes_RSA-PSS.https.html": [ "623370ae56918c14ac14f40fb057327b0844be04", "testharness" ], - "WebCryptoAPI/generateKey/test_successes_RSASSA-PKCS1-v1_5.html": [ + "WebCryptoAPI/generateKey/test_successes_RSASSA-PKCS1-v1_5.https.html": [ "ad5db5278bef55d9ae2336961c226199a4c94446", "testharness" ], @@ -395560,6 +408099,10 @@ "52b5381311cc0e2595d251273e054fa826de9765", "testharness" ], + "WebCryptoAPI/idlharness.https.html": [ + "52b5381311cc0e2595d251273e054fa826de9765", + "testharness" + ], "WebCryptoAPI/idlharness.worker.js": [ "e3478f4259364d773dab9ca5e0c7194a0b78d5b3", "testharness" @@ -395588,18 +408131,26 @@ "e9d9758d0478ecdf93a5fda9f196501e992de614", "testharness" ], - "WebCryptoAPI/import_export/test_ec_importKey.html": [ + "WebCryptoAPI/import_export/test_ec_importKey.https.html": [ "2c173849dd35c551b71983fb8efc20f650599da2", "testharness" ], - "WebCryptoAPI/import_export/test_rsa_importKey.html": [ + "WebCryptoAPI/import_export/test_rsa_importKey.https.html": [ "d12cf20829eace56868a7b40d38e75aca89932a6", "testharness" ], - "WebCryptoAPI/import_export/test_symmetric_importKey.html": [ + "WebCryptoAPI/import_export/test_symmetric_importKey.https.html": [ "a69847f41e437363676a4ced439faba50ce85e5d", "testharness" ], + "WebCryptoAPI/secure_context/crypto-subtle-non-secure-context-not-available.sub.html": [ + "e219b5ee2c878779562aded462bfcaa7ad81b63d", + "testharness" + ], + "WebCryptoAPI/secure_context/crypto-subtle-secure-context-available.https.sub.html": [ + "4df3813485b7277571d61ce38a5811729f91ddbe", + "testharness" + ], "WebCryptoAPI/sign_verify/ecdsa.js": [ "55c99894ea3ba9186de1082c189f37f77dfe12e1", "support" @@ -395644,19 +408195,19 @@ "766e1f95031b3f9f3dd5d0e3de8c70f5fdf5ac30", "support" ], - "WebCryptoAPI/sign_verify/test_ecdsa.html": [ + "WebCryptoAPI/sign_verify/test_ecdsa.https.html": [ "969eb4e062dfb91e40be42d4980f0d0e464d5b34", "testharness" ], - "WebCryptoAPI/sign_verify/test_hmac.html": [ + "WebCryptoAPI/sign_verify/test_hmac.https.html": [ "cd105449c7b9b75aa91ee0848fdca5bda78a1aae", "testharness" ], - "WebCryptoAPI/sign_verify/test_rsa_pkcs.html": [ + "WebCryptoAPI/sign_verify/test_rsa_pkcs.https.html": [ "d7840d0a6d848510bf547d64c8b197761f39e05e", "testharness" ], - "WebCryptoAPI/sign_verify/test_rsa_pss.html": [ + "WebCryptoAPI/sign_verify/test_rsa_pss.https.html": [ "408e1a081caa23f7e717128e94eb5cfeae9bac30", "testharness" ], @@ -395665,10 +408216,14 @@ "support" ], "WebCryptoAPI/util/helpers.js": [ - "6bf895ea91bfc92cb346f96af777bc9b8a0af0ee", + "76bfa10171fb405f321d015b4394a2a929d587dd", "support" ], - "WebCryptoAPI/wrapKey_unwrapKey/test_wrapKey_unwrapKey.html": [ + "WebCryptoAPI/util/worker-report-crypto-subtle-presence.js": [ + "4aacae51744fa0284ebc89c43084c4dae873e5c1", + "support" + ], + "WebCryptoAPI/wrapKey_unwrapKey/test_wrapKey_unwrapKey.https.html": [ "2f0070bafc5079f3b70dd8da567fde0ea6bfb113", "testharness" ], @@ -395680,6 +408235,10 @@ "901c6df896c5f9bccd2e680fbd6fc56afce8d364", "testharness" ], + "WebIDL/OWNERS": [ + "f9c94ab08fa997459cba17e61d8cd00ee8b07b46", + "support" + ], "WebIDL/current-realm.html": [ "167c7c1f53ae2bf457f6b3f917f0ef988c585c7c", "testharness" @@ -395709,13 +408268,29 @@ "testharness" ], "WebIDL/ecmascript-binding/has-instance.html": [ - "4266bf65ad4dd3dd2acaf7b8e0d18e8999f8252b", + "8df0ec18a02041106df53ccc3168261d29ab7943", "testharness" ], "WebIDL/ecmascript-binding/interface-object.html": [ "f68be23702792cb5236e608bf6e8421a9a851fb8", "testharness" ], + "WebIDL/ecmascript-binding/interface-prototype-object.html": [ + "13d2a9dbbd0d78e240c2b88d548f88ba41184e5f", + "testharness" + ], + "WebIDL/ecmascript-binding/legacy-callback-interface-object.html": [ + "4eac8c853a0627577d2bd96ed76c45bd187a5734", + "testharness" + ], + "WebIDL/ecmascript-binding/put-forwards.html": [ + "95fcfc28dae32ab9aadf21d2512a519d6a9fd5ab", + "testharness" + ], + "WebIDL/ecmascript-binding/sequence-conversion.html": [ + "8038a4e188651f4ccd24a3c3bcd3af773c55bc97", + "testharness" + ], "WebIDL/invalid/idl/enum.widl": [ "cebcfcecfe4b09a4d3ea15e766e9b13044dfe0b8", "support" @@ -396305,7 +408880,7 @@ "testharness" ], "XMLHttpRequest/formdata-foreach.html": [ - "0de3e65e068a59180ba03c67ce70e4db8f0bbd87", + "ac4bcf3c043dec99e2feeaeff828ead2db1e9606", "testharness" ], "XMLHttpRequest/formdata-get.htm": [ @@ -396377,7 +408952,7 @@ "testharness" ], "XMLHttpRequest/interfaces.html": [ - "b65e817345a4410c2062242bef57031d4ff448b7", + "a4c597d2bdb85e37ffe5f5ebba961d7f8a3aeb29", "testharness" ], "XMLHttpRequest/loadstart-and-state.html": [ @@ -396505,11 +409080,11 @@ "testharness" ], "XMLHttpRequest/open-url-redirected-worker-origin.htm": [ - "d92032b7a81bcea83ee03df3affe0e25263328b0", + "877d6bd227709cc3ada32493ba6cc86683efade9", "testharness" ], "XMLHttpRequest/open-url-worker-origin.htm": [ - "e4db65c7c0a98d7f5aa84eac01705259f377f44b", + "f105c0e4b249f82545f2763c4b1a23a3a217e3a7", "testharness" ], "XMLHttpRequest/open-url-worker-simple.htm": [ @@ -396612,6 +409187,10 @@ "e7d0a9054c562964b23c4e4bbf1d1207a1811b55", "support" ], + "XMLHttpRequest/resources/base.xml": [ + "4f52cca8f5bee9b2a4ded6b898d4eb9cdbae6c75", + "support" + ], "XMLHttpRequest/resources/chunked.py": [ "be48633bdec117d50bce7a8e4323667881c8e367", "support" @@ -396685,7 +409264,7 @@ "support" ], "XMLHttpRequest/resources/infinite-redirects.py": [ - "0b73a37de1d20fb329bc60588b5e00f2adc48e85", + "bd033f0de21dc68ed1d4303fee49e64dd0916722", "support" ], "XMLHttpRequest/resources/init.htm": [ @@ -396869,7 +409448,7 @@ "testharness" ], "XMLHttpRequest/responsexml-document-properties.htm": [ - "cd2daff503f42f1cb3e43b6d8fe04bea1b8ee59c", + "9c3698d77cb49266cfcc33e89a74d7930b5b06cb", "testharness" ], "XMLHttpRequest/responsexml-get-twice.htm": [ @@ -396980,6 +409559,10 @@ "43a7647ba4c567aaea98efa41d538d5beda682ff", "testharness" ], + "XMLHttpRequest/send-data-arraybufferview.htm": [ + "89c4c24408588cbd42f1b3ccfd50f91b6267ff92", + "testharness" + ], "XMLHttpRequest/send-data-blob.htm": [ "cf811393a5a18891e46439f5d9bb92acbf45b5e3", "testharness" @@ -397316,60 +409899,52 @@ "b960bef807da94c0146ed2f537eaa1e05ec9a0ab", "testharness" ], + "accelerometer/Accelerometer.https.html": [ + "cb802e1f9df53ef6e8e3a34daf54f9e02b019383", + "testharness" + ], + "accelerometer/Accelerometer_insecure_context.html": [ + "62c0fdfe1ee0752956b4c68e877cd7f47ac887a1", + "testharness" + ], + "accelerometer/Accelerometer_onerror-manual.https.html": [ + "e03faad7d297ce2c5d6fefa66a2397c3d9a32e2d", + "manual" + ], "accelerometer/OWNERS": [ "36770a71443523aa2f91f9958ba24066f0b4dcec", "support" ], "accelerometer/idlharness.https.html": [ - "c7d55e65051d370f6a225ae7def35270144fed95", + "eedb225d9e8a05d528e62cc2d689dbfe36858052", "testharness" ], - "ambient-light/AmbientLightSensor.js": [ - "8313b3b63892b2dba96c17ff2fb4c4f5ae107efe", + "accelerometer/support-iframe.html": [ + "5782b270802060f88a1842c2393fb7d18c8c75a8", "support" ], - "ambient-light/AmbientLightSensor_browsing_context.https.html": [ - "2bff26861bbb67c58af6bbb6105bbcd57ac35b6d", + "ambient-light/AmbientLightSensor.https.html": [ + "3bc1a9bbc660ec9ee83f65914c35a52201eccb4b", "testharness" ], "ambient-light/AmbientLightSensor_insecure_context.html": [ - "c546291fd11aeb2e23dd0a68ea02511babedcb7a", - "testharness" - ], - "ambient-light/AmbientLightSensor_onchange.https.html": [ - "b0dae1e2c22f35a0e97dc63529750bc0242e67b3", + "9267bca8016bdde90ba2e5e866e9989db7c045dd", "testharness" ], "ambient-light/AmbientLightSensor_onerror-manual.https.html": [ - "9bbd4281bbab2a1b1a1c34600b0b3d5ea6b99e62", + "fa52072d6da7987db8f67c2a6fd9b2e281f03042", "manual" ], - "ambient-light/AmbientLightSensor_reading.https.html": [ - "36ffed0f2be6b280123a91e8d60740b6a7a95e5d", - "testharness" - ], - "ambient-light/AmbientLightSensor_start.https.html": [ - "b81065b401d4063b2fae2daaec4e7f53da3419ab", - "testharness" - ], - "ambient-light/AmbientLightSensor_stop.https.html": [ - "1068f563e1fe0d7595248086856ea3f3547cf221", - "testharness" - ], - "ambient-light/AmbientLightSensor_tests.html": [ - "1f90699129c27a5a5581a3cd989e097220e54620", - "testharness" - ], "ambient-light/OWNERS": [ "72539a05ddcce7467524b36255696565a2c484e8", "support" ], "ambient-light/idlharness.https.html": [ - "6fa24c2a71228917e83cfb2e44945c466c004959", + "0c0f48d162d3ef69b8fe1486a99cc315fab5ab31", "testharness" ], "ambient-light/support-iframe.html": [ - "ea1cdae3e30c279501483a6680bce50006879da5", + "62024c4c0cff6fb5a21a6db62cd9756de0a2f479", "support" ], "annotation-model/.editorconfig": [ @@ -399428,6 +412003,14 @@ "946f23f945163bf9f9da080291b21473f6e1cbd0", "support" ], + "assumptions/ahem-ref.html": [ + "f38cdd07d07558540e19c2b2ec063dbc54f8be7f", + "support" + ], + "assumptions/ahem.html": [ + "e097b6e6eb9ecf107cea94b3984661cc62c7ac67", + "reftest" + ], "assumptions/canvas-background-ref.html": [ "0868a5443b1aacb8fd95327bc7c71d071158b0f1", "support" @@ -399464,14 +412047,18 @@ "df47a9a9342da260175776c3406856be096d0012", "reftest" ], + "assumptions/tools/ahem-generate-table.py": [ + "ed433a26632138f063bbb6093b7f1850e0769c36", + "support" + ], + "assumptions/tools/build.sh": [ + "e7549e915a809b48cac816dacdd7a9bbf476b596", + "support" + ], "auxclick/OWNERS": [ "314d421a5544db277664bb55bd04b87e9ed2fdba", "support" ], - "auxclick/auxclick_event-manual.html": [ - "464073435190f51b2725653a0a0589e10f136d2d", - "manual" - ], "background-fetch/OWNERS": [ "0c4e22b970a92b2d77b0f50cc27c2d46aad0b43b", "support" @@ -399496,46 +412083,46 @@ "c08081d13e4029cf4fffb48c15d323d8b15a581b", "support" ], - "battery-status/battery-charging-manual.html": [ - "8ebb3c62fc6b678f5b0583cf0c699ff732ce5aa4", + "battery-status/battery-charging-manual.https.html": [ + "9b4367fa0a6920b5c9bd0b310935f79260ec1214", "manual" ], - "battery-status/battery-discharging-manual.html": [ - "9704395bc6026b24d8ae4e5bfdb6edd04ef79b6b", + "battery-status/battery-discharging-manual.https.html": [ + "748f32b343f07e8abc4fb7a0764bca9e4b92e274", "manual" ], - "battery-status/battery-full-manual.html": [ - "7f3860749feb26bb9cb87286cb6f66b62aa64737", + "battery-status/battery-full-manual.https.html": [ + "0fb90d807a27ce9e78dab040926effc1be7f71be", "manual" ], - "battery-status/battery-interface-idlharness.html": [ - "c8f459ca2f9bd88d46484d8471dd3427c0e46394", + "battery-status/battery-iframe.https.html": [ + "b4df9429c1ff9ace253fb40296b20c06f8eb5eb3", "testharness" ], - "battery-status/battery-plugging-in-manual.html": [ - "6dd6b6e88db39056da714690941a704bea29100f", + "battery-status/battery-insecure-context.html": [ + "39639373d161846186cbcb7eb33466493bcc77ad", + "testharness" + ], + "battery-status/battery-interface-idlharness.https.html": [ + "7f1578703d6f2a7d417b4d6569febb9f9836ea0e", + "testharness" + ], + "battery-status/battery-plugging-in-manual.https.html": [ + "1d7e354f498cf967bdf5dad3b2f696d7606dd3f6", "manual" ], - "battery-status/battery-promise-iframe.html": [ - "43fc622c8b5eec5c9e78a0b640a73e2a16ad3dc2", + "battery-status/battery-promise-window.https.html": [ + "47ee9801dd697228defd4e3be6a79ed6fe9af602", "testharness" ], - "battery-status/battery-promise-window.html": [ - "4407bd4501d8a32849bb8725ef24bf78e06e9c53", + "battery-status/battery-promise.https.html": [ + "41551743c53e17a1bb7d0d3399227547e3901b47", "testharness" ], - "battery-status/battery-promise.html": [ - "197e72bf5cbad7e3b4bacd63c57db3dbabb525e0", - "testharness" - ], - "battery-status/battery-unplugging-manual.html": [ - "a9293caf021d95d94cc7a5d3828b9221dd9dbfd1", + "battery-status/battery-unplugging-manual.https.html": [ + "af15c949703b096e373a07715c40a2575f30f8ba", "manual" ], - "battery-status/support-iframe-initial.html": [ - "3c203529afca2f6b2a075eb8a42bf2206e4f16af", - "support" - ], "battery-status/support-iframe.html": [ "3c203529afca2f6b2a075eb8a42bf2206e4f16af", "support" @@ -399544,6 +412131,10 @@ "61b61d09a21daee964e0ebd26f7bdfdd1964c8ae", "support" ], + "beacon/headers/header-content-type.html": [ + "5753ef82d17941aaf0c929da8952f88aa4186f02", + "testharness" + ], "beacon/headers/header-referrer-no-referrer-when-downgrade.https.html": [ "273c7d0110d5efc9fac0029cd257256894d3eb4b", "testharness" @@ -399580,6 +412171,10 @@ "8185d2b31fbf67a573444d3c8f828f96422526f5", "support" ], + "beacon/resources/content-type.py": [ + "0734a043b92b0a2646d643f14c0e7e0e33043b1d", + "support" + ], "beacon/resources/inspect-header.py": [ "e70503e7fb71617b9be631d5f2a9e73cacd83e3f", "support" @@ -399605,7 +412200,7 @@ "support" ], "clipboard/OWNERS": [ - "7c5c92bcb47be9151914d709e2b792a122f07a6e", + "bae753666bda85e9805a5e2fad80ba71459b8aba", "support" ], "common/OWNERS": [ @@ -399644,6 +412239,10 @@ "329e3ae1cfde2ee0525302e6a3260faed3885f28", "support" ], + "common/css-paint-tests.js": [ + "0e88a610e5ad9ff1deb04adec35b73caadbff201", + "support" + ], "common/css-red.txt": [ "9edd8c61eb63c9b63fd7301e65174b5f7f87bbe1", "support" @@ -399680,6 +412279,14 @@ "a575b8135e6ddb1501fc2a082d7544ee86011b7d", "support" ], + "common/object-association.js": [ + "c6955b7bbf00d73ec5959678391aa59d36da8321", + "support" + ], + "common/performance-timeline-utils.js": [ + "0616ad8871126af7a74ff6937f3f7c623adcbd3e", + "support" + ], "common/redirect-opt-in.py": [ "70caa012fa7b91e20b7a08e3708097d1c1da44a3", "support" @@ -404912,7 +417519,7 @@ "3cb56d9c98c1919803808f5257cdf66efb6b7002", "support" ], - "conformance-checkers/html-svg/animate-elem-77-t-novalid.html": [ + "conformance-checkers/html-svg/animate-elem-77-t-isvalid.html": [ "2bcba9a1a2edea6dbd0b438f857a995091405678", "support" ], @@ -405524,7 +418131,7 @@ "2e47bc204d4c8925d379e0f01e0ad523a8534ae9", "support" ], - "conformance-checkers/html-svg/linking-a-10-f-novalid.html": [ + "conformance-checkers/html-svg/linking-a-10-f-isvalid.html": [ "041310e5242d507bf163c504d458672764d62362", "support" ], @@ -416937,7 +429544,7 @@ "support" ], "conformance-checkers/messages.json": [ - "2000edc6505270feb387e96746bced7ee7701812", + "742126ed2e1c98c54dea09f903eca1879848d338", "support" ], "conformance-checkers/tools/build-svg-tests.py": [ @@ -416957,7 +429564,7 @@ "support" ], "conformance-checkers/tools/url.py": [ - "31d6488a72515610ecb3f3a96e4e1075ea66acf6", + "550d8d52d0f6986cb6692c67cfcb951f438d672b", "support" ], "conformance-checkers/xhtml/attributes/accesskey/003-novalid.xhtml": [ @@ -417208,12 +429815,48 @@ "22b894f5252d86ceb3d1c331635d062af3e07eca", "support" ], - "conformance-checkers/xhtml/elements/menu/001-haswarn.xhtml": [ - "b63931b4b28fe71a466111b8f0b75f9115655fc0", + "conformance-checkers/xhtml/elements/menu/embed-contextmenu-isvalid.xhtml": [ + "bd8e3da89cb466863c601723b175edab8bb62ac9", "support" ], - "conformance-checkers/xhtml/elements/menu/001-novalid.xhtml": [ - "cdac06cac71298f6fa2197776070b84130b0a45c", + "conformance-checkers/xhtml/elements/menu/menu-containing-hr-novalid.xhtml": [ + "b0544decd3b211b63b27caae6d44190358548bf3", + "support" + ], + "conformance-checkers/xhtml/elements/menu/menu-containing-menu-novalid.xhtml": [ + "dcae3be36eeddff8d0acf55d8e20910b148dd42d", + "support" + ], + "conformance-checkers/xhtml/elements/menu/menu-containing-text-novalid.xhtml": [ + "98d342415dbdd6e5f20168e4adfd1b4b2c91112b", + "support" + ], + "conformance-checkers/xhtml/elements/menu/menu-type-context-novalid.xhtml": [ + "53c8626aa2bcecb1e67926cf03fb3b69e8512954", + "support" + ], + "conformance-checkers/xhtml/elements/menu/menu-type-popup-novalid.xhtml": [ + "160d3fc772d6bd0a36ef95c454edd8a10ab4f3ed", + "support" + ], + "conformance-checkers/xhtml/elements/menu/menu-type-toolbar-novalid.xhtml": [ + "8da4730da3f7346e4c31dfa8e81c4c60ea885b80", + "support" + ], + "conformance-checkers/xhtml/elements/menu/menu-valid.xhtml": [ + "745c41ade4689e85addba998326fc6f4aa57b5b1", + "support" + ], + "conformance-checkers/xhtml/elements/menu/menuitem-children-novalid.xhtml": [ + "94852b0b3be30447f6ca26d44e39de471c782149", + "support" + ], + "conformance-checkers/xhtml/elements/menu/menuitem-label-novalid.xhtml": [ + "4d8e4dbbb5a1be26d0000e6f4d5061c802437ae0", + "support" + ], + "conformance-checkers/xhtml/elements/menu/p-contextmenu-novalid.xhtml": [ + "2d42f8881a6231da867ab8cafe4fb33f0648983e", "support" ], "conformance-checkers/xhtml/elements/meter/002-isvalid.xhtml": [ @@ -417400,13 +430043,17 @@ "9834273e9d9f9bf5ca645497955dc5375091938f", "support" ], - "content-security-policy/base-uri/base-uri_iframe_sandbox.sub.html": [ - "0235470345c1f336bb6ace4cb747ffc1a334a5f6", + "content-security-policy/base-uri/base-uri-allow.sub.html": [ + "f529a5f663471743f84b0d6db986a67227dcdcab", "testharness" ], - "content-security-policy/base-uri/base-uri_iframe_sandbox.sub.html.headers": [ - "ac57d9475710ee4ca0f979d3037264a405787c35", - "support" + "content-security-policy/base-uri/base-uri-deny.sub.html": [ + "3b77edcd9a327a7cb7120ee0fb4975f936430211", + "testharness" + ], + "content-security-policy/base-uri/base-uri_iframe_sandbox.sub.html": [ + "19d2027dc8784a479722b7f405fee31973808e2f", + "testharness" ], "content-security-policy/blink-contrib-2/allowed.css": [ "4477032f6a7347c932c71f9737f3f5e8d244c7d3", @@ -418668,18 +431315,14 @@ "70aeb617f5d580917b385346ba629e035f062c32", "testharness" ], - "content-security-policy/embedded-enforcement/embedding_csp-header-invalid-format.html": [ - "3747c23fd624aefa80c2906095084e843843f3d8", - "testharness" - ], - "content-security-policy/embedded-enforcement/embedding_csp-header.html": [ - "3a9f255c0b99f7750fe487ae6e68063954184d05", - "testharness" - ], "content-security-policy/embedded-enforcement/iframe-csp-attribute.html": [ "d5a253732352f46d33c1a58d1a3183a88daa3a75", "testharness" ], + "content-security-policy/embedded-enforcement/required_csp-header.html": [ + "9c06eea69babc70158e7bf25fad5d79a7367403e", + "testharness" + ], "content-security-policy/embedded-enforcement/subsumption_algorithm-general.html": [ "341815aa171886f3c7c34ddf5d7f0012d163c0da", "testharness" @@ -418704,6 +431347,10 @@ "1381a56b34e81c8c91ba4346a4ef439a4fdaa3ae", "testharness" ], + "content-security-policy/embedded-enforcement/subsumption_algorithm-nonces.html": [ + "442b6a3683f9ca20f8ec38478c664d61538ada44", + "testharness" + ], "content-security-policy/embedded-enforcement/subsumption_algorithm-none.html": [ "ac13f4c20df8be2d89ac9ca0adff01bf80be2946", "testharness" @@ -418732,16 +431379,16 @@ "269f68ae2a4cb96450fb6eceb7006452287d7970", "support" ], - "content-security-policy/embedded-enforcement/support/echo-embedding-csp.py": [ - "c54b41c6d03175fac28515ef1874b78b37b291fc", - "support" - ], "content-security-policy/embedded-enforcement/support/echo-policy-multiple.py": [ "363e06143474e3a3941fe4b96631146902351aff", "support" ], + "content-security-policy/embedded-enforcement/support/echo-required-csp.py": [ + "3ece10b38406736c7ca5cd0c1b5fb9e8088ef655", + "support" + ], "content-security-policy/embedded-enforcement/support/testharness-helper.sub.js": [ - "8878f3e801392004397f166db2466cd1db18cbf6", + "01887343762a0f997ee59c8392a63d0a6101b1f9", "support" ], "content-security-policy/font-src/font-match-allowed.sub.html": [ @@ -418908,6 +431555,26 @@ "51e1354d16cfa4967e91206be8bd0d8c6ca577af", "support" ], + "content-security-policy/frame-src/frame-src-redirect.html": [ + "16ac0d81d039fc2514b72a68fa491159ad46f59c", + "testharness" + ], + "content-security-policy/frame-src/frame-src-redirect.html.headers": [ + "3df52b9299a0ada67d3211c5190269fa8b046211", + "support" + ], + "content-security-policy/frame-src/frame-src-self-unique-origin.html": [ + "7917b8bfc500a2b76e8b9e01ff4d45a7cd2df9a8", + "testharness" + ], + "content-security-policy/frame-src/support/frame.html": [ + "3f5fd74f92250b09f2dd790d154ade7bc4748d78", + "support" + ], + "content-security-policy/frame-src/support/testharness-helper.sub.js": [ + "c11acf3aff5ffaf1a581ff8c73f077b7c0ee0a26", + "support" + ], "content-security-policy/generic/fail-0_1.js": [ "357bbab837dcc2794a46fb07e31ea49b16b447cf", "support" @@ -419056,6 +431723,10 @@ "dac6a06e0965db0d648cfa3e96f6efa60c612cdc", "testharness" ], + "content-security-policy/img-src/img-src-self-unique-origin.html": [ + "62e4c6f09a455e1338ef9c7463b0a210c6d3f0f7", + "testharness" + ], "content-security-policy/img-src/img-src-wildcard-allowed.html": [ "4114664a54645718ccbb5292f5103dc1942724aa", "testharness" @@ -419164,10 +431835,38 @@ "2553698b40d91f95f33bb14e7bd906d665b0381a", "testharness" ], - "content-security-policy/navigation/to-javascript-url.html": [ + "content-security-policy/navigation/to-javascript-url-frame-src.html": [ + "3070ea56bcb7dc454d7bc252377f0dc5bcb03c7c", + "testharness" + ], + "content-security-policy/navigation/to-javascript-url-script-src.html": [ "26e0c14927bab1b2fd6ce44b59472f336a700aa4", "testharness" ], + "content-security-policy/nonce-hiding/script-nonces-hidden-meta.tentative.html": [ + "a1de5c33148f7e202d13bc5c25d115a29ac81b3b", + "testharness" + ], + "content-security-policy/nonce-hiding/script-nonces-hidden.tentative.html": [ + "c3265d6ead066201f712aa06beac162f365dd058", + "testharness" + ], + "content-security-policy/nonce-hiding/script-nonces-hidden.tentative.html.headers": [ + "28c376fd32a880f58de3f67fd3b19288c38d63f3", + "support" + ], + "content-security-policy/nonce-hiding/svgscript-nonces-hidden-meta.tentative.html": [ + "9ea075f30ba75a712f1fd7c05d413caaca0af67a", + "testharness" + ], + "content-security-policy/nonce-hiding/svgscript-nonces-hidden.tentative.html": [ + "7345b65ebfdecad898ce1d3acd6ee5353163a38d", + "testharness" + ], + "content-security-policy/nonce-hiding/svgscript-nonces-hidden.tentative.html.headers": [ + "28c376fd32a880f58de3f67fd3b19288c38d63f3", + "support" + ], "content-security-policy/object-src/object-src-2_1.html": [ "e3fd776705884126e14236678ac5e628102d3ba8", "testharness" @@ -419452,6 +432151,14 @@ "5f2ff4a87aa476168cf3d13b10a8d81a387b8e42", "testharness" ], + "content-security-policy/securitypolicyviolation/img-src-redirect-upgrade-reporting.https.html": [ + "e338e94ea726419db64ed5b98c95b862c394409e", + "testharness" + ], + "content-security-policy/securitypolicyviolation/img-src-redirect-upgrade-reporting.https.html.headers": [ + "960ee8a9f7ccf33ea435890e2eae0e68399f32ed", + "support" + ], "content-security-policy/securitypolicyviolation/inside-dedicated-worker.html": [ "46d18c97d554716b714856c00bdc49388d211868", "testharness" @@ -419504,10 +432211,22 @@ "ac19897e2693ba3228640d03c770cd5a33c51381", "support" ], + "content-security-policy/securitypolicyviolation/support/testharness-helper.sub.js": [ + "71244cc74fa8f8ee8082c876264e053348905fbd", + "support" + ], "content-security-policy/securitypolicyviolation/targeting.html": [ "36ec8dd9ef0bd1be3615913015d857aa1a7c9e97", "testharness" ], + "content-security-policy/securitypolicyviolation/upgrade-insecure-requests-reporting.https.html": [ + "2cfb1afe778abfee51ecda00b72147adec512540", + "testharness" + ], + "content-security-policy/securitypolicyviolation/upgrade-insecure-requests-reporting.https.html.headers": [ + "6e15d48ddd21d1bbb9603081d5d7fef98ebfa106", + "support" + ], "content-security-policy/style-src/resources/style-src-import.sub.css": [ "37de4f39b0399d9a5a230b5446883f9e4b49a061", "support" @@ -419852,6 +432571,10 @@ "acf95ba2292a36d28bbe9aa857428b2d1741ad33", "support" ], + "cors/access-control-expose-headers-parsing.window.js": [ + "2da0e5bb66faad76a428ce5fbcc6878fde52fc3c", + "testharness" + ], "cors/allow-headers.htm": [ "e28cf5812e58e490ec28bb407c4575f3d33687dc", "testharness" @@ -419877,7 +432600,7 @@ "testharness" ], "cors/preflight-failure.htm": [ - "73662dfcfabf5301b326e3c08d940825f032b644", + "223df28f39565f7e31a901482f237d269b7d012c", "testharness" ], "cors/redirect-origin.htm": [ @@ -419912,6 +432635,14 @@ "b3270117326add2e3709b1bf790747cf3a83a218", "support" ], + "cors/resources/access-control-expose-headers-parsing-2.asis": [ + "e9e349bea68cfe246cbc247c1dd314cd49e82e8b", + "support" + ], + "cors/resources/access-control-expose-headers-parsing.asis": [ + "9cf4e4db6b0a74fa25f1ab500e91acf90b1c9db6", + "support" + ], "cors/resources/checkandremove.py": [ "d891a6e489124e4ef7f82faa51a5e2a7221925f9", "support" @@ -419964,27 +432695,207 @@ "8307ed240a531033c96da89197dcfb5ea25cde87", "support" ], - "css-timing-1/OWNERS": [ + "credential-management/credentialscontainer-create-basics.https.html": [ + "49f1139b264e09fd398fa14b37ecc94119b63558", + "testharness" + ], + "credential-management/idl.https.html": [ + "0df70baded35ef70ab7395c8933ba7e1d041aa85", + "testharness" + ], + "css-font-display/font-display-ref.html": [ + "26fcc2758c649ce922397cd1c4aa862bdbf1e6a0", + "support" + ], + "css-font-display/font-display.html": [ + "d83914326318602ce0eef5f248254a391b338df0", + "reftest" + ], + "css-font-display/resources/slow-ahem-loading.py": [ + "aac16c1e618841ebdd28463adf5688ca837b9d57", + "support" + ], + "css-font-loading/fontfacesetloadevent-constructor.html": [ + "ad355c3d5220c1b938182241a8e8abe030ace699", + "testharness" + ], + "css-paint-api/OWNERS": [ + "0c1517f7ba747014c7c091b61d48f11421ed91c2", + "support" + ], + "css-paint-api/background-image-alpha-ref.html": [ + "45ef6e998e5f266741f5403df650cd9557dbe005", + "support" + ], + "css-paint-api/background-image-alpha.html": [ + "2476286f8be52ae4f8ba22dd939b961d8e7ca379", + "reftest" + ], + "css-paint-api/background-image-multiple-ref.html": [ + "9ff536499d72240f67eb6911b768c624371ea678", + "support" + ], + "css-paint-api/background-image-multiple.html": [ + "9e43ca2821fa0075073a898efde7595f6b57fad4", + "reftest" + ], + "css-paint-api/background-image-tiled-ref.html": [ + "a879be73470aae683bd7596132225770bc8be27b", + "support" + ], + "css-paint-api/background-image-tiled.html": [ + "03aff62fc21832b44d9de15805232d87d0089ed3", + "reftest" + ], + "css-paint-api/invalid-image-constructor-error-ref.html": [ + "b0c34ee1480fe1108fe8dc53f2bbb2f3ffa1c408", + "support" + ], + "css-paint-api/invalid-image-constructor-error.html": [ + "6e73e10076d29e69dad68deca551ad9cb84f82f9", + "reftest" + ], + "css-paint-api/invalid-image-paint-error-ref.html": [ + "b0c34ee1480fe1108fe8dc53f2bbb2f3ffa1c408", + "support" + ], + "css-paint-api/invalid-image-paint-error.html": [ + "53ea8b4f95f9afafd145c04c5f5961af19a9eae4", + "reftest" + ], + "css-paint-api/invalid-image-pending-script-ref.html": [ + "b0c34ee1480fe1108fe8dc53f2bbb2f3ffa1c408", + "support" + ], + "css-paint-api/invalid-image-pending-script.html": [ + "40cd95de01fb371990dac73777e75bd306d28be9", + "reftest" + ], + "css-paint-api/overdraw-ref.html": [ + "b0c34ee1480fe1108fe8dc53f2bbb2f3ffa1c408", + "support" + ], + "css-paint-api/overdraw.html": [ + "1f8f97b0a2141f5f8530a535b24b2b04dadae31c", + "reftest" + ], + "css-paint-api/paint-arguments-ref.html": [ + "cbe0372259011ca94f0fd8d233413439ba9cf117", + "support" + ], + "css-paint-api/paint-arguments.html": [ + "7e70944e4d1dd456cc91eb443f09bb2e28b812f4", + "reftest" + ], + "css-paint-api/paint-function-arguments-ref.html": [ + "a3aebfce59d0f62ab229248b7903b0dc731835d5", + "support" + ], + "css-paint-api/paint-function-arguments.html": [ + "e4083cf39fca7ce4783d36e3235d4cfecf7d2db9", + "reftest" + ], + "css-paint-api/paint2d-composite-ref.html": [ + "60c069de8135b934df166560db5c592d5becbc92", + "support" + ], + "css-paint-api/paint2d-composite.html": [ + "bfe095afc5c9a4325b06cfc22414a09395084113", + "reftest" + ], + "css-paint-api/paint2d-filter-ref.html": [ + "6f1be576ae7ead2a724357b16ea88c92b3b19a0d", + "support" + ], + "css-paint-api/paint2d-filter.html": [ + "75d3792f2947cac41657257a8d74d72521c82c7f", + "reftest" + ], + "css-paint-api/paint2d-gradient-ref.html": [ + "3b2abb3632893c0f5a2714fc325467f0076001a8", + "support" + ], + "css-paint-api/paint2d-gradient.html": [ + "57a163232fe53272e9e2d37293908cf7b18267bb", + "reftest" + ], + "css-paint-api/paint2d-image-ref.html": [ + "c71e0b960177b13614d2c11392c94ea155927ebe", + "support" + ], + "css-paint-api/paint2d-image.html": [ + "5df17bc61598b6687091b3da4b626ed0938cd89e", + "reftest" + ], + "css-paint-api/paint2d-paths-ref.html": [ + "cf154ab8a37bdbce2175193dfc456f4771bfeca8", + "support" + ], + "css-paint-api/paint2d-paths.html": [ + "06e13a31033ace03f012556b59ad3c0ac5cf39c1", + "reftest" + ], + "css-paint-api/paint2d-rects-ref.html": [ + "2a469427fbdbee6b096a63b95846cdeda92c0255", + "support" + ], + "css-paint-api/paint2d-rects.html": [ + "fbb8bf17e5dfd21d87b7d34bdb038e59e16ede46", + "reftest" + ], + "css-paint-api/paint2d-shadows-ref.html": [ + "f882c26b0dfb58fe1ab3177060f421dad0148456", + "support" + ], + "css-paint-api/paint2d-shadows.html": [ + "6c7dab36d84540407eeb9571f8a9607e8d27ce6b", + "reftest" + ], + "css-paint-api/paint2d-transform-ref.html": [ + "5eff507eeee563399205645668c7ed3df79213c9", + "support" + ], + "css-paint-api/paint2d-transform.html": [ + "f840916bab6d10cff1b08d1cfaecee97699d80cb", + "reftest" + ], + "css-paint-api/valid-image-after-load-ref.html": [ + "b0c34ee1480fe1108fe8dc53f2bbb2f3ffa1c408", + "support" + ], + "css-paint-api/valid-image-after-load.html": [ + "4f20acb987ed51fc374d873db74522ed4bd1dc1c", + "reftest" + ], + "css-paint-api/valid-image-before-load-ref.html": [ + "b0c34ee1480fe1108fe8dc53f2bbb2f3ffa1c408", + "support" + ], + "css-paint-api/valid-image-before-load.html": [ + "67d8cdd3e3a1656ba315fcbf6dae7236680bac16", + "reftest" + ], + "css-timing/OWNERS": [ "7c9899aa9065ffe6e1206b630124d4939ae53c8f", "support" ], - "css-timing-1/cubic-bezier-timing-functions-output.html": [ + "css-timing/cubic-bezier-timing-functions-output.html": [ "77a45437209844f7e5128bd6aa2efeeacf876187", "testharness" ], - "css-timing-1/frames-timing-functions-output.html": [ + "css-timing/frames-timing-functions-output.html": [ "fe9a931466f31605f1a09d5f95589cc54ee34663", "testharness" ], - "css-timing-1/frames-timing-functions-syntax.html": [ + "css-timing/frames-timing-functions-syntax.html": [ "7ac5eef9cec74746aa076912285398f525b01c06", "testharness" ], - "css-timing-1/step-timing-functions-output.html": [ + "css-timing/step-timing-functions-output.html": [ "4b514aac1efca5813e5a551290f8c84f678bd41d", "testharness" ], - "css-timing-1/testcommon.js": [ + "css-timing/testcommon.js": [ "a39c8c7fdd3b58d03d5a544ebe51f82e65ac5645", "support" ], @@ -419993,11 +432904,11 @@ "testharness" ], "css-typed-om/declared-styleMap-accepts-inherit.html": [ - "2d6e5a3bc89559c671ed9a2dbad8e5f456b947a9", + "31cb4e38d12d19c0b90aceed979fbbaedd00dadd", "testharness" ], "css-typed-om/styleMap-update-function.html": [ - "ba9d58c998b7c7ab586fd54e80a0466133c91ebc", + "1b98ee851da85aa7ffd3d523df0fd2fd4fdbef22", "testharness" ], "css-values/unset-value-storage.html": [ @@ -473661,7 +486572,7 @@ "support" ], "css/README.md": [ - "c6150e6c3be56dd9c5f4581dcaccf98f90d8793e", + "17ea0b79a120fb33e736c10fa967cfd001f9b181", "support" ], "css/WOFF2/OWNERS": [ @@ -477080,10 +489991,6 @@ "e77fe7dd590d970ede2e21b99860b7e3fa4dae5a", "support" ], - "css/WOFF2/support/valid-009.woff2": [ - "b2f306c8fdcd20e4ced90cc226d9a54f00afd94a", - "support" - ], "css/WOFF2/tabledata-bad-origlength-loca-001-ref.xht": [ "f2aa2f4f45daf5415ec9d79639636bbae831ff0a", "support" @@ -477320,14 +490227,6 @@ "7a6c1866bbb7a27eabdc102aadd5005df3c74e21", "manual" ], - "css/WOFF2/valid-009-ref.xht": [ - "d4983a008d3ffd67a7dbe450419aa791f711f7f0", - "support" - ], - "css/WOFF2/valid-009.xht": [ - "47039172facbd6c765d6e1217e18bcbbe5e37b07", - "manual" - ], "css/build-css-testsuites.sh": [ "ab2382a838116f012204de2c3d70bc591bc9600d", "support" @@ -477829,7 +490728,7 @@ "testharness" ], "css/css-align-3/default-alignment/place-items-shorthand-006.html": [ - "f84ca76042d8475cfad273903157044125ce73a0", + "3de2cbe0f38c6efd2cf830fadc858988600b7900", "testharness" ], "css/css-align-3/distribution-values/space-evenly-001.html": [ @@ -483608,6 +496507,14 @@ "4030618381ad36d2c03be81b3b97cdb87977ddec", "reftest" ], + "css/css-display-3/display-contents-state-change-001-ref.html": [ + "f7e25855cc7ef1896a9a52005d3c1379bf74746b", + "support" + ], + "css/css-display-3/display-contents-state-change-001.html": [ + "0a689fbe90be794772c66d59b033d15336e6dfe3", + "reftest" + ], "css/css-display-3/display-contents-table-001-ref.html": [ "9de4ee8151dbfa3c8e2c381ddd213e51b04f70c1", "support" @@ -483733,7 +496640,7 @@ "testharness" ], "css/css-flexbox-1/Flexible-order.html": [ - "2c3c198cc210c007a1cd059b3960d5a24f90c359", + "ff6b01d6069b9106c60e3f86ac29bffb7c94f916", "reftest" ], "css/css-flexbox-1/OWNERS": [ @@ -483789,79 +496696,83 @@ "visual" ], "css/css-flexbox-1/align-items-001.htm": [ - "5b2a8f8d6d15ba2026b1f6b449f9208e0bc6c312", + "756aef82fb86de2ed5f154f92597f505ce6144ce", "reftest" ], "css/css-flexbox-1/align-items-002.htm": [ - "daee42c9d0120f8c398466687363e1eff4fc69ed", + "749f543687e63a66a9ba337269d37a2d5830ad16", "reftest" ], "css/css-flexbox-1/align-items-003.htm": [ - "9de495f0b990496d7eec9a53bfb7a64077b95186", + "4b49395868899feacb7b68cf160471482a95bac5", "reftest" ], "css/css-flexbox-1/align-items-004.htm": [ - "f96dec9d161f07c84eb71223ace82ac3a63bd1cd", + "1acdb1a8d8fe0902db3e22714b1d933385d80740", "reftest" ], "css/css-flexbox-1/align-items-005.htm": [ - "2ffe50e8dcafe8a95b0a37bfe4d4d3deba84a0ca", + "d5e39cc8afacb90baa48cf7ae41d499f817e7426", + "reftest" + ], + "css/css-flexbox-1/align-items-006.html": [ + "b309758484c1b6ec774f47166f97cfbd9258e687", "reftest" ], "css/css-flexbox-1/align-self-001.html": [ - "4b79a97d23d0d81e2fbe9d83256b738c12eaccc9", + "74fad615303053096f9af7ec697f4584dee9900e", "reftest" ], "css/css-flexbox-1/align-self-002.html": [ - "933cb4b14854b31ed7dc3520ea1e7ff30bb7fef5", + "42b455a5baa179afb2ffbceac9d1c41d728d54bc", "reftest" ], "css/css-flexbox-1/align-self-003.html": [ - "8cb7cafb64aed069bbd15af3a5ae055c49cdff28", + "f6338233e0da23099a600d3a72de818c28cd71bd", "reftest" ], "css/css-flexbox-1/align-self-004.html": [ - "ef3b6900797399acbfd4454855be46c3e5e0c179", + "acecc6b3b8307838ef709558f26e29ec06016d3b", "reftest" ], "css/css-flexbox-1/align-self-005.html": [ - "231d969bac1b8b6284d2025ce998158c636ec2ad", + "2e566b333931c6121a80254082571d5e09a58356", "reftest" ], "css/css-flexbox-1/align-self-006.html": [ - "ee702de24124f7bd4724976703354476e41861be", + "238b8d49518f47f5e67343ac4747ddbd08c63b06", "visual" ], "css/css-flexbox-1/align-self-007.html": [ - "8e20f586da0bfe61cd936e0223dd96de382acb7a", + "392674e05f38dfc0a32cbff1e9e3c53b5322fea0", "reftest" ], "css/css-flexbox-1/align-self-008.html": [ - "22d8043b6f41a7be3d173b6cf10256e320477337", + "59991be2c8d00f79f09023e0c96e971724740db5", "reftest" ], "css/css-flexbox-1/align-self-009.html": [ - "8da43f3d2791803baffad49fe70108094ffdf9e5", + "f808db06bf153cdfa0eeaa231692aee82a2f9638", "reftest" ], "css/css-flexbox-1/align-self-010.html": [ - "10269a05d02d93b092f54a441e90e34dbbd1c4e7", + "3a891f5e1603ca777b96e41b1c43e5570c552107", "visual" ], "css/css-flexbox-1/align-self-011.html": [ - "b3fbf589a794f2358b1cf24084273165a2953849", + "177ee5864a15236c0142ddddd79b8b18aae3b998", "reftest" ], "css/css-flexbox-1/align-self-012.html": [ - "662aaf055980e4ca895dee58210c8d7fbb53e342", + "71d26c3496a935398d25793bf8232ca680f512fe", "reftest" ], "css/css-flexbox-1/align-self-013.html": [ - "7878dbc75674f57c699ba4796564e1b55423d455", + "55ac1cc272d6feaba627f45e402671e7bc83487d", "reftest" ], "css/css-flexbox-1/css-box-justify-content.html": [ - "f2c693554912c5908b43e48282614b2b93159a8c", + "a3e68485221a64b4197da0ea9e4e56352406098f", "reftest" ], "css/css-flexbox-1/css-flexbox-column-ref.html": [ @@ -483869,27 +496780,27 @@ "support" ], "css/css-flexbox-1/css-flexbox-column-reverse-wrap-reverse.html": [ - "eaa48fc8c0f9fc295648dbbf10e0ef942dc6aa01", + "eed8402e5c8bc52ac32579497c1c20d8cf84a6e0", "reftest" ], "css/css-flexbox-1/css-flexbox-column-reverse-wrap.html": [ - "22928f3748f78cb065c5e18e8af41ddf6a4ad333", + "f8b7a1efd0be11220374a971418fee2657f93410", "reftest" ], "css/css-flexbox-1/css-flexbox-column-reverse.html": [ - "f5b9932cfb1d60488b510b66bfd439cad404367d", + "eef13575bf7fa6cd4391f3cd6a44b7f6b1970dd3", "reftest" ], "css/css-flexbox-1/css-flexbox-column-wrap-reverse.html": [ - "01489832e589a0d47a84706a640ac7a4f37c4035", + "ce51b358374965a614858c92f2b3de3b430b18b1", "reftest" ], "css/css-flexbox-1/css-flexbox-column-wrap.html": [ - "f513e656e09645f2b29256c25baaefd426c58fc8", + "28f3cafb64d25d5d2239688ad80ee67146d9c844", "reftest" ], "css/css-flexbox-1/css-flexbox-column.html": [ - "b1d144e21660aac1985a4488bcbeabbadd369a68", + "ff404898db0c4b4af3dabcd09bb3db7543404ecf", "reftest" ], "css/css-flexbox-1/css-flexbox-height-animation-stretch-ref.html": [ @@ -483897,11 +496808,11 @@ "support" ], "css/css-flexbox-1/css-flexbox-height-animation-stretch.html": [ - "0645e7e879623533cbfe0d04044a2595368736ae", - "reftest" + "920082e81b7c98f1fb8a039d3e47295f3780ef61", + "manual" ], "css/css-flexbox-1/css-flexbox-img-expand-evenly.html": [ - "af76fbba030b265ff1f0d5c46dfc684e060bc0e7", + "081f592d13347f9e6c028bf1504787202f6f948e", "reftest" ], "css/css-flexbox-1/css-flexbox-row-ref.html": [ @@ -483909,27 +496820,27 @@ "support" ], "css/css-flexbox-1/css-flexbox-row-reverse-wrap-reverse.html": [ - "919eb00ab5f7530b4bbbf766e281d5407b0fc333", + "dc1e2d9daeef3f7e90c44185474a24b8348b037b", "reftest" ], "css/css-flexbox-1/css-flexbox-row-reverse-wrap.html": [ - "6b4f0f5cd5c4777f833c5e9c70b47c754d1e062f", + "10c50b1950c7c45ce047f8a2a797916433dcb83b", "reftest" ], "css/css-flexbox-1/css-flexbox-row-reverse.html": [ - "7132b2cca281c844b1f6e99a28019c4f5242978b", + "80f1928e3e624c228ca1f019ecec153f1de02c98", "reftest" ], "css/css-flexbox-1/css-flexbox-row-wrap-reverse.html": [ - "9e4f2dab700ede5409b8d21b5a4ee95a6d73a927", + "ccaafd4181f5fa9736c3f6bc028e452a690dc61a", "reftest" ], "css/css-flexbox-1/css-flexbox-row-wrap.html": [ - "d03adacbc124b75f1af6855dcb735a92acc32c3d", + "63021ccc25275104d811e6f03a4fc22834a97f3b", "reftest" ], "css/css-flexbox-1/css-flexbox-row.html": [ - "dfa18a86f7df250d90d66bdbf08fbf705db5a784", + "fcb68e67ac70a6df513b048e2e706f00e52a0b7e", "reftest" ], "css/css-flexbox-1/css-flexbox-test1-ref.html": [ @@ -483937,7 +496848,7 @@ "support" ], "css/css-flexbox-1/css-flexbox-test1.html": [ - "e0c84e3e3d75d489e3881a9a5154ec0a529c36b1", + "46bb183bac7c90a8ef564b50e7570610a5cfaa41", "reftest" ], "css/css-flexbox-1/display-flex-001.htm": [ @@ -483997,39 +496908,39 @@ "reftest" ], "css/css-flexbox-1/flex-basis-001.html": [ - "1d61b08ea7fae094441862b9ad1279ad3f3ff2cb", + "d369688c569eeeecff00e50e4b2aac0c48d43927", "reftest" ], "css/css-flexbox-1/flex-basis-002.html": [ - "b437f8ee301321c4a3773022869e4153472bc89f", + "643a5c9d63ef02b7736d6f89f3d1cb6e8845edca", "reftest" ], "css/css-flexbox-1/flex-basis-003.html": [ - "ec86b4697c64a68e7e738a507887ad7815f9ccf9", + "a5f091b71d029de4006e78f0c6a3cbfe51a4f1ec", "reftest" ], "css/css-flexbox-1/flex-basis-004.html": [ - "5154bda7e3c7f82739f2da1c51cb8a42aa2447dd", + "5604017cd33b7e101d217462721f18aff494106a", "reftest" ], "css/css-flexbox-1/flex-basis-005.html": [ - "d0f9558d0b39572ac0e370a9426243b50cfacf9a", + "af141d6b647f8d060131f43a8adf4c553b107b85", "reftest" ], "css/css-flexbox-1/flex-basis-006.html": [ - "b9567c1b37bac441f653a688500ed64a35af5bf2", + "8627160afd2b361bd8ce067b120dc6e4b9053018", "reftest" ], "css/css-flexbox-1/flex-basis-007.html": [ - "0068cb8a65cc8f7bbd1cc4b61e306c8f3900691a", + "0cb0323ba5c4ee14378e51f769c1e8f7b8e85243", "reftest" ], "css/css-flexbox-1/flex-basis-008.html": [ - "923155b3f8245cb35e0b7783d844cb016092d5a8", + "3ab0276276547c80ee6d4ef8dc42920ec707be23", "reftest" ], "css/css-flexbox-1/flex-box-wrap.html": [ - "0677e3065098a9cc10ea23fa5cd7c8745e081c64", + "59faef234d50e0340bb4110dae9813e05cd0a29d", "reftest" ], "css/css-flexbox-1/flex-container-margin.html": [ @@ -484093,7 +497004,7 @@ "support" ], "css/css-flexbox-1/flex-flow-001.html": [ - "caf8300675b29a935b1220c8e2c61445f22f34d0", + "b6fcd5276ad5182da6f9ffd89c532b0e5a04ac8a", "reftest" ], "css/css-flexbox-1/flex-flow-002-ref.html": [ @@ -484101,23 +497012,23 @@ "support" ], "css/css-flexbox-1/flex-flow-002.html": [ - "92ad2fcfa476b0b1e9b6081e4536034d17a9eb17", + "305c51c77edc4627cea1f16e07ac2816d005e6b3", "reftest" ], "css/css-flexbox-1/flex-flow-003.html": [ - "0fce0376e33a3abf006cfe47768c44db8f8deb29", + "58096a46c890f4f02205f6dfb8ea73fc8f561ab4", "reftest" ], "css/css-flexbox-1/flex-flow-004.html": [ - "15deb88decf63703be6724c7f42f5e650c68d1e0", + "c7aa0b630a2c1b21f8733fe9455d1526fe21e07c", "reftest" ], "css/css-flexbox-1/flex-flow-005.html": [ - "0cd2b8963dbd8d53ee2cb3d7f3d8e259e509c822", + "3497be891a2de67728c690d1b704306bf4d3471b", "reftest" ], "css/css-flexbox-1/flex-flow-006.html": [ - "800ca50f95d3efde99f34236b43dd5be7843496a", + "942e22ea7592053720295ce18a3c6600793805c2", "reftest" ], "css/css-flexbox-1/flex-flow-007-ref.html": [ @@ -484125,27 +497036,27 @@ "support" ], "css/css-flexbox-1/flex-flow-007.html": [ - "ae779aac94e3c8c5e1b0997317401c621ae78f5c", + "eb8b64dd05f6d6b92a320616dcea354716dae7ac", "reftest" ], "css/css-flexbox-1/flex-flow-008.html": [ - "256745b55b8c5b9a7545feb9ddf0b45338342ba9", + "5434157016f77662ac3c6f1b95d28cc677ab71e5", "reftest" ], "css/css-flexbox-1/flex-flow-009.html": [ - "b738fb6c817fa43f5ea04c5f90a1d038e5c62323", + "277c2507283f06333d4fec0a760b5a66a357843c", "reftest" ], "css/css-flexbox-1/flex-flow-010.html": [ - "4bfc5ac9a02959b10f736e65c736178b6de18374", + "69f875f6afc91848c28f2475e987941d53a5aa6a", "reftest" ], "css/css-flexbox-1/flex-flow-011.html": [ - "32b2843ab367f96381af27ca6d7a8d449a24fea2", + "e8194a4f229d3f4a0415c5bda815ecc782c400ee", "reftest" ], "css/css-flexbox-1/flex-flow-012.html": [ - "48f788ba0aad411387b492aa342406c00c547003", + "54d649dac5cde4c2a745c782bf0ef429d82b31dc", "reftest" ], "css/css-flexbox-1/flex-grow-001-ref.xht": [ @@ -484153,31 +497064,31 @@ "support" ], "css/css-flexbox-1/flex-grow-001.xht": [ - "a357837e57facdd36ddac70176daf500047bacb7", + "5bc89097628eb66878a2c7e56bb28defa9e3072b", "reftest" ], "css/css-flexbox-1/flex-grow-002.html": [ - "bb3d510a6ac80f83f541fb3a2c79246233f25b9a", + "08af9afef390fadee247e07d34a0c4eaf78224f0", "reftest" ], "css/css-flexbox-1/flex-grow-003.html": [ - "c01be0f19b7226011f52e47754e7c2bf5762000f", + "36e17bf40a65c1cd677d18966b001254deb47661", "reftest" ], "css/css-flexbox-1/flex-grow-004.html": [ - "1e5f7985b0aec4d7134f990f802f47a640cd3dfe", + "6a440610b1879aa9bc03e573b935511ff7886e9d", "reftest" ], "css/css-flexbox-1/flex-grow-005.html": [ - "5d1b67f961824dc11a27decd15e848f9d84a29f1", + "55fea24a7b8bbf979fedb42e16a56e0c33693d1d", "reftest" ], "css/css-flexbox-1/flex-grow-006.html": [ - "a3ae4d385e319a61f999660e981a41cdff9e5ee1", + "c4774d69f928e7045ba7e09e21a00add3ed4c90e", "reftest" ], "css/css-flexbox-1/flex-grow-007.html": [ - "5c64560e8be13e2fd6faedc34f15065ecd9663e8", + "ff8de0d06884e5626a391ae1c98018f2bb89517d", "reftest" ], "css/css-flexbox-1/flex-items-flexibility.html": [ @@ -484189,7 +497100,7 @@ "support" ], "css/css-flexbox-1/flex-lines/multi-line-wrap-reverse-column-reverse.html": [ - "6f741f34c4bdc67399767fd5faca6ccbb7d7a58d", + "60fa33f83e68426b30d7976205129b7c538fa9db", "reftest" ], "css/css-flexbox-1/flex-lines/multi-line-wrap-reverse-row-reverse-ref.html": [ @@ -484197,7 +497108,7 @@ "support" ], "css/css-flexbox-1/flex-lines/multi-line-wrap-reverse-row-reverse.html": [ - "020964b3ad601941d922532827905265370d0148", + "931df5832696076c42436b3fbafe6ac6bca8101d", "reftest" ], "css/css-flexbox-1/flex-lines/multi-line-wrap-with-column-reverse-ref.html": [ @@ -484205,7 +497116,7 @@ "support" ], "css/css-flexbox-1/flex-lines/multi-line-wrap-with-column-reverse.html": [ - "3eeae141ccb94efeb5022b7815ba0112fcdd1c55", + "48b59fb24b7d84da867bfbd7ec21c58b569a58bc", "reftest" ], "css/css-flexbox-1/flex-lines/multi-line-wrap-with-row-reverse-ref.html": [ @@ -484213,11 +497124,11 @@ "support" ], "css/css-flexbox-1/flex-lines/multi-line-wrap-with-row-reverse.html": [ - "346dda80f53259407b6197a1085343ba55ab3497", + "16f9c4086f396483bca871d2f465f889a3edc547", "reftest" ], "css/css-flexbox-1/flex-margin-no-collapse.html": [ - "1ab13dbeb886274beabee614cd51fda96e78fd4f", + "68a5679283c7afb1a205da806735532be1ede315", "reftest" ], "css/css-flexbox-1/flex-minimum-height-flex-items-001.xht": [ @@ -484293,35 +497204,35 @@ "reftest" ], "css/css-flexbox-1/flex-shrink-001.html": [ - "43ecfd3c463b06649921968068ed507dd1db31be", + "0258f7cf56a4d934ee6466d7e1a41afde52d068e", "reftest" ], "css/css-flexbox-1/flex-shrink-002.html": [ - "8d28b4d09381a1f3bc7788f56f43cb47e259c055", + "e21f30c93f6761317751fdab011772ead0cc0f58", "reftest" ], "css/css-flexbox-1/flex-shrink-003.html": [ - "a349e3a5475e210eaf66aa2434ce5a2d2a6ec905", + "251331837f37432e3c48b6af2cba3c56094db6d6", "reftest" ], "css/css-flexbox-1/flex-shrink-004.html": [ - "79c1b349fb433f4f48812d93ecd9a7adf9fc632b", + "8ea11d1ca6760d1ef05b4b76664290e876a58107", "reftest" ], "css/css-flexbox-1/flex-shrink-005.html": [ - "ad20f48ad8c075e4830653ab0c6754d3a946b166", + "e7a76f7aacb3da89de7d6feeed922aea9361c9fd", "reftest" ], "css/css-flexbox-1/flex-shrink-006.html": [ - "451d94cf79a93c47657bdc8a09e68d46314188fc", + "2ba2e8ef872e00ef4c987872274604fb51c13e13", "reftest" ], "css/css-flexbox-1/flex-shrink-007.html": [ - "3ee2b7cd8f22ff48e3fe4e3d2f4112e549fff20d", + "75a0e97592c7f4463b213e18638e1594c9c30647", "reftest" ], "css/css-flexbox-1/flex-shrink-008.html": [ - "e3ff210e839c8c8b5a2c5fd12ab0fe91b0991075", + "cf6002998f57087744f5a391528896de3eb6068b", "reftest" ], "css/css-flexbox-1/flex-vertical-align-effect.html": [ @@ -484329,19 +497240,19 @@ "reftest" ], "css/css-flexbox-1/flex-wrap-001.htm": [ - "f3f493039967d71fcd4da7915ce0b1fafdce5ede", + "8a4b81212a54be87690891f083d30c9bbc6bec05", "visual" ], "css/css-flexbox-1/flex-wrap_nowrap.html": [ - "c98d56702f716bb3e1b0d165de841e9b38c45f3b", + "290fd4d88edb2f6a8ba9dbca46e2217f4161bc76", "visual" ], "css/css-flexbox-1/flex-wrap_wrap-reverse.html": [ - "1c040744d9937a82adb78065434511b48189a411", + "b607a828c94345a65ca0a2ce89cb4cf7d82603a8", "visual" ], "css/css-flexbox-1/flex-wrap_wrap.html": [ - "da5408d3efd4caf89b17b3a6eb34dad62890433c", + "fa864aaa1946159d9b986e515aa6329ed978c652", "visual" ], "css/css-flexbox-1/flexbox-flex-direction-column-reverse.htm": [ @@ -484365,7 +497276,7 @@ "reftest" ], "css/css-flexbox-1/flexbox-flex-wrap-default.htm": [ - "b53c63e5ff7241cfd2f8ba555f8fd0ae6facdef3", + "c72d514e8f3b81082e9eb3fcf5615da6687a04e8", "reftest" ], "css/css-flexbox-1/flexbox-flex-wrap-flexing-ref.html": [ @@ -484373,27 +497284,27 @@ "support" ], "css/css-flexbox-1/flexbox-flex-wrap-flexing.html": [ - "f4d48a4f322d324154fe1d94c217a425d0ce473b", + "4025f668cf66b89a05cdbdff8ec4e4149b3d810c", "reftest" ], "css/css-flexbox-1/flexbox-flex-wrap-nowrap.htm": [ - "9de5ab9c78475f66abf4c09ff801f8e24f0cee8e", + "724d79f6d784359441c1582a1c561bac7380e2d1", "reftest" ], "css/css-flexbox-1/flexbox-flex-wrap-wrap-reverse.htm": [ - "715d896fe7701b055158aa0ec46891d33d8548f7", + "073f2cb4b76387e82a5fe0edda41e98d3c21160a", "reftest" ], "css/css-flexbox-1/flexbox-flex-wrap-wrap.htm": [ - "2b627bc926f2c2b777f1fbacd4d48dcb97654d6a", + "32030b849dacf60bb863479e6361d82d5f68569a", "reftest" ], "css/css-flexbox-1/flexbox-order-from-lowest.html": [ - "f2ead9b0543eed9c5d09fede967a5b0a34a43eaa", + "abfd01c973e6f423c23fbb4799e5a807461f0ea3", "visual" ], "css/css-flexbox-1/flexbox-order-only-flexitems.html": [ - "c10343a44fef171e4aac195fc340c37feecab080", + "de2472f274425db98c0340a4b2ab6f82458567b6", "visual" ], "css/css-flexbox-1/flexbox_absolute-atomic-ref.html": [ @@ -484465,7 +497376,7 @@ "support" ], "css/css-flexbox-1/flexbox_align-items-baseline.html": [ - "9076d944d97a46b4258a2ad53ade674782e2b1d0", + "ab2986c61191b8427ce6eb90cd2f9ddb80d2957f", "reftest" ], "css/css-flexbox-1/flexbox_align-items-center-2-ref.html": [ @@ -484473,7 +497384,7 @@ "support" ], "css/css-flexbox-1/flexbox_align-items-center-2.html": [ - "922af280241e24f4c9fa487ceecf494a009d134f", + "589f9707972e09651170d7bf6e58fc4af9204ccc", "reftest" ], "css/css-flexbox-1/flexbox_align-items-center-ref.html": [ @@ -484481,7 +497392,7 @@ "support" ], "css/css-flexbox-1/flexbox_align-items-center.html": [ - "8702bd722f4a7f4a014ac572c9d51edcdd68b149", + "0e30882248fd3b414bf8fb138562d273ca37d670", "reftest" ], "css/css-flexbox-1/flexbox_align-items-flexend-2-ref.html": [ @@ -484489,7 +497400,7 @@ "support" ], "css/css-flexbox-1/flexbox_align-items-flexend-2.html": [ - "6a15d25c9f94123defa64b366c808f3336341a87", + "30d8681b0cb8cbab62f7a6db5cb65fa57b196d0e", "reftest" ], "css/css-flexbox-1/flexbox_align-items-flexend-ref.html": [ @@ -484497,7 +497408,7 @@ "support" ], "css/css-flexbox-1/flexbox_align-items-flexend.html": [ - "39c7b47d9a49a400d1b8a5a2c805d26de76c315f", + "4b12b6e4eaac9ba4a93bf1693ad95e5bd6e3a1bc", "reftest" ], "css/css-flexbox-1/flexbox_align-items-flexstart-2-ref.html": [ @@ -484505,7 +497416,7 @@ "support" ], "css/css-flexbox-1/flexbox_align-items-flexstart-2.html": [ - "1b1a53ba6e6911ef5017b165457b02397186be19", + "9e562f99a74a20a78f33ab11a208b2d1370b5050", "reftest" ], "css/css-flexbox-1/flexbox_align-items-flexstart-ref.html": [ @@ -484513,7 +497424,7 @@ "support" ], "css/css-flexbox-1/flexbox_align-items-flexstart.html": [ - "e7141b9dd89d534523debcd54bf8542ee8f5cbf8", + "a9de1f15f80b73c0dbe1477d8a37cf1a3e65cfcd", "reftest" ], "css/css-flexbox-1/flexbox_align-items-stretch-2-ref.html": [ @@ -484521,7 +497432,7 @@ "support" ], "css/css-flexbox-1/flexbox_align-items-stretch-2.html": [ - "e4a601cd9c3bcefcfbbe1c41bb7251aed612f5b6", + "3d54d00c2c87953fd79e3c0904e9acd24cace0dd", "reftest" ], "css/css-flexbox-1/flexbox_align-items-stretch-ref.html": [ @@ -484529,7 +497440,7 @@ "support" ], "css/css-flexbox-1/flexbox_align-items-stretch.html": [ - "7d30e69f9d949425ccaeed86fa352d56432f1029", + "ac2a1861e851cc53aef52bcfbdc7247ba3846811", "reftest" ], "css/css-flexbox-1/flexbox_align-self-auto-ref.html": [ @@ -484537,7 +497448,7 @@ "support" ], "css/css-flexbox-1/flexbox_align-self-auto.html": [ - "b5f4814e024e7a27f3a2bb58f49a566ca1f6e2fe", + "e5c6c3adc9af78d6161746ad7f0399cf17d39b60", "reftest" ], "css/css-flexbox-1/flexbox_align-self-baseline-ref.html": [ @@ -484545,7 +497456,7 @@ "support" ], "css/css-flexbox-1/flexbox_align-self-baseline.html": [ - "e5101479535744ac95acb0e1d25807e061fffefd", + "a3668e8f9e9fe2d09d7c849a4c334bf59c2afca0", "reftest" ], "css/css-flexbox-1/flexbox_align-self-center-ref.html": [ @@ -484553,7 +497464,7 @@ "support" ], "css/css-flexbox-1/flexbox_align-self-center.html": [ - "c9e85c86ad566a9fb1889fce7d175c0c92a7fd7a", + "72fa9308e815ce47599c58063848d61e7a39e705", "reftest" ], "css/css-flexbox-1/flexbox_align-self-flexend-ref.html": [ @@ -484561,7 +497472,7 @@ "support" ], "css/css-flexbox-1/flexbox_align-self-flexend.html": [ - "c80b0ab7fad3ec3edc06e24e4ab435f21486d74d", + "8f3f5b4d676d73df806c08c4db19e459bb497e34", "reftest" ], "css/css-flexbox-1/flexbox_align-self-flexstart-ref.html": [ @@ -484569,7 +497480,7 @@ "support" ], "css/css-flexbox-1/flexbox_align-self-flexstart.html": [ - "f8f31bcc0b3eb716af479333fae0d94739f2c9c5", + "4c016592e5d4f1f2b6d2051c31049a1b38c46439", "reftest" ], "css/css-flexbox-1/flexbox_align-self-stretch-ref.html": [ @@ -484577,7 +497488,7 @@ "support" ], "css/css-flexbox-1/flexbox_align-self-stretch.html": [ - "3adcced9b033bde56d34842494e1b4447fd09fbd", + "a2be49886cde0f1b985b3317c1d13136b1fa3409", "reftest" ], "css/css-flexbox-1/flexbox_block.html": [ @@ -485353,7 +498264,7 @@ "support" ], "css/css-flexbox-1/flexbox_flex-natural-variable-zero-basis.html": [ - "ebf063e55f197fba292499d3cb8e787ae8cde99b", + "1f0ee1620e10d971f24b883ad917af1752518424", "reftest" ], "css/css-flexbox-1/flexbox_flex-natural.html": [ @@ -485381,11 +498292,11 @@ "support" ], "css/css-flexbox-1/flexbox_flow-column-reverse-wrap-reverse.html": [ - "cb6194e2500b5df369533ba93c5c0c29d9973e59", + "765f675153142402d3d576ccaedc0e67a6faabee", "reftest" ], "css/css-flexbox-1/flexbox_flow-column-reverse-wrap.html": [ - "4abc9c1aeecf9de4a16a6a39effbae8dd589deae", + "cac3fdebe28979fb436094292f4d55540f7be03b", "reftest" ], "css/css-flexbox-1/flexbox_flow-column-wrap-ref.html": [ @@ -485397,11 +498308,11 @@ "support" ], "css/css-flexbox-1/flexbox_flow-column-wrap-reverse.html": [ - "4f87ccf40d0696023fdf0411e836141894c30050", + "4185b41258256052588c42a2277a10c4d7b3669b", "reftest" ], "css/css-flexbox-1/flexbox_flow-column-wrap.html": [ - "2b17cb73772c72974622e7d92c22c52929e1d169", + "8d50c9a5c8aa0ae594b27532e920ff30a086b5f9", "reftest" ], "css/css-flexbox-1/flexbox_flow-row-wrap-ref.html": [ @@ -485413,11 +498324,11 @@ "support" ], "css/css-flexbox-1/flexbox_flow-row-wrap-reverse.html": [ - "f2ef8c41cd01ed9ff25521b368effb441104395d", + "f5fd86b739edf0840afa4bc36c90ec8a17fc8600", "reftest" ], "css/css-flexbox-1/flexbox_flow-row-wrap.html": [ - "a2e044d70b3478b252c4e6380f28c6d7211e6753", + "456d1cbc70ff99cc2ede803eaa65ff67151503fd", "reftest" ], "css/css-flexbox-1/flexbox_generated-flex-ref.html": [ @@ -485501,7 +498412,7 @@ "support" ], "css/css-flexbox-1/flexbox_justifycontent-center-overflow.html": [ - "d9576e869b920627fc847ec47c5a06ef8cfa4f73", + "91a9b42a6314e8f81f7d1cedc5a9e1ff64981ebd", "reftest" ], "css/css-flexbox-1/flexbox_justifycontent-center-ref.html": [ @@ -485509,7 +498420,7 @@ "support" ], "css/css-flexbox-1/flexbox_justifycontent-center.html": [ - "6914e3590345ef2501d1d4cd23e8fff18371b7f4", + "1f6cfc90c361f99bdd1d3025f40e9263a2fb8e75", "reftest" ], "css/css-flexbox-1/flexbox_justifycontent-flex-end-ref.html": [ @@ -485517,7 +498428,7 @@ "support" ], "css/css-flexbox-1/flexbox_justifycontent-flex-end.html": [ - "2f8d48fc803c5026dd0e1a3855c4d50f1d3a3be3", + "bc6184369864f4fd14c5bf5b70721715a22b13a8", "reftest" ], "css/css-flexbox-1/flexbox_justifycontent-flex-start-ref.html": [ @@ -485525,7 +498436,7 @@ "support" ], "css/css-flexbox-1/flexbox_justifycontent-flex-start.html": [ - "b882acb798441faebfa7d8e01463ff4af16d299b", + "ef5af73743748f6b0a4d9fbf48c9544d59c8c725", "reftest" ], "css/css-flexbox-1/flexbox_justifycontent-spacearound-negative-ref.html": [ @@ -485533,7 +498444,7 @@ "support" ], "css/css-flexbox-1/flexbox_justifycontent-spacearound-negative.html": [ - "4a9eae927d562b9dd47c36e2c693fa26e99e0275", + "ee4d9c900a43823889957d21bd8c215d45d6206e", "reftest" ], "css/css-flexbox-1/flexbox_justifycontent-spacearound-only-ref.html": [ @@ -485541,7 +498452,7 @@ "support" ], "css/css-flexbox-1/flexbox_justifycontent-spacearound-only.html": [ - "0b47c2ceac70fc7129903eabbb9121eaa178d03e", + "dbf1892084e5a3bb7b7e09253f14d3ca9b6ddb73", "reftest" ], "css/css-flexbox-1/flexbox_justifycontent-spacearound-ref.html": [ @@ -485549,7 +498460,7 @@ "support" ], "css/css-flexbox-1/flexbox_justifycontent-spacearound.html": [ - "cb1aac06814d3ba61642037b730cfbe96b0779dd", + "ef2b9b682a899d84deb9dd0cc0b9766360fb986f", "reftest" ], "css/css-flexbox-1/flexbox_justifycontent-spacebetween-negative-ref.html": [ @@ -485557,7 +498468,7 @@ "support" ], "css/css-flexbox-1/flexbox_justifycontent-spacebetween-negative.html": [ - "98d86926c1c802f23713661b44e22dd00251afb2", + "463d811304911515faef20448322c329cfc05469", "reftest" ], "css/css-flexbox-1/flexbox_justifycontent-spacebetween-only-ref.html": [ @@ -485565,7 +498476,7 @@ "support" ], "css/css-flexbox-1/flexbox_justifycontent-spacebetween-only.html": [ - "41685cd4331cc96fd64e3581790ebf8209665b93", + "bba049d57c8eba72e65320f935ceae1b8c9c0d56", "reftest" ], "css/css-flexbox-1/flexbox_justifycontent-spacebetween-ref.html": [ @@ -485573,7 +498484,7 @@ "support" ], "css/css-flexbox-1/flexbox_justifycontent-spacebetween.html": [ - "7e0fbdff9d459ad9f04dd5718f7f5308bb7d4260", + "f337445c901031be08f7e4ee856a2eb4dc67b498", "reftest" ], "css/css-flexbox-1/flexbox_margin-auto-overflow-2-ref.html": [ @@ -485633,7 +498544,7 @@ "support" ], "css/css-flexbox-1/flexbox_object.html": [ - "24fd8bd42e374e3fae800a7bfa94a6ffd501b398", + "3e236f65a92908e0fbd66377bfc45311eab89e14", "reftest" ], "css/css-flexbox-1/flexbox_order-abspos-space-around-ref.html": [ @@ -485641,7 +498552,7 @@ "support" ], "css/css-flexbox-1/flexbox_order-abspos-space-around.html": [ - "8d9fdef23fe3a0a1fcc200e84e78515ccfb0245c", + "7343cce57d6e7cbdd749b5cd0abb82c32398e59c", "reftest" ], "css/css-flexbox-1/flexbox_order-box-ref.html": [ @@ -485649,11 +498560,11 @@ "support" ], "css/css-flexbox-1/flexbox_order-box.html": [ - "3ac0418e2b4a99373899e8692de6eb481d3666dd", + "e9da57c94d9c444b7cc75e25120e055a6cac7d9f", "reftest" ], "css/css-flexbox-1/flexbox_order-noninteger-invalid.html": [ - "090260884b6bf4e95757b8b1236e15c73f10960b", + "937ba154b8acd1939c5b88bb631551c54269cd98", "reftest" ], "css/css-flexbox-1/flexbox_order-ref.html": [ @@ -485661,7 +498572,7 @@ "support" ], "css/css-flexbox-1/flexbox_order.html": [ - "1467dffce847e256002ae50017f6da155078e8a9", + "3f8ea7d7e6b8ab8d0473aebfdedc108c34f732a1", "reftest" ], "css/css-flexbox-1/flexbox_rowspan-overflow-automatic.html": [ @@ -485677,7 +498588,7 @@ "support" ], "css/css-flexbox-1/flexbox_rowspan.html": [ - "b2374ef264d03561fc7ac808aff888c3200c9a02", + "85b74c61e50aa538bef17dbcfb98dea689da2d93", "reftest" ], "css/css-flexbox-1/flexbox_rtl-direction-ref.html": [ @@ -485697,11 +498608,11 @@ "support" ], "css/css-flexbox-1/flexbox_rtl-flow-reverse.html": [ - "7d79791beffcc66f83e276878165b25e57f57aab", + "d49babdd0a338c0b5012f1e2b260bf42b22e5580", "reftest" ], "css/css-flexbox-1/flexbox_rtl-flow.html": [ - "d43193cfa7a2895f936b0f4c6e85442279cfeb2d", + "0f05e9ee167cd1db8982ae8df7e35ceaa6deae52", "reftest" ], "css/css-flexbox-1/flexbox_rtl-order-ref.html": [ @@ -485709,7 +498620,7 @@ "support" ], "css/css-flexbox-1/flexbox_rtl-order.html": [ - "6bb015fc8f06a3391e90b9f2292ea2f6c4ea2ff3", + "386505d5838c57ec20fb767c01060a3d98e3f6de", "reftest" ], "css/css-flexbox-1/flexbox_stf-abspos.html": [ @@ -485781,7 +498692,7 @@ "reftest" ], "css/css-flexbox-1/flexbox_width-overflow.html": [ - "abb5c40451aba1680b1cb71cb8dcc6d56c8dcf85", + "48c0d989a7f5915f4190e9aef6719cad855a86c1", "reftest" ], "css/css-flexbox-1/flexbox_wrap-long-ref.html": [ @@ -485789,7 +498700,7 @@ "support" ], "css/css-flexbox-1/flexbox_wrap-long.html": [ - "59506000953cd0c47b905b71e850e95c721fb8e2", + "49fe5888c62883ec0edec23fed356489d65d04c3", "reftest" ], "css/css-flexbox-1/flexbox_wrap-ref.html": [ @@ -485801,11 +498712,11 @@ "support" ], "css/css-flexbox-1/flexbox_wrap-reverse.html": [ - "0444aefd0e20d3fab1c39e947b3e852f34be94e6", + "b1eba48d8ad7eaaf9cdf576e8187f07b35c80a58", "reftest" ], "css/css-flexbox-1/flexbox_wrap.html": [ - "b36545637bd059fe0952f83bfcd00f793d252234", + "ca7a976e714b9a7f03f06fc76aa293dee9a0e339", "reftest" ], "css/css-flexbox-1/flexbox_writing_mode_vertical_lays_out_contents_from_top_to_bottom.html": [ @@ -485837,51 +498748,51 @@ "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_align-items-baseline.html": [ - "c52f3025c1a376c9f4cd5bc0e3e36ea11fb79edb", + "0d4088a490ea5096b46b4cc6c1a0c6bb5b6bd751", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_align-items-center.html": [ - "39da9fd3f0c99b633006f03bf42924f52e306887", + "4bc854b76117aeadd9b74be8a0741118fa2e4734", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_align-items-flex-end.html": [ - "c331bded717233ce11b537f325f9936a3199b496", + "ac0087da22be93c52d8d4817de8aff82c69bdb81", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_align-items-flex-start.html": [ - "0d2e32f92f65aac9e3ddf7eb00dd3b0f393fff57", + "1d54a6751d08c40544411b0b1bc34b4223224fbe", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_align-items-invalid.html": [ - "e2b3805156d939e90afb0130dda9d40224841efc", + "35e80571b466457a17e340224b07b326fad24d21", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_align-items-stretch.html": [ - "de771f8302130bf2c223cc886c15c1c8e2590533", + "4099eb8892edb258d81f9e2f434fd4c836c086d7", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_align-self-baseline.html": [ - "b0b7eca9fe5e48c54be529d5b6aff4e1aed531bc", + "f240fd2e4d29d5858426f7a77d0091bfacbf7d4d", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_align-self-center.html": [ - "fce95bb388a54610bb769d77c8d91025b0138690", + "b358e4c7958b8236e52e9add99e90febde80428b", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_align-self-flex-end.html": [ - "efcc0f22fd55191d8c1009d7fae65ba4d78a2f9f", + "5855c6ab21ee5c95014b3d09bc2cbc4191750b7d", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_align-self-flex-start.html": [ - "7bcd9df58ab1dbbc999c1a2ce21c37fe2ec2f45e", + "2812f393363350633acdea5fdff7e81c3bd87edd", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_align-self-invalid.html": [ - "c63bd273cdddff4529893a41907dddf152213e36", + "59886b47d780f67e63cd5718daf48c5b53cd71fd", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_align-self-stretch.html": [ - "bd15a6dd6abc860e0893e36b2938c6bf636fa9d7", + "4c32af81197111b270d8592fb84c7ab63adc9d3b", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_display-inline.html": [ @@ -485929,159 +498840,159 @@ "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_flex-flow-column-nowrap.html": [ - "9fbd15643567c680e8f67a0ceab42a7f9cb152f2", + "8c6db8d7bb29b6756523787f1b51f7bc3ba74c6f", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_flex-flow-column-reverse-nowrap.html": [ - "885707801e9d65606774cbb55adca5a8b912efdc", + "e341a52761770971b18172720ef81283ab0fc370", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_flex-flow-column-reverse-wrap.html": [ - "8fd46658b8bccefc5ed180c462b45b971d658f1a", + "c6c24cea0e29f244b1669f36ba5fc01a018d899c", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_flex-flow-column-reverse.html": [ - "daf6a6292cbd670803a9752f3e2a089e8d3a903e", + "a8770d803ec5e9329a0dc57e0e481d270ee4cb82", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_flex-flow-column-wrap-reverse.html": [ - "3f8ab9e75662913b13b8bd7b3cc377f07b50a0ab", + "530536f70e8c80888b4f777fd9f2f4607c1bb6a4", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_flex-flow-column-wrap.html": [ - "2eff30c5ebed708e20fc4277feb05f2c39d9aee1", + "0c814b3b2466350f425baca27875f4e30fc5deeb", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_flex-flow-column.html": [ - "c77ac15d19fe2a7c165561063aa42ed055532b13", + "c357d892c2db343816c37be471ef4feda796cb4a", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_flex-flow-nowrap.html": [ - "3a99186205ee7e6173468a90a0aa59c6b2766f98", + "d2754b502ea652aa6bd875cc79ae7cdca071ef76", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_flex-flow-row-nowrap.html": [ - "02a39e48d5cfea6fcc443f6429ba52c97436dbe3", + "cfd86b15a6682b0b2233d836e289930abc01f744", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_flex-flow-row-reverse-nowrap.html": [ - "b67f033e0c811df0c1930933d01312e53d9ae078", + "ba20cf80e616da8233da663fb14a91de53a0a3ba", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_flex-flow-row-reverse-wrap-reverse.html": [ - "aae7d98efd1c69ae411c3db275c799a414d509be", + "d17789c21544b966b81ea111a64623facc89846f", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_flex-flow-row-reverse-wrap.html": [ - "d6f70fc0a5b44fc3daa613c732a126350bfe48cb", + "9519c40110b7effcd0f6f012cfc328fd900d239e", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_flex-flow-row-reverse.html": [ - "78af372b9b44de73a0add8065ec7b472fda9057d", + "7d36aa375fe06c6670d24a01a63a29288cd09e22", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_flex-flow-row-wrap-reverse.html": [ - "252f164be762a4164f1ca4c2f2ac1d59e0714875", + "2c41a0f7b456789a30034891f5c74107d0e01931", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_flex-flow-row-wrap.html": [ - "9cdb498ed06a578f4aba98edc73d7ff140a3d695", + "60625a23119f068779edaf03d6e34fd5e4af18ac", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_flex-flow-row.html": [ - "b6e22d88ca204be17419befb8e9fe84671e41375", + "5c65a0f389f2e3a00388e2e173f931c840c73892", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_flex-flow-wrap.html": [ - "a63cd0561594d724bf250dbfe031b65430367cdc", + "044d13fe55b5bb592bd091b25a441e23332bd3ac", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_flex-grow-0.html": [ - "f08a5aadeb4e4c914548b46438e77e0d6b4f0840", + "805edc97685df5caba0906d03539d1e1f6f266b2", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_flex-grow-invalid.html": [ - "2b1057695549d73817ecc4f74686f195f706059c", + "45aac59c225d80c32168fcc074132fd8ec400818", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_flex-grow-number.html": [ - "f3c8301302abad9a92b198d448e3cc4b625b4cbb", + "38a6d1e840eece8a68d9fbaf4b54e89f77b0162b", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_flex-shorthand-0-auto.html": [ - "6afade676d0bd8b6cf8b1a58444a59bd48435a96", + "14ea8bbc723f27d4cd1123409d906c5c90c7947b", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_flex-shorthand-auto.html": [ - "20f18cb79db76db4ddfa7601272ad530819a37fa", + "b0f5db460426e2418bb0c5a9f8e514934837ed4f", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_flex-shorthand-initial.html": [ - "7481e854e6a194b28cdcd80cbe6e3055f2a92730", + "7760a25374329248bb93099e9f0b0d0fa680ef61", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_flex-shorthand-invalid.html": [ - "11d08cd6b9127888018fd361c3c2e10480d67e75", + "a1d47f33043dda08a107f8ec1015cd6e8abebb13", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_flex-shorthand-none.html": [ - "3766d370f5c3305aecee61ef812c8aa0bcaafad4", + "734cb8ac82b44bfbc028023c653e5fe5aca3af29", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_flex-shorthand-number.html": [ - "df2167647bc4b3caa122b8df2b8189361c2bd91c", + "fa0799425f5c83a12ed92fea858c7d29040a0bc1", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_flex-shorthand.html": [ - "837b63ed529b63ae8aa440f472977627521486b2", + "d13c9c8f422a1906dfbe7d33ee92bc3d0085c9cc", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_flex-shrink-0.html": [ - "973f68b9cbf729ce2e20efc43368ec55942ed29d", + "c0829e1b81c645baccd5986caf2e0beefd742853", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_flex-shrink-invalid.html": [ - "4ca8453ad9956819d703dfb4851c2bf29c20e614", + "17a57a5afca7db52a1be3366772d7ff8cf738c19", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_flex-shrink-number.html": [ - "642e25a123a546f96bc43f652dde7a9069dab3f9", + "38419aad800c118289e516b2f32b1cceadd563e4", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_flex-wrap-invalid.html": [ - "58b04f866a8bf66510d83f30f7a14898639f13ac", + "705c10a2d61138fbde29679438ea41c681e290cd", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_flex-wrap-nowrap.html": [ - "cc6da24ec29e2f362d7d76660596d8b0bf8c68b4", + "c82b804fd32ac03049ff8ea12b29eee4f164548e", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_flex-wrap-wrap-reverse.html": [ - "551a8012a18c591d3e90d380a51d7725529fdddd", + "3e3ab7791b4086a7597dce5ece1c354bdadc3605", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_flex-wrap-wrap.html": [ - "01e87c33c9cb3eff7517ac98ef363c31bf370501", + "f7d8a18b3467d75cc4165ca1e986915023b89c1f", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_justify-content-center.html": [ - "93ea802a0585fc33f9787dcbfeb60d4a87236aaa", + "12dcf4e9e4c1b0ce7707e938807ef54e19389188", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_justify-content-flex-end.html": [ - "7a2f8e64a7be2518662a129844b2e45cf72d4beb", + "3c4c394fbbc07918ee0251ae2f199bfc3cd9f63b", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_justify-content-flex-start.html": [ - "eda0d2dc1c9e2255bc6dd35a5f1519790e0897c2", + "8fbda9644fa0b247a620973e2876dc760d171db5", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_justify-content-space-around.html": [ - "a57d2fb5791761d19bb7dc04c434cd8b8b21ad5e", + "21f9e5c6b842a463db8242fd2eb1d73b35f25d0b", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_justify-content-space-between.html": [ - "3ab25c74718a2dd71c79ee645502fbd0b925b59b", + "0b598a59d971769ea6e6243652493ac12206e374", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_min-height-auto.html": [ @@ -486093,23 +499004,23 @@ "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_order-inherit.html": [ - "5682707c7901944a04381ceff1757a599a058813", + "fdae1a49780aef7cf55007b8b96407aee46efb99", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_order-integer.html": [ - "cd9640363954e8f0a0854c53382c0beb4acfc321", + "d8f3b3dfacaaa8e17773ffd6812b861822d65ef8", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_order-invalid.html": [ - "8fb32a13843c0f28b92cdd76fe3d64b3044a3acf", + "a735a3b200062bfa59b1a6206591fbc4640bb384", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_order-negative.html": [ - "864be088c428734acc315590ddd94606fd7627e1", + "22f2cc5a03aa146fd0910c4302f59d13be43f40c", "testharness" ], "css/css-flexbox-1/getcomputedstyle/flexbox_computedstyle_order.html": [ - "1a8a368e9094865c2a1dd41a6e9b892d434f6281", + "f2be0a72baa34509be8ec454e9d3bebe8cfdb45b", "testharness" ], "css/css-flexbox-1/interactive/flexbox_interactive_break-after-column-item.html": [ @@ -486169,15 +499080,15 @@ "manual" ], "css/css-flexbox-1/interactive/flexbox_interactive_flex-grow-transitions.html": [ - "58adec5d8401b4a7a673a69e7c84a87669ecb8c5", + "67722dd6cb0f4471e0662b6b289913611c1baf27", "manual" ], "css/css-flexbox-1/interactive/flexbox_interactive_flex-shrink-transitions-invalid.html": [ - "28052e43db3d7d3dba444509772fa56fa7a36377", + "6741fe496c3e5660cc4fd7b2ffd8a7ce0015a1be", "manual" ], "css/css-flexbox-1/interactive/flexbox_interactive_flex-shrink-transitions.html": [ - "06eeafd215565a63c6291dff36a7ab2f4a21288f", + "94d6ef82189f89f84c5dd27c2897f747d4cd6d2e", "manual" ], "css/css-flexbox-1/interactive/flexbox_interactive_flex-transitions.html": [ @@ -486201,43 +499112,43 @@ "manual" ], "css/css-flexbox-1/justify-content-001.htm": [ - "d7ae5a0d01e5b197c26b020526404c41a809ec91", + "358a805d0fb9e61f614819c5e97067245d71aef3", "reftest" ], "css/css-flexbox-1/justify-content-002.htm": [ - "82c92381f098ae768d254efc6984796f9768a31c", + "685cbfa14e1f2adc62048e5ae8f107d8bc01fa3b", "reftest" ], "css/css-flexbox-1/justify-content-003.htm": [ - "572a528b3e7ef33ebba5ddc38108879e75c01c4c", + "275d8c21752327cde0b2ed0c9d114bf8d4d4d141", "reftest" ], "css/css-flexbox-1/justify-content-004.htm": [ - "d153c4076da8091eca2e3228de0e82c0b7fadbde", + "8e5c22d229cdf1ca4e655ea2ef1653b7b906f191", "reftest" ], "css/css-flexbox-1/justify-content-005.htm": [ - "b5b0b7c39ff116cc73c081be1aec8b0b48a99a7a", + "044c8076b844d6b8a5c1da6ed32c8ebd0ad0c03a", "reftest" ], "css/css-flexbox-1/justify-content_center.html": [ - "be8c4aa66d72297e12d793860612b98a8ec8bd3c", + "fe5f4f585f259a0b2d66625730c318a30aca4e5a", "visual" ], "css/css-flexbox-1/justify-content_flex-end.html": [ - "fd42754905469c109681b3001880c26d86f38d30", + "679f81cc6dc87c7fe272f7a883fca9363a106e72", "visual" ], "css/css-flexbox-1/justify-content_flex-start.html": [ - "b1b0795bb9662d3df05e15b6bcb5f5d5eb8a181d", + "14b0701a773eef17a17255d20840ee8086e82974", "visual" ], "css/css-flexbox-1/justify-content_space-around.html": [ - "eb943c652bd9f16a79cb8053634e3514c2f9dfff", + "b062d66ce98b0cf16bd81d3f066766aabbdf9b99", "visual" ], "css/css-flexbox-1/justify-content_space-between.html": [ - "8fcc937a7c68c6fd6a67ec37b223665915091e89", + "3ae87cc987978548ee7ba39934c8b220221969f2", "visual" ], "css/css-flexbox-1/layout-algorithm_algo-cross-line-001.html": [ @@ -486253,7 +499164,7 @@ "reftest" ], "css/css-flexbox-1/order-001.htm": [ - "20924cd18cca247b18fa72ad10d1811410700f44", + "61d7aeef662b1efbae6ac6b873e8130f1017f62d", "visual" ], "css/css-flexbox-1/order/order-with-column-reverse-ref.html": [ @@ -486261,7 +499172,7 @@ "support" ], "css/css-flexbox-1/order/order-with-column-reverse.html": [ - "c9a18ad526fe7e7219c47e0f34658704db7fd303", + "96afc46f8d4296d111cd268d1eac61a72965901c", "reftest" ], "css/css-flexbox-1/order/order-with-row-reverse-ref.html": [ @@ -486269,11 +499180,11 @@ "support" ], "css/css-flexbox-1/order/order-with-row-reverse.html": [ - "16c39d9da2debcda28bc7a8f66c2246ec417be14", + "c3a06c11dac074a711a5390a2693017d6372b3bd", "reftest" ], "css/css-flexbox-1/order_value.html": [ - "ed5bf1f1ca5d75bb7f030ed78377d31b81203d06", + "9f6fef36e1c3f3518af024b9c090612efad95b80", "testharness" ], "css/css-flexbox-1/percentage-heights-000.html": [ @@ -486661,15 +499572,15 @@ "reftest" ], "css/css-flexbox-1/ttwf-reftest-flex-order.html": [ - "8920a39cd32d4391ea1a4d8ef8f52c92532c8fcf", + "190688ba86d91a9abcfef4fef253c814f00229f8", "reftest" ], "css/css-flexbox-1/ttwf-reftest-flex-wrap-reverse.html": [ - "85bcd6cc52b924458be957f14d11fb7081a50110", + "cdd753b4f4123b17866d98f36b38db06491c6d3d", "reftest" ], "css/css-flexbox-1/ttwf-reftest-flex-wrap.html": [ - "7bd518a3da615df0f146ba391973f749eeddba41", + "d0664cf789286d019105fdf37fcfd7c87a63a8a2", "reftest" ], "css/css-flexbox-1/visibility-collapse-001.htm": [ @@ -486681,7 +499592,7 @@ "visual" ], "css/css-fonts-3/OWNERS": [ - "e838253ab26e19fe9b2d1ee0bbc7d0569dfbd12d", + "1c72d614a2fa507e3c4c127a3ac36f0f9e157460", "support" ], "css/css-fonts-3/README": [ @@ -486844,6 +499755,46 @@ "bba8687fbd8d7a5b653e5a32f38f9f277962dcec", "reftest" ], + "css/css-fonts-3/font-kerning-01-ref.html": [ + "2b9b45d10196a50b6cdfbd0b89ce0dec9b2fb3c7", + "support" + ], + "css/css-fonts-3/font-kerning-01.html": [ + "df338547163a8c605b78c9dfc069eafddff4212b", + "reftest" + ], + "css/css-fonts-3/font-kerning-02-ref.html": [ + "0d77e16bda18497c67bc77efbe91aad6ca6d5965", + "support" + ], + "css/css-fonts-3/font-kerning-02.html": [ + "99f28a4da572eb880d2a40dbd6f671c8c03b2fc8", + "reftest" + ], + "css/css-fonts-3/font-kerning-03-ref.html": [ + "146ed67e51273267e6d96492ef3484e94b69b8ff", + "support" + ], + "css/css-fonts-3/font-kerning-03.html": [ + "0e16b2d2f247bd9374686707ba2db66cf9e10b29", + "reftest" + ], + "css/css-fonts-3/font-kerning-04-ref.html": [ + "e83dd37a970ec87ac7e92d017ab753c35b96ee5c", + "support" + ], + "css/css-fonts-3/font-kerning-04.html": [ + "8fc8e9dde91ecd9ff3d1d08707f05a25d1f6d975", + "reftest" + ], + "css/css-fonts-3/font-kerning-05-ref.html": [ + "30b41e23ff0ba288d5d5c11f986da1ae520c99ea", + "support" + ], + "css/css-fonts-3/font-kerning-05.html": [ + "d24da7a545f0e28e0ee41e1bd9263eafe54211d8", + "reftest" + ], "css/css-fonts-3/font-size-adjust-001.html": [ "9c8cda6faa82407d5d236d25d07004405dfe93ac", "visual" @@ -486872,6 +499823,238 @@ "7b4cb600b9df97cd022504c4541b2143af22d29f", "reftest" ], + "css/css-fonts-3/font-variant-01-ref.html": [ + "996de9843a58617c022174e77c6420816087dbe9", + "support" + ], + "css/css-fonts-3/font-variant-01.html": [ + "0d0a249db6c2ddaad1e4de702834020aa4ab45fa", + "reftest" + ], + "css/css-fonts-3/font-variant-02-ref.html": [ + "11efd1a8ea1871dfe28fb072d912d2f2ab25694e", + "support" + ], + "css/css-fonts-3/font-variant-02.html": [ + "4fd6a59d04fde5e82ec12fa4c89bf07c611ddd21", + "reftest" + ], + "css/css-fonts-3/font-variant-03-ref.html": [ + "6caab645481fba5812ab1781ba7fe40ea97a264c", + "support" + ], + "css/css-fonts-3/font-variant-03.html": [ + "78e21fc51d91d4ee0ec8e0838dab863a08aa1f83", + "reftest" + ], + "css/css-fonts-3/font-variant-04-ref.html": [ + "7be2ad5dca2242e108e31a6a33c38b24f5f10e13", + "support" + ], + "css/css-fonts-3/font-variant-04.html": [ + "0431694dc7064c9af5c1881484796b750b15b63c", + "reftest" + ], + "css/css-fonts-3/font-variant-alternates-01-ref.html": [ + "fee60b0c399502744f3188df83c86f19d3fc6efc", + "support" + ], + "css/css-fonts-3/font-variant-alternates-01.html": [ + "e2360e9b1465384a6f29476838508af3b6ec71ab", + "reftest" + ], + "css/css-fonts-3/font-variant-alternates-02-ref.html": [ + "7c8dd8a6f9a3d42fe04a90bef6c843351793539e", + "support" + ], + "css/css-fonts-3/font-variant-alternates-02.html": [ + "7dce91351ff56b97ce966b102f6f00d0574fb63a", + "reftest" + ], + "css/css-fonts-3/font-variant-alternates-03-ref.html": [ + "2453a08980d3242a992d151464ac725c6cf2ef12", + "support" + ], + "css/css-fonts-3/font-variant-alternates-03.html": [ + "a26b895506ba1d3f29b2343bb635867bc099f386", + "reftest" + ], + "css/css-fonts-3/font-variant-alternates-04-ref.html": [ + "5d341840473cc21d10f7687a46847bd574792110", + "support" + ], + "css/css-fonts-3/font-variant-alternates-04.html": [ + "157455c29dc696127ce5c3b45b581c5bd03b6909", + "reftest" + ], + "css/css-fonts-3/font-variant-alternates-05-ref.html": [ + "9a2081e861f551b8b22ede7686ea8e6636f8e579", + "support" + ], + "css/css-fonts-3/font-variant-alternates-05.html": [ + "3c86787c1e81bc8db802428f5522bc7b5f15b8f9", + "reftest" + ], + "css/css-fonts-3/font-variant-alternates-06-ref.html": [ + "180117ec84a21379c75e2fe50bb34576a4f0f596", + "support" + ], + "css/css-fonts-3/font-variant-alternates-06.html": [ + "ae40f2db209b804d7589ef03b69557e71995b9ae", + "reftest" + ], + "css/css-fonts-3/font-variant-alternates-07-ref.html": [ + "23a1cc344e94544edfc53641d08e50ed8e0c3d2e", + "support" + ], + "css/css-fonts-3/font-variant-alternates-07.html": [ + "8b44a336d7f7f6b69e401c86733e978b2bb52cfc", + "reftest" + ], + "css/css-fonts-3/font-variant-alternates-08-ref.html": [ + "d8f51e560254974b864eefba16296aa167f55c67", + "support" + ], + "css/css-fonts-3/font-variant-alternates-08.html": [ + "e67a8cc7e4b3de219f3862329f8b916fac7e8b90", + "reftest" + ], + "css/css-fonts-3/font-variant-alternates-09-ref.html": [ + "9a29222a28e053768e651fe135493574ecdeea6f", + "support" + ], + "css/css-fonts-3/font-variant-alternates-09.html": [ + "5c00521c873d41c049acf23a9b8fa178def49636", + "reftest" + ], + "css/css-fonts-3/font-variant-alternates-10-ref.html": [ + "e1ca726eed0300d5ee6c46762d5a097510bc3639", + "support" + ], + "css/css-fonts-3/font-variant-alternates-10.html": [ + "0cd86b6749badec6551407c069b211f262e8aec1", + "reftest" + ], + "css/css-fonts-3/font-variant-alternates-11-ref.html": [ + "8892000aef4eac340e03fcfd299cb18663c398ff", + "support" + ], + "css/css-fonts-3/font-variant-alternates-11.html": [ + "7d926b680fef01676946fb6dc16511f8a3cc1b6b", + "reftest" + ], + "css/css-fonts-3/font-variant-alternates-12-ref.html": [ + "132a829f10adb2e76c21fe5d0f34dc1f8d27496f", + "support" + ], + "css/css-fonts-3/font-variant-alternates-12.html": [ + "f180da31bb437d71b81fa2fe91a7ba46ee8f3060", + "reftest" + ], + "css/css-fonts-3/font-variant-alternates-13-ref.html": [ + "9b92cc5f6c1dd5b095434df9b72a81abbf116ea1", + "support" + ], + "css/css-fonts-3/font-variant-alternates-13.html": [ + "cc84ecb5ca83bba5b95d6fab9761edd3985f297e", + "reftest" + ], + "css/css-fonts-3/font-variant-alternates-14-ref.html": [ + "8863c6f464197a06f974306842a9a181b80e4e61", + "support" + ], + "css/css-fonts-3/font-variant-alternates-14.html": [ + "2f76c2d8eea0fa73be08ec1baf09c8603c410c0a", + "reftest" + ], + "css/css-fonts-3/font-variant-alternates-15-ref.html": [ + "8dffa488ca71374c62912f1bde75fccc9bc5cbe4", + "support" + ], + "css/css-fonts-3/font-variant-alternates-15.html": [ + "b52acb2a3c7ea8b3a94efd4fec55651c76b63531", + "reftest" + ], + "css/css-fonts-3/font-variant-alternates-16-ref.html": [ + "5b04f378636f8250113bb77c87d401e0ef2439cb", + "support" + ], + "css/css-fonts-3/font-variant-alternates-16.html": [ + "37b2e733219908a78b72d5ccec71e3fd82d60d6e", + "reftest" + ], + "css/css-fonts-3/font-variant-alternates-17-ref.html": [ + "2108b05b4433e676f4af3eb4454fc66e24f94d90", + "support" + ], + "css/css-fonts-3/font-variant-alternates-17.html": [ + "b42d28fb6df88c1f955080fedf7c60298c4caa64", + "reftest" + ], + "css/css-fonts-3/font-variant-alternates-18-ref.html": [ + "f5668694818ef83a690e783f0c1d5be5e628dc76", + "support" + ], + "css/css-fonts-3/font-variant-alternates-18.html": [ + "de45acb63b567c5318b014ebab07098ca8c317b6", + "reftest" + ], + "css/css-fonts-3/font-variant-caps-01-ref.html": [ + "dfc1e1995e9841ecfa8889ad25c6ef7a6a2d992f", + "support" + ], + "css/css-fonts-3/font-variant-caps-01.html": [ + "bf8e5dc2e292d90ad2403a40b76db55f9af88d35", + "reftest" + ], + "css/css-fonts-3/font-variant-caps-02-ref.html": [ + "da1d08efc68a18739a0ac70ce87da26c332968a6", + "support" + ], + "css/css-fonts-3/font-variant-caps-02.html": [ + "d98ed4328a1b690689d8057610965288d274ff7d", + "reftest" + ], + "css/css-fonts-3/font-variant-caps-03-ref.html": [ + "a5f657487329b501e779420b80499de322b91397", + "support" + ], + "css/css-fonts-3/font-variant-caps-03.html": [ + "ff0d23ec93b3638cd2fc3276584e26f6e992c5cd", + "reftest" + ], + "css/css-fonts-3/font-variant-caps-04-ref.html": [ + "d40b8e78300d0566c87f7bdafe856a895603eabd", + "support" + ], + "css/css-fonts-3/font-variant-caps-04.html": [ + "ff3d01ff73b1587661c995240e3ee9a5cebb07ad", + "reftest" + ], + "css/css-fonts-3/font-variant-caps-05-ref.html": [ + "535062e789790c390bf7d8f364315065f0669b92", + "support" + ], + "css/css-fonts-3/font-variant-caps-05.html": [ + "5fe515c2e70d08976e741612f9a770db8978596c", + "reftest" + ], + "css/css-fonts-3/font-variant-caps-06-ref.html": [ + "32fb965e93d13626edca685ac2f4db2b81277e63", + "support" + ], + "css/css-fonts-3/font-variant-caps-06.html": [ + "3a89f8deb0e40c3a630eef83a65d100309e4685f", + "reftest" + ], + "css/css-fonts-3/font-variant-caps-07-ref.html": [ + "570adf14cf4e28f9d79a65fd36601c448e64d659", + "support" + ], + "css/css-fonts-3/font-variant-caps-07.html": [ + "207977b8a64dc748abd3c11b0fd5954d62430da3", + "reftest" + ], "css/css-fonts-3/font-variant-caps-ref.html": [ "398fa9338b94cf3ecf6bfb4bca4ecb111eb3ab11", "support" @@ -486884,6 +500067,86 @@ "6bfe93950a49b850166ff0ec2a05cd7da0644c0d", "support" ], + "css/css-fonts-3/font-variant-east-asian-01-ref.html": [ + "66f107ee9d92c8b669b522c17db93c2c22d266f5", + "support" + ], + "css/css-fonts-3/font-variant-east-asian-01.html": [ + "e8332e528bbe9b8e30ec97e503b95f0b66474df3", + "reftest" + ], + "css/css-fonts-3/font-variant-east-asian-02-ref.html": [ + "c4b3574cfe09ba94a823f5bc66819184165ce4ad", + "support" + ], + "css/css-fonts-3/font-variant-east-asian-02.html": [ + "0f89174e389aa1b2450b39eb3f04a92d00860936", + "reftest" + ], + "css/css-fonts-3/font-variant-east-asian-03-ref.html": [ + "cb226dbbd4241f5b825665722f188240a11e6c9f", + "support" + ], + "css/css-fonts-3/font-variant-east-asian-03.html": [ + "7fb1143381a1d15b4325d445cfd8cc65d9a503c0", + "reftest" + ], + "css/css-fonts-3/font-variant-east-asian-04-ref.html": [ + "f1d197aad8f8f684182ad595d212932c9574e274", + "support" + ], + "css/css-fonts-3/font-variant-east-asian-04.html": [ + "c773e2a3c2d330ede18a7ac1d78b725020431659", + "reftest" + ], + "css/css-fonts-3/font-variant-east-asian-05-ref.html": [ + "8c0f67dc5435b58fb3e8be3a08d180486fff452c", + "support" + ], + "css/css-fonts-3/font-variant-east-asian-05.html": [ + "89f0d5b377540940590b46755978e9e9b8d97652", + "reftest" + ], + "css/css-fonts-3/font-variant-east-asian-06-ref.html": [ + "5431e6a406d98ad7cf618ab3a7462abcf36d93c1", + "support" + ], + "css/css-fonts-3/font-variant-east-asian-06.html": [ + "2673c4ed8f1bf9423e82ed39c8ab959126931f65", + "reftest" + ], + "css/css-fonts-3/font-variant-east-asian-07-ref.html": [ + "d699737b8d125384916344c86e3670b72c9a07f9", + "support" + ], + "css/css-fonts-3/font-variant-east-asian-07.html": [ + "c95aa9339000298dc206343a7dd5ef79c1496898", + "reftest" + ], + "css/css-fonts-3/font-variant-east-asian-08-ref.html": [ + "6ad026ef6dd4ef9317e839e2e3ea87b61c67f8af", + "support" + ], + "css/css-fonts-3/font-variant-east-asian-08.html": [ + "b8956cefacd5b4652a67461308d1c35491646eaa", + "reftest" + ], + "css/css-fonts-3/font-variant-east-asian-09-ref.html": [ + "317809c56cb1b3646fd7e72b55ad2fcefd0ae973", + "support" + ], + "css/css-fonts-3/font-variant-east-asian-09.html": [ + "de134fa9529a050e7b22181b2de955c120b71521", + "reftest" + ], + "css/css-fonts-3/font-variant-east-asian-10-ref.html": [ + "ac39bc5f4e6476a1e6f1e86d0f8b9fdaa86e01c1", + "support" + ], + "css/css-fonts-3/font-variant-east-asian-10.html": [ + "3e5b6e1633ab41d438aae62924bc658ebde6bd9a", + "reftest" + ], "css/css-fonts-3/font-variant-east-asian-ref.html": [ "7144e95b087e536593bb5017d58a953117373cf7", "support" @@ -486892,6 +500155,94 @@ "2d898533fcb7b79f94512d1c256baa6d772286ad", "reftest" ], + "css/css-fonts-3/font-variant-ligatures-01-ref.html": [ + "7086c3724afd9d90689a7369de8e36cdc4c19a56", + "support" + ], + "css/css-fonts-3/font-variant-ligatures-01.html": [ + "2200edf5135082330e0eeb047d071ade2574e42e", + "reftest" + ], + "css/css-fonts-3/font-variant-ligatures-02-ref.html": [ + "9618e95c7a810b6799ee2ce0b6e83e9de5ae84ef", + "support" + ], + "css/css-fonts-3/font-variant-ligatures-02.html": [ + "7906c99710d6b5234a24301905e18c35e8232e2d", + "reftest" + ], + "css/css-fonts-3/font-variant-ligatures-03-ref.html": [ + "936c138fc46cb1df6f0ad8c3ef3614a8efa0969b", + "support" + ], + "css/css-fonts-3/font-variant-ligatures-03.html": [ + "55aa501220d23a82dddf7bc922e2e922fc98c06b", + "reftest" + ], + "css/css-fonts-3/font-variant-ligatures-04-ref.html": [ + "dec9c4b7f430900f13fefe9c07e4f069cd49b4f4", + "support" + ], + "css/css-fonts-3/font-variant-ligatures-04.html": [ + "d899fb31fc902c3fdccb464edb15cb9168c54ad3", + "reftest" + ], + "css/css-fonts-3/font-variant-ligatures-05-ref.html": [ + "2aaee9911e7a942f8df3fa46c594df27b91f98d3", + "support" + ], + "css/css-fonts-3/font-variant-ligatures-05.html": [ + "26633d8f7148c175728f5a16f8c875d37caf9e9e", + "reftest" + ], + "css/css-fonts-3/font-variant-ligatures-06-ref.html": [ + "d5304ce243245769ed474d6bc425f65f2ccaa2cf", + "support" + ], + "css/css-fonts-3/font-variant-ligatures-06.html": [ + "1ec1bbaa324095bbfcccdf00921eca1e617b1019", + "reftest" + ], + "css/css-fonts-3/font-variant-ligatures-07-ref.html": [ + "c879c13c31687769de81d0f8c819b60f04582689", + "support" + ], + "css/css-fonts-3/font-variant-ligatures-07.html": [ + "286e5b65e3bd64281e162d045150fa48de9ad9ca", + "reftest" + ], + "css/css-fonts-3/font-variant-ligatures-08-ref.html": [ + "f360dcf9713a33d93adeaa11e45ab048b1db53dc", + "support" + ], + "css/css-fonts-3/font-variant-ligatures-08.html": [ + "06d37389fbaa43a4340ecacaed0d04dc9bb6ffeb", + "reftest" + ], + "css/css-fonts-3/font-variant-ligatures-09-ref.html": [ + "d40c6e71fe18ce7a41e1f2d99a276d92b5e93b71", + "support" + ], + "css/css-fonts-3/font-variant-ligatures-09.html": [ + "5d35763e54b4a0a0346e896b35e914c7eb00348d", + "reftest" + ], + "css/css-fonts-3/font-variant-ligatures-10-ref.html": [ + "f55180570d6588e38fc6cf1dc70efcd6186c4f44", + "support" + ], + "css/css-fonts-3/font-variant-ligatures-10.html": [ + "ad1a842238b7114a97f4a95e9c0376b7f2871bde", + "reftest" + ], + "css/css-fonts-3/font-variant-ligatures-11-ref.html": [ + "b4074324ff063ac987a3b9ffdf4450c0bb247771", + "support" + ], + "css/css-fonts-3/font-variant-ligatures-11.html": [ + "2f799e3650120b2c25a882412ba956f817c6b003", + "reftest" + ], "css/css-fonts-3/font-variant-ligatures-ref.html": [ "b7c9fe4c31751b6d7b4f8515aa1d45adf4b6bca2", "support" @@ -486900,6 +500251,78 @@ "9251c8b909405d26d1355abd3bcee96fb9b062bd", "reftest" ], + "css/css-fonts-3/font-variant-numeric-01-ref.html": [ + "236a8f62298d93fd186b4d7fa35f5be0005aab3e", + "support" + ], + "css/css-fonts-3/font-variant-numeric-01.html": [ + "b7e042b93f734483d6400f38a3af6731d6cf05fd", + "reftest" + ], + "css/css-fonts-3/font-variant-numeric-02-ref.html": [ + "e342ce4c4ac08e5feaa2e09a7fa4fb4b8cba71bb", + "support" + ], + "css/css-fonts-3/font-variant-numeric-02.html": [ + "7fdc0f47f9d723a22ba4c7ba747d40e2a0dff2b7", + "reftest" + ], + "css/css-fonts-3/font-variant-numeric-03-ref.html": [ + "a46283128c4d16924fe4c4c3bd4b1b829bdae8d4", + "support" + ], + "css/css-fonts-3/font-variant-numeric-03.html": [ + "d9f46da801ebe93df730865651dcaa429b9c64cb", + "reftest" + ], + "css/css-fonts-3/font-variant-numeric-04-ref.html": [ + "a9b964fde280d23527da3c865e746b44d41aaebc", + "support" + ], + "css/css-fonts-3/font-variant-numeric-04.html": [ + "f36dc3c8cade028221cba46058cbbadeaccca617", + "reftest" + ], + "css/css-fonts-3/font-variant-numeric-05-ref.html": [ + "29e013055f91a0fa11222721651ff4e4ed24b792", + "support" + ], + "css/css-fonts-3/font-variant-numeric-05.html": [ + "d4084cb3579ae5578bd6a055dd05ff4eb599e24e", + "reftest" + ], + "css/css-fonts-3/font-variant-numeric-06-ref.html": [ + "d7cebdde2922e4651eb0b4893b285dbc6423e381", + "support" + ], + "css/css-fonts-3/font-variant-numeric-06.html": [ + "72e2c06692c1313d4a3d4735c1f284381947138b", + "reftest" + ], + "css/css-fonts-3/font-variant-numeric-07-ref.html": [ + "5b04778627669e80af1e7239a5dfe556fcfa88ab", + "support" + ], + "css/css-fonts-3/font-variant-numeric-07.html": [ + "07ddd91b90604ecdfc1b80ad8527d25f441b35e1", + "reftest" + ], + "css/css-fonts-3/font-variant-numeric-08-ref.html": [ + "6051e726ad2d9cba08099061300d791159d42054", + "support" + ], + "css/css-fonts-3/font-variant-numeric-08.html": [ + "f450ff656bf2c890e5aeb724a33ae6a0ee4045eb", + "reftest" + ], + "css/css-fonts-3/font-variant-numeric-09-ref.html": [ + "1a2166f9d1fe59bd324dda07caeb49f97f0d3be5", + "support" + ], + "css/css-fonts-3/font-variant-numeric-09.html": [ + "22dcde3ce44966275db0022cb4ce32e6b9c7cd79", + "reftest" + ], "css/css-fonts-3/font-variant-numeric-ref.html": [ "1c6707f02af53374529ef22d7873b02a80b887f3", "support" @@ -486908,6 +500331,30 @@ "92136f680a3c42d7325266fd2b136b7c4609a6bb", "reftest" ], + "css/css-fonts-3/font-variant-position-01-ref.html": [ + "eedfa5b5c2dd9b95daaa3baa78a2df1dbb220a12", + "support" + ], + "css/css-fonts-3/font-variant-position-01.html": [ + "5284baa45e38075d96a3468cbe36e98e77dfa564", + "reftest" + ], + "css/css-fonts-3/font-variant-position-02-ref.html": [ + "8fab31f1ad627bf7c1e1bf3ee5bb7545e26f1a9b", + "support" + ], + "css/css-fonts-3/font-variant-position-02.html": [ + "1f0130c363d56c078dc7bb72906a89245d352226", + "reftest" + ], + "css/css-fonts-3/font-variant-position-03-ref.html": [ + "21f6fd83c6b63b57c75a43f08023bb6b3c6f8a87", + "support" + ], + "css/css-fonts-3/font-variant-position-03.html": [ + "777fca83be2a37bca768fde84d3226448662c181", + "reftest" + ], "css/css-fonts-3/font-variant-position-ref.html": [ "986683fda8ba407d03e9d5e385ad4083b8ee6862", "support" @@ -486940,6 +500387,10 @@ "31ca941159a53ae144c9e3f961111e8bcbb783ce", "manual" ], + "css/css-fonts-3/language-specific-01.html": [ + "779c6c4875d44915e4c314acc028cc5ff21c4d42", + "visual" + ], "css/css-fonts-3/support/100x100-lime.png": [ "b02fc2d0ad1d95a2aeb6011022e63928841b183f", "support" @@ -487036,6 +500487,10 @@ "f4f2fdd3f411fca8cd03b1f7f737694c73c0220b", "support" ], + "css/css-fonts-3/support/fonts/FontWithFancyFeatures.otf": [ + "ce1bc123ba75345ab3816af7c18b481badbfd5eb", + "support" + ], "css/css-fonts-3/support/fonts/FontWithFeatures.otf": [ "f8de3477e7c261c61f339583fc6cea73d0c5e87b", "support" @@ -487044,6 +500499,10 @@ "e66cdd917334803327991dcc106f9d06a7c3a6e2", "support" ], + "css/css-fonts-3/support/fonts/Lato-Medium.ttf": [ + "c78e94b7cc0b782eef4f9f2be371c3cf9c3f6eaf", + "support" + ], "css/css-fonts-3/support/fonts/LigatureSymbolsWithSpaces.woff": [ "5ea504ce44837288ff987bc0bba4f0fc3fc38b13", "support" @@ -493093,13 +506552,641 @@ "manual" ], "css/css-grid-1/OWNERS": [ - "83af4bb4dbf9436f000298dc86d1b9fe72d75519", + "bc7f4480bc09f7cec87db506aef0d9c11b308e05", "support" ], "css/css-grid-1/README.md": [ "f7a5738de1e8c4231afad100668cf18ba46a7b51", "support" ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-001-ref.html": [ + "a9fb23476ac659978575cb83d3188f4d6d6e7b0f", + "support" + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-001.html": [ + "77091a3201ae334dd2c0010b139e3c43b90715d0", + "reftest" + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-002.html": [ + "5ea5573f976e643e8767861337b28336f354b04d", + "reftest" + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-003.html": [ + "2aaf5b57fad694161b64018404e981dac5123fae", + "reftest" + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-004.html": [ + "7c56b7c4d9a3ea2329d2964e652c8595131b8b4c", + "reftest" + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-005-ref.html": [ + "0d40568b47c309ed0987c9a1142920b0d107a0e9", + "support" + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-005.html": [ + "baa1b976ef05301321bd9fb554be09cab4a1bd6c", + "reftest" + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-006-ref.html": [ + "6d4d41d2fc9a07deefb0ade2e38f7504b83fa09f", + "support" + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-006.html": [ + "9a7a6f5b903ee982ad9a91b69048c4fafe8c5983", + "reftest" + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-007-ref.html": [ + "3e0b47994d74105861ee49a10e4d746caf435939", + "support" + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-007.html": [ + "847c905325ebe4794b4c367e8c7f61b41e8f72ed", + "reftest" + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-008-ref.html": [ + "9cc08712943358caebb7e25d19ef0d6769bb4095", + "support" + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-008.html": [ + "183a689a55347b963cbc293c5ebeef1d67d4318f", + "reftest" + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-009-ref.html": [ + "e5641a2d761b19ceb39f49966e843697efc20bd4", + "support" + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-009.html": [ + "3a03f9bdc0c42c304c85182dfba0d1ee4ad8cd19", + "reftest" + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-010.html": [ + "6388d6a6be6c86bf328d52ac75abd1a677f0cba3", + "reftest" + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-011-ref.html": [ + "c0fcc9ebad41456cb0021200bdc4e8f7b0340bca", + "support" + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-011.html": [ + "5afc923e0ce098240a156e65d3d748e25cf912cd", + "reftest" + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-012-ref.html": [ + "548c2b5e135c028c50d87b904fd072afc8a3eab4", + "support" + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-012.html": [ + "7e0fbc254d18b845d74f4d3c3a2764e65a2b5be8", + "reftest" + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-013-ref.html": [ + "23624fffab6aa15017b40649cbe6eac9b9254c1b", + "support" + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-013.html": [ + "ce756f55542515af467aa724cb1b55ad74c57633", + "reftest" + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-014-ref.html": [ + "3ffe76ce09d0a6582a4caad4c3d60917779723c6", + "support" + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-014.html": [ + "ea4939af771a9a459e4dab468bf0e0c4e6d9a798", + "reftest" + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-015-ref.html": [ + "d58be85989eae088d650bf24bf86b02ce52ec803", + "support" + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-015.html": [ + "219c038e63fa7ad8d42da857c32f4eff193c60b3", + "reftest" + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-016-ref.html": [ + "9c393a71338fa72d251951930dd7cd0a19e8e31b", + "support" + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-016.html": [ + "cb0c0f24a87b1ec74ca4055428b5e44c03aea886", + "reftest" + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-017-ref.html": [ + "a9060d9c80a6dc0928eef882848f8987775cdcc7", + "support" + ], + "css/css-grid-1/abspos/orthogonal-positioned-grid-items-017.html": [ + "9336dd63c380bc4f6fac09b0c04dcbde86e188e0", + "reftest" + ], + "css/css-grid-1/abspos/positioned-grid-items-001-ref.html": [ + "1673c68d597b136ecd71aff6bc1bf0c336e79f03", + "support" + ], + "css/css-grid-1/abspos/positioned-grid-items-001.html": [ + "8258e9e56a3bd60c6538e393efb2d7dc922d8b4f", + "reftest" + ], + "css/css-grid-1/abspos/positioned-grid-items-002.html": [ + "448ff634fb002b8485575f01fc0f85ebc819542b", + "reftest" + ], + "css/css-grid-1/abspos/positioned-grid-items-003.html": [ + "7fc0c1d474e6989d169eebe69c90766f8d179bcc", + "reftest" + ], + "css/css-grid-1/abspos/positioned-grid-items-004.html": [ + "2bffd5ea91a62f5a92db467b07e41064b17f9713", + "reftest" + ], + "css/css-grid-1/abspos/positioned-grid-items-005-ref.html": [ + "b122fea36fae79fb18b33f5a664525eeb469c871", + "support" + ], + "css/css-grid-1/abspos/positioned-grid-items-005.html": [ + "b1c596e2b27b6e4da03d6dbc6e6e96e606d1c8ff", + "reftest" + ], + "css/css-grid-1/abspos/positioned-grid-items-006-ref.html": [ + "84fb3dbbac71e99420765d9a6eb1c9a5a599da9e", + "support" + ], + "css/css-grid-1/abspos/positioned-grid-items-006.html": [ + "73ad585a34948226e899e3e606b107fc969a0df0", + "reftest" + ], + "css/css-grid-1/abspos/positioned-grid-items-007-ref.html": [ + "c5ee44cd49c989d1e9b378d5c89776cd5192e476", + "support" + ], + "css/css-grid-1/abspos/positioned-grid-items-007.html": [ + "64efed1425fcb5f299fcad039c463c8c6583d376", + "reftest" + ], + "css/css-grid-1/abspos/positioned-grid-items-008-ref.html": [ + "8ba65302792a66eb2a2c470986763a468f8dfc1d", + "support" + ], + "css/css-grid-1/abspos/positioned-grid-items-008.html": [ + "fdb285c399994d50597adaeea1ac07b256b76bb7", + "reftest" + ], + "css/css-grid-1/abspos/positioned-grid-items-009-ref.html": [ + "e2b497cf7fafae8e7966e4b6ab00182b35905bd4", + "support" + ], + "css/css-grid-1/abspos/positioned-grid-items-009.html": [ + "d287eb287ba56f558c57bcce6da3382af74e6926", + "reftest" + ], + "css/css-grid-1/abspos/positioned-grid-items-010.html": [ + "6c4567902d785409ed21da7fecd21fd29399d34f", + "reftest" + ], + "css/css-grid-1/abspos/positioned-grid-items-011-ref.html": [ + "afd109a769fe804bccc3a21e25bdce324f98930d", + "support" + ], + "css/css-grid-1/abspos/positioned-grid-items-011.html": [ + "9595bee339cc454fdbb21640d20ae218002f4505", + "reftest" + ], + "css/css-grid-1/abspos/positioned-grid-items-012-ref.html": [ + "ce38108aa80906852bbbf8ef5ccc99045abbb42e", + "support" + ], + "css/css-grid-1/abspos/positioned-grid-items-012.html": [ + "5ca03ba877372b7da1b7293b76c82b829d397da0", + "reftest" + ], + "css/css-grid-1/abspos/positioned-grid-items-013-ref.html": [ + "2f6a961e31e34c7e9867b974d088653f77acbb32", + "support" + ], + "css/css-grid-1/abspos/positioned-grid-items-013.html": [ + "c616a111b38b34db007cc30d6e7bc04d64f8e5da", + "reftest" + ], + "css/css-grid-1/abspos/positioned-grid-items-014-ref.html": [ + "32e82acc03d527f9e158bcee1db77ee56c7801d2", + "support" + ], + "css/css-grid-1/abspos/positioned-grid-items-014.html": [ + "c6a339a995574c7de3ca66ca36a216cf31cd3193", + "reftest" + ], + "css/css-grid-1/abspos/positioned-grid-items-015-ref.html": [ + "40c5d9f8714ae92931e2de319c05fa530a548f2a", + "support" + ], + "css/css-grid-1/abspos/positioned-grid-items-015.html": [ + "3157b439f61a09b52d2d2eb37af627aa751a78ba", + "reftest" + ], + "css/css-grid-1/abspos/positioned-grid-items-016-ref.html": [ + "31376a55b028760a681ba1ce35756c1510629134", + "support" + ], + "css/css-grid-1/abspos/positioned-grid-items-016.html": [ + "91ccbd61eb0bd75e218fce3852cf8ade998f4d44", + "reftest" + ], + "css/css-grid-1/abspos/positioned-grid-items-017-ref.html": [ + "b3df58b256846bc883c52128b76169b7f13755eb", + "support" + ], + "css/css-grid-1/abspos/positioned-grid-items-017.html": [ + "6e0f7a2262ec3476d8cf32ea562fe0f67ad5a7f1", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-001.html": [ + "71d678f48849879663d199ec57a5f19fb5e026b3", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-002.html": [ + "a20d044edc50199306349700b03522225841fc72", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-003.html": [ + "4ef0c09a8c51e4fd2979887fe7420a62eb783027", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-004.html": [ + "f1f2f65fad70478230f2456cbdf68ead9c6de7f6", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-005.html": [ + "cf1c4546b569bea0bea062736ccea0e9e4f934ac", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-006.html": [ + "f0f17f458563b57a39ff7b684996edfede82e510", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-007.html": [ + "08db6086c6a30888fee6881d6646d42c509d218b", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-008.html": [ + "66d112eae6876a44c2246312719c2e6a3b93a5eb", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-009.html": [ + "a27003f50acf7ff550d99b14a4a4435f80e791c0", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-010.html": [ + "1f59c3d1af79df13007d0ba29132917a6e075e54", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-011.html": [ + "edaf37eff5ed1db1709729e669aee460457de3ec", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-012.html": [ + "6ba269671145f1f8d5a32f6a1efe5927a695f693", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-013.html": [ + "a2036358ed56a79580d675cccd820e40b82bb3d0", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-014.html": [ + "9e20812f1655d4bbbde261694deee0c1d09ff214", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-015.html": [ + "d49d3b8b7a92a7cae108d7baa9d40b95699149aa", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-016.html": [ + "9ac8ed870190e63aa9e248cf41c81c41b4816442", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-017.html": [ + "7295162365f4929cf68ebad634be1d3bd6f7227a", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-018.html": [ + "872fdebe89d9ddad40efbd19c5b429675a8fc1ce", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-019.html": [ + "5e97218c93c95bd57edd96219a520a894184b2b6", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-020.html": [ + "228cd6b2312f64f7ae7bb1421fb6b8c5e6bb4c22", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-021.html": [ + "a626f563a51ef70a0a6221dd397c4ea9dce74f2c", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-022.html": [ + "0699d18ff695b8920588304e9685f843fa006b4f", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-023.html": [ + "788e76b9f562e1a2af800b8939d8cd6dccdaf991", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-024.html": [ + "d0f957e475c3c0934a3d84e64ea6552e47cfac7a", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-025.html": [ + "136e1a1999f3696a5742cb53a0d30e6411cfa6f4", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-001.html": [ + "0681924a44ddc7c141a8c20203289c0862e7ec7c", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-002.html": [ + "e7771a519139a375f641125ea2a0a90102d228c7", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-003.html": [ + "7ff3085ec34b3fe9664ef0a9e02ebe862c42c22f", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-004.html": [ + "c474e6c83ca32385734a035fd36ef41e2e666f24", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-005.html": [ + "c5a5d80b273add95223306d99471d3a030fb8be6", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-006.html": [ + "55d9f476640c87eb1663114599ddb6eafd91b7f0", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-007.html": [ + "d81f70fda4665e94cd32483127e069dec9b760cc", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-008.html": [ + "d4f0fde36ff5b437ebda34698d199cce359f00fa", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-009.html": [ + "5a50c58f6b9ba8b4b51b020b93ee61d23bfb500f", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-010.html": [ + "fa5cc94c766ac0d455326bb117ae530df0ce6d4d", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-011.html": [ + "3f02b75738ac80f1875a3adc0ce07052841c6be4", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-012.html": [ + "97dac1879d441e29c97743e9e63bb44f6a413f67", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-013.html": [ + "99832804da447b3cc35db8bb60492781a03ffb62", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-014.html": [ + "2cc1f4a715b939a882d7394cb0d49d5ba4b127c7", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-015.html": [ + "8b1947a434ec968a5bd0170334e7e2c907e69f28", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-016.html": [ + "998612427cda18f277c5edf484892fd3b313bffc", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-017.html": [ + "080c87419291575847c9e94eadf5096f4a438bb3", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-018.html": [ + "aec32266b3e66fb38f45888140bf773d537728c9", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-019.html": [ + "6891c290c82adce07bb2409732789b627f07ded0", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-020.html": [ + "0ea2837b789ce2289aa2ec1c514006899d13def7", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-021.html": [ + "0e2a972619d21b4de097ddca6f39f2cae486cc5c", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-022.html": [ + "fb73bdbdff8fda79519e4fe387127ca539506357", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-023.html": [ + "c8b2681075b476b15221bcb1fe1ea6a4e0c40409", + "reftest" + ], + "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-024.html": [ + "6446e5dede7383a43ac46b8083b6012b312a8124", + "reftest" + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-001.html": [ + "4ebbf6afe7452b5a61c9a475b7beb3958dd39ee5", + "testharness" + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-002.html": [ + "a1b58d6358acae0e0a4d48ec2e896b5a86b296bf", + "testharness" + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-003.html": [ + "3d0b16a4ad5d537fa2728e630bf81d8a55303cd4", + "testharness" + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-004.html": [ + "71f1966a0c3f899dd3b2601d225ec5683514e296", + "testharness" + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-005.html": [ + "c95fbde16d02ff01eab5e39a1f9b66ab5d0ca88c", + "testharness" + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-006.html": [ + "3bf926a4638e8a7a36d255e3a54c2b33e978c850", + "testharness" + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-007.html": [ + "00a3a65a3028898decd5b33dc749d1d4b61c05f5", + "testharness" + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-008.html": [ + "f7058e3180965b0b85b83d66cc3623e4d6ed081c", + "testharness" + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-009.html": [ + "c56e42e2c7726204f112bc124adf6bf4e75e1c83", + "testharness" + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-010.html": [ + "cbec5d103a8c29e5af97a54fe856c250ced3ee69", + "testharness" + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-011.html": [ + "b2556efc42d96830190ef6bbe0fdeef7c939cd76", + "testharness" + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-012.html": [ + "7700cff07f4930e4453c7dabef98ff41dd85f04b", + "testharness" + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-013.html": [ + "64c4f341755b5bef5772cc164427033fbf3d44f3", + "testharness" + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-014.html": [ + "e7f19c6990b60e8d527089d600d0b5d585f37d42", + "testharness" + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-015.html": [ + "516f95b9ab855414499423cc0b6354b37735c428", + "testharness" + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-016.html": [ + "4e6a1caea23ac6a54e2e6f5fd9585d574dd615aa", + "testharness" + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-001.html": [ + "ba37dd2cb887de2c6a577e7ad538f588f6c2a6b5", + "testharness" + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-002.html": [ + "2a88930bce761a86b84bc39cbbb9c6c4fb1ade6f", + "testharness" + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-003.html": [ + "1a598d7e5c0a63aedb6fa83a81084707a97082bd", + "testharness" + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-004.html": [ + "aba771e25d3801ea42786fd006e5e444605fed9e", + "testharness" + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-005.html": [ + "45aee24069e89a238c99b61ee905ab516fc1fe4e", + "testharness" + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-006.html": [ + "481ed2e3a960f5e3da1dde22245d1da6f33cd344", + "testharness" + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-007.html": [ + "62b193d96908b1950ad8d7ff994e7f0718b3a9f1", + "testharness" + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-008.html": [ + "55f131bf1a0566068b0882ec90cd37e257b9b28a", + "testharness" + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-009.html": [ + "d2ae2b5839c06f483740ee96fbd718110515d095", + "testharness" + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-010.html": [ + "90cbedb0e00ad7da4b3d9627804d668e160935eb", + "testharness" + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-011.html": [ + "53f3a18185535c7310df5ba9132e63cad8daa651", + "testharness" + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-012.html": [ + "170a800b282312f4f4e35845b4d6009b3e491ca4", + "testharness" + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-013.html": [ + "ec7e80425ea1e5df487f43d62d1bbf8e5774d294", + "testharness" + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-014.html": [ + "66d1929467cee9b75c05c30f1be0b29969646b1d", + "testharness" + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-015.html": [ + "d22228744c0dfab1d541361812317680c8e6db34", + "testharness" + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-016.html": [ + "6a5b4f1e3f8713ec386971b90c152844a1963153", + "testharness" + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-001.html": [ + "f3839a8b379099186f499886a2687d879941e553", + "testharness" + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-002.html": [ + "f2e48ba123603f1617302a842d13b41f8a134791", + "testharness" + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-003.html": [ + "9cf06a6284b8ea46a451b750b634800edf0a263e", + "testharness" + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-004.html": [ + "ee801dc782b31539787b108e2249163648fb9476", + "testharness" + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-005.html": [ + "595f81d3ca4465d53968b1a5e7d2c5ef9364e1d7", + "testharness" + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-006.html": [ + "d824792aa48927230d5d79413d6b31ff9e6a9044", + "testharness" + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-007.html": [ + "7875a1c3f5bd7ed5f9bc6d57ee55a74eae70d08c", + "testharness" + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-008.html": [ + "a91f9d4cd8375f9a3843df68c1699be43464a519", + "testharness" + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-009.html": [ + "b34bf92f1eb907ed1cae789ca5d0526180746a8d", + "testharness" + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-010.html": [ + "923c6fbd83ef1df81c92f3b818d5ed6bc8545eb8", + "testharness" + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-011.html": [ + "30701ba96fd590d43fa4d69e2393493812950a9e", + "testharness" + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-012.html": [ + "eb4d83cc9c0053fd305994ce7eeb7015a75a85d3", + "testharness" + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-013.html": [ + "3d1e1bd37812a4707305255afa4ff94433995771", + "testharness" + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-014.html": [ + "746b1f48171561ad5aacc7ce282592fefbb2ab3e", + "testharness" + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-015.html": [ + "a913de9564b2e44fec43b66177cc6b94cb174a08", + "testharness" + ], + "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-016.html": [ + "749d78928a228bb67878b3c088d36bcfd010aa08", + "testharness" + ], "css/css-grid-1/grid-definition/fr-unit-with-percentage.html": [ "e29ef66eb632f1f9834df3233f741fb51fed5eea", "reftest" @@ -493108,28 +507195,28 @@ "194031e276c1dfca4dd57bf5791a0cc1fd226a89", "reftest" ], - "css/css-grid-1/grid-definition/grid-inline-support-flexible-lengths-001.xht": [ - "ba8763d37fc66a2c64dcf99848285390e51aa9f6", + "css/css-grid-1/grid-definition/grid-inline-support-flexible-lengths-001.html": [ + "99215a797996322c89105b8ca5cb426628ec7563", "testharness" ], - "css/css-grid-1/grid-definition/grid-inline-support-grid-template-areas-001.xht": [ - "05020bfb7d5ce654888d5fbb3ba51c218f1749c8", + "css/css-grid-1/grid-definition/grid-inline-support-grid-template-areas-001.html": [ + "22ea4ef440903f2b3af781d1209ccf6e89b1c07d", "testharness" ], - "css/css-grid-1/grid-definition/grid-inline-support-grid-template-columns-rows-001.xht": [ - "f93f707c55a43bb535321ee5c5455bb7464f1a64", + "css/css-grid-1/grid-definition/grid-inline-support-grid-template-columns-rows-001.html": [ + "33a3570eb9cc87dc5fafbc9a922079136bbbe769", "testharness" ], - "css/css-grid-1/grid-definition/grid-inline-support-named-grid-lines-001.xht": [ - "7380e320c667f3fbf4cff528049f58212e642484", + "css/css-grid-1/grid-definition/grid-inline-support-named-grid-lines-001.html": [ + "773b537e4e31ef93fce9c19ca3d509036a47b96c", "testharness" ], - "css/css-grid-1/grid-definition/grid-inline-support-repeat-001.xht": [ - "f27186c5dc1cd1dc85e6b24dc6dd2c077fee9c70", + "css/css-grid-1/grid-definition/grid-inline-support-repeat-001.html": [ + "0e1d692ba70002f2373f92cad79e6bdcf15e4b93", "testharness" ], - "css/css-grid-1/grid-definition/grid-inline-template-columns-rows-resolved-values-001.xht": [ - "959f3106703cfa069e382403c1ea801cc98172e0", + "css/css-grid-1/grid-definition/grid-inline-template-columns-rows-resolved-values-001.html": [ + "8164e2c16d23d366b62b100f49496a51ce27c614", "testharness" ], "css/css-grid-1/grid-definition/grid-layout-auto-tracks.html": [ @@ -493144,132 +507231,132 @@ "e30c5d9b04eaf45a511b8df22a2c9719a03ecd92", "reftest" ], - "css/css-grid-1/grid-definition/grid-support-flexible-lengths-001.xht": [ - "5336234689a2e0a9493bcbd252b77b0dfc07490c", + "css/css-grid-1/grid-definition/grid-support-flexible-lengths-001.html": [ + "f03efa4af7f9eb9decd60bfe44c7a3166947ba32", "testharness" ], - "css/css-grid-1/grid-definition/grid-support-grid-template-areas-001.xht": [ - "c32ed0d5c9ff637a1601e765d858f2ebc59c0445", + "css/css-grid-1/grid-definition/grid-support-grid-template-areas-001.html": [ + "581b9d7c3f2f44b1e7216cfb19eb46d655ec4f07", "testharness" ], - "css/css-grid-1/grid-definition/grid-support-grid-template-columns-rows-001.xht": [ - "90a8edb4a8f0c43e79327bf940fb01f660d126e5", + "css/css-grid-1/grid-definition/grid-support-grid-template-columns-rows-001.html": [ + "1a756f2420d86d56ca0864bff20ab751e7332f4f", "testharness" ], - "css/css-grid-1/grid-definition/grid-support-named-grid-lines-001.xht": [ - "96ebfe14ff2db37d1bf301213e57ca614c95de7b", + "css/css-grid-1/grid-definition/grid-support-named-grid-lines-001.html": [ + "e42cdbd74e4d38d188a8e657fadd152ee98b55b4", "testharness" ], - "css/css-grid-1/grid-definition/grid-support-repeat-001.xht": [ - "ae95228f1fb37e6ab9bb2059a40bbf8d074d9cd9", + "css/css-grid-1/grid-definition/grid-support-repeat-001.html": [ + "4cab09ffd97789ea2b5e571bfafc2ef6bc26e314", "testharness" ], - "css/css-grid-1/grid-definition/grid-template-columns-rows-resolved-values-001.xht": [ - "a5e4f2b9a1b5c3a72dca16413755ac89f8541a1d", + "css/css-grid-1/grid-definition/grid-template-columns-rows-resolved-values-001.html": [ + "e06c2099210cec1f7e031b3aa9901b675f0d2801", "testharness" ], "css/css-grid-1/grid-definition/support/testing-utils.js": [ "7d6dc5106777942ad83e6bc570368af113f32d5f", "support" ], - "css/css-grid-1/grid-items/grid-inline-items-001.xht": [ - "716da23e296b00edc963f120115d14153b0fc130", + "css/css-grid-1/grid-items/grid-inline-items-001.html": [ + "026bebd69ed8b67da6b08de73b6f6bf2c1cdae7d", "reftest" ], - "css/css-grid-1/grid-items/grid-inline-items-002.xht": [ - "f66a469911608337a991164fe6e4650c0794fc02", + "css/css-grid-1/grid-items/grid-inline-items-002.html": [ + "a10f70e8af4bf208c5144286ae3350e5ce928d2d", "reftest" ], - "css/css-grid-1/grid-items/grid-inline-items-003.xht": [ - "f94ef82ac9984ab7fc4c2fa97ec389b64051cd03", + "css/css-grid-1/grid-items/grid-inline-items-003.html": [ + "a62848a576314a143ba4c4249e2919f339015610", "reftest" ], - "css/css-grid-1/grid-items/grid-inline-items-inline-blocks-001.xht": [ - "c435e30c2be60c588d5901acd6674b63c692b7a6", + "css/css-grid-1/grid-items/grid-inline-items-inline-blocks-001.html": [ + "1a0af2cedf319d117c5a4c95ccda14f65bdb792a", "reftest" ], - "css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-001.xht": [ - "ef67bb02c2012f60ac6fbc12c358b6961d8683e1", + "css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-001.html": [ + "dfbbf319eb3ca1e3b4bdff7a6885976f3cd0f4c8", "reftest" ], - "css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-002.xht": [ - "18c91aebe75b0ea7c4e7417e12c28e3124e1c97b", + "css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-002.html": [ + "e35735ebeca563fc48cf29fff3a7b630ec141e8c", "reftest" ], - "css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-003.xht": [ - "53acd8ba1017b9153e7bf51dec45aa430512ab87", + "css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-003.html": [ + "7b7d8d6cf52075289da60039c968b9222281af10", "reftest" ], - "css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-004.xht": [ - "040bad745f634826954b66bb0278766b7a158dc1", + "css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-004.html": [ + "0b3f6ba7626114058956bfecdfde3ac28463d907", "reftest" ], - "css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-005.xht": [ - "1f3a7c36f403500af26e12e44e9ae78dfb9e3d94", + "css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-005.html": [ + "c6e6dba9d2e4a40e4b3d337f68f6d8294e379f25", "reftest" ], - "css/css-grid-1/grid-items/grid-inline-order-property-painting-001.xht": [ - "3995d52675726e6f9e1dd2dae87650bbc0ff00ff", + "css/css-grid-1/grid-items/grid-inline-order-property-painting-001.html": [ + "a81bc2e2304ada69c4bcb620d3a81bee0f6e60fb", "reftest" ], - "css/css-grid-1/grid-items/grid-inline-order-property-painting-002.xht": [ - "f32fcdf9037a8b015f3e5cb8f7f2602a70553198", + "css/css-grid-1/grid-items/grid-inline-order-property-painting-002.html": [ + "f73688b5f837bca13ff86a7db7f3dcfbf68233bd", "reftest" ], - "css/css-grid-1/grid-items/grid-inline-order-property-painting-003.xht": [ - "f396952e25fefb64dfad164d0bb53f5d7213bec2", + "css/css-grid-1/grid-items/grid-inline-order-property-painting-003.html": [ + "5a6452be442ff6ac2ee7445c5536bac71aa1cfa3", "reftest" ], - "css/css-grid-1/grid-items/grid-inline-order-property-painting-004.xht": [ - "cd98aa58aa0cbe6a41de3e4a3ea3f212f975ff47", + "css/css-grid-1/grid-items/grid-inline-order-property-painting-004.html": [ + "ab6babb99a87b0365dcbd672ab99c9db1618a743", "reftest" ], - "css/css-grid-1/grid-items/grid-inline-order-property-painting-005.xht": [ - "7ca300963694bedeae7d69e84aae16e444f38000", + "css/css-grid-1/grid-items/grid-inline-order-property-painting-005.html": [ + "62bab6deff775ed89a61d56bb23785c33d6955f1", "reftest" ], - "css/css-grid-1/grid-items/grid-inline-z-axis-ordering-001.xht": [ - "55af956b2d274febb9f39f905a103235b0d7178d", + "css/css-grid-1/grid-items/grid-inline-z-axis-ordering-001.html": [ + "b61b3731e95699bf5084f71ad7c8c7cc77545da1", "reftest" ], - "css/css-grid-1/grid-items/grid-inline-z-axis-ordering-002.xht": [ - "2ce31577e13542cd9933703f7546b6da78b93146", + "css/css-grid-1/grid-items/grid-inline-z-axis-ordering-002.html": [ + "33a5f6e614739aa2559e6a94f64e17ee55d7bf01", "reftest" ], - "css/css-grid-1/grid-items/grid-inline-z-axis-ordering-003.xht": [ - "24f4422d43642786a7786380305262dcd1b61a48", + "css/css-grid-1/grid-items/grid-inline-z-axis-ordering-003.html": [ + "e697020eb9e63e701196dc2caa2685ca5fc4834a", "reftest" ], - "css/css-grid-1/grid-items/grid-inline-z-axis-ordering-004.xht": [ - "8e511db84d88b959c5d3f6dff34bde55c8e4117c", + "css/css-grid-1/grid-items/grid-inline-z-axis-ordering-004.html": [ + "5169522775e28518324d8eeed1bfe31d615fa8da", "reftest" ], - "css/css-grid-1/grid-items/grid-inline-z-axis-ordering-005.xht": [ - "959d44aeba24ead0cebd4a662f2fd1d8ee261c73", + "css/css-grid-1/grid-items/grid-inline-z-axis-ordering-005.html": [ + "7c0978d03f7ca0300114b025bacadb143830e8f4", "reftest" ], - "css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-001.xht": [ - "1ad3e5cf24fcb7d6dc8c6e28e51583cd017a4440", + "css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-001.html": [ + "3545f11e194e360f5b2434dd36182b8a18e7fe8d", "reftest" ], - "css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-002.xht": [ - "76f1a3fc17fdc3d7cd679416cfe326a9c99bc8fc", + "css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-002.html": [ + "ca7ad94966289dd396b7e9f7921eac72fd3bafca", "reftest" ], - "css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-003.xht": [ - "6d6ab00722959c18ac2f853cfb9f8e60bdfa86bf", + "css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-003.html": [ + "798129733b5eb05be07edf6abfccb0a5b285b439", "reftest" ], - "css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-004.xht": [ - "2dfb04fd4c3057144ca4e6f52afc118249e01468", + "css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-004.html": [ + "ffac701337e58cfcfeedfe2781cf82d7f3a4d519", "reftest" ], - "css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-005.xht": [ - "00ff5dbebe5995093620a13ec7c40a36e854ef74", + "css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-005.html": [ + "67850fc6c738228f9b61d0add7c8a75e4ea45e09", "reftest" ], - "css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-006.xht": [ - "f4872b4b30c39b7d6eaa2da28fe9e2e284324950", + "css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-006.html": [ + "bd899c9bf5b4fe1b7d40715fd8def0afb6c51d2e", "reftest" ], "css/css-grid-1/grid-items/grid-item-containing-block-001.html": [ @@ -493288,20 +507375,20 @@ "21d5aae1010b398e29175baa05eeca7fef76d8c0", "reftest" ], - "css/css-grid-1/grid-items/grid-items-001.xht": [ - "8430bda9ee16e272cf1c5b213fce423860951bb3", + "css/css-grid-1/grid-items/grid-items-001.html": [ + "9d1066bf6e7051f36c7750b1cd22ad2c23ef2ae4", "reftest" ], - "css/css-grid-1/grid-items/grid-items-002.xht": [ - "00c678b68282e5ac49baebd5740810afa4b9e06e", + "css/css-grid-1/grid-items/grid-items-002.html": [ + "093a7e1111de1887e10443097508b720c230bbc6", "reftest" ], - "css/css-grid-1/grid-items/grid-items-003.xht": [ - "3ada0ce93a24ce09ab55763498d7be0e3630ce39", + "css/css-grid-1/grid-items/grid-items-003.html": [ + "26b9b3908e766348322e5029e79dbac4248e6776", "reftest" ], - "css/css-grid-1/grid-items/grid-items-inline-blocks-001.xht": [ - "1d55d0b0b0dfaf6ae334e65359a7a6c696c769a2", + "css/css-grid-1/grid-items/grid-items-inline-blocks-001.html": [ + "d36bce8f5be4f39442a884386ea08062c873b73d", "reftest" ], "css/css-grid-1/grid-items/grid-items-sizing-alignment-001-ref.html": [ @@ -493324,40 +507411,40 @@ "329c91ffc4f68ae1fffa399a62fec38bb73859d8", "reftest" ], - "css/css-grid-1/grid-items/grid-minimum-size-grid-items-001.xht": [ - "67ae04d38918ec9916a258f18dda1972155f15fc", + "css/css-grid-1/grid-items/grid-minimum-size-grid-items-001.html": [ + "3cd1b071340b713e2bae85723ceda298d4f69907", "reftest" ], - "css/css-grid-1/grid-items/grid-minimum-size-grid-items-002.xht": [ - "5bbd3db2e9e54b80a5e19b7f754dd3870491a789", + "css/css-grid-1/grid-items/grid-minimum-size-grid-items-002.html": [ + "fc0d37c7f8390f8dc1fa5545d3ae4d11b5915473", "reftest" ], - "css/css-grid-1/grid-items/grid-minimum-size-grid-items-003.xht": [ - "d925889c56b192bfd115cb566abb8e47333bed5f", + "css/css-grid-1/grid-items/grid-minimum-size-grid-items-003.html": [ + "0ab809bc437d081b753ebf3ab7107b553e848a4b", "reftest" ], - "css/css-grid-1/grid-items/grid-minimum-size-grid-items-004.xht": [ - "6a7ab40fa3c662e73e2af37a27a8311726e1be5a", + "css/css-grid-1/grid-items/grid-minimum-size-grid-items-004.html": [ + "5499f133219cdcf76881bdcb77195d6a5e5a3bee", "reftest" ], - "css/css-grid-1/grid-items/grid-minimum-size-grid-items-005.xht": [ - "5dfee0a534693984d84d8794f8c872d2ac4b82ab", + "css/css-grid-1/grid-items/grid-minimum-size-grid-items-005.html": [ + "f751fd848e4076d742820b5f9e2f2afe6cd08505", "reftest" ], - "css/css-grid-1/grid-items/grid-minimum-size-grid-items-006.xht": [ - "23097e8ac4e5a844a166f9205fc35fe1f6ba3e69", + "css/css-grid-1/grid-items/grid-minimum-size-grid-items-006.html": [ + "a18e54cb5ba9b0f91c443e073084784778ebfa7b", "reftest" ], - "css/css-grid-1/grid-items/grid-minimum-size-grid-items-007.xht": [ - "3e6e88d6cc25711d9e9f44f121f4527865f5cc74", + "css/css-grid-1/grid-items/grid-minimum-size-grid-items-007.html": [ + "bf657a093b431c6c0f17f4c207a7b32ba0822045", "reftest" ], - "css/css-grid-1/grid-items/grid-minimum-size-grid-items-008.xht": [ - "d10f0dd0e200cc9df01707ecad7d6185b1177703", + "css/css-grid-1/grid-items/grid-minimum-size-grid-items-008.html": [ + "fc9ce48c25c9d446e1b6186469216a551aa67afa", "reftest" ], - "css/css-grid-1/grid-items/grid-minimum-size-grid-items-009.xht": [ - "9851e99270fbb1713f585e00b3558f9d87ac7d64", + "css/css-grid-1/grid-items/grid-minimum-size-grid-items-009.html": [ + "c843c219820996931e54f2ae404cbb03bfea2e59", "reftest" ], "css/css-grid-1/grid-items/grid-minimum-size-grid-items-010.html": [ @@ -493404,88 +507491,92 @@ "405029c5f5c1bf68098a849ba2828027a092c9f8", "reftest" ], - "css/css-grid-1/grid-items/grid-order-property-auto-placement-001.xht": [ - "a716f3321a6ec7251794a923ed8e63ff11e4ffcf", + "css/css-grid-1/grid-items/grid-minimum-size-grid-items-021.html": [ + "de9477d81656c85b0d41044b1ffb44634c78eb0e", + "testharness" + ], + "css/css-grid-1/grid-items/grid-order-property-auto-placement-001.html": [ + "15a3eec22bb5f55e3e7a73730e95011f4efbaf73", "reftest" ], - "css/css-grid-1/grid-items/grid-order-property-auto-placement-002.xht": [ - "7c97e73acfaf63996d7150b7b598f238890a4bcc", + "css/css-grid-1/grid-items/grid-order-property-auto-placement-002.html": [ + "6f4038ebe957cf9d67839f66bbcbbbc3d3b777c2", "reftest" ], - "css/css-grid-1/grid-items/grid-order-property-auto-placement-003.xht": [ - "4d49b834ced45d341ca1fde5d1d2dcc434890a4d", + "css/css-grid-1/grid-items/grid-order-property-auto-placement-003.html": [ + "57c6dc4ec196e8e761618b1f3eb14e31c4da8826", "reftest" ], - "css/css-grid-1/grid-items/grid-order-property-auto-placement-004.xht": [ - "32da0e083bc9a3df379888049c4f08704fce1f4c", + "css/css-grid-1/grid-items/grid-order-property-auto-placement-004.html": [ + "a321549b6d9323eb4e3afbcd8db735ec0a0d234a", "reftest" ], - "css/css-grid-1/grid-items/grid-order-property-auto-placement-005.xht": [ - "418e42cb24ee969e4f3977bcbdadae56252c4efa", + "css/css-grid-1/grid-items/grid-order-property-auto-placement-005.html": [ + "f5c41ca2264711400d46fc955de74d3b8533555e", "reftest" ], - "css/css-grid-1/grid-items/grid-order-property-painting-001.xht": [ - "6a04f9ad5d4f349c8ee23d9495c09194216257f1", + "css/css-grid-1/grid-items/grid-order-property-painting-001.html": [ + "3d32a8aac8d8e25538455258b0c3190220885765", "reftest" ], - "css/css-grid-1/grid-items/grid-order-property-painting-002.xht": [ - "802d20385531d2aa317a2a092c46b88c87cb7af4", + "css/css-grid-1/grid-items/grid-order-property-painting-002.html": [ + "11b5c01a4f5a2cff4b4b36cff0309fa950c52d1d", "reftest" ], - "css/css-grid-1/grid-items/grid-order-property-painting-003.xht": [ - "b288745191b797463e78728b1f33e189e729904a", + "css/css-grid-1/grid-items/grid-order-property-painting-003.html": [ + "ae6950ad75aaf97f59d0a275cfda77e82cf86bf9", "reftest" ], - "css/css-grid-1/grid-items/grid-order-property-painting-004.xht": [ - "730f254535f277e430cc992038f6248a2c35c98f", + "css/css-grid-1/grid-items/grid-order-property-painting-004.html": [ + "d7001fe1ba0b84eecc182744a67dab9524dd2ee8", "reftest" ], - "css/css-grid-1/grid-items/grid-order-property-painting-005.xht": [ - "ef35a8e24fd3307a4577eeb233a4a07891928191", + "css/css-grid-1/grid-items/grid-order-property-painting-005.html": [ + "d4aefdacbbf7804a10041edb1977626e4017a5b6", "reftest" ], - "css/css-grid-1/grid-items/grid-z-axis-ordering-001.xht": [ - "0160f65079cf0a54090ee3c04e43d4891feeb181", + "css/css-grid-1/grid-items/grid-z-axis-ordering-001.html": [ + "8a0f9cf4fb9ed3bd4fa93d2e71daec4eb7c09983", "reftest" ], - "css/css-grid-1/grid-items/grid-z-axis-ordering-002.xht": [ - "2c484f646e367e12aca892b4e6e3734e769c84e3", + "css/css-grid-1/grid-items/grid-z-axis-ordering-002.html": [ + "b3e54a73d28e9c4439a0d505ea95cb27f1dc2cf6", "reftest" ], - "css/css-grid-1/grid-items/grid-z-axis-ordering-003.xht": [ - "b26d09a548a810ccf2b1f0b0fb1e9a97e79438c4", + "css/css-grid-1/grid-items/grid-z-axis-ordering-003.html": [ + "e827c4eedaf12c30b95065c63e5f8c84bbfb1e04", "reftest" ], - "css/css-grid-1/grid-items/grid-z-axis-ordering-004.xht": [ - "7e6c71074fb11b02ae1e8ae9e0d6ad0d2a1aafde", + "css/css-grid-1/grid-items/grid-z-axis-ordering-004.html": [ + "7a3fee62392f240b8999c1eafa12b916ce73fe4e", "reftest" ], - "css/css-grid-1/grid-items/grid-z-axis-ordering-005.xht": [ - "954e3316af68befc2e887b8a0260027a2f32fec3", + "css/css-grid-1/grid-items/grid-z-axis-ordering-005.html": [ + "c6da569361d8cce6afc6133a0fd93c00ce6cc82b", "reftest" ], - "css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-001.xht": [ - "d79773caf9cedc5a22cd96b397a841cf6ed5ffe9", + "css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-001.html": [ + "ed8ae6b19fa32e63a8bb07e7986d0d3df32a6406", "reftest" ], - "css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-002.xht": [ - "5d05bf42b9cf0e0c8d12bcd488674bf8f9ce2046", + "css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-002.html": [ + "0c0c583eac524e6f1714268b8dfcea567e1cba77", "reftest" ], - "css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-003.xht": [ - "8737cac392cc09e42d39ccb57cee54077b02d643", + "css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-003.html": [ + "b99cbbd7b58c8fe0a69ec9d3450e0f9c2826b4f0", "reftest" ], - "css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-004.xht": [ - "77c82b28249124bc38e3d5628653065386ec2d9c", + "css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-004.html": [ + "2f1a37c0431745ae4c56e2acc359da6cd852f057", "reftest" ], - "css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-005.xht": [ - "d891906a0428304134a6bf5e71828743a1919557", + "css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-005.html": [ + "80b0c671f40806cbce618ec7c6e65ef685b3b90f", "reftest" ], - "css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-006.xht": [ - "c86af295b991afbd7087bb1a2bf0be5bb1ceb7e7", + "css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-006.html": [ + "ca7e5d89d56f33291e83647bef188205bf01ef84", "reftest" ], "css/css-grid-1/grid-items/ref-filled-green-100px-square-image.html": [ @@ -493504,6 +507595,10 @@ "4e0148e2484a2bb979af76a5015aa25db5e2cc6d", "support" ], + "css/css-grid-1/grid-items/support/500x500-green.png": [ + "8d02cbc578a3704611aeacf28a534f3983851060", + "support" + ], "css/css-grid-1/grid-items/support/50x100-green.png": [ "2995c59ce9aad40a9303380fc9dcc644e38bdc68", "support" @@ -493524,108 +507619,108 @@ "7ab628056a02368bf958038106c871318e5c56a0", "reftest" ], - "css/css-grid-1/grid-model/grid-computed-value-display-floated-items-001.xht": [ - "5001197425660addc6c7bb183fce433611a4e35b", + "css/css-grid-1/grid-model/grid-computed-value-display-floated-items-001.html": [ + "f94336e80a72225b05970dec330508c33445c87a", "testharness" ], - "css/css-grid-1/grid-model/grid-display-grid-001.xht": [ - "ac54b0cf3af4a206d3054d6c9a3cb1def95ddacc", + "css/css-grid-1/grid-model/grid-display-grid-001.html": [ + "4eb94a6ac52aec622d55911c68677263d9533246", "reftest" ], - "css/css-grid-1/grid-model/grid-display-inline-grid-001.xht": [ - "5b44e1adf29a44e4b5f063ee8b23e6a70f7800e2", + "css/css-grid-1/grid-model/grid-display-inline-grid-001.html": [ + "c3f036264b0a562a1f5217cdc6afb7b673563d48", "reftest" ], - "css/css-grid-1/grid-model/grid-first-letter-001.xht": [ - "675094461196079f858623fae5d4c309865014d3", + "css/css-grid-1/grid-model/grid-first-letter-001.html": [ + "6f8468bcdda770d2c51763dc03965cb9615c878e", "reftest" ], - "css/css-grid-1/grid-model/grid-first-letter-002.xht": [ - "5324e405d33114b9b3dd08af1ed9a7f7837210d5", + "css/css-grid-1/grid-model/grid-first-letter-002.html": [ + "d00fd71e71b6b9659abe8693a466c5e7d53ef666", "reftest" ], - "css/css-grid-1/grid-model/grid-first-letter-003.xht": [ - "70b527aa6c628f7b703ea8513edc83bab1b53313", + "css/css-grid-1/grid-model/grid-first-letter-003.html": [ + "cbd0117476a434bce6ae2ade65fe7cb11d55a429", "reftest" ], - "css/css-grid-1/grid-model/grid-first-line-001.xht": [ - "e47a0f935b4eb3a58bf1bb82536fb27294a885ca", + "css/css-grid-1/grid-model/grid-first-line-001.html": [ + "d9dd7d91b85dc25fe2e90f0ea87dbbda621fef64", "reftest" ], - "css/css-grid-1/grid-model/grid-first-line-002.xht": [ - "058897dce82af6c8572fed06c312448ea7ebdab4", + "css/css-grid-1/grid-model/grid-first-line-002.html": [ + "1abce3b0c27a087cbbff2cc7c9d805312526d767", "reftest" ], - "css/css-grid-1/grid-model/grid-first-line-003.xht": [ - "b1da8a49784c98a62e2875c1089d385678eb6b78", + "css/css-grid-1/grid-model/grid-first-line-003.html": [ + "749495dded979e468440dbd8bbfca5719bf15d19", "reftest" ], - "css/css-grid-1/grid-model/grid-float-001.xht": [ - "cf2ccfce2f4b94a23840b35353303c1a59b40a21", + "css/css-grid-1/grid-model/grid-float-001.html": [ + "c15914a88c9232af7a01218f986b85dbd3af2493", "reftest" ], - "css/css-grid-1/grid-model/grid-floats-no-intrude-001.xht": [ - "c00d3006a15b1df0ac4a8ad400bcb840db89f21a", + "css/css-grid-1/grid-model/grid-floats-no-intrude-001.html": [ + "46c9293d7b43f9b99f4424bd2ac70094f482cf72", "reftest" ], - "css/css-grid-1/grid-model/grid-inline-first-letter-001.xht": [ - "897695fa5c3fe2b9b4af8b5f1ca18f51893937af", + "css/css-grid-1/grid-model/grid-inline-first-letter-001.html": [ + "c22757afb439f1aca70fc04c439658ebc4c7d038", "reftest" ], - "css/css-grid-1/grid-model/grid-inline-first-letter-002.xht": [ - "73c4288813970a5f8859026f0ca750a7d7346262", + "css/css-grid-1/grid-model/grid-inline-first-letter-002.html": [ + "69dbf3e6878ec5a8c2752fc79544453ba6ee8887", "reftest" ], - "css/css-grid-1/grid-model/grid-inline-first-letter-003.xht": [ - "91dc51a5ea19d97e3d892b340501a31532e17676", + "css/css-grid-1/grid-model/grid-inline-first-letter-003.html": [ + "a1330a4ff999f6e362c6b929ecd4526e557b656d", "reftest" ], - "css/css-grid-1/grid-model/grid-inline-first-line-001.xht": [ - "258c3ee28469ec3a0972ff2c0be8f2ba9064e1cb", + "css/css-grid-1/grid-model/grid-inline-first-line-001.html": [ + "1c6d4a2c914d261ffdb5ec8f80210ded771f4547", "reftest" ], - "css/css-grid-1/grid-model/grid-inline-first-line-002.xht": [ - "94fb80196d840b099440514609cbdaf86f2026ae", + "css/css-grid-1/grid-model/grid-inline-first-line-002.html": [ + "75dcea5698371d0953b84bb61ddbe2e09e17773e", "reftest" ], - "css/css-grid-1/grid-model/grid-inline-first-line-003.xht": [ - "df70ed3abe2f5a39b007afb4db144ac2598add96", + "css/css-grid-1/grid-model/grid-inline-first-line-003.html": [ + "2a51828348dbe609ecccc6f9d7c7ff2841afbcd2", "reftest" ], - "css/css-grid-1/grid-model/grid-inline-float-001.xht": [ - "288da7a0e9d65c135ca7d13bc0908724d33ebc98", + "css/css-grid-1/grid-model/grid-inline-float-001.html": [ + "88afa335e96a9c4982911bb2397463ce52546204", "reftest" ], - "css/css-grid-1/grid-model/grid-inline-floats-no-intrude-001.xht": [ - "61871123f661be9830357283719611fb14983861", + "css/css-grid-1/grid-model/grid-inline-floats-no-intrude-001.html": [ + "d6264394299af2bcf166d6e780686702b02e8474", "reftest" ], - "css/css-grid-1/grid-model/grid-inline-margins-no-collapse-001.xht": [ - "80250ba3993e28b79bb2dc5b75c6d60c09ee58a4", + "css/css-grid-1/grid-model/grid-inline-margins-no-collapse-001.html": [ + "9eb03818de6eb30a0051bfddb1c48934e219f34b", "reftest" ], - "css/css-grid-1/grid-model/grid-inline-multicol-001.xht": [ - "3c665eb19da2722966bbe1f8c81f5f9ae7d654c5", + "css/css-grid-1/grid-model/grid-inline-multicol-001.html": [ + "3f7fb7e0caef47864f500169523906ca084c31f6", "reftest" ], - "css/css-grid-1/grid-model/grid-inline-vertical-align-001.xht": [ - "bfa31edaaff6da3bb83ebc3e3c08eac3acdbaab3", + "css/css-grid-1/grid-model/grid-inline-vertical-align-001.html": [ + "2075376b219560fbf9b9e6c3cb125ba2d066e966", "reftest" ], - "css/css-grid-1/grid-model/grid-margins-no-collapse-001.xht": [ - "29a5ce03ddd7cdcc3783336ba889b9cb5f4d82b8", + "css/css-grid-1/grid-model/grid-margins-no-collapse-001.html": [ + "f68bfb76a8158d9bd8c9e3ef2e8aab11401b0360", "reftest" ], - "css/css-grid-1/grid-model/grid-multicol-001.xht": [ - "05d2a5bfa6b1ad04cc4b5f0b7a116d30f3f14b4d", + "css/css-grid-1/grid-model/grid-multicol-001.html": [ + "0d747de6f1a63b0d333d88f6c45464efd72374c3", "reftest" ], - "css/css-grid-1/grid-model/grid-support-display-001.xht": [ - "13eaf47b304e1f0e64453e740b5865872f2e514f", + "css/css-grid-1/grid-model/grid-support-display-001.html": [ + "d415bbeb9838b4f0b3714ea347e31c35b263e41b", "testharness" ], - "css/css-grid-1/grid-model/grid-vertical-align-001.xht": [ - "35fdd531a1ce1db89b542cdc6ff77454749ec37d", + "css/css-grid-1/grid-model/grid-vertical-align-001.html": [ + "adfa657da1bb65a313894a8b5010a62d7c629c34", "reftest" ], "css/css-grid-1/implicit-grids/grid-support-grid-auto-columns-rows-001.html": [ @@ -493668,16 +507763,16 @@ "b708c549640d2f0030e53ba884afb9d40c587049", "support" ], - "css/css-grid-1/reference/grid-2x2-blue-yellow-lime-magenta.xht": [ - "f482a8e7b066201b02846ca5f584bf2058ae4b28", + "css/css-grid-1/reference/grid-2x2-blue-yellow-lime-magenta.html": [ + "a457a82d10d1cc8f2576b6732e68a7854737f63a", "support" ], - "css/css-grid-1/reference/grid-filled-blue-yellow-green-overlapped-100px-squares.xht": [ - "a67f519847a86a8dc4a625d8e5f884b7d89dac7c", + "css/css-grid-1/reference/grid-filled-blue-yellow-green-overlapped-100px-squares.html": [ + "7c6ea02f3a101c8e20a3a57c158da85a1ed2842c", "support" ], - "css/css-grid-1/reference/grid-first-letter-green-margin-no-collapse-ref.xht": [ - "5fe07c88fb49444dca5e5f39a3b9a4cce8b3f7dd", + "css/css-grid-1/reference/grid-first-letter-green-margin-no-collapse-ref.html": [ + "7ee5acd8f5635a3e8e6bc54d7fc420c6275b2b02", "support" ], "css/css-grid-1/reference/grid-layout-auto-tracks-ref.html": [ @@ -493704,8 +507799,12 @@ "ff487f266aa067949899506059e19d4b8fbf429c", "support" ], - "css/css-grid-1/reference/grid-text-green-margin-no-collapse-ref.xht": [ - "dff3ac6f63d3adf9646a1dc48f54385064131ac7", + "css/css-grid-1/reference/grid-text-green-margin-no-collapse-ref.html": [ + "feb53485e24aeaf9a5f27be5e42cc4a6fc5b8df0", + "support" + ], + "css/css-grid-1/support/check-layout-th.js": [ + "a9d8444db24ab38518f07a965a8a537cc6add437", "support" ], "css/css-grid-1/test-plan/index.html": [ @@ -493756,6 +507855,14 @@ "4df2c7e3981c94f0f18d5d22a4f5f97a1c834a0f", "reftest" ], + "css/css-images-3/gradients-with-border-ref.html": [ + "1646e30542dfab7813e663bb75fa51e35195aa8a", + "support" + ], + "css/css-images-3/gradients-with-border.html": [ + "a4ed2b29eef39f7ed54add4ab45807665022f5b8", + "reftest" + ], "css/css-images-3/image-fit-001.xht": [ "868d9469f57e6013a024efa5e04ef2455d97296e", "visual" @@ -496340,6 +510447,110 @@ "078e1dd6dd61d36cec239ed75d02051f61fe60a5", "support" ], + "css/css-position-3/position-sticky-bottom-ref.html": [ + "726d6e927d84669e9355701ccd948349d377e6fd", + "support" + ], + "css/css-position-3/position-sticky-bottom.html": [ + "2a908e60a635dbf765987c0f93d0f33c8ea85de6", + "reftest" + ], + "css/css-position-3/position-sticky-get-bounding-client-rect.html": [ + "77da4ac9e0eea6433c4fa890cd4a2151f46c35a3", + "testharness" + ], + "css/css-position-3/position-sticky-left-ref.html": [ + "9de7a8ba6019395d729b32e514cc3bd9fee25d2b", + "support" + ], + "css/css-position-3/position-sticky-left.html": [ + "5151bca08dff652ea728cb8bccbb6b7c6d364dd8", + "reftest" + ], + "css/css-position-3/position-sticky-parsing.html": [ + "224bc984bc6eb4a55931461cf7e51f7b04d219f4", + "testharness" + ], + "css/css-position-3/position-sticky-right-ref.html": [ + "9a4a11b22cb0ea13f38a7dded8469f4848550ed4", + "support" + ], + "css/css-position-3/position-sticky-right.html": [ + "f79c0e3e99085e483652950b141fe15c3c4d01d8", + "reftest" + ], + "css/css-position-3/position-sticky-table-tfoot-bottom-ref.html": [ + "b902bec7e12fd6d9cad02c61f332a44f5818f8ee", + "support" + ], + "css/css-position-3/position-sticky-table-tfoot-bottom.html": [ + "4caf24ad5f783119598d52b40425ae3433b61da6", + "reftest" + ], + "css/css-position-3/position-sticky-table-th-bottom-ref.html": [ + "14d74f652a67cad449bd7ef75ed18bd906ba3bf0", + "support" + ], + "css/css-position-3/position-sticky-table-th-bottom.html": [ + "84df11e668ada7f89586b2b82774f3f43e07457c", + "reftest" + ], + "css/css-position-3/position-sticky-table-th-left-ref.html": [ + "a9057263cf68862de453cf857961ece6003eb589", + "support" + ], + "css/css-position-3/position-sticky-table-th-left.html": [ + "e58662697cbf38f24c38562417864ffa38a312ee", + "reftest" + ], + "css/css-position-3/position-sticky-table-th-right-ref.html": [ + "8d42e0ff2920782dbfbd060b23817e75125dfb5e", + "support" + ], + "css/css-position-3/position-sticky-table-th-right.html": [ + "6ea7a6d2e456022d3ebfb91869f751013e27991d", + "reftest" + ], + "css/css-position-3/position-sticky-table-th-top-ref.html": [ + "b30c817f263e6e7b695508983952a46eb32494f9", + "support" + ], + "css/css-position-3/position-sticky-table-th-top.html": [ + "2c8ba01d6ac81c8ddeb45a256a8be920e362b149", + "reftest" + ], + "css/css-position-3/position-sticky-table-thead-top-ref.html": [ + "a2b03215ddc3aed6bc81ed678f6339d72132d4df", + "support" + ], + "css/css-position-3/position-sticky-table-thead-top.html": [ + "2c3d4dd8028d7d79f74aa1460c57f10d087a45f0", + "reftest" + ], + "css/css-position-3/position-sticky-table-tr-bottom-ref.html": [ + "77fcc16040cff06c53f18cfe96296f495b752c18", + "support" + ], + "css/css-position-3/position-sticky-table-tr-bottom.html": [ + "f66365f4ceed9072bf25b98ecc36e49c89625b8b", + "reftest" + ], + "css/css-position-3/position-sticky-table-tr-top-ref.html": [ + "8a54752c532080b652ae5ffb384b34ad2c8d8cb4", + "support" + ], + "css/css-position-3/position-sticky-table-tr-top.html": [ + "7a030d17358067b78c879bf17171b60d1dc3acd9", + "reftest" + ], + "css/css-position-3/position-sticky-top-ref.html": [ + "e5a05c21494a2e2923d1ed37050ec75db7ab55cd", + "support" + ], + "css/css-position-3/position-sticky-top.html": [ + "30c0c00c6313a747b51c8b6d4f1301056af56560", + "reftest" + ], "css/css-pseudo-4/OWNERS": [ "e196548942a4d77448f734235b3456e2a830a5a7", "support" @@ -498548,6 +512759,10 @@ "950840eb2f4e22a4777a0dbc1a66f6f8461914ef", "reftest" ], + "css/css-scoping-1/css-scoping-shadow-host-namespace.html": [ + "629d0d70c08938c47265cfbe2491a3a1390112d7", + "reftest" + ], "css/css-scoping-1/css-scoping-shadow-host-rule.html": [ "b37a0c87400f50feaa44718a1e16f298500bcc83", "reftest" @@ -499485,7 +513700,7 @@ "testharness" ], "css/css-shapes-1/shape-outside/values/support/parsing-utils.js": [ - "7d903871fe761f90ac8df30094b36f2c66ccb1d3", + "52b60f43828972af1ad3f3f0cb131881f5ef65d7", "support" ], "css/css-shapes-1/spec-examples/reference/shape-outside-001-ref.html": [ @@ -500185,19 +514400,19 @@ "support" ], "css/css-tables-3/floats/floats-wrap-bfc-006b-ref.xht": [ - "fc209907d37220199c303043d940cf8dd64536bd", + "22f5ec058d34dc57c010bca8a301eaa8f7901880", "support" ], "css/css-tables-3/floats/floats-wrap-bfc-006b.xht": [ - "ebe6a0dad0d73c1b70c710fdd072492b3424554a", + "04189b6b9f5b3399757178c42ae8ee66ab7a2053", "reftest" ], "css/css-tables-3/floats/floats-wrap-bfc-006c-ref.xht": [ - "9161da62d742c29e26e7ac1e4a94da87716cc670", + "a98a786227b3c406ed784a4a1c5d847efdacfeff", "support" ], "css/css-tables-3/floats/floats-wrap-bfc-006c.xht": [ - "16d8ead5fb73f463cd204321b3601d274731c853", + "2e974c516d48ec57de1d7ccce28d9cced148cadd", "reftest" ], "css/css-text-3/OWNERS": [ @@ -500237,3995 +514452,3995 @@ "support" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-001.html": [ - "39397038d79c8b98ce44b0a2d4a7bf8663cb1cc4", - "manual" + "b08dfce276ccafb057c793d69c25cf0caff332cc", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-002.html": [ - "e151e2c1a23bb242a3419ab182b92fabe1046d68", - "manual" + "c75e0a1c21ceec5994e9d6e5ac7b3fb50b9cc1eb", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-003.html": [ - "cad5fdb1b3f6e3b7621863888d2f0323ceaabae5", - "manual" + "4fed7f7e91c3e630abb34a0be48ddd7a2e182bf0", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-004.html": [ - "650afa18fce8e2e0a704660c94793d295a86f729", - "manual" + "7051df94f997e9a82e0fa6bcc356c3b5ca95433b", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-005.html": [ - "e531963201d9fe605ecc45711f21171f3ee22bf6", - "manual" + "8fe108a0a8f7f6c856fb34422c46b8fd2adf4611", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-006.html": [ - "c3248e6b83d63872319d24c5126978fef531712b", - "manual" + "164659ac266e3a8f7b52056970104fedf7e7bcca", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-007.html": [ - "7c14613378d25da925e74d1ba7a66fda36aac0f3", - "manual" + "4987f40b7a6f34f4a5621e00354280762ef734df", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-008.html": [ - "f5a7a235d5fb8530aa87c4f0eec51580bf413e88", - "manual" + "a61059b0b1c8c7045ac2176d9df66ae71b384d71", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-009.html": [ - "cf7c042029e179dad2ea938d69bb4771ec4edd92", - "manual" + "33b16193610abb101d9c4b89a24c2ed42c8e2cc5", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-010.html": [ - "970ba2a28d4c01f259bd99c64b5d25e4f7d89118", - "manual" + "c9743d0a1b40759315141482fbac94a81df022f6", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-011.html": [ - "c6c10fb316d53fc976431952d9b9e5c2bdf6f01e", - "manual" + "999606a9c6db3b901be8f3234e5f1ad33513031f", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-012.html": [ - "bf3492123513ebaedd6e115902c37c3b7270c4e2", - "manual" + "310ce1afddd524c4ff3c53f8e3f086b47029af1a", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-014.html": [ - "1db56e0756062c37d633ed1113c1cca19858b6c9", - "manual" + "d713f5c002dbb7e1b7845caf9ea1eadf192a8950", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-015.html": [ - "ce9169cf6f4efe13f7888d629855169e043bd9f5", - "manual" + "ca340c08f4be38e44095dff8c0c410d6f4c5f581", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-016.html": [ - "de8ab1d0c90aba51ece67a3b5beb68fdaf5df283", - "manual" + "d2b1f4b45972c7b36902aa9d4ef63050ddacaf50", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-017.html": [ - "6d4469b10ec7d72ebe1253b171556c5c13f2190e", - "manual" + "e757506aa550f4e0e1123ef7439357ece6415214", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-018.html": [ - "92b220994d888a2a3f84210fd3c89802ce5cf784", - "manual" + "2a291a883a2857f8161423170dd0006766990efd", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-019.html": [ - "d8ba87e5e2931b12a6712ce7c37f6f1a93fc117c", - "manual" + "88c160a8904661f177fc334e5d5317c503ebae6c", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-020.html": [ - "6b5b7c5216863c35bb243bb9ca3ede2cc6166e17", - "manual" + "1ad1ad3e11e8816bc6723412d827dac8be05f242", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-021.html": [ - "4fc2e261b8906c57e7f5ee3bf53e6322b3652a79", - "manual" + "5ba051a9d569bf2216ddbd7d69293f8c01c83aaa", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-022.html": [ - "9df8db7e635bf210b7ed96b76067f5faf3fac81b", - "manual" + "dbba6c37fc1308bc275174a1bdd3c91ab81ea049", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-023.html": [ - "110f3f12f8a1aca5a3f0d8db206a192dd2890bd3", - "manual" + "a6f07d3b2ba58d1547cd609ca51cc2e333af6e3a", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-024.html": [ - "993990b829a0a6c8e73c80bbdb98e68c3f803d55", - "manual" + "4626e7324cd600e4ccf9b67d496136e863e05fda", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-025.html": [ - "103f652cfd1c212df19fa01421d93254808a98ec", - "manual" + "6213dcc3595f12cbfa170cbfa3ed128dd810af3a", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-026.html": [ - "09af18a851264992ab4901e94ae98be2df5e72d6", - "manual" + "d3a324ae02b0a23dd73d042212c96491cef47090", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-030.html": [ - "f6492aec46e70ac31e92ced362242cab01df0e3a", - "manual" + "81626c0ea8d8ad104bcee899a11151234bcf94ce", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-031.html": [ - "368bdb29f9c687887860eeb36e88ddcacfcbe9ca", - "manual" + "5f6cb2ac40c06c6320ad6fb4e9d43d50b570172a", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-032.html": [ - "1f278c3242714b5662c404c97f0332d1b751f5d2", - "manual" + "e9f0ec3155e47d975d68a0192cb0027a1eef08d0", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-033.html": [ - "4eedfc2d45ea0ba05562aad119d6af545c988218", - "manual" + "9b3ef0c0bb8659b79bd248f6e1f9b5a0377ce582", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-034.html": [ - "a13d0a47dc1a96dbf01d6f622f6f82917afed7f1", - "manual" + "dcb1e94ba203bfef3890840c4d3449e252910f07", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-035.html": [ - "60170c2d38a55ee3b0da47d66e0ab79f473531b9", - "manual" + "09d94f3d007d209531933dfe1f265d7692f5ed8e", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-036.html": [ - "a584bf980e82fccbe8b3fcdd8d08ce1c1806e65a", - "manual" + "05add54b3fa38b87d91c5069d7f001105fb37229", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-037.html": [ - "aa551b7f10ada08e8ce5f389d82a24fd0c747478", - "manual" + "b1b65b1292919061c5aaeb8d98da368b32d0950e", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-038.html": [ - "78e7423f002e072ba34b025754c8b6dbbcca1658", - "manual" + "d66bfbad80d972661533c8928f578989be5104b0", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-039.html": [ - "cebcee681572376db28f500b96278209206b1e2f", - "manual" + "a2cb38f1b7b3795dcba43b5deaedbd82f3311a59", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-040.html": [ - "ff8626f8e4b946efa268ccaeb08db4247d7cd85d", - "manual" + "94e683bd10c5981318537e81cda6c077771e6fec", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-041.html": [ - "97d12748d2c713389370c0f829e8b0994ec71092", - "manual" + "260e9cee4bea2f887b778685ee2dfd5ed2e5458b", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-042.html": [ - "24164b3e6c4a220eac9fa2dad75e52dc385dea33", - "manual" + "e3223bd845b7d00d8304a85a74ef0f43b33deb74", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-043.html": [ - "967ceaab7019d769335ec2675cdf7102da71621a", - "manual" + "6df477c49a403f993873e8fc7b099595aae0fbfa", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-044.html": [ - "055b10c0358ffb4e7518660ff0e3a9bee2d52d4e", - "manual" + "d86c09c8fa7f9f9a397153d3d0dfd9a2fc1907b9", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-045.html": [ - "7dcc0497a2c71fc40496ddcea5f6af7ba3f75e93", - "manual" + "f8eae9294317d36f1be489d117d95152103cb849", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-046.html": [ - "20f2d2dcca956bae1b41b126e26136d56274823b", - "manual" + "33b32612d57d35451a5fecfb9ac9ee5e3602217e", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-047.html": [ - "cdf8b826169cfe9db0b9dddeefd6e3d059a8de51", - "manual" + "838eef2785a4b8accf7498aaf26f18e060b2fbe7", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-048.html": [ - "c0d905e5213909bc10d8c8e6d8273543bffc76ad", - "manual" + "bb759187e838d44c2ca998407633506ccc7e135a", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-049.html": [ - "223445f0c44ab27d23e0b7e287950071aeebae1f", - "manual" + "a06e5fb027e01e42bb861620ab39b696b6a9da9c", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-050.html": [ - "2d058f41a87c3de0b4d0e79ec7a2dff428573410", - "manual" + "2699c715f1b93f067e96625e8217f7ac1bd3e0d1", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-051.html": [ - "f7ce8995798fa446171fec37b12e6f37e952865d", - "manual" + "5a055235e4eb9bc09d886b5da4f38067586aab24", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-052.html": [ - "93f4501fe04102a03acf894379d70a31cd1d49d4", - "manual" + "ea006133a6b3bcd2d3bf5777295daa0ce8b5f21b", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-060.html": [ - "0b22c8f5b4b7d7f7f9d8f335bdd68dfe1aa4b227", - "manual" + "e80a73ba2c1da79a86fccd5730ff2765255696c0", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-061.html": [ - "aadb55dc9becde71dde0afe3353a31065f17d78d", - "manual" + "fa4130ea4d14a832f8ec510e30aa6828f2309dc0", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-062.html": [ - "9e895690963220e0662323710a8ce72279b93c8c", - "manual" + "83e20767e402fa6d6ff850773aee77746cdd35ff", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-063.html": [ - "de789a494297168c684142ce4e41e752e43ae500", - "manual" + "2c54691c136f2c6b263d37a290b39515f791e02b", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-064.html": [ - "a6439eaf6292ef5d948db9d91281413219e2605b", - "manual" + "05e3953244dad5dbb76b3198c11b3d1aa937e2cb", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-065.html": [ - "c596880f129e9f458c14ee6198abd4918b2925a1", - "manual" + "8ec5479586b3d5e395f17af332c3d57592f87809", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-066.html": [ - "7c91c367f4f928664973dec89f5887c1c885bb9c", - "manual" + "ef212b342159374625d23e1f182865442283daa6", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-067.html": [ - "1b99a171d7647c2287b724d33ee01400dbe869b5", - "manual" + "73b1b827c15e00064454f0d7c3c12ced30fcf4f8", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-068.html": [ - "534b8733c07e6a3051dd67b758b22ac253be40f0", - "manual" + "92c8865faf0104230090202cc9c5bbe09437d3e9", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-069.html": [ - "6b5598fcf13130d2a89a7b124e45c6daa4795a41", - "manual" + "77dc2c696a1311d4908ba0cdf37e78af2d4bb352", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-070.html": [ - "9e5604483af3e747113e6b7b12ade715cea54c02", - "manual" + "1ddd7c2283754ac1068e70a2a684fa4c9d4e1fe7", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-071.html": [ - "2fd7d36ce8ca0c5100b554a09922005a432248b2", - "manual" + "e409cc7218eb6a55e7c714d70ee7cfd6bd0775d9", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-072.html": [ - "3b9f0f3efb482f1c11658bed30002350e1821374", - "manual" + "bef75bb401fd879fa6108ecba0ed496d6a7d21bc", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-073.html": [ - "6f006f4ca20fffd930f686a4dc8071272645ebcd", - "manual" + "3aade6141255f527261512a7f5ab7dd7ac921efd", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-074.html": [ - "530d7da0aa2a65f78bb180126d0c95e3bc5e1512", - "manual" + "325c0cdc939dd9c5acdb97aefdc0e46c37fb16d7", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-075.html": [ - "6d12dcec27fca8f7a7d647854f509f77a419eb65", - "manual" + "6aeb687508eff13c16946b74bcc5d71d5a74b0d5", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-076.html": [ - "47326adccc0f61fb71c75fbba261b737f362c600", - "manual" + "e5b8321211567c366f799af6d0aa7aaf769d37d6", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-077.html": [ - "c946eb3af4746e90159a9a19ebdee74fc04855f7", - "manual" + "f31ada4276b9409ac42a3414039f17f02e1d2c38", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-078.html": [ - "dc1a8c6b3ea4010f2d9394e0833d9db7c8b4d095", - "manual" + "c770a96fff1aaf52d30e21b9686200645a0069bd", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-080.html": [ - "8c29d23bc6ad7da006984fb4b39c6cbec2002679", - "manual" + "b29ed7159727f6f47a4981fe94ad918e15284913", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-081.html": [ - "aa27120c4d8b20d913458f14a287f931e3c5a5cb", - "manual" + "407d8ac36736df2c19b2ca95f1919115ce677a95", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-082.html": [ - "c96ce500d69b65b0923e8d7bd969dc629278a356", - "manual" + "18b7eb554fb4bbbed84768038ba893366e381246", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-083.html": [ - "e93a01b3a83ccff9a3d395928b4b8f6056de4159", - "manual" + "68b4faf782e1de774d8f15ae69716489d8038116", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-084.html": [ - "7b5125fc31b0bab5c88a422ce3dfd49072713c56", - "manual" + "8f05fb4939eb022ea604e69186cc6f16f50fc022", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-085.html": [ - "2b39e819e7ea0cdaf6aae7f75ab2fadf3a02ad94", - "manual" + "2f4302e9ce978a5d6afcf7aacc460dc09ca84b0d", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-086.html": [ - "2b39e819e7ea0cdaf6aae7f75ab2fadf3a02ad94", - "manual" + "2f4302e9ce978a5d6afcf7aacc460dc09ca84b0d", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-090.html": [ - "bec12b52c6d5057e6fd73ba2fe19d5231c387bdf", - "manual" + "400eecb924b35448061fc52d772f0c7ac53c3c24", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-091.html": [ - "ada8afee734512431550cd26e0338761904f859a", - "manual" + "3dc5170109314443ec040cb0b4f18f22e1defbaa", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-092.html": [ - "f1648e83b2ea70d61bc0baf60e46cf8e87daff01", - "manual" + "d5f92c11abba07c4e003a0160c5a6cfb4e84f321", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-093.html": [ - "907b656fc27f2ebf44639a73c511da3975b3923a", - "manual" + "d224b813b5392eded310965dbf0b366757297db6", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-094.html": [ - "93420f9fc62d9fca2c08a56014b66f00125f44a9", - "manual" + "229e045b63a666520441161d64495c14c0d0eea4", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-095.html": [ - "046930aa427bc9bd1e3701b8aef5ab2c483e8b6b", - "manual" + "812f109e9b7ae01a3ec6c66621368f8588060357", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-096.html": [ - "c5d6ba88864dd32e31b66605bc5be5260a64219c", - "manual" + "a4fba8d9d8d95588e52cf79c3685b7c63ad46913", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-097.html": [ - "c706598912af83e1c16e098a713fe7079fcc0d28", - "manual" + "a039eb8ee678e7f2d0841a6ae6f135dae99e5ce5", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-098.html": [ - "04c6f404d79180012dfea948c27b22139ed0f77d", - "manual" + "0d33be86e4d1093f171c7ea647be81ca1f8e84f9", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-099.html": [ - "7d3a143f83d2bec16f61fe1e90e14cdaf555f461", - "manual" + "a0be4e6cff041384955a7f2b3a69289c3421ba93", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-100.html": [ - "7d3a143f83d2bec16f61fe1e90e14cdaf555f461", - "manual" + "a0be4e6cff041384955a7f2b3a69289c3421ba93", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-101.html": [ - "00487d043b3fb9cb89468822087a252e9da9844e", - "manual" + "dd908924032c423db468d9bd638a1285d9defc87", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-102.html": [ - "0a9b426f3a0cc7ed771b19365d204f9e9ed21132", - "manual" + "d2282fc50b8f4b40030fac1031db9403d9707589", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-103.html": [ - "21bd1f78dec14c4b1e921433f7a855c524397e65", - "manual" + "67e3c7f681117736578a2d47349b0fbd65e98589", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-104.html": [ - "43743242249d635d2fee5c5820064331a97dc072", - "manual" + "fdf7a9f05873bf56e8c5561cb12ea98f336351e7", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-105.html": [ - "b21a03d09026790ef7e85a57f0fac05ac24ff63a", - "manual" + "74916aa9130b678eda368d52f85de6325026cdfb", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-106.html": [ - "44db7418ba173edd8b55c518f06536dcaeeceed1", - "manual" + "868fe0847ef58acfd63eec48dd0aedc108c67056", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-107.html": [ - "18ceac74213f3a13041ddf4b3e52e25850639c60", - "manual" + "95a68dc35243acbc5369d82b6e1fcdd6a30b24e0", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-108.html": [ - "1678db7e511098453e78d396965a5bfa0a19270f", - "manual" + "15d5e2e675debbc90881eeb50a0791524497dd30", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-109.html": [ - "633b0f062cd70a0da422e9b8ac5ccb1b820c2ed3", - "manual" + "d6b7c1fa011b6f2f9805e9d777c70f3dfd07ae04", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-110.html": [ - "cd5a960eec17fa7745f0868a895e1d47249910b4", - "manual" + "2707d2c60be347f54588665578b8f6c1b5e34d6d", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-111.html": [ - "d3c109e9db668da47a2d6bca313269fe76695805", - "manual" + "cd50a02b72c5af0749b68a8277331209f7856700", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-112.html": [ - "334fb9870f660cdf4732f19d9bc2392426092fe8", - "manual" + "769482f21beafa8ceb198f37cd3af1840a602f21", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-113.html": [ - "399b18137f7539d1a0d285d984683dcaaa90f067", - "manual" + "9156315c815cb2dbcbd93c476e53ba835a584b06", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-114.html": [ - "4d4ecad1b0273615e8b736b0fa242c3a9fb117e1", - "manual" + "faa0c266a8b86495b48982705596421d3fb64916", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-115.html": [ - "00d608fa47cd675f59e6ec9692e58d2103991e07", - "manual" + "f8d3cce2072e03c65e4721e997bb3b52679a804d", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-116.html": [ - "080cb1e25b6d54c25b44bf26ec40430d6520182d", - "manual" + "52d7a0cac3727ff991467f59ed0ef8257caaa27f", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-117.html": [ - "dc6429b81515a36a95ad5baa766bbbe2278d9129", - "manual" + "7c73f984399193d46e1a4a160ecd3a615d2e6c3a", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-118.html": [ - "b7dd8b8209067456def28d6ed476b81c27a30490", - "manual" + "dfed44bde31684db9d9061abba2a217d2a2a77dd", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-120.html": [ - "4fdeed270eb4411e4742d7853d2e18bf0671c029", - "manual" + "83900401c2f34519ee26ba4ff95db7ff752b0372", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-121.html": [ - "f0dea3b93f6e1cf1cdd32401cff1305c0c40d9d9", - "manual" + "81ba119e77dc62d8a2367c079404ab3aad6b52fa", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-122.html": [ - "41e25a027d6b6c61e9f8f2eb54eabfa7ef5368eb", - "manual" + "2babc563a3fc0521479e701e57c73ac254c5b4b2", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-123.html": [ - "88cee443bb3a6efe158dfb1952b8900dfb555d70", - "manual" + "44af7ad09e6d98e899a8c17eae66eb1d134d22bb", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-124.html": [ - "9807de7ce6a69ea39212615c1b23e97ef6166d23", - "manual" + "3a53c60e565c850e10cfdac4f8d6de3c09f878c2", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-125.html": [ - "698b788e53688094cf66c730c6212180d776dafd", - "manual" + "529bf8781b1b1e7be4241f67ba786fa0ad2920f5", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-126.html": [ - "4dff9e240e2d9bf71aa653614b3683f7757d85d0", - "manual" + "03d5bbc4e6c673c8216d7f0172c1e496f1989fa5", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-127.html": [ - "ec4493e5a3a009a6718c6fc75e19d87a14e31c36", - "manual" + "23a8a2b2c26a771c468538ad2712431f615ff81b", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-128.html": [ - "7f23319b1c2497677503e3f3a47a39ae6c6d180f", - "manual" + "4d174a2e604991d7cb93549280bd791a5ca32684", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-130.html": [ - "5a0c44aa1ddda654bd9cec63461786ab60569173", - "manual" + "b70e27d408a3fb7b58549674a37ef5e0c1a00b5d", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-131.html": [ - "210be37ef9964c029a6d53331b49b8523d2000ff", - "manual" + "18af9ae214c2bf01a8b035ce36efe158c7a7a81d", + "testharness" ], "css/css-text-3/i18n/css3-text-line-break-jazh-001.html": [ - "380127ab39a623d580dc129d3c7e067bb5c24b2c", - "manual" + "d1b924a217afb3b7c4ad8a856a13a7881432414f", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-002.html": [ - "dd571f6219f3cf55ea08768ade465ea583fe29b5", - "manual" + "7899cfc65d2dcfcf296aeac4210bfa37e58cd4a0", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-003.html": [ - "c37ca477a9cab4086635fb070bbcd8596b1e304c", - "manual" + "339516c3102af7dce92aed38bf135abeb4274802", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-004.html": [ - "5f147d431fbd3ba795a56bfafbf58f0cef200a17", - "manual" + "af4e4ec4a633199908f425d0d3eb661ea5d6b0ce", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-005.html": [ - "62a17799f523da496ffe4cb10715f9861b0c659e", - "manual" + "8eb16ba7a6b6523d6ef356a095fd64434927e62d", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-006.html": [ - "ee34e277f0a31dd4606a4e026285275b98a9a4da", - "manual" + "2366c1eb61d7d40b8eef172f877d2eeee28a2d70", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-007.html": [ - "d09ad9d46780cc0d8b022ad331c02aae1c46e5a5", - "manual" + "296bd9d8dc7095a76057f5a19b7e2a9f7a084b70", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-008.html": [ - "6a4e619ffdf0fa5e3285ce7db0e5bb9e7666aa6f", - "manual" + "ebdf96e389b71b5e3c611841fb56b83fa699ebb6", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-009.html": [ - "3084e86b503fe7420ed72b0a400142d730637732", - "manual" + "12089c59fe77e2382894ce0b46ce6b0537621130", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-010.html": [ - "b53cf2cb4c8f45fbee09d74d0e06b5519716b526", - "manual" + "99369ce295beb32191f0cbf0b3182d09f99c42f5", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-011.html": [ - "f2b3c3e5ce4a8499c108f11e53420c980b2b744d", - "manual" + "97055befeecc8f22a2ba86984c47fc1cc5271b1f", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-012.html": [ - "1ba96f337c1661be2d8a5e461f7fcd8cd4621ec6", - "manual" + "8a0756e0163ea19e1a006ccadc18fd76df265d94", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-013.html": [ - "9c30e521fc55ba736cc8e707aac5cd9d3c7d273d", - "manual" + "07c32098a5742c98aeb0ff17394cfcb2fc370522", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-014.html": [ - "aa732308e4fb0d14cb0ffcff8089e10f40d0f888", - "manual" + "6771093cba1c78979210e08978d04b07d9c8d1e5", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-015.html": [ - "78442665379443a7bf28e833a5fbf44f6eda1124", - "manual" + "836c8f641ab6af6c969d9eb82cfdd701d53d65a0", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-016.html": [ - "2bfbc927532a0c6a2fabb2274a58850b8a6ac29d", - "manual" + "fa16198608d7e86162f0cdc605421f6f0b245fc0", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-017.html": [ - "4cff60f861331d9fb13905dfb230bf33a33fedb0", - "manual" + "5784f822651484d2d7ee86aced271752ee8900c3", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-018.html": [ - "4794039fa5e9b827d19fdb95e83a8399cbb65670", - "manual" + "1f627c083129e132f9d9bcc920bd0ca5e3c47f3c", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-019.html": [ - "20a51cdd3876b0cbe78044b407f57f7a7808ed32", - "manual" + "104e78d88b518f19d06de0abd021106b08d894b9", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-020.html": [ - "cdfb74d8604322b716abb68f217eba95adf0c89e", - "manual" + "bff87f83ce89b6869fb9c99c4e4abbdc92a7844a", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-021.html": [ - "d318e7ca9603a7c2281e97c0814671812ae339a3", - "manual" + "3dce06d68fd0ebe77bb79274132d0b85cc1b28a8", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-022.html": [ - "469bb7618a147ec5e2d856765c9226ac0cbe0e10", - "manual" + "9583e9f777e8809e7cf854db9526c0500bee7389", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-023.html": [ - "0e06e480fe7f578b3419a8acbb661c9c8b5d5fca", - "manual" + "7ef92021242c8c346ac245a5a0b369e7ce2a7263", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-024.html": [ - "df598ae9192a1e7a0991ecb66333c214cb5e9769", - "manual" + "dbe2cd0086c853ba8cb578e694122accfeb864ae", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-025.html": [ - "5d9c1e7d924bd851dbca6ebe7342dbe5b7a85f5c", - "manual" + "4ac31ff55bb090d60e68e3f9758a240e46b44cd9", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-026.html": [ - "f6b563c2a8ebe4a476b4e40871d541adff369f47", - "manual" + "44848c4b5992fcf04877a00efd214ee9880e12c3", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-027.html": [ - "1b40f4ec4be394e82263b222d63d2d146022128b", - "manual" + "c468a42b7ee894e2e719605b785423dab77cad82", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-028.html": [ - "68531ea40d4486c5e9acecaa58c2bfb88040140d", - "manual" + "306954070af4e7d5e1c807a5292ba63da658e9b2", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-029.html": [ - "d4bb69ad5a27484b9723524fab42881b0fe751a7", - "manual" + "ec1b6b77339937811cdad0c8e2b3d175d97926df", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-030.html": [ - "022ce1f09326d514446bd1967562babb2273534e", - "manual" + "847de92a2f3215bc61b66235c4b86615083f833c", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-031.html": [ - "49cf6aaa23945ad7c0e0e1d94e654988d86492d6", - "manual" + "2a730dccadd5383bd016a0c547d9ad960f7e8168", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-032.html": [ - "3fc4010908e200263526d693644c6ef7da3884bb", - "manual" + "477884bd0bb2f82d8af0b7ec11af33e19ca02038", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-033.html": [ - "7e27260c49cdc889c25f5223edc3ea60c391f5e6", - "manual" + "1c62f5f0f69f52e6e20dba11c975670d878fe432", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-034.html": [ - "ae3c5f8d711417d4e11f16fed1d41ff0522eff73", - "manual" + "2313bff46018bf6d8e00c7950196c129e6607623", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-035.html": [ - "dd3416d66f30dc7524cb970af1d5b791fce9a79f", - "manual" + "ab00ec260fda87cd0fb46f3c182ca5f2923b8ee5", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-036.html": [ - "c4aea7b467c8221049fe3d2c9c93475edeb1feb3", - "manual" + "b9fb1bb40c6e579f2f739c79086b43002ed2d41f", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-037.html": [ - "1ed13b10e1daf44e239040b3bb39446c5ed83e9d", - "manual" + "e228360622fad7b95ee5e23d34344141eedf586c", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-038.html": [ - "b575e13abcb92908661bec2e61a23f6f276222a7", - "manual" + "f0c958a44cbe1873c5b4dabc2f50f01fce238f4e", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-039.html": [ - "7964838feddc7f8b9fabaea01d8b40deb057efa7", - "manual" + "73e8e7c7ba15dc0bdc85de37ceff66807da10c73", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-040.html": [ - "cc5fa9b0dd76ff8cb2e0cbf558f4eaf3a5678994", - "manual" + "dc4dd7957a3be324126a13e151c3b54971938b54", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-041.html": [ - "2e6af0f61acea88e8a8fc7830f61b7817927b4bf", - "manual" + "c8c72052185c3218ddc75e03ab49b531a8156e91", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-042.html": [ - "e74edf79ec1f5cfead1f03e31d20fa85e37ba8ec", - "manual" + "a069fb01c5cfef5b72fdea02ab0f89049cd4d9c3", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-043.html": [ - "28f358c997edd3dc252201e45d804e5fd4af52ff", - "manual" + "2bf28676c1e2de67c695034727473aa6f0683b8e", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-044.html": [ - "06667ea447a249c5c153d580b3e03e3ecaeed701", - "manual" + "a7acbcdfab095e5fd6265a7a74d2508d847c93c9", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-045.html": [ - "dc8bdfdd99032a59eb0b04acc3c2f68aefba2d4e", - "manual" + "a5e9c9c3297e7d84c4061dc0c2afd2a3d357c047", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-046.html": [ - "25e3ba59de5cb35b98188bf3bf8407983949c748", - "manual" + "9fb7e24c4941ce431af25cddf12a0085b52edd6c", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-047.html": [ - "3390222145aad7d8342b2ba38456a501736a1515", - "manual" + "ba5d907c4191c09fef9a73ea2519f9c56586356a", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-048.html": [ - "1e3cb34ebeb4907df6f0b5b15259148536c892cd", - "manual" + "45e28db1a023362f51bee1386e81740af55305f0", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-049.html": [ - "4a9db0379e6a93ed678f54d6010076d871090697", - "manual" + "baa330799254af3c7cad81b6b5e4b251e1ed5b47", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-050.html": [ - "cb27a281a049ac2754b6e6773b826f47df4a60f4", - "manual" + "6f2128097e55b12f2ae5dd225c50b0dc1f80c9f8", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-051.html": [ - "de9b8788f2be98fd518ae24e0d3df23f7eb8a391", - "manual" + "57b6d38f64ea79a847decc3c0e0f9297ee20f564", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-052.html": [ - "09b0078de998a01157adb179de15eac1d9fe649b", - "manual" + "be0d0386c69ec868afe07f075af140f226f77b2b", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-054.html": [ - "a4d8508b1c24182f685ceaab3627bc65eb19b742", - "manual" + "f249b0551761e27b05d30f4fa6f5248371138eb6", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-055.html": [ - "9023bae8095e22dd02bee8f82b8d41d85abeb87c", - "manual" + "9bee54d5cd5b1349e8716a6cfd2e7cae00ccb83a", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-056.html": [ - "e80219ebbe27d3f468450677d359dbcad07c569c", - "manual" + "347d8882eb2c08236f0e596cc408be4d7b24ba1a", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-057.html": [ - "a7599a63035e663346a30e530f6d86e3a15074d4", - "manual" + "9a14927fee59fcf9a4c27550763b207983049c59", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-058.html": [ - "beb6c8302673b0b9110b032619e5f350142067a8", - "manual" + "8db502c3d4c0bb32eed1149b14a0fd7b378678dc", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-059.html": [ - "c84c27c4b496fd119380293271944add8947a750", - "manual" + "441bba685c74200fbf3d7fc39fd07ae24935a4fe", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-060.html": [ - "89a578fe8052260e6dd16b6d6706be164bc41390", - "manual" + "6858db684b5f4337c738864c647c0b1f244acf43", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-101.html": [ - "82260515d9130eb9e1d5be5cebe0495e38976090", - "manual" + "41260161b915c66155f63f613c2e3a31aac5801d", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-102.html": [ - "9c784bd45586f7054f872ba775f45e14dd64dc42", - "manual" + "8d16bfa42392dcd9230226869acd2586295455dc", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-103.html": [ - "da40cd3892ea4488eec6b1298581e2b72e4ab659", - "manual" + "68d6e9ce07c87046c87954e0bb987be80d52f5b1", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-104.html": [ - "57d72be8fd295d03db2a1ecc96403efa518bf09c", - "manual" + "ac40d41cb1bccc177fee867faa45130bae608e4b", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-105.html": [ - "4b9b9f0c405ba613a57d25b99065a9aa1b5eb667", - "manual" + "95c06f201e692ec697c2a9bdc8ebd8b7b679d113", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-106.html": [ - "0317576afcb746e6592698c30f52d7a0fbf0af10", - "manual" + "7d4dfc8f5654a68ca70cb764f79464efce3e9cff", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-107.html": [ - "17e1c30731b85cbf88a124a4652042e969f644d3", - "manual" + "fcf3f56dcb1232c9c8366e0731e9bc4b42d54351", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-108.html": [ - "67b90a89fa35f12027a80c0964619d208ce4e06a", - "manual" + "a4a7308d0c9b3ead3b86b44ba31e592ef46511f0", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-109.html": [ - "809612aa3d0f20677479265fd78ae68117e71da8", - "manual" + "14091dfba4c622ad0493d1f326094de0fdc9ab13", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-110.html": [ - "37e44e0ca516f7c3e46bc915b555ff5ce6226c93", - "manual" + "1c2bf19c025ba84bfca7836a3d176ea4d66979a4", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-111.html": [ - "814e807ed2e8132bedaeb33246ab61c077a649cd", - "manual" + "cb36711d8f7bf008542b78819671fe123a09fedd", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-112.html": [ - "0b072264f4a6cfbb5ad4fccc64f27e0d64ac918f", - "manual" + "0b61ac08932ff58e995848a4d5c35afab9d996aa", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-113.html": [ - "7a367e26cd4103a13747ed563ce66533f63f1e63", - "manual" + "1ee6d8b9a90d82a29a8d6c0e9fe1a192bf5443a6", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-114.html": [ - "596d7f47c3decfdfcacf5da30a317fcd5bbd3f56", - "manual" + "cbeb49169d3535c4ca4a2ca0b27a74f1c53b4158", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-115.html": [ - "e72abe4eb7146645f7e8d3eb13ab0492f86941a5", - "manual" + "3860d9bc3a408753b4c05f73c5231315edc1e75c", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-116.html": [ - "74dc2007fe46322a0a0e08c4936d3a310a0a24a1", - "manual" + "d1de5d3d1811025c4ba96cfbf97a2a581ce92655", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-117.html": [ - "ecd68bf70b70847dc4e5c768490612ac3802d117", - "manual" + "3597373f5900f78a7ab7a637325f4737474db5e2", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-118.html": [ - "1f436a9b6b5090e3eff686de7f9c8a350e7b3fb6", - "manual" + "444cef8f21cd73a1e3a063b7695021ad4db4d997", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-119.html": [ - "322d6c0f1f4cb0b61ebca20b5dbd500bfc486e90", - "manual" + "c6a915646d273a8aa274e13a76dc5c68006f03c7", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-120.html": [ - "41bc0e25e39e7c1f28726e352d08aa2b1e1d33f6", - "manual" + "d37a415bc8a729f5f4ed280aa2e675e103c50bb0", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-121.html": [ - "8b59394a276e4547d890c7df22ab02345b111dd6", - "manual" + "e6a08b8df48f9d39fc5425d14519f2c64fff2aa9", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-122.html": [ - "b7e627c9439721b45ee74c58c9a68918760a56b3", - "manual" + "246a58d1384c930db0903d918947801533984a06", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-123.html": [ - "f2360978f57915baf9dc4aafcd0639dd6de9c00d", - "manual" + "6fe624d6aeeb8165be55244b415b37ec8f5884aa", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-124.html": [ - "d3ed244c832dc9614b1ff2ee9795c693d02b0f85", - "manual" + "ec855f0a3a89a3f990f0f400972375ec4e73e6b4", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-125.html": [ - "973fae6200ee0a5324ff318b6f5c396dafc67d18", - "manual" + "2cb83eb9ed55248d76c3196e6095019212ec9189", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-126.html": [ - "733322a32d1af23961c967136726b43c377f4d81", - "manual" + "9cd2d9ec0bde0724818d25c93d52fc73d115d75d", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-127.html": [ - "215b93f5b33210e3eb73ac9da3d85ccc0139a1c7", - "manual" + "19037d5fafaa3c416a0cf2f32f59c2ca698ab00a", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-128.html": [ - "54a5ec0056b812017c43e3e37223a9ba9fa9fb4b", - "manual" + "8108f29939d94afe05fc20f560169713796ee999", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-129.html": [ - "688fa49d687201affc088f94cb6453005a6fca39", - "manual" + "5d65b5a4e5d9cc914c4b2c14dd4ea497a18c10ff", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-130.html": [ - "aa587e100ff2f801e886dce70d53769dba5288e6", - "manual" + "0dd7e6cfc83fe7552ee51f68cd8df5f0ea0499cc", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-131.html": [ - "5d7c720c28b64e52e9d0421e7639c2f2f553df2e", - "manual" + "0952a96caab13bdbaad595c5da237d047d991113", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-132.html": [ - "452430c49a5b2a3b615a9a0b308d4f98876d5ac0", - "manual" + "8a3c0035eb911ac35194f25b0f413f072c4c9926", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-133.html": [ - "abade84bd79033ddc637b7976565d1a30d7d6a50", - "manual" + "bfe4da96804d25ce29ecf9d2d3c40a4a3e6e2bdf", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-134.html": [ - "95214e3016c0d37a9e79a90dc845be47932621fb", - "manual" + "f12b04ffb0f31462d14c0fdef7d3c72b1231b839", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-135.html": [ - "af2905fd6c1215dd8cd094e536383514ce5e4b28", - "manual" + "e628966638c01b0056a81359819f23ca1b46db81", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-136.html": [ - "d06f88813f05cd87df67b4ae3302db2649c01be3", - "manual" + "028b30812331c5f0f7942623107b7f7208b27d62", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-137.html": [ - "7a141a3feedc3cba453972e8579958548464f703", - "manual" + "d0fd5bc2bfe13f73256589c1dfc505f4c97dbb79", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-138.html": [ - "a042a94253fee86f1fcda7d9ea46649f44adddc0", - "manual" + "cc6c2159ad667f85c798ba97ba0f2d675f498153", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-139.html": [ - "7d52a3dda4f806cac7e8d47f4da5c43f9712fd69", - "manual" + "a32424efd8919af3f914ea5a2333092a2500804f", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-140.html": [ - "21dca68ed4df5b6b6149e06f0c40319742a4d850", - "manual" + "6e6e79cbb1652c0702358298c1527279a0d3f88c", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-141.html": [ - "b13bd5eb3594d7f4a1d34fa5ca3abca20174fbad", - "manual" + "fcb97f65dc888e9b2939362a887b86dfd5093d45", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-142.html": [ - "31901f6301004cf73188baa5491d6e87297d8ab7", - "manual" + "f0b6b0fc8732d390cfbac6519911b17305ddb9db", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-143.html": [ - "2fab30dec7dd06fa995107fdfc5b78601c71d7b8", - "manual" + "ec907f5ff567851bbd8af9cc9bb5290ba754e871", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-144.html": [ - "8b0f60401f8571eb26d7387e73f862db683250ac", - "manual" + "8e33ac0d04665f126cb1e96d9d2cd7b0fe9350f2", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-145.html": [ - "1dd40d8098d75e34d0be7b80618bc810799c0903", - "manual" + "20776fa1e47cf6222cfd0b1723af60565cc68bee", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-146.html": [ - "71a65d3de836a7403093da0c4a90d7c9816177bf", - "manual" + "40b8ee6b810c8d72627c8b1eacf5c579e98df3c4", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-147.html": [ - "0bcd00eb03b61c04e8964b5f6dbfe90a233b8853", - "manual" + "73b84fd92c491a5e96e48acfc67c5a90e9d8097e", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-148.html": [ - "4eb6f4acce8f96c85d3479162f48f12014290860", - "manual" + "2a4feed517af4fed06a925ee44a6605c90879ea6", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-149.html": [ - "ea764cec16d4b0f257cd340f809e3152bc75ed8b", - "manual" + "085886eb38662fa7764bcbb282f6f1d38e3ad49c", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-150.html": [ - "6af09661d60c8e11bca2859b5a9ac4f56c5ec412", - "manual" + "9a1667a33fe473190dffed99dbea12cfd70e0dfc", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-151.html": [ - "29c140b23e25be807f0ade4375924b09c6dc73e5", - "manual" + "9ee3337fb8249b9a67385aacd18bd3a07ed15f95", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-152.html": [ - "aac6276c295359c8cd14c2ae5aed4bf85415a73f", - "manual" + "7e18020c08b336734342e979413a24b1ffd61c06", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-154.html": [ - "dee7c3c59692add382dad5735676fc0d736065b3", - "manual" + "15fbd45272d16e76f4350670db6bf49033eedd8b", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-155.html": [ - "7da9ee496c5b73aa902c84922c9bb96e631a6e9c", - "manual" + "fcf6fd883c63fa037121c88e3647af2a2c06f291", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-156.html": [ - "d88d7e148a9fc8921440a72a05679dfefcb25bc5", - "manual" + "f37b19862915aa6bd33e0ce3fa7ad47910057601", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-157.html": [ - "75d9dbfc02811a6a937bb23759349aa8e3b19f7c", - "manual" + "3c67e50b91e9fcdbb1db04acf764615370dd8121", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-158.html": [ - "73d2e34889800452caee3fa196cce7d2906feb4a", - "manual" + "9ee46a943d56e22516a7d9d47823876690c52093", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-159.html": [ - "6d01f5169f5217323dac79eb25f3fd214164c65e", - "manual" + "b14ce259e7ba80d3072158040d99463d2c1cb6d3", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-160.html": [ - "af9244c241d972ddcb49585074dfaf3b96a1cb28", - "manual" + "58958a0e8f5fa9a4838a59eb8e862ffb24daf81e", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-201.html": [ - "1baa6acd8ad048c43c180d5068833b2dd0d78a30", - "manual" + "e71ef9834c093bfc5f67fe3660fec7e258ba9951", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-202.html": [ - "7f0d2079af134010071084fba2450637a8b47f05", - "manual" + "0e7c2646fc56d026422192fe4121607eec28d612", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-203.html": [ - "88fd0844d594c24f178e8a9bf3e4a3ebf8f728da", - "manual" + "d229443138d5e0ade5233fdeaccbb11c82b44737", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-204.html": [ - "d776d57fd1c5725b131395dffdf6ab56d7b27d00", - "manual" + "4de6583229b26463220d19650203af5700a9a27b", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-205.html": [ - "99bd4697770fcda3231e3110645d10407f806bea", - "manual" + "88589c4883789ff6c8ea9c5dcd05a1cd61c73f0e", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-206.html": [ - "8141067df1756bc88df6e08f93a36c9197a4947f", - "manual" + "1d754df33b17eac1b80210e34233a604d1a2cddf", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-207.html": [ - "c861ac6e8d95f81bcb825aea10fdfef4c26d33a5", - "manual" + "0be6fb2ac8474db7a0898b3245cecb3d816c395d", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-208.html": [ - "29fc2a2b5a1983f8a4130f5cdc9ef43fa05a5b30", - "manual" + "0ac856ad8187ba3f716991240a837a5c8cbb12eb", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-209.html": [ - "a811d02e28d66195dd2315c683919fb7fcdfdb3b", - "manual" + "fd00fa0bb0cfb476fc8b93ed1d2e1662c16f40fd", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-210.html": [ - "a84a28b0e3d8011f6757fa76bda04e8cd69eea80", - "manual" + "c1e381d9eccfb98bf53627bdd7a685a04f0b0787", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-211.html": [ - "04b5b2fed0c549348b072755360c6c66d11cc1b4", - "manual" + "0c4ece8a4ae2ef97361e1d9e35d6caf2b3386f97", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-212.html": [ - "8b00708f2d0a7f4d89778b36d81ffefb8612ada2", - "manual" + "d3731275534b7d090c56968a57f8c2d30b3d1d72", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-213.html": [ - "81002448af74fc2f683a9a79230c00eaece98de0", - "manual" + "18e3fd64ec2d20d8e08523c45b7cbe5bd6f7f211", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-214.html": [ - "3d49636fc72bba63cb8d1e71f2302bf404e5dea7", - "manual" + "aedde66e0fc069d3aa993fab5865bfa35d77d304", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-215.html": [ - "49721b89280df5755dfdb41ec3800ada408ae719", - "manual" + "8de2b79da2b22068b5b1d2b62f6624b7af9a3e1f", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-216.html": [ - "407b5f354ccf0e26c24697e4d6d86912781b9254", - "manual" + "f3ecb2ef59db856f3eceeb1af5172bf43606bb5f", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-217.html": [ - "6f4a188a437998d5b4ae5ff96f98053d0e5ff14f", - "manual" + "e18781f28b55db165e2d1bcf1d057203703ac64d", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-218.html": [ - "71b2512bc9acb3b5ef3952a4663a097efdda46c2", - "manual" + "4c070e70b06490b84d17ac73990e58aea827ae35", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-219.html": [ - "68a508760f9c1a3ce822dd5210b4965500360f67", - "manual" + "e254f3f3d5ee4d3a5633052cf50390a8043ea8eb", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-220.html": [ - "aaafd99aa9e6f990f3233f75ed02ca627902848e", - "manual" + "0568ac3c7162706bf4b6e3e621a213522362f379", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-221.html": [ - "8afdbe8f449460da80494cdeff15bc71d98ae814", - "manual" + "4804a8c02011cd0de6928e74ef0b0fcac098dcdf", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-222.html": [ - "64971487594382db6f44eda313a9738ece311ef0", - "manual" + "0064ecd0f4c26203a529e727b88000c87da46c17", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-223.html": [ - "f701f2ba305c87d96f90318c1a03dbcfa1fc3963", - "manual" + "954101d128ed86de3c18123508c6309743f76631", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-224.html": [ - "bc50e101e98babcf5279e142262a792a615a0c1b", - "manual" + "8a9daa1e70c465eca607bfe994e05d9e219686b8", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-225.html": [ - "1464f8da90668b93dbf5d009591672e2f5aaef08", - "manual" + "8a16a2ac08c6aba363292be87d68a6fa554f8e87", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-226.html": [ - "424eb55472bcbaf6b54f3178a824d8591a96117f", - "manual" + "6fb141f164e11993d8d431b610d2b230f774865a", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-227.html": [ - "8475bf7d0bda4f54d106f233f1b0b8d42e696c01", - "manual" + "f3c18c8cc6bdd7a94d0e2bee840a42e0257d176e", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-228.html": [ - "5fc785eefeaf96d56eac16b45fc5763ae2a99c74", - "manual" + "109cfa061ea41351aecc54f045fe7dc3c0616428", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-229.html": [ - "8a047bc9d64decc8f13a96952fe9c4152d30678d", - "manual" + "eb3793b9b0d8c7676f4a11c11422ffe688c02b77", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-230.html": [ - "3a1551ea46ccc533c9e84840f63ed9e536ad1f22", - "manual" + "56034a3ae67e31ccee553fc370c00d43670ec492", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-231.html": [ - "1e6103059e40e7795d8c4e37223a4a3b548398d9", - "manual" + "3ed99547f0661ade3c73733aedeaf4b0f0ea0a1b", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-232.html": [ - "aaa5ed3aff3097ff38e5bec21c10d39445478b4c", - "manual" + "0bade641664aaa5093890ac0fbf20d3c4e3be35a", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-233.html": [ - "f2eaf52a03ba8d192ccb4dd2fa6fab067a03f11f", - "manual" + "74f73634d546fc5079f751b4f2b0018898bf75cb", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-234.html": [ - "fab0868da35cf312343799b58905cae7c3b68dd2", - "manual" + "664f18a8f59cea4ce98c48cfd8de268e9da22a70", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-235.html": [ - "5e609e4497f3c82a872c9b452ffb80c2ee0a48d1", - "manual" + "468c451e34670fa70d943b3553c5e6298156bbee", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-236.html": [ - "8cddeec313c8e9525b00de90fe0c1c1c91ab430b", - "manual" + "49880550568c94f65e7080f25cbcbffe4150ed41", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-237.html": [ - "020ebd370fef416f5dee846841c510a54417363d", - "manual" + "aba5f81bbdaf44a9273b1caa705c4810d44b8f39", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-238.html": [ - "aae3ac3869cb769a16763ddf6d4465048fb1285d", - "manual" + "9b37726f3f4dc89d3bace157009a8b4af6cb7f63", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-239.html": [ - "63d33a24d91dd458381c5ae7853dec3170431081", - "manual" + "c23836880b4be96fbe1da5a51fdecd66c5846a1a", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-240.html": [ - "baa5da56a312d7752ab5224f381f808489b2db00", - "manual" + "76889f0be39a4855241495c1bfd34ff651adadfe", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-241.html": [ - "166ce6e7fb872f6cd9ad3c4f2c04124017a3a6d7", - "manual" + "882fa12e862328532f40d7a5bcb1cc677ede7c77", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-242.html": [ - "00baacf041ac42f5a543ce8e607d227f7baf1d40", - "manual" + "84e199499e2210e5b2cf42ac4e98bb67f628221a", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-243.html": [ - "fcc14112fa38078a0bde9640a0652e60c8274544", - "manual" + "e714828bc360c601a4753a6d5f26ed627e137b48", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-244.html": [ - "57475614d739d26907d18249e4dac8667471af6d", - "manual" + "1b2df4fe76d35b9b793789a2b6c913a5e15d5984", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-245.html": [ - "534c760a367628750f38e0f15b27cd0fe84c5f3f", - "manual" + "201da7bd65da6807814b626624397b6dd40e413d", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-246.html": [ - "30836f85f4827e5d96713291f87761dcd51ffca8", - "manual" + "d3371aa8018de27c2c42c3726a761ebde9ab0083", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-247.html": [ - "576b2aacdcbae2f14607dada0d9dce3ffc17ef65", - "manual" + "e79c279aa2bbf824cbb155789a8ebadb78228b35", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-248.html": [ - "658c0ed2ecf9c1874a7efc045261aa373d4fc9b6", - "manual" + "91de91a3611ac94eb0a7e9a456f31e584dd930f9", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-249.html": [ - "c3a6e9e78c6ee925c5668d82afc6c6cb7304b4c1", - "manual" + "d795d74acc9861e61c17c5a093345f7177170ebe", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-250.html": [ - "60796847d026d54772ee831cd6f554e7d4aaa1fe", - "manual" + "8d72a9de6c247a263a01d3677e5f9b2de045c159", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-251.html": [ - "854656831e46f98a60392a73b0f193895cf54548", - "manual" + "9569af66e94dd1a2e8550b512e97582c4bc5f7ec", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-252.html": [ - "6e6f34876a8267a1849b4af33007eb54cad1ac8c", - "manual" + "b7558ce1f45208e50c1e0eb4d9d18d0a983e9ee0", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-254.html": [ - "c708431eb0c5799dbf542015b23ee7fbda209eb4", - "manual" + "605d81436edae8ae8ea57cef267d223481164376", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-255.html": [ - "4fa5a5c7bb251019268a9c082cb0595e5a296f3a", - "manual" + "d907250bae982cbbf07103c8d2e30105e05a1aca", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-256.html": [ - "045352a2757f57d0962b07829e4dc842031fa566", - "manual" + "148d6f27023954be2f291b4a0d5ce87d1eded514", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-257.html": [ - "89f09994c88982883b5be317f81ccec0c11138b5", - "manual" + "cf97ec1d32b4c4ed319eb46ef61ed2460a0f0394", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-258.html": [ - "77d70e7ea41fbd55dac9aa487176e011b2bb1d6b", - "manual" + "e6cfc831720301fd149fe33f894caeabc5690ec0", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-259.html": [ - "77fc0ad6506d264e539f03cc53d89203d4f074da", - "manual" + "d6988ac252f9f2fb937c92628e18e206b47adcab", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-260.html": [ - "5ac06e4ed1ff7dcd0a14480d3b35e87c2416adc3", - "manual" + "3ce8df77741902d525fc88add761aa14ce0b1083", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-301.html": [ - "119131e5f81adc33a18db2157f20caf53dc0799b", - "manual" + "2bcd54939a8ce48bf698e1ef8c3c7dc684688e40", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-302.html": [ - "c223663c2c6245dbd4c0f93d4cfffc0343d75b02", - "manual" + "4aa645f33a39b0311d0c5cb9d62f9a126a9c405a", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-303.html": [ - "04b6e8784a899a5c57a5bf26e0279f9593095691", - "manual" + "2be35173b02cdf0aa73accbcf0e86fc33fa4700e", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-304.html": [ - "608cd837b6725997cafb12ac4753d7256926b346", - "manual" + "0dc4f6d4739201bf7768106959185049a180fd69", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-305.html": [ - "84cd4eb833bb194f92432ce7c8d0b815343a5465", - "manual" + "c847f78499892eb2eaa054313ea4c2c7a52f44b6", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-306.html": [ - "361eb343d0659c4eb63c833d2d3a89a37bebc582", - "manual" + "8c08341d25c58cbd395bf98593fce3e9989d440e", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-307.html": [ - "14435f8276d8cc27aeed0f00452be6dd32c1af8a", - "manual" + "0a3c1f415c5885e5939a9b99d3117b164f877590", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-308.html": [ - "e2db4cff21a49906cf806b080632a6d11badf732", - "manual" + "01e31e7b076655683aec91e3608682907810ee98", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-309.html": [ - "3e09eaf31b612b3ffec7a0dbb037b0d91f0e4e98", - "manual" + "c672fb8e3df5430924898a0ddd2d5d52391a2e19", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-310.html": [ - "8176b10994819fb90eae9943d0f66ab314d04496", - "manual" + "9b5dbb985f0fcc51b32f4f12a5fe8bfc967fbf2f", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-311.html": [ - "f87057a84ca37b7aea5d01691334de378c41ab2f", - "manual" + "c705771a2d983557634a7e036c8f07080a51ac90", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-312.html": [ - "abd9ff5f8c708c41490fc91326fff46126be99f4", - "manual" + "1ed3223b680f408dd7d00e381261c1e7404c1568", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-313.html": [ - "d343c893a3aa48bee55cfd0ee929f17f4dd20359", - "manual" + "ac901f1a5d07e368fd8dea34e6d598c6ca0c53bd", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-314.html": [ - "fc693190c3e59d3c1d41a6812a977a06e95a116c", - "manual" + "6d2d640b19c01f29cdc33ae829774aeacf8416cd", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-315.html": [ - "0b7f5afa0d60fd1f98fb263605d5584d91042030", - "manual" + "23db1e8d48559aec297b49c41b92902f4fb325dd", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-316.html": [ - "2174166e2fc2446dde01498f939c11521e2e81cd", - "manual" + "cf26e5f549045c4d32a6eb0d3b7e92dba5f9d687", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-317.html": [ - "e1088bf5622ace3f0779406c1b8ae877b4acdaa3", - "manual" + "f68e6f2e90453559d42164ca1d526370496c4f2b", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-318.html": [ - "0f7b3058e11dbff9f5394fdee6cd8e78d1946f96", - "manual" + "c0d606138700b0cf558d37fbdf823bb9b69b8879", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-319.html": [ - "47b5e377cfb6d766f20a5467c5bdfdd9bb741198", - "manual" + "810ddfcdb7c4f00c04cca55e6f5becba5f12309d", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-320.html": [ - "241a4ba6e701c196aac69325009464930a762b66", - "manual" + "221ebb07d95a0e847e20312aa3f4775e7716cf94", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-321.html": [ - "8713749806301495a7616910c180ea43c24a77cc", - "manual" + "db10b9ae316874737b657072a3d84e091989abff", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-322.html": [ - "af468be73bfefec53de12a2d4c7d196b6a070aeb", - "manual" + "7acfcb1d3ce7dd844593caba52023462ce4ac700", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-323.html": [ - "c9cdab068867cc3dbc2e3fab7a0c2bd9460997e8", - "manual" + "ce529ec86a792074cf2cb76c71082506685849ba", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-324.html": [ - "130af1aa8d8a8ddb3d4bcb07ae83c98da977dd3a", - "manual" + "b847e63d87593b779d8a476373afe27c77c9ab94", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-325.html": [ - "1d49a2c7dad2d615d123294e066bb267f5946da4", - "manual" + "9ccce7c20cf07bd0ee9d417280fe624c9dd6b77a", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-326.html": [ - "04eb9bbff87aaca1cf02d46818bdefc428e191e6", - "manual" + "5b5f2e76122e40842f8e7ec81fe31ed6607db33b", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-327.html": [ - "62d2cba815319155e8daa84e79f03edf448ebd48", - "manual" + "f8ea1396d5158dca427566017aa8a6d8f5f860d2", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-351.html": [ - "3846494fd4da4a7acbdd926b11695be651739b41", - "manual" + "82fc564b1f3e19bc2b8ee3e02bfdffca52aa9a6f", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-352.html": [ - "38f9fd6b5ad046c94a7a1c6e990c6578791bebad", - "manual" + "274bc5d4c6ef98aaa6acf56e38cd3e130f3b58c0", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-353.html": [ - "37351f4955df6ed2e76e4faa748e59aa8fbf4c45", - "manual" + "cb0e1d10e120972544be8b58c6c4daf9e45e6e07", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-354.html": [ - "b9c4b5c7d09627acccd9bea52eaf6a6e4cfd4ed7", - "manual" + "1aafe93593bc6c6a4ff3c26198f06aa3d8ba3613", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-355.html": [ - "1cf6ee5fba7aedc2c6aad21a62024ba6f18fe300", - "manual" + "876e776bf378ae802a3be9d9ab353177cecec8ec", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-356.html": [ - "cfe9e817146b7685c0bbbd66ad9a369a1853a41e", - "manual" + "8986cce3d5c27edc2281cb1516a9c23f471e8041", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-357.html": [ - "8ed188fec02a51616a0526043e1b3501c8199d18", - "manual" + "853f50ab85816eea0e3df32436d3feecd92ecc6d", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-358.html": [ - "e3537060a95b43d57c68de128969a8c61f9e3a99", - "manual" + "9e186fe239433777968e005e27f996025f7aef55", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-359.html": [ - "b0036f4db05d80daec1bc43436a7c88186c9c51f", - "manual" + "754e39219230782ab590eec7757a3a0ad8d2617f", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-360.html": [ - "b3c00de8721fb4d826796bb724a35d636d00cb67", - "manual" + "c0f3ebd68775445883975c60099a2650f6a4959c", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-361.html": [ - "1ae533b3429f906b5b24e4e3ac30f10ab23f7ab0", - "manual" + "d7d7031ed3d1debe0022d0b841955673a51cc35b", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-362.html": [ - "3fd96c01f400948a91a6f3fb6b3de5d28d6a7bfe", - "manual" + "a671ef16766ff405c05ddc4a97896821ddfddcf3", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-363.html": [ - "58dd5ed25c4943de2b6dd0f34c1c756b386d6d40", - "manual" + "1360552c76a4d37373fbf30b532a003f1221468e", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-364.html": [ - "52baf51bd76a4f2a5dfbef6460e7ab975d2dba96", - "manual" + "111e07827bf61289e8fd16fdd2570c50b2c8c988", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-365.html": [ - "cd3974140d487be73c15d14411f5b04e7681bec8", - "manual" + "8a3ea334a4b7678ae5e957f949b4350526380fe6", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-366.html": [ - "9bde6d8e5ad8ebfc6eaa2e8710f0c52736bad65f", - "manual" + "bbeec70ef8889fb5b4dc2babbeacbd1d356d0c15", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-367.html": [ - "397ed89f1ef481fb9b99c6cf3740967aa0297f44", - "manual" + "4bd63c6253bcd863b3de5f4d676998346677fb61", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-368.html": [ - "2a789f1f8b9ebf5cfa563278fe8ac0b1d516c64b", - "manual" + "d92acacb167134fb0581ca2f338c52f2f43af31f", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-369.html": [ - "e52030d8afcf7da82fd299cd29bf07fb920541ce", - "manual" + "bde908bc83a2663604bb36951973947b545ebc23", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-370.html": [ - "b6855d240c375bca14239b32892cda45a01a6c32", - "manual" + "050fbe1c84a2fda8fa1848c9bedf65bd3b1e62b9", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-371.html": [ - "d4a8d4291f88273860a3e28d8f134a6177a8c0d4", - "manual" + "0249a6cbb17990ce6fa8578915f5a205191d1f1a", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-372.html": [ - "ce438d5df0deaf1868a081e4ba10836ecf536056", - "manual" + "0935fa360b977fb6488833143bd89cf69654a657", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-373.html": [ - "4e981f04b8c7db7cc6699e2387c06b268b83e004", - "manual" + "2c7a1daac5f2ecbc4f00ca80f49616dc1032c58c", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-374.html": [ - "0cb052e2cec3d1b6d8a93927571646888bdb4d28", - "manual" + "8c986cd576df8b73e66e6a02b0c4a49948aa5274", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-375.html": [ - "7b4ccd1526ee91c150bef43679621f2a4c4d5b74", - "manual" + "e23dc3a9c4ca6859316b059a144b91b685c43f2e", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-376.html": [ - "69359bba522be249d91cd557947c09c8a42e2bb0", - "manual" + "cc50e00aa5d284e74310a34874fd0e1bead2c461", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-377.html": [ - "fdc108f48af1ad28d293019d77bdaf31febbd96a", - "manual" + "7ac290f365f7a7e771c622cbaa050c913c77c2fc", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-401.html": [ - "a006ced47245432728bee7f034b24d06faa89f9c", - "manual" + "e63306ecff469d0aaacc6ed0b491816f537731d3", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-402.html": [ - "37e7afde5276afd1eaf4e0452e428aa531498015", - "manual" + "0edfac2f871ddb24bd9bb38ff7394009734c0964", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-403.html": [ - "99dc5b0962b821d5eadfe211a0fa7a64e50e83e8", - "manual" + "19887332be0913e525089f80427b9ab50d402ea2", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-404.html": [ - "698a8b7a43f9d520800d5d85c889a2e198b317d0", - "manual" + "32ec9aa9a913cd962174d5d5efff824f0c2c85c1", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-405.html": [ - "8a50571552b022769743293988ba341fcdbf9e12", - "manual" + "498b162a3acbed1b044efb115752d471a235f9bb", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-406.html": [ - "3a0caabd331079829dd681148b522687b519c09f", - "manual" + "c372b48de173d4cf478710f8d80c38b8302cc61b", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-407.html": [ - "8a3b997f26593e00f8e0827b76fdd60a9526ebb5", - "manual" + "a84c073f965044053ec837b817331aed80ee3860", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-408.html": [ - "e211072010a36fb9a38b3419a00bf9da4f359d7c", - "manual" + "ac04cd1ec6deb9a61fc153d805e9495911be0048", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-409.html": [ - "f4a5168c842839f4b3313a90a7a58f449141ff78", - "manual" + "aa9d5cedfd421a9d7e0b8e71dad901f612e998f8", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-410.html": [ - "63c46a10959836cbee4425b01937cef8008609d5", - "manual" + "abaddca372d3894922f5b7182390f5c3f8725e29", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-411.html": [ - "3f027ce33140203563ec174060508def2531c423", - "manual" + "0ab40c70d10c2ef90fbc32adae39aff68c99e6d3", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-412.html": [ - "3f1e574c45854b937f39d2deddab268ab8c72c6e", - "manual" + "37f992d82880bde54e4c98ed2a53c5a82e422f27", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-413.html": [ - "9fa66c1f4cd133a672ad0993adeac868ce7af418", - "manual" + "19a8c12321111ba903c378d589fd274b40dbab8d", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-414.html": [ - "7ed6c3361787346aa0df0ef28989d2b0a51f19d3", - "manual" + "0b276f9e23b13592e385152005f5dc424e0d54e0", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-415.html": [ - "109f75b4d1a9dbf28f703f5018dd7312ee757982", - "manual" + "c088c545315b8338e72da36cfeee15d5276eb9a5", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-416.html": [ - "5c8f25c18dee03c42fccdcc5cc16039bbd3643bb", - "manual" + "15bb106e9a6a40c195429729519c8b8f90747113", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-417.html": [ - "23f2afec8496f228d57405833165355a2f45439e", - "manual" + "3bb4c1c867b3336c93e5768eebcb6c8bc75078f2", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-418.html": [ - "b15f0e94e83d034523dd123db6b50264420d8c69", - "manual" + "537c26c8f0dbab068fbecdd1bb06bb3a259b060c", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-419.html": [ - "a489ad67f84a9669b08a724d35cf2c7de8297e4e", - "manual" + "90e092d8354d8f615d1f6eeeba54ed0ed27e3e10", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-420.html": [ - "abdf0a24b595a4e225d0dd5f8e7923f0ae831252", - "manual" + "632a20ba72e4108301dcef1cb0536971cbb0f1e7", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-421.html": [ - "d0a4f846076bebb6dc7c18d3e90ce3c252aa4124", - "manual" + "68fe5aa041887cac09c4f7110f0b8516cf5f458b", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-422.html": [ - "2191b95da80faa9bee0b83aa34fcf73e16a35fd0", - "manual" + "d35adea058c8bc1cddcbfc319fb282a685d66a1e", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-423.html": [ - "80a36ba6a570516d2b01293394d9abcfe44dc463", - "manual" + "e43a579f4aab1768841eb68c2706d5ae2d3e068e", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-424.html": [ - "99708056cf726a7496d49a1e0f56195844e58a76", - "manual" + "fed4fa7fee626b56fdf45f73bbc544843b261a5b", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-425.html": [ - "f63ee6f62330ac7e40adbed121e61a1bd8674d9b", - "manual" + "c37375e4df71e457f5398dc3cba173da9e384392", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-426.html": [ - "76248dc273c486ab1490bb3b43e882381d686170", - "manual" + "62e031c0a83e27eb8b0ad4c3f2899ea6c995f33e", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-jazh-427.html": [ - "9d0ddf9829a46916d7cc0db42efb26b222bc66d4", - "manual" + "1ad99e0ee580c64506d88cee1043eae98177f380", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-001.html": [ - "23751104e074f4272a014d55d8a78ce943dadc51", - "manual" + "a522f2eb3ba9010ae5a197b9840cf8a74da0bbde", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-002.html": [ - "8673eb27faf0f6a58548cc40b5233a8d3a7e7480", - "manual" + "02db3eb72387471d20503a0c0e04d5deb50bcacb", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-003.html": [ - "f7c3dfc9a2ac7a6c0352680bf64167159fbb6f44", - "manual" + "343841b2c83882bd57d25f2db91453fd7b2dae2a", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-004.html": [ - "f1fabd00ae9377536c9c26f368f18eb8b1e150e6", - "manual" + "7c07a62b34871c9f840a980559449345735d238e", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-005.html": [ - "d8015bbfc0cc59b083930eadf1a7bc1968948181", - "manual" + "6d906e5c88b008f226d8b1b87e0133c112d963f1", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-006.html": [ - "ccf0fd39ac31a4be7257565230f32a735eb71d26", - "manual" + "0027bc0c396de9ea2d7941558c482f70bc3f8cc5", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-007.html": [ - "454b566b700ea3943594682738e69599034106f8", - "manual" + "8eafa52597f2ace97b31ac6e4dd1e0d709e6f96d", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-008.html": [ - "397ab9c8333f3a698e582f606ebc598182bb5146", - "manual" + "56170bed270fbdc0d9a79ca504f243876a59a34e", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-009.html": [ - "e457a42a4246247840e85bdbfdee45c095e57125", - "manual" + "e62e0954ce86d9bc9280870be303b3f63bd34500", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-010.html": [ - "db009b49a0e3cb5546c4e843b11ce09866a5739a", - "manual" + "01d8a60f7494fa3d725310495213fc0c516fba03", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-011.html": [ - "fb77f224bea3bfb843590fc58b84c872f2e9bbc4", - "manual" + "c210432124fdd81f2ac484eb03f49e6175cac30c", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-012.html": [ - "f63f1049ef5977fccbf69d975bb8f43ef74fb849", - "manual" + "1629e06e19f521686205ae78e97c0d6686eceecb", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-013.html": [ - "3e4df7bb1acbd56fb4744dffa32f539260f528f6", - "manual" + "c9ed41ed02420dc192446aac73aaabd3f9a45e79", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-014.html": [ - "9b3be9aecfb0934fd37c2a1861eacb6d47b4c4ee", - "manual" + "869d96b59176fd4a9698d7c297065ae51aa6848d", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-015.html": [ - "84c68f38b5063fdb99b433f7bba2fd5f9d007817", - "manual" + "630c6971e8979f0c2973737b05076cb50304b49c", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-016.html": [ - "77948b6f451add4869568c96383d5f2e8f586d6d", - "manual" + "37262f125eb176046e9c21e1fc21afeee59495fe", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-017.html": [ - "db96c4a4c336d088fd18add356eae1871aabeb91", - "manual" + "d8e056f8a102bf364570e1c8306d999dff50121d", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-018.html": [ - "42c86aba97def0bf58373dd559cca4617e543c89", - "manual" + "c3893de678faf8cc921aaa3b139a2d5c45b03050", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-019.html": [ - "e1d30063da7c92ce11dc60be1007995d57f6f47c", - "manual" + "711e7fe244b917748206dcf1527486011dc25294", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-020.html": [ - "0b25e00ef1a7749eb0678e395c1b06f37233c418", - "manual" + "025b5f6f3646ba61fba99150af67ffb0c0b51854", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-021.html": [ - "ed45d4a7ff19fc4b30050ec4b3ad638ff6bc1436", - "manual" + "820af2cf9d1f4fefefd6194d7bf23c5c0ee751e1", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-022.html": [ - "e21b9fdc1d91dc3a73632bcc9d867a8462fc845c", - "manual" + "bb0fb6255ea49e6a1bef69e893f97f48203b3bbb", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-023.html": [ - "a6cb64064817c6ce7cc6ed2f5cbd99e8b181d026", - "manual" + "465570533d6cc7b43b1beb81ad19f9cde8adc853", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-024.html": [ - "a1663a4000f79175e0b510cf186c893038ba89b2", - "manual" + "cf9bf536bd73e7f978de4399c02c0a7c8a6e0a56", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-025.html": [ - "25b9be5075e889cd4ae5b40f61c14e21c52bd67b", - "manual" + "db6cafc9cbacb17ccf431c9b22d6ee19d8cae3c0", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-026.html": [ - "8484913e51e2dc383a2d44784c239d2f564c4ddf", - "manual" + "8dfe95af58271dd2d88def6fddcf952e0c1c17c1", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-027.html": [ - "05a25c605315eb2600648ff4e93ee41a780da555", - "manual" + "2459c953fdc8bd751c67299ed7f3f5e67a0e36fa", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-028.html": [ - "85b213cbbc63041113bba1fd7383e93b04129c11", - "manual" + "0b3fdb2612aa501c16ef4111554bdcd1637c1ead", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-029.html": [ - "c00ab47252e85aa488d15d9b14e9a55193ee118d", - "manual" + "5df768c30ff5b86a0d8b31ac3795052f1794db95", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-030.html": [ - "bd49f31fb24ab474c0e5079adedf6632751bdbe7", - "manual" + "0cf3ebfc3e3bda69730280fae6009a9b477c99d2", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-031.html": [ - "6418130d9b4a6850402d59cc7f9541b0a7fa9d20", - "manual" + "b0ebd49e44ab5c44c886965f3378c02e7adfcc98", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-032.html": [ - "b131ca6e4853ec359101fcc411868ecf0bac13fb", - "manual" + "dea2ac118c1884478ca54d54fa6fc4f4c5a98ff4", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-033.html": [ - "9678d2c06fb6a2809f8d84ea1a4a9f56b41504a3", - "manual" + "8e2c9359d6f940c2b205466ac2e18e65cbadfb1b", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-034.html": [ - "271302da6b8abb9fcdef7150aef12aca261bf06a", - "manual" + "e04a2856dc7a2be6757c09b1a146fc91f36dc47b", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-035.html": [ - "90b0318980cf8b4b3a2170d31b850d24d993178c", - "manual" + "05c951c4abc2ff850dfe80e94086518431ebaff8", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-036.html": [ - "82d01e78dbb9028facad6d30146cf567ff2da913", - "manual" + "7ff59a4d6ae659dbe894973a1ae5a8265cb2ac7e", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-037.html": [ - "3de9be446d691656dce3a9f3d6b70ed4c2332fa2", - "manual" + "6fceb38f7add59e85cccffb00c108a5dce010612", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-038.html": [ - "b9751e5616b2304d69e52a0de985b0433ac28642", - "manual" + "0a45a7dbf61ad2662c2c0c90da0c3f0989d49074", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-039.html": [ - "ec30e305d88c853a692ffa7b88235de214bc1b92", - "manual" + "329bbc5c9d7d65f937156dd60cd378da3f126850", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-040.html": [ - "44d61cbcfdec0751b34c3c1b8ae81fb3f3184746", - "manual" + "6483e9c673acc150c70d6246fa254170d6ef38be", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-041.html": [ - "aaed300fc4ac0cde6d2499ff6a86d4e7f67e03fb", - "manual" + "71a23e81a4d8c660a0f8c43fa480cd7c96e81af7", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-042.html": [ - "b9bfbe759816d3b4d33a431783f6d020ac860545", - "manual" + "32efccc1a6a254d33ed9ce56c4652aee8a1ba44f", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-043.html": [ - "1c21e9fa410affcfe227cd58bfc85cead7a0558d", - "manual" + "b85726cf931183c08d198214f6ffb58f6c5e1ea5", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-044.html": [ - "4e795936e3e3a8cf7581c6a8021dc98b6b5923d5", - "manual" + "5e17a21318704a7dae4ab47d7c5fd839efffd0fd", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-045.html": [ - "65ef673f26bed590f6976e6884d8c6b46a9206d2", - "manual" + "46d1253d18c725268724020e53dd7ed95553c587", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-046.html": [ - "25f9323d23f1bb12b57ce58e4388e68b8dc89e0f", - "manual" + "939dcc725eeae199edfdbf9e1feb54749790bf56", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-047.html": [ - "a90ab544eccb13158a361b35fa842f255e0c69e7", - "manual" + "f16844d91c6207b88c5bb18ee97341843ede4f09", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-048.html": [ - "8623389628aac57928b3b5a67235e325c6ef4352", - "manual" + "bb837355a2bc985b6b48299220245f894d4c8bdf", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-049.html": [ - "95f3229ee5caa1bcc8b067446701d537269e77ad", - "manual" + "e5ffd7a2b13467f2ad6281494a526a8f52fb3fc0", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-050.html": [ - "24cafec0508dd05e8b7c40b6ec6ac8c2713237f1", - "manual" + "de0ca41f88444897b57bb5728d7bd39f0142d2c1", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-051.html": [ - "df67f9277a9384bc368e37c65a6e22f2811d58f4", - "manual" + "0e6f427f3ae686a50d1847ca70f888595136c6c8", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-052.html": [ - "b4b6a8c7e971bd81f6928e8f5292ebbab9d444a6", - "manual" + "ea269735315bbf1972b0a78027a27b54e4a4ef00", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-053.html": [ - "0ea2e49f5076e07f524468f4448b33b78ec633d4", - "manual" + "c227eaa3ae2f872d0d679834c2e54639e3f13699", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-054.html": [ - "168afeb81e83a06cb320f76669efe987c46a6104", - "manual" + "76410ac3bc626066c102cb44c9b43ea7cbab19dd", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-055.html": [ - "b94bce3d030b6c23534426b389697e45ff07be67", - "manual" + "72437047562a59b1a2c068b02e8dd1584c16155a", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-056.html": [ - "daef1d1e65f0a5c55f3347ba68999d5e76f32199", - "manual" + "02b6198c85911df7bd43c49d783a65e6fd449d42", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-057.html": [ - "7f24f30ba0ab7a8b33b051cd406a3636d4f7eb71", - "manual" + "2237a29c5bbcd18033079849d5000c6290f1212c", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-058.html": [ - "836cb2efec06b875ae1051d5e49648a7036cf2b7", - "manual" + "b62fe3f5e1ec6faab7d192c0205e78cb749ee2b8", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-059.html": [ - "9cb044123ff67033fdcc44ec95a2f100831ad110", - "manual" + "4f8fe5bc0aa5021786d8eda0674cb830d09cd26c", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-060.html": [ - "6c6ae8213a691f47621c60d88d04c56bd6b7d0ec", - "manual" + "d985e9fb8ca02c3399213c9b6ff0afb7a772dc07", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-061.html": [ - "382bd5545566bb9d923d619502363545fa74040a", - "manual" + "7e51bd0d283eb7dfce1787186328244d2adfa3db", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-062.html": [ - "229ffbb7f5cadf43377dabb3f1cc2ffd96e368d8", - "manual" + "31a3d3ab615e9b1912cc4b20c8346b0b3620271e", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-063.html": [ - "90faa175c15952cb96347a852825041b2496a62a", - "manual" + "75a49fdf92271a240c3c904bb1e528a067e90dee", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-064.html": [ - "bce0d4ee0881991658c145345a46305be34cef94", - "manual" + "bebb8adf08dbacb739564baea0dc6441979ab97b", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-065.html": [ - "2ca12121127234df4d55b6f193d06616023b2aa9", - "manual" + "ce6054c72d4772e6000be891f529e9025635fccb", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-100.html": [ - "3783a27f6eb51356abac6da55cac4cf7d26e10c5", - "manual" + "e5b2dfd9a1224b45f15d0a1dc7cec79c02b302c4", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-101.html": [ - "319c4f2ad28d7d120fd4597d2954c1378e2f9278", - "manual" + "c1f32ab0f144f0a5e50651364ef2634b937cec35", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-102.html": [ - "de796e9e8812b4b6a81b3dc92b49b3e67740e94e", - "manual" + "fb9c1e8997322507a729aab7582efa767678be11", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-103.html": [ - "4c50eada32453766a47fbc80c0ce9cf19b8fc8ac", - "manual" + "0dac41df962a3607538c4161b46298199a3e7de1", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-104.html": [ - "c34291942e7785c5204785ca3cbcc2e708eb4995", - "manual" + "7293ba97e053ee4750c0c3d41985ff44b7382879", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-105.html": [ - "77b307e39b26a8633c8d0cae607bc493c9849a3c", - "manual" + "f0df411bf4ab28fc602d8db6b0d806c24364ff91", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-106.html": [ - "0a54e909ad9fdc0d1042e51e96a903d612a7c905", - "manual" + "91cb923effcfff5694111c478b5933783e24b23c", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-107.html": [ - "83bf18f99a0a089d7abed79232054869e71f3304", - "manual" + "5442c6b5b9073c2ec08b23e368e25323e8785b68", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-108.html": [ - "5916f918f3063872a80550af8a9cf9c22dbca555", - "manual" + "60e904e82de447b1c34d03da1fd96efac5a56483", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-109.html": [ - "aaba84500022f424cf3cdfe552b24db6aac11936", - "manual" + "7eb2e21b8942efac5256aabc8e4714e2e8cb4f5a", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-110.html": [ - "7324c994119acc011e410dedea136d7637f09c87", - "manual" + "ff9de18bd82ef34dbf13e809d3473eb2cb12c1b3", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-111.html": [ - "01084e6ab98722822f7c4e783efd793b2d8a3256", - "manual" + "fd727b27858f521220e88b2e5b0a70238a9e2324", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-112.html": [ - "4ca52ce79d87fb4193f6dd3acf9cd0d3f4a52ad3", - "manual" + "a4df8ae83cdfc2d5831b978724169095d31d8ce3", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-113.html": [ - "8266b1eb0045eefbe858494e0ce5cc9b01e2398a", - "manual" + "fbec5c236ba230b966b458d6e5788e19eb04d91c", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-114.html": [ - "31fe79a3728f384011731b25fbd820a8be4f0411", - "manual" + "bcaceb598a530cc54931876b1d9343c42e3e7bb0", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-115.html": [ - "1affc9781869c9c898981b715f663bd91927f7a7", - "manual" + "667ee09f98847429b48e2829dead587be7919c82", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-116.html": [ - "df30d57f77d44338003d01cec06eae6f48ff0d52", - "manual" + "0e25d53b2d9624905b42e4c01c35b15d31df6615", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-117.html": [ - "b75db79d4c0c9d78b2fadf1fe599ed2e709aaff6", - "manual" + "b2fadc7ec6da943725bc64e443da766607409fd1", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-118.html": [ - "c0796f92a3fdd58e1a9e3a8d28c7b74d5b11017c", - "manual" + "0ab846ba9ff4fb3520957fce8f4b3065d50ef5ef", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-119.html": [ - "a64ade90bea6269946c5c72c9a36a552156ec18f", - "manual" + "e53ebb831a00c27b029e61481a8bfc574e0e80c7", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-120.html": [ - "46d4f6c962fe1f6a20aba13c9f05994097bf979c", - "manual" + "38a0a85dd3a82f76cdd9bd2061987ca1674476e0", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-121.html": [ - "3513f0d861966aea89e35be35566cb0663ba43ff", - "manual" + "750a8d01b9bde0c1853688de19ac12d5d75c974f", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-122.html": [ - "8cdc4a84db689494e041d851b08ea679cd2c7d4b", - "manual" + "62270c71c83b7feb6e1e42f73d02234cfbc75c15", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-123.html": [ - "01ffd2a7e9044fabf44fb575142c4e8d05046869", - "manual" + "e6c61832c6cf89c23e0d054d874aa90f3da07c0d", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-124.html": [ - "0e9fa04d168645279880a26849f713070609a3c7", - "manual" + "d97e984faddc4868eb32d1a2d69ed064c542c796", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-125.html": [ - "c61562fbf5016fa9f97884a33ee5fa29e32a12f7", - "manual" + "8427a2d3ec4952fa7257facab197c5fc9489cf67", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-126.html": [ - "df473f9da29b983aa7c41524d1527ecfbedf66a0", - "manual" + "fd54351c7b5b01f05fc8eafaa7b5f114fc89cc77", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-127.html": [ - "801911b138cb48d5acb3a8ad4dca37b92472ccea", - "manual" + "f70d861d5b7b5d98a53e5d08516383e89d168c39", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-128.html": [ - "6fe7159a361c28075eefebbfe1351199ce1abf66", - "manual" + "d0766e0299a85dec78894bd611c9b4286a9e46b8", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-129.html": [ - "9526532078cb3cc4343bcb13d600a60cf2c5c62d", - "manual" + "3caedfabda46f00381cfe761c744f660af8eecac", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-130.html": [ - "4af44e63437c48673c6c4e51830f768b5c7ce611", - "manual" + "fc2a8c9b093b035babe00ace0439026670d32248", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-131.html": [ - "9f3cdd0c4a99cfa0302fcc8f4952d9d90e4c7ff8", - "manual" + "256a955bd2567c09693c0cf39647b3225667b7e2", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-132.html": [ - "5b41cfb16fe29f6118c574f8c760b90863a501b5", - "manual" + "45da3d63f492495dd462090f8b69e527ce78a6b9", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-133.html": [ - "846f4bbfa89abb1028d34cca54cd4ee2c222ff05", - "manual" + "9573f92b2285aea7f282c4c6c612052ef0ecead2", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-134.html": [ - "83c1609d5d358ebc6c0e1e14e4ea3e8896c69572", - "manual" + "9a54feaf6d42707f68039ff502fc3e6d544d80f0", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-135.html": [ - "9bd9e5a98ff4b661fd7f33c4f104a23ffae14885", - "manual" + "f6dab78fd842936876394921d9d444937edee2e3", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-136.html": [ - "9f6436d5c32e41b41ca84123c3862e9e64a6f6a7", - "manual" + "26f9d278ec993ac58474eb570ccafa93f4fb2c3c", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-137.html": [ - "d401ae40e4a7b4dffb89c9777e4eaf9e7f19aee6", - "manual" + "d19eb5bb1aae5e794bb617c6c3547f4bc3025d29", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-138.html": [ - "b1eb4d704d5213ad0352ccfab7e058dce9377e2f", - "manual" + "fc5da7c2aa17dce3f1e97e2be2ddbb4e2da5dd30", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-139.html": [ - "dd65d2a99c88234a622e2cdb920e64f1b5cd4284", - "manual" + "c010f740d1928f7369e474cd8a8d9101cad84116", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-140.html": [ - "c568da58fa1b13174d911d6de346f653b0deaf52", - "manual" + "ef04dbb3544fd9f055f1c4cb0c472b27b1096479", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-141.html": [ - "780fa9744f477dbdc7a0eaa6ed192428cf7cc6c5", - "manual" + "4eb3b9d51ab920b051ec029713b9aac935abc0d5", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-142.html": [ - "2471df490a6620c45d1a9b3cc707708e2cd87832", - "manual" + "95b0e8c23c0f2470a307d3f1d6b4a9ce1bbc19ce", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-143.html": [ - "79889b94dd8d12f9851b4cc35d57221c2d0b49bc", - "manual" + "62537f5fdaa944edecb7b1cd0beae3609e30ae90", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-144.html": [ - "603eb363e56f6085b391a23f6ddc20e24d32bb07", - "manual" + "3951172666c7af1056ee9c046f488c0613d2a910", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-145.html": [ - "130ffa96f3002c1a565ae5310e80919fedc3f4d4", - "manual" + "e58dd3dae908a136e4b396c09c896018b1bfcf83", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-146.html": [ - "80471e8916da8da2b896a4ce7606fa8824ef1366", - "manual" + "f56ab99d221a34ad18c2213da614bd20accc80e9", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-147.html": [ - "167c66ecc9c6a1b4aa04de00da85b3964b270de3", - "manual" + "65de696862b29a71e12069bc665f2640eaa72664", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-148.html": [ - "eed50711d4d992adb597c112bd8ffc25ea91c956", - "manual" + "7fc5e1ed08c7b4e8fca451eea5e84eafaa0dc6bf", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-149.html": [ - "32838cea5525dcdc75947b416f3f053da8440a7c", - "manual" + "86098ca9b692190b4f594861f1396c1584a1d723", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-150.html": [ - "b278baa8b869b40f7113d0caf75a7b9dfbaed231", - "manual" + "841506a46b93226d3149ad2eff91267daa35a6d7", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-151.html": [ - "675d17d68ce706fc3fe09941d1476f99ee00fe6b", - "manual" + "ddc5f98028c5531b0dd73ada7b8d4c59f4def92c", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-152.html": [ - "4bf5f1dfcb6aed195e919057f401954a3f611b29", - "manual" + "161ca3d3c5c59c6f89467b106ab085a39883cd9c", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-153.html": [ - "f64370e810846002cc19d126611c5b3d408d4a1d", - "manual" + "4e84434fac6d2d441510bd9da14140e5aa2a2b3a", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-154.html": [ - "cdd8134bb62aa05e73108a17e8ddd09730527ad2", - "manual" + "ea1e9b3a97d197514a064c0a261f44760792c2f7", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-155.html": [ - "8452ab66fdc80335db544b71d6dc581ca3622430", - "manual" + "4d3ac4de24e7fb230ccd439ccb275b16c7e8dd03", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-156.html": [ - "495e6b400cefca80afb6da59ecf7cd078f777fc6", - "manual" + "1e9853987cc6765a96f8826fac1e0689a5f33071", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-157.html": [ - "fff432aa8a6edb90987eba026e0fbc163c696075", - "manual" + "c4fb953e641df4195884a6de26737981d79a9c82", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-158.html": [ - "f6ac95f5f36bbe21867759d193c45a85748d69ae", - "manual" + "5e432b9f5aa96ba06540aea40280ee0c21894a32", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-159.html": [ - "b1926d13a8781605434c50cd9098dbf61b34e65c", - "manual" + "ded276367c0c52a8a4b8a4aab385b38c8ad46aa4", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-160.html": [ - "8bd569855ef20de6591742c280ead21f81b6e286", - "manual" + "9c6139234639a3d5903cbe60b87243a48b924c30", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-161.html": [ - "5b32152990f9fe408791a75aec52e4c804554d7b", - "manual" + "f6e912febb4f3034eaa64615a13e1b1a419e68a3", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-162.html": [ - "6f096a8b0b1608db884b98b1f05a3e3bead97f7d", - "manual" + "ea1024b005ddd378294e54ef3552e888f52a4198", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-163.html": [ - "a040b523954edf5344933f3ae14b600587e6329a", - "manual" + "9828fd5bb5eab4a3f2b082cc84bb98783a10d19c", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-164.html": [ - "67344bdc4e2ce98499ee5432f85b3a743bc29da8", - "manual" + "e33c1796066fb42ddd494dac3686c7fea82df5cd", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-165.html": [ - "471d8cbee97be52fff47bcfc71efcefab1c3dea0", - "manual" + "2ec3f2e72fc8045a482808c5b1d60605651ce58a", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-166.html": [ - "d245db008ad8b6989af045bcdefcffa36aed9917", - "manual" + "8dadb94d731ab6add5be035f141ebb4267d5e458", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-167.html": [ - "382b07e8eefa7c57caee9d585a48d92802da2278", - "manual" + "d872edfaf34c67dd8881a103498f123ef77c0e35", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-168.html": [ - "0e6ca0dbd47483240f53e3f462a9b8632cda5878", - "manual" + "ce400e9cccad7a88980cc187ea73d5640e640cf9", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-169.html": [ - "3e425d72081234619d9496d08b5bd13b53ca8cbf", - "manual" + "a8f78cb4c1aa568dedaff37b4531e37c0b993e18", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-170.html": [ - "38b96031d5ddcc2724132a0476382a5242b4b96d", - "manual" + "a578f808f298222bec659d38ec9a7f4a1cf10b88", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-171.html": [ - "d57b9f727fd9201da9f70ff9f4891c65a5d65880", - "manual" + "1a96be9f3a3c53ca69d5f0e0a81e14e9e945a585", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-200.html": [ - "4d1b5c70c72789599dd621ceb13de59121a32d65", - "manual" + "4d5b53d7a152131f3f9093f11bb004c74725d308", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-201.html": [ - "a3a4b28264f7432fb36a4ced16be1164bb52f819", - "manual" + "3af767e84442bee057e248fec5c7f22c631b6331", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-202.html": [ - "b285657d7a476be7513700043ce9dd4b9729d059", - "manual" + "0cb4e9559422532b5e45f2b0a6b018727ec9dba3", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-203.html": [ - "f43d88f1310ee17278e6d61e69a781c913a6536a", - "manual" + "c9e92576c76b44b42e9da9c63140a85aff6b5135", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-204.html": [ - "84015ae28b083e073dc841cf381868437646e079", - "manual" + "f7cc33c4e3b186f314827c43908819e1d61fe6b2", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-205.html": [ - "1ba8f19299e88c485b3dff744fa2367ee5550084", - "manual" + "583141eb922f0a0a5db318cf8b532e2c0001da97", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-206.html": [ - "698a6d59eb55503386ca7ddbfc2c14948fdebfed", - "manual" + "124c4e1ed91945f0a0208e5d59a38e7bacb967fa", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-207.html": [ - "9820ad71c711a53e27939a6d39d6cf68b8965af9", - "manual" + "86835b33c46eb03388ee324f6b65537f97c0d899", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-208.html": [ - "bba9b2aab1a486322e7a07760ba780adfc5b5fb4", - "manual" + "f8d8ef976403f8effd9b170a406111b61c368271", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-209.html": [ - "98cf98d0a8c724376907d30a5b1d9ae459e184bb", - "manual" + "01daaf009fa2eb6c69b6b4ebc5edbd9b156dec36", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-210.html": [ - "fc7ebf3ae5a846d5390fb84da6cc778f34da54ac", - "manual" + "013e1075231548a145b0e3d6a1425164932e5f92", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-211.html": [ - "6b5240a2f0b16b3d475ff67c37aada9497a3dbb6", - "manual" + "ea48328afae9b691c969fb7fbb31504315e27e25", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-212.html": [ - "bbe7b7a2e334dc1aae49eac6885ea1ce9c10ad77", - "manual" + "a5a587aba45f9560cef3cd6f9464abf2aaadc38f", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-213.html": [ - "c4f0055103f65f813b9dfaeeeb650c5dc3ccc642", - "manual" + "fc4666584b653ab591b7292339fc0c6a235ce693", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-214.html": [ - "d931d2238de82d28ee179eec902c19adecf9a0df", - "manual" + "9fe7eec471218c49a61cc47c3ae1ebc51507ff20", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-215.html": [ - "3df74aa85ac6944130630c0d2cd4bdd32903d4b2", - "manual" + "9dd0479e2dad9d4b1e4df5f604df2b05b0b37e9a", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-216.html": [ - "00b936bc058e74713844a0b9eff91b52dab4a845", - "manual" + "79dc2f9f43b8460f6f74e20d75308f180525f6fa", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-217.html": [ - "7a5d6ac7a24cf09c8811086cf98237878082ec07", - "manual" + "7f5c4e5b9b1e358eac24f9dcaa41dd9c8ea678a4", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-218.html": [ - "25dc209f79c7b2e72ceef73b21b9011aa9b5e2b7", - "manual" + "5aab717351b1764c4b807ead2ab3ee97ddd77848", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-219.html": [ - "f01f2fb435aed739384efa3d7c854681b88cea2b", - "manual" + "6d6e8066a00e5b99f35b588388bf884d920b8b7e", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-220.html": [ - "ed023dbc0bb834db94bf2600143942ee07bd6fe3", - "manual" + "d1308088ba964073a7c92be98951b9a645da4dba", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-221.html": [ - "b585b509591767eaa9259ca310246ee0e7c2ec31", - "manual" + "ed5386a47e610380729ad550b123d1b533e7ee28", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-222.html": [ - "d3c273492006aac4398bc3a0b141914aca15cb4b", - "manual" + "ac50e0b4aea2412c17a19c7fac6cf3bb5bf68f80", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-223.html": [ - "0c70fe2cffb8b479bf5b1b8c5e6fc985ef8ee3a4", - "manual" + "c83c7f6b7dd60277d3f5b954b033b52d7e3e1375", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-224.html": [ - "283cc00fcb60b46a7985e12ba462dbc41ddc71c5", - "manual" + "d1ec2f2d0ff80124b73ce830b4f0797ea558b877", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-225.html": [ - "8c66f15a5e9149a337459d2325509d51cef5ea4b", - "manual" + "65a9bff2c016c96903604cac36475b5c82b9d155", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-226.html": [ - "849894c89b0a2bfaed399d077a148264c81e603a", - "manual" + "7002c8b61605fbfe6036ba34b037e5fd79cedd2d", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-250.html": [ - "6942447f2802b460cfa8f652fbb747c55666b80c", - "manual" + "0c257106be0046ddd2184d26a5910850a99c094d", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-251.html": [ - "f51140a2cefbdf7f7b3d3b37e55fdc678e6eb8f5", - "manual" + "0a9af1437a9e1d712d10938c52d26730b4faa588", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-252.html": [ - "ae222731d8250c0f13ada88031c075fc22736f5d", - "manual" + "3f4ac50824582cda56fad747b87b1eee2690594d", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-253.html": [ - "68da43ae73b0eede43c1278f1da453863f2f14a0", - "manual" + "fe48d63a68b4210414d82e8a10d9e9d63c89a6af", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-254.html": [ - "c3e143bb220116d5fac54d771de29574346adde7", - "manual" + "9e053a8d4d052bd686692b22013c33c36e975c9d", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-255.html": [ - "db4936f227f74abe167496a9695c6c34ac7061b4", - "manual" + "74023538fe0051bbd22747eb211ecf3f70f617b0", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-256.html": [ - "855a895d57ad6a83377daab8d2acf9e1089431ca", - "manual" + "acf836832779924290622baa072d1ebbadf6d7a3", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-257.html": [ - "498f3737c1c409c1d50f75d1e70c2d93ec08d4c3", - "manual" + "a68665f8b976771dae9f8a0b102c2e921cf86ff3", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-258.html": [ - "6f9521091458907d1c6a6a8f7563995c2e0ebf6f", - "manual" + "350d8a418cc2049c0afbe80e031b88e0f85c6e5b", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-259.html": [ - "0c9d2d502f08cb341d4f6fddf08a3ad17062b73d", - "manual" + "bbdbe1f364de2fea1cd78799e0c0d9cbc9d874ec", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-260.html": [ - "233cd615b396239b82d02600d95d6549fddc73b9", - "manual" + "8e6e186b7ce3326b952cde247d8500181b6bbaad", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-261.html": [ - "9d9595c6bf69adc33d908390d44ad2969a3cb047", - "manual" + "1947b3753ea240dbd85b83ce83ba2440843f9b56", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-262.html": [ - "e0d680dc62623b138c18290f6491e64abfd696d4", - "manual" + "e20213d5f0ece19d5c3730bba9b0b6fbb4fbe5d6", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-263.html": [ - "04dadf14a558a09488f56d7f28afa67feee99984", - "manual" + "48054000f849e4676723c272587271bbce9b622d", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-264.html": [ - "8843bfe7e59ff06a94da409159d98977147542ed", - "manual" + "82eb0d3d8808430407e8d34b497c57bf18c89e76", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-265.html": [ - "1d63021bd024c4c85610f6c1209d74620d7dbfff", - "manual" + "cf773e48b96051cc6f2d53c0cd0f8fab96b04387", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-266.html": [ - "373ab33885b7ae865142fc9d3619e961a165082d", - "manual" + "35241ea5c8a27343f49d26a59e9b16a6c9541184", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-267.html": [ - "1249de9a6624662fe9685cf700857bc2e0db5b2f", - "manual" + "7a58ac224f0ccc4a92460603606155c236e10746", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-268.html": [ - "f15cab0da1f4421107273cfcc4965a47baaf1232", - "manual" + "949d7b4c723af83ad4eaa2465e1d740b5ba14b0a", + "reftest" ], "css/css-text-3/i18n/css3-text-line-break-opclns-269.html": [ - "a019c9e16dc877b2f5dbe27b7a4b819c839fa76e", - "manual" + "7bc750e1f05e5f7f149bcb9502f7356172a9ad2d", + "reftest" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-001-ref.html": [ - "db247b4f61543907dc9a5c69340bfbcf3b4aad0c", + "dfca6f69babcadd02e98b4175d04be157e350f02", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-002-ref.html": [ - "91947ab541b379d785bea08c0cc71c1e276bcbf9", + "28a53488d7f77adf1a18f5ed7a0b2730960df130", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-003-ref.html": [ - "b01c657a4359c8af311726f6a25ce86da6626b63", + "93767044b10fc4b3995014777d8907ba880eb44b", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-004-ref.html": [ - "f7585f048c1fe684c6bae45fdbdff72672da5f04", + "b3a2e27766df5e3b4503ba89136f7acde042e590", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-005-ref.html": [ - "5d1b289645a2233ebbe39a36c966d05e8e88f310", + "30641fc7d7e60e880f90e0253fb0a6094540d216", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-006-ref.html": [ - "506d6ddf278f491407c809417d8b89314a22bad5", + "82da52832aedb902f925c36ef4c4991b1589cc52", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-007-ref.html": [ - "90627bdd4732f45b2b1817f237bb5bfc577df10d", + "021b8b1bdff93144aaf0f1415bd1e237b67b33ca", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-008-ref.html": [ - "ec82821de510cf3d137ad7a907e90bdc7e05c4c7", + "2544e05204670d031b14004921dfef6a5bfc30d5", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-009-ref.html": [ - "a53a1cc357deb49d0c147de85235a9388d255c50", + "2f6e8861202d135276fc9b71139172d3b7e4664e", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-010-ref.html": [ - "98051a40d5e5d63211a53d0aee085a5fcd20fe18", + "e7937ca6aa9d076f3cbd1e31aa137e8ee2778344", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-011-ref.html": [ - "98ecd50a6e1eaffd9bcbcc6bba82631b3840f38f", + "ed0cc6a26665382e10161d647428849642259317", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-012-ref.html": [ - "43e449b176437de403403e444ecc9d8313b65b83", + "30d1b35adc80f6040865fc7fbd98bc271f1dc398", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-013-ref.html": [ - "df622ec5dca8be9f9f21cd1414f2da389427dfc0", + "71ac1b68f1aa993593db933ad1661abae8609e2f", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-014-ref.html": [ - "b265ccf0fd8cae6c88bd06250cb00e5eb51857a1", + "91f41bef1f07b3ca226a5c14e2dd1f6288b54e49", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-015-ref.html": [ - "9e01632b3c87665bfec0a42c4d0f8e1fdfccb68c", + "ccf1be90843f8d58e7009e35cd02d96dbaea0bf8", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-016-ref.html": [ - "7b4e9c2007dbde35287169cfd478ac733bd73966", + "fe5ee74788df370fe862f72df20e987c5e282384", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-017-ref.html": [ - "bb269a55bcc6beb7594b400eab98fa90e1ad222a", + "1692962f4584eedf7796f49ed470940447fde445", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-018-ref.html": [ - "647f630db11d8c988fca4d8c909d2e3934539ff1", + "26efc38942f48855ff83f19b6594225962c2cc97", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-019-ref.html": [ - "a89dd9b76b95834fabbf16f3d96381f4e9036903", + "387cd46f47818257d8b551edd5189b61fe931cf1", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-020-ref.html": [ - "24fd13b5303786d571115a6006c5a389dabf9a1b", + "789954411efd3daf2da8f978f8df26a364654fa0", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-021-ref.html": [ - "54e351ab7076403fe832f458d9a2a3dbf4d128ff", + "f2e5bc0a61b9f1a6a14a2cb2a7dbd175c26412b4", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-022-ref.html": [ - "e98682e2236dfdf6e948ee0af4d5c4fea03e2fc4", + "97e05cbc871285d454fa5e7d85a182abe379a88a", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-023-ref.html": [ - "baec60d642d0e2cc7eca1197f0820c76c4cd075f", + "9821da11083d10a689005390e656561c6ced9c21", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-024-ref.html": [ - "2b90c4a7c12ff0854c14efc77566e141bf7ecae9", + "97072be75812fdbc2430d18a515c80c5b803833b", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-025-ref.html": [ - "66a82322864342a76ff6df88a325b3ce13717a96", + "dc4067b2ee989c0b6a77aba8e145e34be09615c1", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-026-ref.html": [ - "3336d85d968990286c52510bb21f824744cfc547", + "2288d24b2d8df271850d0f8c52d2629a216ed37d", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-027-ref.html": [ - "d80120889a721ed59dfbbad9d842eb524343114d", + "841187becfa423b656db005b8a270fec7fa5ef6d", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-028-ref.html": [ - "b84b18508a19ac4833e1880f32645d3ccb90b833", + "49b3b973a9e74ad9482fb581c7d0aba0f81c22d8", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-029-ref.html": [ - "fbfe1e5bb27cdbd6120c05e1ddabe03844d5ace1", + "90431351d1eb83112a10c1c7ea39ce14ee41ea64", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-030-ref.html": [ - "cfd7c75d09c440e44d1c25b123dae5f67aa25b21", + "ff16132f7620be1c3058743181e26de028f8946f", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-031-ref.html": [ - "b1d08787ccb4ee43b88de33e76b9d3ee69ea8c48", + "22f4248e14b82cbe087713a36510d4931e6274dd", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-032-ref.html": [ - "014403b86f2a2bbdf519dbda11c9c1e8b5111ec7", + "954d325ab1d4f0ac5b3eb650d0e6f1ecbdc604f5", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-033-ref.html": [ - "e8f4eaa14e4259437d3dc3a58ce66234c9106bb4", + "9d9a62d4c03775e4f5683f49a020e905bc502c6f", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-034-ref.html": [ - "e50327b5417f0ca6654a3e7714c24e5ead98f089", + "34e60b8d0e4a721ed78f59d3a21f2ed9e3108278", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-035-ref.html": [ - "bdf4769378101e56f10a04e8407cbafeffb2e7c5", + "5677f204846bede2ce5985b984cc713ca9196678", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-036-ref.html": [ - "5cc144a7231c2cf04798015c4342939c827336bd", + "37f93ef75d7444bf2883404d75257f181c61d870", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-037-ref.html": [ - "7262c0731f0a75f047c73aaf8c256a2cdd50017e", + "76eec8d9e7f849779c6e0bb11074c294434dccab", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-038-ref.html": [ - "97d466784138daa4eeb97a3b2c88533c3dd7def4", + "ed200844d2a43eec7b582fb209b247baf1fdfd26", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-039-ref.html": [ - "432ffe0a42daa875190ce3a0529b254882cb200f", + "cdcebf2225f49bae6a67d71820acf3ea8d4109e2", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-040-ref.html": [ - "5952bad2605b6b2d87a4faaa81768b9f2d8f4119", + "3f0d889ba820e7c6e49d2b465da720dd55aee3d2", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-041-ref.html": [ - "d7b50ff4de5aed52288abb4b9bb12bd55edf5e80", + "7a08ab078fa3fc2ed3ea92ffbf807c103655f5cc", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-042-ref.html": [ - "c0ff9158767ad2868372623cb1ed68356ac07d20", + "53ec5e04059edffe546558364e3b7c8af92c73d5", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-043-ref.html": [ - "cae195f4380a599bacafceace7cfcd41054f6d36", + "21aa8b04136be703c06841611090490ff681a200", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-044-ref.html": [ - "a0ff5072a7858f4d6c84ba4376ee6a9f17758c84", + "ba0d6024ac3b211199680664518412fb27d76afe", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-045-ref.html": [ - "2ff1795991c807ed532863d5088b173fdd29e296", + "34aa79125f291e00353b5d40ab10617533bad6e0", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-046-ref.html": [ - "e678b050289994fd2f66c4f895c975eb69cd6e22", + "1e7ecfc3a1f830e895d1498145dd20645efe57a3", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-047-ref.html": [ - "d55fdaf23ce86849e3e421c0731d00f816147cf7", + "c9151197ef4210876198ad96657fa5da7b658602", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-048-ref.html": [ - "ed20dee484d4e40d44685e66750107a2ef4d4d85", + "f7ddc4ae51b15aa91c455d63e75447684e96f664", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-049-ref.html": [ - "a00f303308dae7a40b2b88bddbd8ca88514e4414", + "5007d8ca278ebaa71943b78bd435a67a458d3809", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-050-ref.html": [ - "25e6845a4f6abf975c010016977192c462399cf1", + "2081ff797171ececbd773ed98ee521362bc15fef", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-051-ref.html": [ - "d37c441cfaf186ef6024a97bf43a7acf317e8ed4", + "5c9a646fffb9ce4ee3045506147585ce3e91336b", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-052-ref.html": [ - "b1fd46525f64209f215b3ea09ba751de40b6f4a6", + "a8664c4e2de47ec404512035edf50dc1dfb42390", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-054-ref.html": [ - "96e317f67c29505b96f183475ecee33d7fa9b13e", + "2c51dbf9f0981889da614f25f63a7561eadf22bf", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-055-ref.html": [ - "b9ca1117569317a86abae8753954698d60aea894", + "87b854124130f94b56bb9a0aea78242546b73854", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-056-ref.html": [ - "a3b48828093fa85b56b7087c073ec66a75293906", + "8ecd9a4ff7b981267894d6e36bebf622f67177b5", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-057-ref.html": [ - "32ec848d1bc470536d97d376eab261a18570c481", + "9c6114198625bea4afa60472c5c53bab8aba40da", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-058-ref.html": [ - "c4707786c7311646600b008ba000794e721e847d", + "93f4bdc2a258a493dc84b375ab4a7c64b7a3604f", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-059-ref.html": [ - "cd117e8b95dac17e4011f492eb5c0c947d1dcbc9", + "e20fbb238e6e2f9a9c596f991261ceaeba3cc071", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-060-ref.html": [ - "cca1ede073a3e4cda09372579884a96e1923b690", + "da1967dccfaf3f90e8fafecbadf7f37c28a82f18", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-101-ref.html": [ - "00e1c76c8791858a4e6e7bbd3c2716c9155ffa2b", + "9011fc5776c0737ba6b6699bf375dbe44f4d63f3", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-102-ref.html": [ - "c178711a5323038c495acb5f4014aab8b448ad0f", + "964299dbf8e3339456292531cfc1dfa840952330", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-103-ref.html": [ - "1c8a56a748c42214940db0defc979dbc2515b249", + "f41863de4f192367efdf8838de4c3df16240ccbc", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-104-ref.html": [ - "28b43a01fe8a762550f8de4c817ddac9047f12b1", + "448884e5d52b9a85377b3fdbe14b4216677030d5", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-105-ref.html": [ - "02782a985fc9a787cd4f6c996c03ff7f2f8ffa27", + "619d70ba425b9deacdc36e5c88c4f2dc4bdd3fff", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-106-ref.html": [ - "afe84dee807a69c451f5a53d794e498a165effff", + "bd2270cd5754b7586ff91474c8f10f743fc5e0f5", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-107-ref.html": [ - "f8b905e4cc3107d5db97d5181df105667819683c", + "9f88f920d01a69b21f40a3e535e442cc471a4d75", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-108-ref.html": [ - "48549b6e26cb2cb0a0310f1f8a39fb56f8b6e953", + "2bf97113b577ee59c97ecf7b6194eebabd98dc8c", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-109-ref.html": [ - "ab6d2f0ae21bfd85eea9759df44a691519da2994", + "a6b32633db13a3a595d1591dbf75781efc4958d9", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-110-ref.html": [ - "a3fced718e2ec995b12142bcd9ed59b4bbfb7025", + "afdbd00d71005be908f0cc4781ce851b75e2809c", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-111-ref.html": [ - "ed890d53461b40c6ddb967fd012e53354bbc0866", + "cf93191b4081b5bbd6ff78d7e0967d44ff211c4e", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-112-ref.html": [ - "9276f78ea27fcb10a6d7757a479ae8938d9837d2", + "3ca6fcaaf8705e499e3e987f11c8aa436bd047d1", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-113-ref.html": [ - "0908ad4db314bef5cf45ecdf121870f6a579e173", + "d17e0cf9c6685e6dd7dc16da7b88020dc6948af9", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-114-ref.html": [ - "81b520e92b90ba779d9cc7fcfe5f78dd2a768fcc", + "d9b724ccea3303f3720010754a22bdd65d0d7a3f", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-115-ref.html": [ - "6691a9fe5d878404e1e32568e472c80e9772cef6", + "196b8b91957c3d34cdc67bcc1db1c5986c4c47c3", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-116-ref.html": [ - "09dc7ad5bfadf3eb4abcd0cb871930401ad9249e", + "d2ce3e02ddd29a352e63c3189964362933fbc102", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-117-ref.html": [ - "4d0ef8aa43a947e36194e51174c31aa28c2c444b", + "de8f7bf9ef58c8f6a5e909a1729f76dd7261c758", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-118-ref.html": [ - "dc40726356d888ab254bb13db159c45f7f6c3863", + "6f62113ea0a8d93b2ed491e323f5b0ff597ac826", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-119-ref.html": [ - "7c76192c3db316c9f1be79cc83eab5b1f19e3af8", + "b8976951d61832aed47a67a4a9d1f71a66b5f636", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-120-ref.html": [ - "548ca3a0aae0dabfef7fc003499e0673839667ed", + "f34a1d33406f5c9c8f527526b8d9b74074122b95", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-121-ref.html": [ - "cbda5d19a590ea81b3c1d0d3f35b4d53cf77c516", + "2965542a55bbebec57fc7e05c016c710a2f038b5", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-122-ref.html": [ - "e06d61ff04c70d929030fc9a27392977120faa86", + "3a24b0d0bbef967b64f5702f30b28dc911982e96", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-123-ref.html": [ - "590bf6b545c05d527668edb8607b38e9fdf54770", + "50fdcbce5c05bd671fce8c452ac3cd9d9539d2c8", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-124-ref.html": [ - "6f67dfd75296bc3b6f706a98aba9e5c4b37fdcc5", + "07a38b2dea707cf6f569287c5d335e7a66e23d88", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-125-ref.html": [ - "f16254da9fd9e6e8f4ed5f2c84a67bf82ef5a9d1", + "e8b5a6d090e4f8d3898a089a499034877e4e8fea", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-126-ref.html": [ - "d1dac0f543907152f0ee96c1c46d2cd5c6445bbd", + "6f04db506dae229967ff9e38769d7bb77e97d50b", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-127-ref.html": [ - "da55714ea3ac133d6e3bb4bdc10476b1bae87ebf", + "23241e97738c48c71792280eb9d9ffd2958b266f", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-128-ref.html": [ - "559776c2da7ef62197792249851f12657c737b8b", + "8a2f7715f155482b343f38acd60dfa781c33e238", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-129-ref.html": [ - "d43170f031081ae11ceefc4ffbd97d6ce21ed802", + "d2b3581641f7d1defab8ed2ac57395f064c2311d", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-130-ref.html": [ - "32378dc5701e6fa32ce0016c6f9d09b192c91f32", + "9027b440184d79aa76dc0dcf5770f824d1a28a90", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-131-ref.html": [ - "85df82987ec58b3bb410fc3309a90024fc58e127", + "13512274a714248f7ea2279fb5706a59a9cd6134", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-132-ref.html": [ - "b4f1fae55943e476de46994a471207cd8c1d88c0", + "ebf840d32497b082e420cefac74114c20159a048", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-133-ref.html": [ - "7803190f8cef2b756e10b0608593c1d175f66868", + "7d6ab03816438ce8272152ebeea62ce6dea7dc74", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-134-ref.html": [ - "5cd0622498087e98acd4a15a1dbef9a25986b0c8", + "173069b4be21690131c6164bfbab372f99008ec8", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-135-ref.html": [ - "91d44448eb4bd36b78f328c59318a0e7367a83d8", + "f981ab3ed38ae3564c178ec711106073e60c864e", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-136-ref.html": [ - "b9ee97cbc1ed9f1a109bb7d6d80f405a9dd5ec69", + "a8928bd9c20ad80a704c0a9828c88b19d1583b7a", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-137-ref.html": [ - "d9ed720bae195413ed0b90f341257c6473fab427", + "0e56f824e0c01e3c9ea35a89daf9bf7ce865a9c0", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-138-ref.html": [ - "2aaacaf6da21f6e02c1003ce40d55b17b0a72bf9", + "eabbdf8ae823b4169970548e1924c00a243bfc88", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-139-ref.html": [ - "66fa726a173b4340fc7fcbc2839199ac09e9697a", + "1678e464c02537b659e94694b0537217ec16f050", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-140-ref.html": [ - "13800baa9c2d9c01885f5f9d66bb21d30990e726", + "25d5c939002b15b5889645ed03d569dff26345aa", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-141-ref.html": [ - "0b1ff80326d403a277a423ced718c954bcaf646b", + "a9952bc7f9c7c26316978424f1c82df2f9fa103e", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-142-ref.html": [ - "86fed9a35bde54468752f5fcce464e0345077ee2", + "6ab31c44aa3e97245527ee9ae34e3f45791a41fd", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-143-ref.html": [ - "04dc8ab13cd4f9f1fcd99e9e108adfffb68b465d", + "639b4fc683f042848cc44a26f12dd9d9613869f8", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-144-ref.html": [ - "6fb2f2bed2f4c8b2595ccefe1e1feed6efba9444", + "ea6a33d39008c3ada16372b72881422d6110f7af", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-145-ref.html": [ - "af9834760bf8a1f82b9bdf3a118a132eef7ec9f9", + "d8e5d2aeea1c79fe5479fd2d17db6c22ac2685e8", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-146-ref.html": [ - "5400c6bd0451b0765590039f2290a47f2f059649", + "d9d28d28cf9c031942bcec5c2e5f148ed496fd40", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-147-ref.html": [ - "6eff1730ccaaff33034bff9b5d617af67bde9d05", + "a4fa8dbfb7aee116f0d54882459fde136ce11c5b", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-148-ref.html": [ - "621c176e662487a8a81f1a1a24692efa8e7948d3", + "1a5488d363fc8af7443002171dbd01b080e41e41", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-149-ref.html": [ - "176615f12b05fdb7e4afd4f7c4ba02e50cbb1fe0", + "cc2add18e259e1c758b0bda4f85999840d0bad34", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-150-ref.html": [ - "6a2c20f9642ed13881b3175687483969c8a2df25", + "f719462e2a20a5a2ec49e738a995ce1f1f896909", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-151-ref.html": [ - "3924c237d769285bb144e92d3215299bef156876", + "762a0ca831f94261d76a597a5a10e5316d6d69aa", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-152-ref.html": [ - "714b5e967e2d474f5993f2c3a56ce710597c6ba1", + "144685c6bbf03b507766b61518af4b8d25e2aa32", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-154-ref.html": [ - "85d54902c388c25d348c2e06b6ad8e0036e9b50c", + "5656d7ea31eaaeafc682b3d1ec6467e2c7a8dd6a", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-155-ref.html": [ - "ffaaf69d56ed8385a686a48c2d33204ed7f9dcf2", + "b47fa8b9eed0d934d87a9b7a372a6fcd15e500e3", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-156-ref.html": [ - "33475d27cb580922b4fe7b8e9d5b6883ac22c457", + "fecda5f3bf28ddfd65d5d8c46e217d1578b015e9", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-157-ref.html": [ - "3837f8aa6d37403bc108607502a981f52f0df93f", + "7d90dd629ba0d71700c789d1dd5c3a55cc6d115a", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-158-ref.html": [ - "fa12e64fdc792b18535761af2dd5130654cbad84", + "79d65b05c7a6d3554aeb68aade25cd41b8e7a986", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-159-ref.html": [ - "8eb58aece931b942d10cfdf056a296ee83ff6b0a", + "a212ff1de3ca8e0c5967b9e74b51ab4a6d18a650", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-160-ref.html": [ - "abfafb5fa56f09bf8d2bc22da9c74f0874f56089", + "b5e0a3dfda4e89ab4432d1fdf8a21764ef871fd6", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-201-ref.html": [ - "25492b5b5690265df3533ddafc34e7ec2b81a439", + "a721aa3618675eefa5f6d74a3c6c7fc02140321a", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-202-ref.html": [ - "2bb4d5ff90acf9458e62cf1cee049d2bd8df3eb0", + "ed7535a061ac3370c6bd6672ac0f195e179bdd74", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-203-ref.html": [ - "762e98b693aa7669ba4da003c87c936c802f7e04", + "1e09467a3b6ca676e98fb507629033271d8c48ab", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-204-ref.html": [ - "ddd38ba9e2819469ac07a42663cb7dada5efcff6", + "363055e8d6aec82aeaa6d1e1ec82f44301b1cab4", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-205-ref.html": [ - "d39b514199939686a2c19139e15285d00b1ef797", + "aeaa5bae048386b2dcf3686b18b2d067cf5a4449", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-206-ref.html": [ - "c7a05a7e3f45b0ea39ba967310e0011e2f164ac1", + "b534e55c30eae1545196e27002822cb26faa6803", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-207-ref.html": [ - "51cc8438b7b481e21138009eecc1d0fe2785369e", + "ac12b1d29328eedf3c0695bed3de45fe58a6dd75", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-208-ref.html": [ - "bfccb9b6290705ed7720978325cf013ec17563cb", + "adea3b427a508aa379f7d0af0db284aa38a603f2", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-209-ref.html": [ - "dcc4d72b383bf883865a2c9f24e820d59b42cd77", + "dd3e251a5490acf5243cc1fcdbf3cee28f76f9aa", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-210-ref.html": [ - "83d35fb5d333c121fd07592762cc37ece4f0e88a", + "0c5df886d7b22720783ee7666246b64e1a0b55c9", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-211-ref.html": [ - "0be6c2a9569208496a80fc1ab97d8f260c48e35d", + "2629d6d6f8cbfdc85c6bbf364e6f1f8606c01a55", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-212-ref.html": [ - "0619ae75ab8541fb60173df9bef90699cd1a9135", + "e64e537f91c3d604d14484f7465c9336a7e4b2dc", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-213-ref.html": [ - "381626f54b42c33a7418106992ae7a27cf5d4118", + "3cb48d134deaf4fe719e905d3422e6ba19ad0f0d", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-214-ref.html": [ - "f28521d317a214bd95b952d2b6f5a8781b4f893d", + "225879ac2d80719a6788853b962182ab5cd86b00", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-215-ref.html": [ - "bf9c98000583c472d1ab8577da5db6f8c856e29e", + "3a4ee9ea8148d807120c935db414bd12daabe63d", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-216-ref.html": [ - "08355046c9c4fb23c72e802f3712c6c96ead0b63", + "0214ec9a89d98f4c298acc75f72351acf06e54e3", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-217-ref.html": [ - "c7b4f42aedf632c0e1b850b603603ad0a2d0876b", + "f61d8ce136c87d77a09e8980875595029d27c153", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-218-ref.html": [ - "8ad252c903c7f0779215c0be079f844d002555a8", + "7817514d87f703a36b868c407c7cfdcf4bb1bf2e", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-219-ref.html": [ - "927ce379ca64776db3e0a03d93451d99c0a9d182", + "a111cd6982e2c0d25dbe9a74550235c015a36b90", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-220-ref.html": [ - "76a7a6a8b7e7fb60bb01832df5bd26ddf5253ddc", + "4e86951613ae51c12351dd369a2c5e4df509b7cf", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-221-ref.html": [ - "a260cbf35b826306b3bb419c0e8ce3421815c38c", + "253fdaec63f183e44aa90650cf75f323659acf11", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-222-ref.html": [ - "7efb42b5523f5388e0f908e7e9531daca4266259", + "a601b9c7c005dacc949dc15de8383b8ecd02b2fb", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-223-ref.html": [ - "ede3ba5ff2ef93746335f44dfbefe8e6b760bef2", + "e418fb5afb995a614fbe1b72d8cd2bfa650d15dd", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-224-ref.html": [ - "0d8bcc8dcffc133db124c15db5c3bfd9f3a4a05e", + "9c8eb27061a79b39c72177fb2f54fd378c7fca49", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-225-ref.html": [ - "9d99feb3aeadb3159b155765b340c7d3867110c4", + "6e8762d5a536898b6e1063277bc832efb715ef9e", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-226-ref.html": [ - "92f991afef8c1ff387ee2ab5ea34149277cd4031", + "2b2c56aa8db12911b128d7b3a0a6afdcf097d602", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-227-ref.html": [ - "04e7bc2e7e63acd09aad10396c74dfb67b1ade68", + "afaaaaa7c19e8902e428543566c228a114d8e064", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-228-ref.html": [ - "419f9fda5fe495a094fce7b3db45d5ecf7204ce0", + "af9589ac6db504a781a0c84e0821255b9dbd9ec2", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-229-ref.html": [ - "8cce778e4dbccb4019fd82880d49012cdcb56712", + "a31dbd9d2ee764f3c97835d57efaf4ccf466cdea", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-230-ref.html": [ - "89a171a4440195f85b8e10e95b8fc85213da0748", + "236472a2fb58a0ae2dc53e0c2986a2f08fd13d43", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-231-ref.html": [ - "bced9ed97426c914e9f0575c1da0d1900470a2a0", + "1c395a98caac273895fdb50b6c34a6c2779e853c", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-232-ref.html": [ - "a769d5aae7a344f8a56bb387d3959be38c7920c9", + "f19e98bce23cbae706ae2efbf1ad655465646bb7", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-233-ref.html": [ - "b835b62e755aadfe5b7836b7515ecb75700f5b36", + "1090c732db119e04c1cc0b951645a8f22a808cd2", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-234-ref.html": [ - "9d9d59b179ebf6768391c7fd3d307d079950c0dd", + "0fdb453fa45674fef5af91421bbe6058d2cf403d", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-235-ref.html": [ - "8906b9c7463ad361fa91c2994a8c11e96141b0d9", + "c851eff5bf51a05c7458ff6150bedd8989238fda", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-236-ref.html": [ - "dd1ef66a86587ed7cdac155d942649ba7f7e3932", + "3bb958e39e1bd38fd949e0be6ec36e06e91e6644", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-237-ref.html": [ - "03dfd6eed16777fb8ae20783c97df0f23fa99eca", + "5215f1800957bc83e7599c722bb194993f4847db", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-238-ref.html": [ - "0360303a8046e02944a8f4ab79d0fa4532dca503", + "ed6acc979f85fc457c494a7d7608cf9a64fc167a", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-239-ref.html": [ - "903c626882b95e5fc4ccdc4484b20354290e8490", + "634a535e43dfa5a3c12332bab6e64e59df2d6e7c", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-240-ref.html": [ - "9b4dfb8dac13049809ef14dccfc6b316788dc83d", + "00d3cba4a2a05dd11cf1ccbb8e0da815fc1452b1", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-241-ref.html": [ - "223b5ac8ed6822f872757561525ad26f85827708", + "91000666dc3781981f795024d8c148cf2ec4c81e", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-242-ref.html": [ - "ad8215cee35cef56556c3b1893ad49645e9d16e8", + "a776859586236878c60c2432aca175c05e3f0012", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-243-ref.html": [ - "cc413ac885194421ac46dc72236c5c6a57f2d1c5", + "0850e9551e8f342ec9cae9937d511132c85dbb50", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-244-ref.html": [ - "7521a9d8237e1c3d635b9c465fa91b0f7b6138a4", + "b027aa73c3ccd3af1994b735b2ab608a7d21cde4", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-245-ref.html": [ - "41214af82b03ca7ef4b572a01b924ac144830321", + "7486452826230a7d977b96d0e2ef10baa98b12b5", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-246-ref.html": [ - "a935a3bb5b6028ba24266103ef19998ff3835c1f", + "9c77b3f4b31f208c07c238d95d460548fb791c67", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-247-ref.html": [ - "3ceb781cd3b9ee63ccaab4316f691b8a947b236d", + "6b3cd1fcc97c5541b20165760982f0ec00621427", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-248-ref.html": [ - "79f871f16994c38a9a1630f4bd4411b0c0bc7520", + "db60724e42f366bc2b31a39743b385dbf0202f04", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-249-ref.html": [ - "909abed41a81fda2cb8a64dc2664dbbe8dc1006c", + "4e75b2b46d9eaaa126aada1e056fddc857a60038", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-250-ref.html": [ - "08956fbccaca3395e633bc7c66afdb4c3a21cf63", + "d52583489ad92d7759f4e51b12b52dd9baaea06c", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-251-ref.html": [ - "7a98781f77755441fdb9fd389a6cb628b126d7cd", + "74a277c7873e6a16ce4001faf1bb46fb63974c87", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-252-ref.html": [ - "caa1a17739ac6c67764add56cbd4a4fdbd5c3f54", + "f1cb98c91b71b72d0792ae1f9be21b9d080b2485", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-254-ref.html": [ - "befda9e5ca50b4396b1a1626f1983d176f048edb", + "e748935588ebb417c147700d9b8b1c2817407b60", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-255-ref.html": [ - "941e356148670ced6d4045386e6fe63c4f42d7d6", + "50ff8d4b92cc4de37a03cadc93e66a3022e5d714", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-256-ref.html": [ - "d30c3d961b7de9005b4594055f989dbc1f3cb881", + "ac3b5b691aa64a4512e4a2bafd7f18bdcc405933", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-257-ref.html": [ - "b46efee683293a6310efa894b77f8258d3293b0e", + "1c5ccd91c0a9edb4ef50e0f87fdf83444e72277c", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-258-ref.html": [ - "47c8bf6101370c801db7862c3a21229b76c909ed", + "54038efd5ee6605ed2efab0259d86226d0086136", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-259-ref.html": [ - "2454d0fcdd565e7505788cc3674d993e962e7e16", + "dfd46a769e387a9f04e0d38ffd42a02d0493ced5", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-260-ref.html": [ - "343ef897742d1a0ff90960beb2410e61268e30b3", + "08c0a4e55f2c1b1e4f0c2d6ae5c942ea56b36c46", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-301-ref.html": [ - "ff94778e4a4779cbec8dd9cc9640c89397fade23", + "a94823f3904ee7d88337cd2966919cb17fd3d98e", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-302-ref.html": [ - "f24f424f19f305072ca33a197a15d30e09baa7f0", + "f9d1f3811da69f83e3b219afa96e38bc64eba46f", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-303-ref.html": [ - "35eada2ef5ae14bc55fe76ca045d2517d6808ed4", + "1bbf105ff2815626176dfd04555819d287c34e09", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-304-ref.html": [ - "72f433cfaa67fd1948a287708b435123243a3d46", + "6ef973b37170831c09fbeaa143e59fce36ec8dfb", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-305-ref.html": [ - "1e73473961579782f19098f898dc0c0d749eb6f3", + "9145c971f8cfda5427d9cda865bd4ecbe7ceb33e", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-306-ref.html": [ - "9c959b60e32655fef66046fe1ed32c5eb1e00cea", + "4f35cb4e402fcc3e18503d4661dc8efd09feb729", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-307-ref.html": [ - "4c3c721b0e80b01a1a5f4af2d33e983ca6637d57", + "8b9a78a45c262bb3fd588b545f29585805d5aea9", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-308-ref.html": [ - "3e775df2c962cdda7a0622f8209ec8031bea1c92", + "23690e889d3f1f49c32af6437fe61788aefaf93d", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-309-ref.html": [ - "7959fae8194df703030f4e7bf56343b52ea1a346", + "c5472f5c11519578407244b9fdf84c9f3d7083fb", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-310-ref.html": [ - "8b45522b0967d00c42fee6567ef0c890525da5f7", + "c56843a746514289a1a692f071db3d628ac04f66", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-311-ref.html": [ - "2ae6af75d7393e329aefd85adee7fc3f92d6032a", + "b653c370355198c31e279c9d9f221f461b74a71b", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-312-ref.html": [ - "db0c8ce820fa3afac190bbef8fa5932f344058e4", + "1506bdc6f1666901f45ef8a23ed9797a3df22f7d", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-313-ref.html": [ - "662d5cbb394e0fa9594903b8c2f8d36c70803f5e", + "148bcf8c6d25f6be7fb00230318e6dbf5be971db", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-314-ref.html": [ - "a4f427978805c1b0bd5f933da51239953bdb0a7c", + "e0f2c303941029c9ddb7e7683339ce8416c23df7", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-315-ref.html": [ - "cb91038bcdfe35fba65e30a7af05e0ee41403698", + "2ee0dddf0bea3d5dc5987b794ba0c44fc8169d9e", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-316-ref.html": [ - "5f20404b6a12134dbb5a7f14f22a29f550257431", + "0305fc90c0b987ab4c56b3377ca4df5c17afc3bb", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-317-ref.html": [ - "ca64e9029b354553f2c7a66414331ffcefa24caf", + "52cf773020b81c4bf0478f545bbb8c9ada9e89dc", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-318-ref.html": [ - "aadfe7218f2fa402c597149adcee1c2927fb3238", + "6e0f2caf8104b26e218684233ca83c0ba6f4599e", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-319-ref.html": [ - "d2111e4576688aa24d3cc963a81dbfd17c4a9a48", + "6375fb18907db484237daf4fed1cc1626fda7b3a", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-320-ref.html": [ - "9f88e00eba1e6cf1d94f7e2cefbe10284a760a03", + "cb8210ba004bcc951a8aa981fbe399f5edae1d1f", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-321-ref.html": [ - "aadfe7218f2fa402c597149adcee1c2927fb3238", + "6e0f2caf8104b26e218684233ca83c0ba6f4599e", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-322-ref.html": [ - "6adaf96ddaadee7dd632450c54d46d12820a56bb", + "5c6a8231bd15acd4c759b8316e11562c37fd4701", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-323-ref.html": [ - "fefd0048cd72bf1d10bdb072f42ea2b47da61588", + "8bcd7ff086583f404d1883f699f00151b81880a3", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-324-ref.html": [ - "3e7e5d8295f483575c798021e1bc2c6695df5037", + "1ab3feb77c5d72103f8369f3914a43a09dc7eddf", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-325-ref.html": [ - "840a74f1f2b1bab2035e764f83d57acb8af89eed", + "909be0b380588fde7307aeed549194416b252727", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-326-ref.html": [ - "60ad16c5960b55bd6395b2b294d890b8fb52ceb2", + "a357dd2dd62be9d93c69f78763bf8db804a420fc", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-327-ref.html": [ - "ab2d33f8943ecdbca2b052d7c842481b44d32a3a", + "fa47aa8bbda8ca05ccffbc4ae5fd3075412c604a", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-351-ref.html": [ - "407dca44f317ef72311105ba054efdce7f18cb94", + "47c3cfaac2f2365c24524719d64f6a1e093633c9", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-352-ref.html": [ - "5a20236d4bacc140f79123df5c8e228f1bac50db", + "f40ed65f7a17c1231915d720fb1b457471411bc3", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-353-ref.html": [ - "936abd73d147abdacfb5572e181401a418d0f4c7", + "bd60a9f0ea1d13be1df1b2aaa80cb74db8d9810a", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-354-ref.html": [ - "98ca74a7654450574c35c8d7bb5abcda1b64e1fe", + "b2f1ec32e2790f1c0296f62f210d28a80f8ebb48", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-355-ref.html": [ - "a09cb345f0310c9ffc693f6290d5185948fd20e5", + "2184ee89fc0e2c70b1ced5e875320624c271cbff", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-356-ref.html": [ - "96b455cdb8aa899603f181f440a0d1230ec3f388", + "79a91cf098a1fd3ee1c3ff4d0b1fcfcb05711332", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-357-ref.html": [ - "9e7128662c0c1507e57a114bdce3b37a6136ab20", + "b60bbd23c5e94d9a9277a0bc73dc7354c8200643", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-358-ref.html": [ - "b72f18b80a8a9224e7ca73867942e0f555e03e6a", + "ca08db956cd731e55c14c911a9b1957a3467ee0f", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-359-ref.html": [ - "9d2a836c09e9905daafdc05c2d7c769bf5a7532f", + "dc349b1cc59751ea1f1eb47b7319a204f77fbbed", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-360-ref.html": [ - "4f08c8316c5b9d1a732fbd379df79cd9206fc50a", + "22d0d65299d0056806f294521e6d17329ebc53da", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-361-ref.html": [ - "5d626688ecf977cf01a8a6ad4565344eabc428e3", + "e72b0545026f6e95df50483a974d92789f1ee33f", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-362-ref.html": [ - "a05c60df912aa02ee25c1b163967fd061fd99126", + "16b48b30e974e404649527e21dbc9290949af50c", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-363-ref.html": [ - "3c00fc197dc5f874f45a09313cf015e6ae2982be", + "3ad316067e0bd27ad8a9135129357deaa1006ddf", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-364-ref.html": [ - "46cfc94fe7b4639de38f2d4d28b86f6c5b7f09d9", + "f91cd241c8aab34a1efbd9bb2a07b5dce580c012", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-365-ref.html": [ - "380d9e937766f6488d3e6d0a80be8b16de4aa7d0", + "130b3497aec8a65e06a863b8e9686d9b64311bdd", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-366-ref.html": [ - "cd0c1509c0dd582e1e0ba93c0d767ffcdff07d35", + "42ff6aeff4a7a1d9780fa8c030d601a4005cee36", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-367-ref.html": [ - "b6ba09b94c7851f934b829d08536765dfc0c6aac", + "9c977ac12309fe093285b5fa912515226e9bed7e", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-368-ref.html": [ - "ca92c50269262dbd33aae5ecd18edbb2fb468258", + "52221442f7e78b8035368a0505f37fbc22e447e1", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-369-ref.html": [ - "28cedabcb8b7ed0d0170616eef22be91d43ce323", + "411fbd29255bc92888a4dfc33d383bcdf858a1e9", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-370-ref.html": [ - "263313f7b1aee491b10c6b7576f3354ca95b3cec", + "69b5560b5a382e660254066d0dee43e1e50f4188", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-371-ref.html": [ - "ca92c50269262dbd33aae5ecd18edbb2fb468258", + "52221442f7e78b8035368a0505f37fbc22e447e1", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-372-ref.html": [ - "0bc55a8d539505ef0e2d6e99c0817990036ec350", + "adcd3902d7d1d5f4dc68ff7bd1c497e937c87722", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-373-ref.html": [ - "ed311658afd4695e77e01d144651f48db5440111", + "6b01805dca82f6b31cdaa8069ffff91ee41a7bee", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-374-ref.html": [ - "4934e225a76baf8fa895d22dec84d0ef121331fe", + "bbfa958b113c949999ec1b5e1cf8f9cbe44c6f69", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-375-ref.html": [ - "49a81b26d2802c7403bdd3cc20efe8e4adb523f5", + "43bb3d65a467c8d859462a7de9c639814d9932b4", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-376-ref.html": [ - "f8fbf6bd34c9beb4d0aff52bc42fc9e8eb0e3e8f", + "2082b10b3bb833f71db2009a37b1df67c026137c", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-377-ref.html": [ - "6352246d42447e1162e3176f5954b9bedce9718a", + "9f2a402e337f3ec14d74e9784e07495a7bc9b5d0", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-401-ref.html": [ - "cd93e948d056fab8dc29f06fbae9514825311645", + "0c85555d49248e2a1dbeffeac6100181c04d1fb1", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-402-ref.html": [ - "de8b5db385084efc6be9a2a9ffc3dba311a12dd0", + "ae95057ad1f3635515e23a3451858c51f85af45c", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-403-ref.html": [ - "dcbac7f0703cf85ea3bd29d1f5a2c55f01aed589", + "3de49f9566c883819f38b9af04b89c2f529e8c0d", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-404-ref.html": [ - "edfca2b84cad28ac8c15fea68b6809b18fa4b47d", + "6a52b14ec25806f5796c4f2e36f0bd22ca06a91e", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-405-ref.html": [ - "14fcc1f842f7521ba20313e28c5228909f13ddc5", + "c374b87bc3b395ce10cf1d2713200ebfe89cba49", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-406-ref.html": [ - "38dfc4a3c8fbb23149a4ef2d8eb75898119a7b93", + "5a29446bdb02eb3caf45b20e0cef001cf57d9c1f", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-407-ref.html": [ - "64eff2df7a733b023ac02c53529a3376491b106c", + "54fb7a669f4df6f4c164128dadece8fb06ed10f4", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-408-ref.html": [ - "a4744d1cd4593cc24b88fc97a3d7597bbb24c7ab", + "94c02d1c23091626076e278c71c0c70272e6f4db", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-409-ref.html": [ - "ad1c44e6273561889c804e107bb27046fb01937a", + "40e22d4c8b1de49f627febcc8bdd55d632b3e47a", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-410-ref.html": [ - "90fafae8882ba7eb477b3b930db5c387886011ee", + "10fca339dd0e3a0312acd102483b7115b7ef1049", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-411-ref.html": [ - "e8dd0b85597e5785c3d26c55b4ad9246f6d0a128", + "5e760e6d0f21b8a79082ef6cde3f23b6c9784b46", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-412-ref.html": [ - "ebf1f62d351c9798c7cc894f3cb4dd68dcaf0c74", + "a9f30d512c2b24e7884e7c18c67cb378c0b2f8c1", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-413-ref.html": [ - "bddeaa2c509e6549b08d1f7e0eab99413f52c1fb", + "1d6e1dfa9ae074870f7c09d2c30bb76ccfd94372", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-414-ref.html": [ - "2617202eb60a187ee9f114518812d6cb7e66695f", + "d93d2bc3956fedf5f57d8d7af2985b45b9a655eb", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-415-ref.html": [ - "95013258b7b0af9be2a5df168b4e5143fbcd0494", + "24c138c23c75442641ad8311c4adaaac918b4178", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-416-ref.html": [ - "c9af121d22d26de9b80a5ce1f3c3936675415f1a", + "d78ad4ce20e02db2e61f1f1b3589d03e9c63d018", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-417-ref.html": [ - "b4a5d52b4fa5372adcd4b2b1c16f9c1144a27002", + "b2888135a1400f92c14ff2cee7928a69cbf421af", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-418-ref.html": [ - "7aba0d8fec5e89d9f69c538e387c32ff9506b977", + "f4d49b24e236860d85386d6c6e841159c9d9a423", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-419-ref.html": [ - "8297efbab097199cb23b297608fb2f8bc383434e", + "1e90ea2fa29c1bd3d72f9bb6e4c2c0b3e72d2f9b", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-420-ref.html": [ - "9f3b9e78d63700cbbe6f0656a1849a637de84005", + "ca7b886fa40f9f534bbf30c22e787772cf6e010b", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-421-ref.html": [ - "7aba0d8fec5e89d9f69c538e387c32ff9506b977", + "f4d49b24e236860d85386d6c6e841159c9d9a423", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-422-ref.html": [ - "4debdbacbb7f1dd818eb7832fa9d73cb9726a9e7", + "87cc19f042bf394dbcef95548a6d17a116c0c66b", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-423-ref.html": [ - "7ba120fb540d123986f1628784764f7287cbd6a6", + "7c05a90386200386a958a888395207e9935f58df", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-424-ref.html": [ - "9ddac1b2068a25505a2cc5a414fd81a32002928a", + "236c2e1334c4aa79205d12ad0c37aeb84592aa51", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-425-ref.html": [ - "a111190d00831ebbe5a49125cff7e3225e262041", + "4216bf5db3a213c9480a3a487167dba8a4edf588", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-426-ref.html": [ - "0d17349472f1a16cb30de8b8cd689a1f3ec40d01", + "87c4c1a425e0566632ecca242cc1f0cbc99346cc", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-jazh-427-ref.html": [ - "0c17cf81c3631a51bbf0a0d6391fce9c05a9fea6", + "c3d8829496f41b26cb5aa0399047a80f436a9fde", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-001-ref.html": [ - "7a3567b71b56f00c5a8f0ea7dcc729768ac0a377", + "fbeaf6e5375136c2a89bff4d694e3beadef52a8a", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-002-ref.html": [ - "1c96efdc175af86c278840e580b1dac3cee7c4b7", + "746f665c86b770c58b4d786cf1b002275718177d", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-003-ref.html": [ - "d817dfa50e7db6c8d289d1a5f15932bd704194d9", + "97bc6cc40fdd46020908294ea58a0727464dea36", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-004-ref.html": [ - "4fe105ae02a8abeb544aaf7ed1363d5ce71d51c4", + "19cb202ab9ce2ec6c224a4d1eb44d9cdafe6126a", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-005-ref.html": [ - "1bef03ef5e69c4a1dab6a5ffe26c2065b0a5e82d", + "10947767f4026083af4777250ab1b0cc3b82f908", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-006-ref.html": [ - "0604389d1798725e8acf1465a7a6d2aff3330915", + "5bbfb9886fd9845cf5389700447576afa06e25b2", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-007-ref.html": [ - "0f75e7cb4fcd4190c4abf43e8e9b1a2d81a77914", + "84164118f2048ed5e817830f804cbf7ee01cdf17", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-008-ref.html": [ - "0ce75763f345fec1eb940dba8cb1bfa0543400a1", + "8fa5deaba08d21529c440d28b033c135f0f2a903", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-009-ref.html": [ - "3a5cabe3db6de1a2b0bcdf18a14ab9602af7f0d3", + "ca06c0b0965c36318b96d12d6c7cb41a613b39af", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-010-ref.html": [ - "d005fe07f08a106fa7dd6896e22ed67e21c212ae", + "743808c2b928481e48011e52e29732074ba461d6", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-011-ref.html": [ - "f45a675cd66ed1c52bb83222a78a84ae2eef9b0a", + "4aa75f3393286770ba046bc16a90812eabfe55d2", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-012-ref.html": [ - "b6c051284b5483447a4520205d30a11382042b48", + "26886df3d882a6e0c18c81abdfc6eecc2fcefc5e", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-013-ref.html": [ - "2f1ddc50097159928adc8a7435ada5c076cdd67e", + "483d74f6317791a2e3167a57ffda714ab2bd0aad", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-014-ref.html": [ - "7bbb6a871f58a20f1959c94742d0c498139f526e", + "23592abb37c7bd2804e74674b1397eb5eb9800a0", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-015-ref.html": [ - "f26d62261c1c99d2428db1f5fc0d4193edea8f0e", + "05b3ce4a32f79ba44c96a8345d262835c432b47b", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-016-ref.html": [ - "c242f4fe7c2ea65722f6bcb145aeca997dac3e88", + "ac51a597b4bce4363ee7eefb8bf306177d716a26", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-017-ref.html": [ - "db17bbea7f7c87f4106b5e07ff34adab3ff8342c", + "e1dfad88511330021ebe092968c6e7a2383df594", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-018-ref.html": [ - "9fc85fec55f6bf1af02b6fd166759f2a6fac27d0", + "6ebc0e5d382f48fa94a642aad9eec29f8aee3e69", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-019-ref.html": [ - "25aefbd833ef5809846de03a4e1d2c544ae39b06", + "19118aec279d37bca7dbf572b42e0ea593e31bc5", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-020-ref.html": [ - "3e7f8053bf22ff4052540235d3a3a05644e2a827", + "f3b9f6fc5f144d291f21f8fef5bd593bd5971f6f", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-021-ref.html": [ - "075484b33519198f1615def2874de667959c9ebe", + "9e65eb182d0f9595afc5984d6f840fea943a9bdc", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-022-ref.html": [ - "52a0213b539ab9a2c65890d9c1ae18191265cc36", + "b219b6826864a583bdb002be8a95c15872e90604", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-023-ref.html": [ - "5d9570c5e8f7a0c4431f0e7ef75c58bd8af2b245", + "e5a71bde19360a284c154ebb0811654d08acb4df", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-024-ref.html": [ - "69913ca01c4433425284d01b09b28ecf6ce456cd", + "0ae22090199c5f0e9017c5cca964a5b0fb618f3c", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-025-ref.html": [ - "9b1064d2972c3d70b88fee6c68357dc8b7a733f9", + "5e405ea454a478e0f4121404bdd63d3dd69d417c", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-026-ref.html": [ - "3d236f9a9a4ffb7dcc2aa9de9e01686ee3a69270", + "ea2e9020b419707f9bd3ee4e59acc8319770a871", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-027-ref.html": [ - "9bcc5476edaff7356f2a2ec242932b0ebc60fc8d", + "fb9405fcc251cfc01f5912fec5bc888a94defe51", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-028-ref.html": [ - "0a4f1ece9b35a720d39c0cab430f430cc68e3cec", + "b327048eb81dd54b3183b966745a212c4ef5dd06", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-029-ref.html": [ - "3b94bedd6aee0c5992edae400c68edfe4c667830", + "4ac01437cd8456ec291e61c4cdefc5083ddf5c33", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-030-ref.html": [ - "10a99e94d8337f3dcefdc6561fcc8511bce3358c", + "bb5154614866b85312ba53e20179e8d2a3a83c95", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-031-ref.html": [ - "5519284a7ca098359dd87e6601f0bd301d332552", + "d646a53f169862867f111655e2b246365350b571", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-032-ref.html": [ - "de4d28c9e70c56e9147918d88c59bfc91aa0352c", + "ab4fc8400aebc6044723d69b1b289e03115b50d9", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-033-ref.html": [ - "968f3c294cafdb5fe02d1c8875f875b734783650", + "de6fcf89b897a56d20be90dec101211dbca3b7ed", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-034-ref.html": [ - "d4fd612c7ddd240af9330b563068673fee99a0e3", + "ebcc9d9dd81622e01481f0101bfc6b2741cc0e1f", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-035-ref.html": [ - "c5a02455a7c8db5acc08aac8b0954798d28e4951", + "cff9230fca672e9c3c979cada6a04b07c30f12b7", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-036-ref.html": [ - "cf98e90c04647d1386612a75191babedbc5e4877", + "75c9be5a4290efa40dc586ad28fb5ad3973f37b1", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-037-ref.html": [ - "8d7142902887cb0019e578139e7cf5ccce900edb", + "9a5a9cdaa3f7398896e40f28158c6f1f08b4ec1c", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-038-ref.html": [ - "8d0b34eda6f0b6a5c27f5c4ad4609b75584bff1c", + "2da58dc5566e566c53d830818cbc9b97c048dda6", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-039-ref.html": [ - "006f5f8d6b90d08505c7146c9010f4472a666be0", + "3cad606ddd3a44cf127019dd0a4b2705ee179172", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-040-ref.html": [ - "9ebdeef68a6258eb60aafc79c8ced80499fb37c6", + "250adf7a97125bb9b065888f093be45257e0aaad", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-041-ref.html": [ - "c4070959e33c252953ae16889fb367a35a651102", + "10bcbc9d200ceca399b80fef37b917f3a229f7f5", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-042-ref.html": [ - "bfbdc0d2b1512bcd0766750ea2cf10f4131e919f", + "bb5ea8cd4e1d737338b7fef1f1ff6293c3c4001f", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-043-ref.html": [ - "3241be77639d3eeb21257f4744070d43df7422d4", + "e3f9c3a486d4d101bd6ae26249d2203d9da4c761", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-044-ref.html": [ - "cd8a7c525b7544e583cb3a59441707711e849a57", + "14e5fdae0ab215446260bf7b7581b37e89703dc4", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-045-ref.html": [ - "fc7bea67a6d7d3f2a34e783ba1579fe6ba000cae", + "6c5e817c23b7b33cbd14a2ecd6b0eaa9377e5aee", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-046-ref.html": [ - "11988db42d9cfcdeb2c77d3bf209f5f97363a31c", + "4bd026da74ef7888b5ea3b3c980d3754e93391bb", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-047-ref.html": [ - "860e177f460b45b287e1dd806e123d1a7bc0d3a8", + "2a86455c41b029b3a0718046fbaa5896a0cc6fb7", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-048-ref.html": [ - "4797488b91e590f7f66e6003650b7929f697ecc5", + "ddd38f01956d37d0975c170f60164ffa3f632f80", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-049-ref.html": [ - "51048941c26f1c3c9954fb299873a42fe2b1964a", + "f1b2699c8e740c5a44a6faaa01cebdc01caacbe9", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-050-ref.html": [ - "8118cd95a5491578d9aa93bf966e1a2db6c2db33", + "e0020740a0be1796186dd401d3682d68531c96d7", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-051-ref.html": [ - "27d8a0204785fad056c88a4511e1c4f404bafae8", + "80ed59324ab0e2d22b7d8416c611f08b59701508", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-052-ref.html": [ - "775a05a06e02c457fb892dfa12ac65b949c0e9f5", + "1c5865e012f6859f457455e64623f012fee905d6", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-053-ref.html": [ - "883448521f199a5bab744134c9590b3f46221619", + "bd2ae787e04d829aec4909ffdc312a604e8b59f3", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-054-ref.html": [ - "b887411d24d7322f75f4b717c318985da5df47d1", + "98bf8e97d233de1d0dfc58321b96b9b21894577a", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-055-ref.html": [ - "2f51ccd750d8b735aa3bb4e19b84eddd7ff5e388", + "2039de67e20205bf84806e0b9bdb689e539a5228", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-056-ref.html": [ - "60db01b5721df290e3a9a4feff84dac2b90cfdc6", + "bf1bbd23d7aebb95b7f5831927a1ec110abba402", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-057-ref.html": [ - "babf36b2b3caf0957cdeaa9593de0074a49c59f1", + "1af1bec893e95c8899ed6a6b358f34593c1d0759", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-058-ref.html": [ - "6a471932016158bf0ef814720be6dd28a0664147", + "2944c0d167096a63acb4045c4aa70f5f78ec7293", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-059-ref.html": [ - "11b54bba5fe2d0094669c1851ef55649f758c848", + "055792030ddd1b528c22f5eb2615afe4bf2767df", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-060-ref.html": [ - "030e861fad6f1059e6d26474e12c13b85e9fae9b", + "108dd8bca00a48a5c5f1040c5dc00e19facc5d4e", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-061-ref.html": [ - "c2f03ed96e7a3ea248214c54c1ee386518c1ebaf", + "6130629d80312f5930c3c66652d7209af35b3320", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-062-ref.html": [ - "22de709f010aa1a80a06a3cfc3c22ced3cffb568", + "e8a757f5c6c961bfb5686323fef84435fbc8e785", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-063-ref.html": [ - "e115e62d459fb4d34a699a6cf9c1394907428427", + "f93b508fbe7bf93bd1e7b06bd5774b11f5185d89", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-064-ref.html": [ - "c335916b76b34def5a199e0e49c5a0d03ffc85db", + "08bdf3d6b8d4de46293cd9d7deb4baa1591867a3", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-065-ref.html": [ - "83490db73b7fb1a220e937f466b4e619de201bb4", + "bc1e33d70f471b70fc08aadeddbd5a1af6526e30", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-100-ref.html": [ - "023e652da3fa69b4ae969f6d9b29918919d7bbc7", + "46bc276cc2d3c79c47b9aaa490b8559ae146f71f", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-101-ref.html": [ - "7301ca44761152c96f5f1cd6cc941bbe7cbfe9bb", + "011386fd7d85dc5774ae53a170046a12c7131eac", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-102-ref.html": [ - "cc22b09ed2afdbe40dee07e1f7f9fe71e31eaf0b", + "797a8de3dc344bd9bcad519e4b96a67cee6e5e55", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-103-ref.html": [ - "b993108cf9e5453127a7b402e581efd14d362f9d", + "2765cd18ab4978d24189ea77d3cc9ab044e458ec", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-104-ref.html": [ - "b8a81f7d7ec0d0e9dda399583f22084df43eb082", + "52186ca2dd0173bb6f3b3eb206751ebdf9f40beb", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-105-ref.html": [ - "bb565544ceb5543e3beb6d593a7991538efd071e", + "e1b9dfb87d2cedc900001bd79045b6b7f3f28cba", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-106-ref.html": [ - "e2a293f0684f053f9dc6682a273668b1e1d2afda", + "7001ee3d7eed7188db71b6895f21945785707c1b", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-107-ref.html": [ - "143e7142110ed0896b1081ceb714717c23ad3f4e", + "17a2307fe096dca00dcbebe667a0eb3f1a99ce31", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-108-ref.html": [ - "149a1dc67fbafae0bffa2085c7e10270458c4f8a", + "cc24ffdce3c98f62712e4ef67c34dedf97520e29", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-109-ref.html": [ - "138e0f4e3dd4cabbf2a3a01f019ce0b3c2a41f24", + "bb95715c2ec3c6c80c222570a2f2598be09269a3", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-110-ref.html": [ - "052d066a46c2eae43339c77fc60106d544607848", + "be145d3f4eb38e7268054c330b12aab1108d22c0", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-111-ref.html": [ - "2585a2424fb1187bffff6c7822e7ce46e2859931", + "cac6f5171c076ae5f5fae7f589061d46248c9e1f", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-112-ref.html": [ - "7b31c8b3fd751b03891bdd47e07778332b6609da", + "31ccbfc44555cae3964a72db169f73a97335d150", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-113-ref.html": [ - "f48d9dc7230fb9f75d370ff21120ba0e8eab4091", + "b602ae19d9dafdbaaf7dab96f95237a90a423dc8", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-114-ref.html": [ - "ba735b1b87ebee9fd7580fd11b70a8508b3befe9", + "d3e0500417e19ff22b7134f3dae969462bb177a6", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-115-ref.html": [ - "18a8bc057eaea940f66477808d435b9a5b4c7990", + "58a4638b61f15107a665ec41f4e1e60f9f5cac10", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-116-ref.html": [ - "cfea8e4ae98e7ac8ec9b5381de403e5a10dbe57c", + "b2965f709879c3384d958c4140156a96b496a3a6", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-117-ref.html": [ - "1a892d55e0d92649dd00f0d48fd5a7ae6abc5c7f", + "30acdd8f84a5aac5013af76aa56cf66a9befb25b", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-118-ref.html": [ - "03476129d71574ffb522e87843f1601b6f25157e", + "fa1d1c23593e459b5069bd3d296a41e9c595b2de", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-119-ref.html": [ - "b86bf4992a585c06214da4edfd4135f58f970cc7", + "d5c9f5a0709a2261c18bd57670f0549298758a08", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-120-ref.html": [ - "95df83c029890c3f23b1f4472f4cf50f7dc25ed3", + "5b50582d2497c73114934b128a43cbf7b3546f36", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-121-ref.html": [ - "2ab38af029f3ea69eda98f827859f0e66e6e918d", + "92b039ca931350e8c15bb9bee02540da14cd2ad2", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-122-ref.html": [ - "c8f1bdf7e633702b2f574351cd0895e6e2178520", + "0a723df7282282d038b451332f97aa117ee81580", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-123-ref.html": [ - "a347248d6a6f023acac49ea5fd428b5167c20c47", + "cfb16937d7328397ce02f2f3ed0851c3b9276741", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-124-ref.html": [ - "438183f0c9ce89bf00bcdbf6a8ef447db208f4e5", + "1d2ca51477fa43532c5ada06428cef9e2b2b09bb", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-125-ref.html": [ - "38ff04b3636b2de8662d1f521ff50969c4689370", + "231471f94e018e85aa09892c46f2ac35ae64616c", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-126-ref.html": [ - "0611b6a660d7afff4a3f46319f19c80e422b1456", + "e33c94916882417aa60e166195a365ef36212482", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-127-ref.html": [ - "1df55b00af0c5aeff7a88a44b03e4862c09fa6d4", + "5efa6c71bba36f7170041c3d1b301dc7280c56c0", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-128-ref.html": [ - "81760762d51e17aec233231aab632f38974ce0d4", + "2e157db9718ab06de32df521cfd2b7da4ec8a01e", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-129-ref.html": [ - "baee15252aacda97168cbb113201f32b6446b41b", + "47956de87066b73292d85ba0e3319433b4b6739a", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-130-ref.html": [ - "cd3f3cc05dbc8736a1b2913215da8e364a10f686", + "89b2b3ff080b3932feffac2c6d51ec7aab408426", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-131-ref.html": [ - "4136ee49a5580a5565f3e7925b4516781ea63904", + "31ebf4294dfa6ecb3c08268d791427192cb2794c", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-132-ref.html": [ - "589e5f0712501b7a2e0e5a89c0265c1b95a538dc", + "c6bf2a9f25eca2ac13d9059b145279bed618bda2", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-133-ref.html": [ - "521c3418814bf2e6b91657d5063b8338ab421971", + "9fe0e47591a839f36138d7feded654b8a65871dd", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-134-ref.html": [ - "2217a05545a2ad75dd1a2dd29212e88cd311f04c", + "15e4c63a43216e9ded52ca0537b84ee66d855165", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-135-ref.html": [ - "3acee0c332b01f6d244e73777762bd099410ef01", + "cd08ea68a41a6b76dd2792fd8663e657478a6f10", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-136-ref.html": [ - "73e09dd0854efa0363f53de62aa4e595679d3747", + "e82b1005554e441271c70ca6ab16dcb3be70b54d", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-137-ref.html": [ - "2e8e137b7fc25fabc561916d7175ff89ef45a934", + "1c0e576e402424cf2c7f1fe623cde3fc81b82922", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-138-ref.html": [ - "2b522af21ef77df3ef88ae0ea86cfaf77e2dddf3", + "c9150ad00b2f549827eb0b29379617bfcb738fef", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-139-ref.html": [ - "f0c394d2e73f26930e5dc8596588482f0d83d865", + "c7f3349b8756ab59564d8e0a9c0b3b61e5f46ac1", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-140-ref.html": [ - "85f3c6421ee5dde3c05b91c2783c4fc866cc81b7", + "0ba1e2a2a9a1ec2962af5ae19bd1e3939a749ae4", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-141-ref.html": [ - "beed574968b11afd52ba67d5cce830d4f9dff5f5", + "74f3015d19e4e0a211f184e7dae4aa2494b0f595", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-142-ref.html": [ - "b1953c4807519a954305392264a0615b058e0197", + "05ddffd7f50c83618951733dbfd6a66d04a36087", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-143-ref.html": [ - "5b6cb0e16dc6a3307b731e6886a402d77f4d8d18", + "831456a95cf5350c2873b28507846b69cc97c2df", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-144-ref.html": [ - "c5b847e32add8bfe812d907fa6a0a92a65beafc6", + "3c6c4b88301f6f8632ffb1cdd5f274bcead0fcec", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-145-ref.html": [ - "d943d818ac02f2ddc3b75649a76a3c7814c26882", + "0f91ec8064517f43f301b6c56b4670d2ce7644b7", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-146-ref.html": [ - "82399bd1aaa78ac5b24476f29e2776e7ac96ac4d", + "53be2d5f640b776f595f817bc96900b443cefd26", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-147-ref.html": [ - "d1cafc77f72704a872ef2b08e470963c5990c9fe", + "6367b76bdbc67e0c8a15cf00b54dce0a8426053d", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-148-ref.html": [ - "bc3de90b9348fcabddd83cf78c75fa55ed6a87d6", + "0be0724b5bf25820538bddb7cee2786b1a42f472", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-149-ref.html": [ - "ea59527159e8f8735797b330d209b95bf8565eaf", + "e5d0443110f28621ea67af06cececc6c96e5d53e", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-150-ref.html": [ - "bd27727800bda06834badb2e109295c361b64879", + "600b0b8d00c4fc3b11873a60b926cbb2574b98e3", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-151-ref.html": [ - "69e11c7c8badb3a708fb09b4daf17d8b91cb10ee", + "79dd4c52d7419c14b2016c50a3b8862e527ec184", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-152-ref.html": [ - "3581f0ed526d8d1d0785bf43265b5c8e585704b9", + "9fb7af503f12e174afbeba772a6547997530f624", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-153-ref.html": [ - "0d91814703dc6b4d91095f8f9ce15521eb699475", + "d483c4e578288656064771250ee53432f9b7621b", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-154-ref.html": [ - "59ea99c078984f47c0e51c7f83b6252c803301be", + "b5fd3ce2707e0a51e144085c9f9901241d6544ff", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-155-ref.html": [ - "63f46942c37ede0d61470176837b75a28fbf7e13", + "77904c2640f40de518c3f2e785565898b4d92638", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-156-ref.html": [ - "9853f94256030470bcb77be4fd2a8204559c6a09", + "92154297443e63bb51d5d3700293a5f28474e662", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-157-ref.html": [ - "f878eb9910bb29e8ccdbbf7981cbd9a0c5a91b5c", + "c317587d7677ee95ad7c934843e931902f2458de", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-158-ref.html": [ - "0727d7274cbaaebfbc6f3f173dfde9347556d2f2", + "d820609a4a5c91f19e3855ca6b1a901076ed6d44", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-159-ref.html": [ - "d6bb71462e390e7c1738e0eee6dbd7fb1670d3c9", + "aa7f25dbce562ed8cf54d19d26978ac8bb079102", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-160-ref.html": [ - "71b626a5b97586ab21ceecdfcc682753bcf57998", + "456e69635ce8287cb6d62b0b075f43f1267e891d", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-161-ref.html": [ - "0e0b2cfb3d2aa128a2e50cb82da9fcd2bb01b47b", + "5fab2a70e85550b370cd4f27b408e7f440914c86", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-162-ref.html": [ - "26e527dae9467932e4e77181c8f3c18f0a198b5a", + "eaa4ef41a4166a5047b9ed3fb38e09be11c5ded7", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-163-ref.html": [ - "4d5dd1cae640049f9d859ece7caa41ff00d08785", + "ed4a12a713d71b5f620a1c7fce48db65c35f1a57", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-164-ref.html": [ - "83c6887fce02b6213aae7e24d04e1e93eb9d64a1", + "4e5ac8e772b2de2dd72a91931e08a22636be3281", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-165-ref.html": [ - "07701664eb05d4a61b8f182dbd78a7258674e7bb", + "87bade33f4990b74cb858ef5ae0b11dc168cafe1", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-166-ref.html": [ - "a0e99d1a76e5c7963eef84e9b2a60aa5a082aefa", + "79bd7faaedf9abeda9d3d5ae9285db237e64697d", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-167-ref.html": [ - "f8a658671a1e88573cbf411f6150399661437386", + "593a59c9cd9289ae5927da9e9fdf08182373cd80", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-168-ref.html": [ - "cf23d49241c625619d6d5f86a3af44ebc28b2bdf", + "d726b6fd0b03d5bd5a4e020eea51b3a7aa226e38", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-169-ref.html": [ - "96ce2b1daea71d4d0a99862211504aa443d1211f", + "851e5abb4a3c0a26c13449545c604a867eecd67f", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-170-ref.html": [ - "9c96aa5bfd8e1b2d827c9944df6e63215c3110a7", + "cd70131a2c5201f7bf913f837121752a4a5ad65a", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-171-ref.html": [ - "9a4ce833735590c344aedc9381c486d6f12b6514", + "94e79729d2d8f0bf652eac82b8e8af12d2a35804", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-200-ref.html": [ - "5271879d2d7d3d4734ceba4aa9c3d3a6bd7ef289", + "2fed07e8d53427463f0401f4671a233b9d6178b3", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-201-ref.html": [ - "72b4e3c82e0b21c2f1b8eb227f659c9dedd4a01c", + "11194bb8bfd84e794efdd45d29179a846e32d604", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-202-ref.html": [ - "f15e1f273068f1f38a99ffd087270ee65b0c2cbb", + "37ea7aaa94d0c42caa85888046eed23b3853acf0", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-203-ref.html": [ - "19ba7f7f78944c01f23f653c6c23f3034bb6dcac", + "347f2820667c583c99b05147eea2d3cfb020efe9", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-204-ref.html": [ - "75b7a9355ae854f1f9377e377ba5f1304d0180bf", + "ee5ef4ab69b1599edb1034c3f0ed85adf4ea6cc5", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-205-ref.html": [ - "6f5764e8e0877c18566bc41d2081bd84e2a01fb4", + "ec71e81f5c51b85606114adadee994567c3d91c1", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-206-ref.html": [ - "69405a6028f5f2afe2dbb2f03513f5b51cdfab42", + "c7de8c8360f8fc3bf08efe7e05a413324434b56b", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-207-ref.html": [ - "55300130d0c0cdd3be68aa091667906242a17dcc", + "c1b18822115c6c4d0cde21abbd1859aabb3674d2", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-208-ref.html": [ - "6445fcabbfc980ceffe1d88e18e6823fec1a9970", + "5f1b83bd22f0c1507da48dab4c8027e251540749", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-209-ref.html": [ - "a49b57ce3ebe3bf9334377d018b141cce373f947", + "b5d31a634f5ea373ba56ad3cb3c4bcf778191961", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-210-ref.html": [ - "126ae8221ed8e358fb9fb4c68ef594d30a9e2210", + "b157e3002f5cd17c8360b600f98722bd1069c1e4", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-211-ref.html": [ - "bad2d1217e497000538090982320b136fac72653", + "ffe63085189337296cecb0eebd5145a5f836977e", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-212-ref.html": [ - "dc2d6dd964d32816b6a297bbe1a2108061606b2d", + "5a547312f149737287aabe322c1bf84b1318a588", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-213-ref.html": [ - "3599f9f479fcee005c3fe796816370b7c6c86fc4", + "25a3a5cf9d48e0a779893eeff2af2c91b1297450", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-214-ref.html": [ - "ea4f7682e6c858f38d8a1e2d8d3bfcd5427f422c", + "de980091a75e052fdbbcadcd01c76696b4ce6339", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-215-ref.html": [ - "1f78983166beed5d98b9153cd57a84c8ec29668b", + "5f878c44adf3ee2ef1842b19b2c256e705496bfb", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-216-ref.html": [ - "84cc287ba9ff2d259695f03134f818946d22eebb", + "a0b5b98df539b1050eccde7e9026cf8fabd3e85c", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-217-ref.html": [ - "64e0a433b574717cfa02aeb412d134b5d75000eb", + "4fd7095a0b2d7c472397934f839a3654a14be7c8", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-218-ref.html": [ - "cf11691c520fd7412abbd52f7a9a13f296c80fe1", + "3d060f63722930bc9a4d12a56be3c7f72c471d06", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-219-ref.html": [ - "dd1946a8c6c1966fa86365ae5531c75c8590d24d", + "ca5624a027b28325ccdfcaa2050fca55a667977d", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-220-ref.html": [ - "5923dbc9c410d88041e5c3c8371adf52f67c1d16", + "435161fd27736472bcfcf11d24388bf8ef49345e", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-221-ref.html": [ - "733b2e2ebd0991882db66d84fa75652247fc0701", + "399ecaebd82a1da78fb8564543ef9bb61944f6bd", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-222-ref.html": [ - "24741badc71a6426cbe73771971942ca080fc13c", + "d39108f2db6f910e18f35739557141e0690e773b", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-223-ref.html": [ - "8cbd4fd27380da74f504660e198a37a8407480b0", + "135cd25270ca5eeb1f9564b46555cb5774da6e9c", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-224-ref.html": [ - "565825bfc88994f51a1ecba905e6bc58c51499b7", + "6fdd66e1db4e49d32655ab28702eabc0b9c88aa5", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-225-ref.html": [ - "5e271a1402850e5375f58cb2d43fe898a833692e", + "4399a689b0bb6cfd22d757bf1b13bc6d55dd45eb", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-226-ref.html": [ - "82d507846a82ee2a057603828fce9ea874653e86", + "316846e8ffe056bc009c8cbc4d116e079eeda28c", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-250-ref.html": [ - "b5bb2d407845a1aa382a4f2da3509052bc449e63", + "bb7537f87cef404164145f5e000dc6322e67de45", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-251-ref.html": [ - "cec3894665c9cb0c3c0ac4313a6c93fe21aae0d3", + "686231e021ac733f4d5540057cf2646267bfbe0b", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-252-ref.html": [ - "ee91e29430e972fec1915c57269648e7fd0490f2", + "d6c14aedf847ed2a32a8a2fb4d58207b8abb74e6", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-253-ref.html": [ - "f7d34fa6fb1c56cc1c73044633560b9c979db238", + "a5228ca9c7f8bca119e85dc33f6c701ff51b1be5", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-254-ref.html": [ - "02c752e7a986684db6823f27f4b77e34b9677f0b", + "8efabe720f379f907095eb8f473be716b73605e7", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-255-ref.html": [ - "659818a883bc1b39a671446d33577269b47fe33f", + "2c04950891af05fae8d72332c74598e6633a601e", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-256-ref.html": [ - "b009067d16f502bfab191e620f65a741bf15a45c", + "ada184c3d16765e14c5f6e0ee40951523da0efd9", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-257-ref.html": [ - "5380f3f3f0bdb047503c67137be493352aaa3d9b", + "0aeaa8593fdda32de9f1704c55080b68dda405a6", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-258-ref.html": [ - "b2ab2e0a372e07acb26100dc261ff6a57c7b6e6b", + "45b74979aadddaeeda246e640ce4433262c857e7", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-259-ref.html": [ - "c848fd6787aefa8a17587dd71e054c46094f93dd", + "0b2e96236358e339b0b7353b262410d8ac273027", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-260-ref.html": [ - "a0de95f30e8752077234ce893b7f4cc569b6dd39", + "8deb075b27bded41e8cdffaca7d0fb80f95679ec", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-261-ref.html": [ - "c9c2368ec069c348b69103e17fd6fef0fed9581b", + "5e864fcc4a8da9a497f284e2581de5e8153fa8b3", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-262-ref.html": [ - "f40b3e8111c0f4dc14e433424155a5bd5969b5d8", + "42bd273b5292d75b3aa800160cfe547b1e61fa6d", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-263-ref.html": [ - "364668d933d8f0766c7c460e1145b71b2daa9ec3", + "8266fc231640911d887a8fca0d39200acf4db658", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-264-ref.html": [ - "809b0ffc75a1762babec3bbe66356a1c777c87bb", + "40df086e64c785adf7c9a3817c6ebed9efb7c9c0", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-265-ref.html": [ - "2f8e1652773f4ca1261dbb2cbcab3e7089ad23df", + "798129f2a971aeccc6ba3ed47bae33d892d102bd", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-266-ref.html": [ - "ed1260ef32a74891de0041b26341c3d7dac6ad7a", + "1e04f7f746fd0efa656529dd663cf76717cfd7bc", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-267-ref.html": [ - "d2d1135e7da0f2be381d03f8a9b5d1601572bf9d", + "37336fc98693072cb91a20d2f4510e5fac8d944d", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-268-ref.html": [ - "9f249d1dd2c889a8f206e0e24c72db08216156bf", + "2c7bbaee5ae5479fe37561f45b456a1d5fe7c0ea", "support" ], "css/css-text-3/i18n/reference/css3-text-line-break-opclns-269-ref.html": [ - "53c8ec41f8430f597705579f20c935549aa32d60", + "26bca4cd34e696eb6914efbf085d16b6b1582d7a", "support" ], "css/css-text-3/i18n/reference/support/mplus-1p-regular.woff": [ @@ -504245,56 +518460,56 @@ "support" ], "css/css-text-3/line-break/line-break-normal-021.xht": [ - "ee3054dd34e4c29f357b89cb376030f670f30387", - "manual" + "6490bab71e762e042c5d37e7ad2b9852a53e50e6", + "reftest" ], "css/css-text-3/line-break/line-break-normal-022.xht": [ - "eeb12eefdb38597b5963edd2a825c013f9775f92", - "manual" + "82f8f3711c0e093f871da797e90c77d0c3f95538", + "reftest" ], "css/css-text-3/line-break/line-break-normal-023.xht": [ - "3c77de69e15a34f0c2d121fc24b214471f262d21", - "manual" + "125396df32776f1c067e09794d8f2c5d90ce571e", + "reftest" ], "css/css-text-3/line-break/line-break-normal-024.xht": [ - "0929b0a6ea4ad32973b932285dc0caa6d14a5a1e", - "manual" + "2abde5fd6222c694310acb77a3bf5275795ad59b", + "reftest" ], "css/css-text-3/line-break/line-break-normal-025.xht": [ - "af5bc3daaf4073de54216ee76dc0aca769fce21b", - "manual" + "e1327cb310b3f7d086eaae20d25074b57a45db32", + "reftest" ], "css/css-text-3/line-break/line-break-strict-011.xht": [ - "2d234bf4ecbc94714ff8e7210aaac0877f2cfdf4", - "manual" + "e80ccda18c1930e8e924afdd2834224cdf16c96e", + "reftest" ], "css/css-text-3/line-break/line-break-strict-012.xht": [ - "05eca502cd9e4cca6f4f738e114d78ddd48b2c99", - "manual" + "1862948eb970999da3f04be67b201f2147858c2a", + "reftest" ], "css/css-text-3/line-break/line-break-strict-013.xht": [ - "b5d301545b5a78f34f76c71b201612f45afa886c", - "manual" + "0455d630b3e9f0148dd2f04fb5b015c7b9a765f5", + "reftest" ], "css/css-text-3/line-break/line-break-strict-014.xht": [ - "1bc91091ff189a8263b5885a28bb8ea91fc5baba", - "manual" + "706edcddce64daa1ffbcd5f723006bca7eaa7fd5", + "reftest" ], "css/css-text-3/line-break/line-break-strict-015.xht": [ - "bb79f617a5d8e8ce15b108bef1ca8acc3e0220eb", - "manual" + "2e8430b3b941474982ee4a873caf312d1630b6d0", + "reftest" ], "css/css-text-3/line-break/line-break-strict-016.xht": [ - "578e337c22a6c2780a46c42a944d9baac8974e8c", - "manual" + "d792881c72c37a25e85166cfd92c77962869b2f6", + "reftest" ], "css/css-text-3/line-break/line-break-strict-017.xht": [ - "7c8eb755d6259d136462bea0bce074604b69287a", - "manual" + "f66c442d68fcb50a1bedeac8537ba69b20c815ca", + "reftest" ], "css/css-text-3/line-break/line-break-strict-018.xht": [ - "30cf4ad45d9598925149ef93fd07f11d5f2c36ca", - "manual" + "8f124452720b5b1be387b72f721aff36111c01d6", + "reftest" ], "css/css-text-3/line-break/reference/line-break-normal-021-ref.xht": [ "cc36420439dfb604810d5238e587bdb8d4a58a0e", @@ -505197,23 +519412,23 @@ "support" ], "css/css-text-3/text-transform/reference/text-transform-capitalize-022-ref.html": [ - "c352501eea41d84495fd2effe8d633f4ddba78e6", + "54ac0ea13177a0f5b83cc78e45dff7ae0a5b9f8d", "support" ], "css/css-text-3/text-transform/reference/text-transform-capitalize-024-ref.html": [ - "5f546e78e8cfffb4ff8aa81baec941149f2bfa89", + "0b980c465e158ae63376ec4e16e52868bf37d006", "support" ], "css/css-text-3/text-transform/reference/text-transform-capitalize-026-ref.html": [ - "49746b0021010a780182aee3239fd47b238cd489", + "6f49c3ec882b8eed89d2d9476280e35c4db4db6b", "support" ], "css/css-text-3/text-transform/reference/text-transform-capitalize-028-ref.html": [ - "7e65788a29ed20fe14394449b1e35a65d0cb258c", + "a5134d613b9fcf21ff9a5237390dfb825ded26a3", "support" ], "css/css-text-3/text-transform/reference/text-transform-capitalize-030-ref.html": [ - "26af14c357f19f0807cf340fb1c79a737a7e9886", + "612ed0046e6a8ed215b6d669e6a5a11a7aab6f13", "support" ], "css/css-text-3/text-transform/reference/text-transform-capitalize-031-ref.html": [ @@ -505345,43 +519560,43 @@ "support" ], "css/css-text-3/text-transform/reference/text-transform-upperlower-022-ref.html": [ - "1523b79ac23e7b23ab570a05969a1bd28c12e6b0", + "4713991eeb6456f769918ce37a28074c01c811c6", "support" ], "css/css-text-3/text-transform/reference/text-transform-upperlower-023-ref.html": [ - "085d041ea605c8100e870c57e2dce2fffbe2d338", + "896b97a07e24aa6a785eb0cfbe2be7735cf75ac7", "support" ], "css/css-text-3/text-transform/reference/text-transform-upperlower-024-ref.html": [ - "a219117d180cbb1afac055d878f78f5fa99a5291", + "dcd73e858ef1e6435ab94894c115a8c8c551fa59", "support" ], "css/css-text-3/text-transform/reference/text-transform-upperlower-025-ref.html": [ - "1d15969e1f678a013eda00df35c05d75f9a041b8", + "3c8336d6a12fc6780dbe58a98fdc6c1d345e55b4", "support" ], "css/css-text-3/text-transform/reference/text-transform-upperlower-026-ref.html": [ - "895f10347505315df635aa9d6786fb2fd4d99967", + "f8746156a2d52e7cca59246b5ed875f5b1568712", "support" ], "css/css-text-3/text-transform/reference/text-transform-upperlower-027-ref.html": [ - "80536f02c7c2ca4730a640c9bc3e927cc1307b88", + "f98a8fe32d3d41012164a3e06e0d707d5e2a0bed", "support" ], "css/css-text-3/text-transform/reference/text-transform-upperlower-028-ref.html": [ - "52fcd9b5568dd5049fc9d306d86421a799bb1ca6", + "ed7269d1460fa0d88c99a2d3afb832eb28a11591", "support" ], "css/css-text-3/text-transform/reference/text-transform-upperlower-029-ref.html": [ - "cced9320f18b9a45c545358861469d8ed90bbf64", + "fe97bf3f646130d5cd970a0ee1faa6f199976db7", "support" ], "css/css-text-3/text-transform/reference/text-transform-upperlower-030-ref.html": [ - "bc768ccb960d209ab69ae7c325c2fc1d223fe8a8", + "828b1aa8c663a83f071ebe3f26cca4886c863675", "support" ], "css/css-text-3/text-transform/reference/text-transform-upperlower-031-ref.html": [ - "497106ad50c1b812df29ab66718aad293853f928", + "5f97cc8f6e6e5ea8f226404ef4f54a5bf5d68039", "support" ], "css/css-text-3/text-transform/reference/text-transform-upperlower-032-ref.html": [ @@ -505405,23 +519620,23 @@ "support" ], "css/css-text-3/text-transform/reference/text-transform-upperlower-039-ref.html": [ - "2e676de1c4d66f0ea7b04200948a8603a242052d", + "4f084f2c11f9f069513005a47d97937e6ab0ebbb", "support" ], "css/css-text-3/text-transform/reference/text-transform-upperlower-040-ref.html": [ - "8197501eb9c7e2790010fcfdb9798e95c63434f1", + "c24495a130ee6040ac2b8a3425398897dd58d494", "support" ], "css/css-text-3/text-transform/reference/text-transform-upperlower-041-ref.html": [ - "d6dc73b05adc4a4ee42ea7804bf18d049724e0cc", + "e8e6ffa7789f1b539ebced53ac361ffae242ae50", "support" ], "css/css-text-3/text-transform/reference/text-transform-upperlower-042-ref.html": [ - "0124f4c091f6f989d5d5195b9c750b8d65761b46", + "e23836e93c1345ea95fd0fa952fe689eb5fe352c", "support" ], "css/css-text-3/text-transform/reference/text-transform-upperlower-043-ref.html": [ - "5be7272be32beb68527fd0652dbaef5ee3dba547", + "bb0c8802a210ddfb96d637de8430ce87bd5673f5", "support" ], "css/css-text-3/text-transform/reference/text-transform-upperlower-101-ref.html": [ @@ -505429,15 +519644,15 @@ "support" ], "css/css-text-3/text-transform/reference/text-transform-upperlower-102-ref.html": [ - "1185c3e6fa6ea2f31b44531c2aa9c95429f8e7c6", + "34f7b9bbf8808c1ba6e3a0dc873d326a93c63adc", "support" ], "css/css-text-3/text-transform/reference/text-transform-upperlower-103-ref.html": [ - "01162998d51e7906110266433db7068b1baea31f", + "268f2a35ce4e9401c848dc92709ef62270fda2d9", "support" ], "css/css-text-3/text-transform/reference/text-transform-upperlower-104-ref.html": [ - "314ec1511f6df616ae8dfce568bf37418a7fec2a", + "70be73fa0bdc30a16f558af3638abb8919bdc928", "support" ], "css/css-text-3/text-transform/text-transform-capitalize-001.html": [ @@ -505485,24 +519700,24 @@ "reftest" ], "css/css-text-3/text-transform/text-transform-capitalize-022.html": [ - "39faf7ad279b2edae3f92c1efa90bdcf3bfbca2f", - "manual" + "c0d376b678d2c7f481c217c5e0e21d1ad72a07df", + "reftest" ], "css/css-text-3/text-transform/text-transform-capitalize-024.html": [ - "2ae8b9db1ab829f4514b1a00d44186484c208ae2", - "manual" + "00a760f11cfb6e473ac66dfa0dcd4dad9105a230", + "reftest" ], "css/css-text-3/text-transform/text-transform-capitalize-026.html": [ - "8f6c26bb9d5553686b1a78c69de0c86e1c80b3fb", - "manual" + "0dcd645f1763dc1881a8a33cc71d424457974142", + "reftest" ], "css/css-text-3/text-transform/text-transform-capitalize-028.html": [ - "34cdb793f998b85df86bcb3f04d4339769df080d", - "manual" + "ea4f25c84173531fd39ce0fd8d829d3959010be5", + "reftest" ], "css/css-text-3/text-transform/text-transform-capitalize-030.html": [ - "8a406ba06364a3c65831d507932f4c03d0f33a08", - "manual" + "97b4c5282492c12abdc22ba482065c1c1cfc8460", + "reftest" ], "css/css-text-3/text-transform/text-transform-capitalize-031.html": [ "5ca7083777291844f48f3438dba446d81fc491de", @@ -505665,44 +519880,44 @@ "reftest" ], "css/css-text-3/text-transform/text-transform-upperlower-022.html": [ - "67feaa6b40cc8ca077e4ddb4f13c3d8b19982269", - "manual" + "9433fc0e1bee985744b93cbf4c7d4bd064a76273", + "reftest" ], "css/css-text-3/text-transform/text-transform-upperlower-023.html": [ - "ffdd1cacd8e74242ef6dd8fd3d49903cb103e084", - "manual" + "d862d2110cfa9d2b43be88d449554defe031bc8c", + "reftest" ], "css/css-text-3/text-transform/text-transform-upperlower-024.html": [ - "ef84034d8443f6131c752d5c3f507aac01a8f1b0", - "manual" + "9656ccc527283249ddd329e71735f60b0066671b", + "reftest" ], "css/css-text-3/text-transform/text-transform-upperlower-025.html": [ - "e33cf27f914f10742156229e680fdabc80b74712", - "manual" + "f35e2bb9d5c26222403d2c28f54965d204c473a5", + "reftest" ], "css/css-text-3/text-transform/text-transform-upperlower-026.html": [ - "62a94473f0063c158798deb2f83b0cc313be00cc", - "manual" + "6e74ea15c8831784e092838a8f3032813c2b8a02", + "reftest" ], "css/css-text-3/text-transform/text-transform-upperlower-027.html": [ - "e5f77a1750a78629c75a2163dac6104a608a89e1", - "manual" + "36e79eb50eba97dbbe07072b854f59b68a713267", + "reftest" ], "css/css-text-3/text-transform/text-transform-upperlower-028.html": [ - "0b1d929640623681b773ddde0674765a790a9810", - "manual" + "163cae8a147d42e755f157cbef565dcbe979af5c", + "reftest" ], "css/css-text-3/text-transform/text-transform-upperlower-029.html": [ - "6ac5f49b92e630d554bfb04268964e8e95b2885e", - "manual" + "11ae726acdf724e4562efcb1e034c06868efb0a0", + "reftest" ], "css/css-text-3/text-transform/text-transform-upperlower-030.html": [ - "372a955520f1eeeea13e59f5c68b03dd933cf9b6", - "manual" + "a56d8a626f0e0ad14b90ea6313cfbd80f8fd09c6", + "reftest" ], "css/css-text-3/text-transform/text-transform-upperlower-031.html": [ - "3ae1baf7459f614d938b803eb04d319e2b61bf47", - "manual" + "ca2206f1553f2bdc9474a1d781236fe4933e69e7", + "reftest" ], "css/css-text-3/text-transform/text-transform-upperlower-032.html": [ "ba2bb0b7fea62621d217efe185d4c0bb2e4b775e", @@ -505725,40 +519940,40 @@ "reftest" ], "css/css-text-3/text-transform/text-transform-upperlower-039.html": [ - "ad200c6e575816cf2f4c6e8f970b5c086e8fe51a", - "manual" + "3f14c955c66888ca55f37bd7af2eea17a9c61187", + "reftest" ], "css/css-text-3/text-transform/text-transform-upperlower-040.html": [ - "19286046ec504079785f533c7aeda60fee8042f5", - "manual" + "9d1860e0036e7849d361c3ae939b02f1c23d913b", + "reftest" ], "css/css-text-3/text-transform/text-transform-upperlower-041.html": [ - "0a51233e6ebefc0a2a674f8e03a7230f91b72555", - "manual" + "ec8d3be73cd888c720e3a67caed1169d086a8f3a", + "reftest" ], "css/css-text-3/text-transform/text-transform-upperlower-042.html": [ - "7cfcc26a5bf44b99d84b3e58779a8b1b3c19ee03", - "manual" + "84a1e520077b4c16a3c224ae2a8d72f04bb113e5", + "reftest" ], "css/css-text-3/text-transform/text-transform-upperlower-043.html": [ - "b19cf9c0fdb9721ba94adc37999758b7164bab33", - "manual" + "a2efc359166472a612294909131f6e8f50e78e90", + "reftest" ], "css/css-text-3/text-transform/text-transform-upperlower-101.html": [ "4167b369a42dabb013bb4dd3ec08ae04b304bbd0", "reftest" ], "css/css-text-3/text-transform/text-transform-upperlower-102.html": [ - "d211d29df51d99d30cf70f922bacc82fcd9b9e43", - "manual" + "bd6e70af42f4f0701d91fe6f7337e94c07f58755", + "reftest" ], "css/css-text-3/text-transform/text-transform-upperlower-103.html": [ - "bb4d30de02ea4087f60d21cb3719ac0906e6f3aa", - "manual" + "75d5caa1384f91d72ddaa9ac99cfb774272a1063", + "reftest" ], "css/css-text-3/text-transform/text-transform-upperlower-104.html": [ - "d2f9a62f0f3726f2ac4dbb815253b5fa31e44712", - "manual" + "3a8b93dbbca1507311781081e33425e06a499a37", + "reftest" ], "css/css-text-3/white-space/reference/white-space-collapsing-discard-001-ref.xht": [ "a67bc4fe47ec809cea74476ccab6b0cebc1fdfb3", @@ -506245,23 +520460,23 @@ "support" ], "css/css-text-decor-3/text-decoration-line-010.xht": [ - "25ae68aa86b0ac82fc136cd519a63aa6bb14e8eb", - "manual" + "f6c9486f8482db4566b88ccaa4ace97dec8062b1", + "reftest" ], "css/css-text-decor-3/text-decoration-line-011.xht": [ - "8ceb70b6783aab4e8a3171905e14a440bfbfb9db", - "manual" + "8c99c10093fb1825f842d3cd781d71624ef0bf51", + "reftest" ], "css/css-text-decor-3/text-decoration-line-012.xht": [ - "a46cf998044eeb8c5640269a5271dd94d65fc215", - "manual" + "156f01c1d1fb2496313632c828a972c744da0e8e", + "reftest" ], "css/css-text-decor-3/text-decoration-line-013.xht": [ - "946442a5a864e9d0282ff3616bbe01c6da591cf5", - "manual" + "b82a9087d89bc3b9c7f8d10597627014fccd8165", + "reftest" ], "css/css-text-decor-3/text-decoration-line-014.xht": [ - "60f2cd84d6f82d1734c54916657f7a081f8099e7", + "e0d6dbb039133f5aee07cc8dd3d96942727bdec0", "manual" ], "css/css-text-decor-3/text-decoration-visibility-001.xht": [ @@ -506424,18 +520639,6 @@ "50f8c705b1ad913fac47bc55b2135cbc7af9dadf", "support" ], - "css/css-transforms-1/backface-visibility-hidden-001.html": [ - "5749eb265fc9494d7796dd9f7f9230860cde2276", - "reftest" - ], - "css/css-transforms-1/css-rotate-2d-3d-001-ref.html": [ - "e8eb884dee96dd6ed6af0b06aff76b45ef2f4996", - "support" - ], - "css/css-transforms-1/css-rotate-2d-3d-001.html": [ - "2e05a1efeb1793351e5d796b8214de01c6c1168a", - "reftest" - ], "css/css-transforms-1/css-scale-nested-001.html": [ "6c691c6f2d8e15e30501b95b70d18b9ea7ae32bb", "reftest" @@ -506456,58 +520659,6 @@ "6fe9344ae5622c5c008f42c2278d6fec217c0dc6", "reftest" ], - "css/css-transforms-1/css-transform-3d-rotate3d-X-negative.html": [ - "eb859bbcb173ae302c3c7cb5f5690e81b07a31a1", - "reftest" - ], - "css/css-transforms-1/css-transform-3d-rotate3d-X-positive.html": [ - "c779aaf85b4f33dc4bf3d8ada6e54c51096f6398", - "reftest" - ], - "css/css-transforms-1/css-transform-3d-rotate3d-Y-negative.html": [ - "2d9492f9b5f69cc9d21023439089000aba9160c9", - "reftest" - ], - "css/css-transforms-1/css-transform-3d-rotate3d-Y-positive.html": [ - "f50a5f21be606ca90dbb9a3538f43ff564d13c9c", - "reftest" - ], - "css/css-transforms-1/css-transform-3d-rotate3d-Z-negative.html": [ - "3e6535467c9742a11f61c54827f0ddbf694ef014", - "reftest" - ], - "css/css-transforms-1/css-transform-3d-rotate3d-Z-positive.html": [ - "16d72ad5010cf3516a50c6363a07b8646b11b579", - "reftest" - ], - "css/css-transforms-1/css-transform-3d-rotateX-negative.html": [ - "9d5649cb4f2bbd804a64b185c90c5b6a7c72fe8f", - "reftest" - ], - "css/css-transforms-1/css-transform-3d-rotateX-positive.html": [ - "966f94a0af946ec4fa454e8704e6ddd4cac6de02", - "reftest" - ], - "css/css-transforms-1/css-transform-3d-rotateY-negative.html": [ - "fd3f5d98babc3260a366a66806e3473141b2f07b", - "reftest" - ], - "css/css-transforms-1/css-transform-3d-rotateY-positive.html": [ - "dfac09d1d6eb4d008910a9df150052e568166d05", - "reftest" - ], - "css/css-transforms-1/css-transform-3d-rotateZ-negative.html": [ - "599642edf2cc687a1b6715b93c55446a71eb93f9", - "reftest" - ], - "css/css-transforms-1/css-transform-3d-rotateZ-positive.html": [ - "94f4aab20a0588aa1a7950e34191c13a359e55c7", - "reftest" - ], - "css/css-transforms-1/css-transform-3d-transform-style.html": [ - "1a4a80346a7b370582cdc4b6881a94400f2e4f90", - "reftest" - ], "css/css-transforms-1/css-transform-inherit-rotate.html": [ "bd9040254b9d7747d86d63b7a6ea706e813bd1a1", "visual" @@ -506532,26 +520683,10 @@ "8ea03b62199207e9899ef888f0fe5090475dc88e", "testharness" ], - "css/css-transforms-1/css-transforms-3d-on-anonymous-block-001.html": [ - "d9495d48657fd6d93344a638fc84a580f3c9260a", - "reftest" - ], "css/css-transforms-1/css-transforms-transformlist.html": [ "12fc74839b080f9e631d7ca9c6944d9b5f61b0b8", "reftest" ], - "css/css-transforms-1/css3-transform-perspective.html": [ - "c2fd4bc6b0b5bfd38bb95ccdffc77327cf96823f", - "reftest" - ], - "css/css-transforms-1/css3-transform-rotateY-ref.html": [ - "c66247807e289ebafa7c636b6ad43736e67fd5da", - "support" - ], - "css/css-transforms-1/css3-transform-rotateY.html": [ - "150da4bd6d5a315ef4d16b4319f00da613a92b93", - "reftest" - ], "css/css-transforms-1/css3-transform-scale-002.html": [ "4c242efa745c78d4ca2497c66839ee6a1ec8eccc", "reftest" @@ -507724,70 +521859,10 @@ "f736863abb2d59f10ddc9378b77e23e071394c83", "reftest" ], - "css/css-transforms-1/perspective-origin-001.html": [ - "572154f0bdee443b539078da26e8cfe30978de23", - "reftest" - ], - "css/css-transforms-1/perspective-origin-002.html": [ - "e3f7fa944327bf0bf25a3dc2356ad1037b5dc5ac", - "reftest" - ], - "css/css-transforms-1/perspective-origin-003.html": [ - "835ca240135b412e5900dfe132c1b02bfbe5f4d2", - "reftest" - ], - "css/css-transforms-1/perspective-origin-004.html": [ - "dd86a0aec4befbad31015e9091985eaa8999ed4b", - "reftest" - ], - "css/css-transforms-1/perspective-origin-005.html": [ - "d4dd0533a0d6fb7ff25a6fff051e87e24de0bdf5", - "reftest" - ], - "css/css-transforms-1/perspective-origin-006.html": [ - "6f674099b4d14b7334c505f38e4e84486257ffbf", - "reftest" - ], - "css/css-transforms-1/perspective-origin-x.html": [ - "f87f89163d10d549aa513284959b77bd0df50abc", - "reftest" - ], - "css/css-transforms-1/perspective-origin-xy.html": [ - "9750e9564d397d91734dd133e6879d9f06c388c6", - "reftest" - ], - "css/css-transforms-1/perspective-translateZ-0.html": [ - "b945d990cd3cc18a255787860d74d14ef533e5dd", - "reftest" - ], - "css/css-transforms-1/perspective-translateZ-negative.html": [ - "e0808d2e6f67c6fcd334167c5edc3ad76c270edf", - "reftest" - ], - "css/css-transforms-1/perspective-translateZ-positive.html": [ - "603b4dddbd085ce5c965e4f8f488329e0e41103a", - "reftest" - ], - "css/css-transforms-1/reference/backface-visibility-hidden-ref.html": [ - "6c9ea1dd1f462d101449e2a7694a5cdc1f08d56f", - "support" - ], "css/css-transforms-1/reference/css-scale-nested-ref.html": [ "68559a3b3bc1000dbe1ae8129b92349205eeab54", "support" ], - "css/css-transforms-1/reference/css-transform-3d-rotateX-ref.html": [ - "6ad0fd2fb09e33930851e88621977a991b2c64fa", - "support" - ], - "css/css-transforms-1/reference/css-transform-3d-rotateZ-ref.html": [ - "d6f2085e80a7cdcb2d65c63a6fc84d65aeb5e558", - "support" - ], - "css/css-transforms-1/reference/css-transform-3d-transform-style-ref.html": [ - "655ec4a651f435b70975547a01299a49762cb4c5", - "support" - ], "css/css-transforms-1/reference/css-transform-scale-ref-001.html": [ "c017e29e830d1d655da880de8724c3458908cadf", "support" @@ -507796,30 +521871,14 @@ "f4636bd7bb85a86d7c6f59e739df75043a1702da", "support" ], - "css/css-transforms-1/reference/css-transforms-3d-anonymous-block-ref.html": [ - "06844a8b244bd92827c17a09ee1ec15cdce452d8", - "support" - ], "css/css-transforms-1/reference/css-transforms-transformlist-ref.html": [ "a976a8edb91b0fd4f2c18c7fdb00627354a91670", "support" ], - "css/css-transforms-1/reference/css3-transform-perspective-ref.html": [ - "1a453a1be65039e17f4372c61380da6f2af9cfe9", - "support" - ], "css/css-transforms-1/reference/css3-transform-scale-ref.html": [ "fce64d9e10e7af63994d34b295e0d0ae79762858", "support" ], - "css/css-transforms-1/reference/perspective-origin-reftest.html": [ - "a2f6acf79f314d7da6d8fc68ad577e89f3408fa8", - "support" - ], - "css/css-transforms-1/reference/perspective-reftest.html": [ - "a2f6acf79f314d7da6d8fc68ad577e89f3408fa8", - "support" - ], "css/css-transforms-1/reference/rotate-180-degrees-001.html": [ "e6b35c523b9b57fa5306bc12f80170526905f3ea", "support" @@ -507832,10 +521891,6 @@ "572947a7e34bf440db2f83f31c89f39b5da74854", "support" ], - "css/css-transforms-1/reference/rotateY-ref.html": [ - "4addbed67635015d617c7691ff7da2fff369c61a", - "support" - ], "css/css-transforms-1/reference/scale-optional-second-ref.html": [ "d3524d4c978bb48480a2a25d0cdf5758fd661425", "support" @@ -507872,10 +521927,6 @@ "bea29c8ccd2cac51c277ccee401a11a421353e67", "support" ], - "css/css-transforms-1/reference/transforms-rotateY-degree-60-ref.html": [ - "67b64e0e8ec5ec125776915da9803fb6e9a17432", - "support" - ], "css/css-transforms-1/reference/transforms-skewX-ref.html": [ "6feb95f29b7f470061e1e8616e52c33b714bffa1", "support" @@ -507888,22 +521939,6 @@ "ec23d7eddd97de95c1b4b6f541fdd3b4ccad6161", "support" ], - "css/css-transforms-1/reference/transofrmed-preserve-3d-1-ref.html": [ - "97926e5fc0937e5488f36a0435d578f2e425cabd", - "support" - ], - "css/css-transforms-1/reference/transofrmed-rotateX-3-ref.html": [ - "46faa26de7a365a51e9e3d9ce530142a2ef88c04", - "support" - ], - "css/css-transforms-1/reference/transofrmed-rotateY-1-ref.html": [ - "2ab1c9960bf9441f9de3aa16aa8dcde374e54391", - "support" - ], - "css/css-transforms-1/reference/ttwf-css-3d-polygon-cycle-ref.html": [ - "22f7acd6bf3a4cb73f91693cdae616c68fd3ed37", - "support" - ], "css/css-transforms-1/reference/ttwf-reftest-rotate-ref.html": [ "dcf0192a219d323bb27e61f5d2d9a3be5a8008c8", "support" @@ -507924,10 +521959,6 @@ "5580c4db950fa6bc3bddb09e94f9bda721241138", "support" ], - "css/css-transforms-1/reftest/transform-3d-rotateY-stair-above-ref-001.xht": [ - "5a95f00a766653f3a68c1ec84830d8bd54e7eec4", - "support" - ], "css/css-transforms-1/reftest/transform-applies-to-001-ref.xht": [ "48533387eccb23c5e1d1269ba715c479f5f47a36", "support" @@ -508276,10 +522307,6 @@ "9b58ba77e70d599aec037ef89d9f72fab4b45231", "reftest" ], - "css/css-transforms-1/rotateY.html": [ - "a1b389081dd09489a1cbd5fb52a2e18727b1e5be", - "reftest" - ], "css/css-transforms-1/rotate_45deg-ref.html": [ "3f161e42aaf6bda0d106ab0bb962ada0cb10179b", "support" @@ -508288,22 +522315,6 @@ "19f87071776426a51e8134f07e4422f7a703aa84", "reftest" ], - "css/css-transforms-1/rotate_x_45deg-ref.html": [ - "0143a8cfb8c76c98d3e08e9f81d590e2c13e853f", - "support" - ], - "css/css-transforms-1/rotate_x_45deg.html": [ - "00510525c67d514565807460465c9ea832a80daf", - "reftest" - ], - "css/css-transforms-1/rotate_y_45deg-ref.html": [ - "75d5bea7c323ae530fc9d4fffb6de259a6e11b67", - "support" - ], - "css/css-transforms-1/rotate_y_45deg.html": [ - "e41a6b59d1869f222e50031a8e0a0aa3302c7c7c", - "reftest" - ], "css/css-transforms-1/scale-optional-second-001.html": [ "a53a99765a0763e7ffe37ff5897e8dc7e36e45c6", "reftest" @@ -508856,14 +522867,6 @@ "0ecbf50593b1516a04578fd0bb1c9da207eee968", "testharness" ], - "css/css-transforms-1/transform-3d-rotateY-stair-above-001.xht": [ - "a66bec955ff7e12b10211ef6ce416f785e0be2a6", - "reftest" - ], - "css/css-transforms-1/transform-3d-rotateY-stair-below-001.xht": [ - "760009ba27e0a91a0d73b8ae2a111707bc2f7fca", - "reftest" - ], "css/css-transforms-1/transform-abspos-001.html": [ "41c58cdcfbed9baeb29e1e3a5fcf0e22161d214a", "reftest" @@ -510308,342 +524311,6 @@ "5b6a582636161a11fb69905c5a4a77b96007c694", "support" ], - "css/css-transforms-1/transform3d-backface-visibility-001.html": [ - "2ea3203575bbc6c653905fe6bc6d548521be487c", - "reftest" - ], - "css/css-transforms-1/transform3d-backface-visibility-002.html": [ - "71faa8716fe696ecaa2e70c711f9e714e99f5c34", - "reftest" - ], - "css/css-transforms-1/transform3d-backface-visibility-003.html": [ - "9171c8b89b9858084c93ed72499669a0e2cc1419", - "reftest" - ], - "css/css-transforms-1/transform3d-backface-visibility-004.html": [ - "acb45041657193f3d96097b3be2049c06e8defa5", - "reftest" - ], - "css/css-transforms-1/transform3d-backface-visibility-005.html": [ - "52a73fe478925a8b785794364366f7edf9b23b14", - "reftest" - ], - "css/css-transforms-1/transform3d-backface-visibility-006.html": [ - "d509b6c4300ac3b883c38e6f0a00f433b6ba07a6", - "reftest" - ], - "css/css-transforms-1/transform3d-backface-visibility-007.html": [ - "e8a3b2a3b7931281c3eb1ba5acdacb970ba5e033", - "reftest" - ], - "css/css-transforms-1/transform3d-backface-visibility-008.html": [ - "4124ea300c512a547adb7e28afd1231243b52dab", - "reftest" - ], - "css/css-transforms-1/transform3d-image-scale-001.html": [ - "b917178efb0e42a9a96fcd28e5260f2a209b0c91", - "reftest" - ], - "css/css-transforms-1/transform3d-image-scale-002.html": [ - "977c3b936e343eabe96b4ea99019ec96b02ff63f", - "reftest" - ], - "css/css-transforms-1/transform3d-matrix3d-001-ref.html": [ - "50af5e396e42028b8c1baa728438d5bf5db19d08", - "support" - ], - "css/css-transforms-1/transform3d-matrix3d-001.html": [ - "7fa6c8e2b05e797d923ccc0d55b43dc7fcaee26b", - "reftest" - ], - "css/css-transforms-1/transform3d-matrix3d-002-ref.html": [ - "4691a3484059fbc64a558507c716f2705550afe4", - "support" - ], - "css/css-transforms-1/transform3d-matrix3d-002.html": [ - "473b11deb4410681131ccc15336dce42c8e9314b", - "reftest" - ], - "css/css-transforms-1/transform3d-matrix3d-003-ref.html": [ - "879eb325372a0d6c99b1ed3080d63730c68f28ca", - "support" - ], - "css/css-transforms-1/transform3d-matrix3d-003.html": [ - "1ad8263f8811fe4835731bd3990d8c2c7d5c601a", - "reftest" - ], - "css/css-transforms-1/transform3d-matrix3d-004-ref.html": [ - "43b649b62dc659536f277ba05c50e4462ce60c5b", - "support" - ], - "css/css-transforms-1/transform3d-matrix3d-004.html": [ - "0339c1b3e2ea7a539475e150d2c6c4a8e46be9a2", - "reftest" - ], - "css/css-transforms-1/transform3d-matrix3d-005-ref.html": [ - "420a858d8e22753ac1a6cd037cffbd1d1c00e91d", - "support" - ], - "css/css-transforms-1/transform3d-matrix3d-005.html": [ - "d56da7a6061bb5e1087f4faf82cbaa73b37ecc79", - "reftest" - ], - "css/css-transforms-1/transform3d-perspective-001-ref.html": [ - "8cb82025d031c4b9ca416d9a9c13699351b79d4a", - "support" - ], - "css/css-transforms-1/transform3d-perspective-001.html": [ - "22e2c3c8326a2f195ee77f83ac810d7b5abc846d", - "reftest" - ], - "css/css-transforms-1/transform3d-perspective-002.html": [ - "1b0193512eab8217f68e976d64237a346124b71c", - "reftest" - ], - "css/css-transforms-1/transform3d-perspective-003.html": [ - "00d524392491586606de44437565d543d9a93797", - "reftest" - ], - "css/css-transforms-1/transform3d-perspective-004.html": [ - "d70caa4d51df0c4f9b41ed2cb10d19263e8a0145", - "reftest" - ], - "css/css-transforms-1/transform3d-perspective-005.html": [ - "091745f6ffcfd1c1f85e60590f1b232f348ab146", - "reftest" - ], - "css/css-transforms-1/transform3d-perspective-006.html": [ - "090bc98bc77e52ce66300f96db022216854ac475", - "reftest" - ], - "css/css-transforms-1/transform3d-perspective-007.html": [ - "b458c283c177f00f429a643accfb6b3cf27a83e0", - "reftest" - ], - "css/css-transforms-1/transform3d-perspective-008.html": [ - "3cc060e83b1d8d71a3d4d7bf23cd1000d96819b6", - "reftest" - ], - "css/css-transforms-1/transform3d-perspective-009-ref.html": [ - "8ce84fb8ca493ea7d61b4aa8a50129f715840927", - "support" - ], - "css/css-transforms-1/transform3d-perspective-009.html": [ - "100298cfe4e29d59a1b756544568dd2d427b5a63", - "reftest" - ], - "css/css-transforms-1/transform3d-perspective-origin-001.html": [ - "05bb1ff9cfbfab68dc394efcdfbb18b2ad1c71bc", - "reftest" - ], - "css/css-transforms-1/transform3d-perspective-origin-ref.html": [ - "f66058d229269894a052e7d933b37d34b0f0ab6e", - "support" - ], - "css/css-transforms-1/transform3d-preserve3d-001-ref.html": [ - "a7fcd3c010bc339b3d53dd7b62027f54a5c75315", - "support" - ], - "css/css-transforms-1/transform3d-preserve3d-001.html": [ - "cdb2c1e5689fd1763325ec40140f9236ac1afdc9", - "reftest" - ], - "css/css-transforms-1/transform3d-preserve3d-002.html": [ - "6d403e862ea7328e871e5127da4ba581ba2e7f63", - "reftest" - ], - "css/css-transforms-1/transform3d-preserve3d-003.html": [ - "932b76611ffc4fcb4e34d541a448f4c0b409f6e8", - "reftest" - ], - "css/css-transforms-1/transform3d-preserve3d-004.html": [ - "31a5487324e353219a836d9ae363750570a2fc64", - "reftest" - ], - "css/css-transforms-1/transform3d-preserve3d-005.html": [ - "51f5668c592cc4c3749170a37ab693809ecd74bd", - "reftest" - ], - "css/css-transforms-1/transform3d-preserve3d-006.html": [ - "0926827389678befde2b3b6c982e3917c01d4edc", - "reftest" - ], - "css/css-transforms-1/transform3d-preserve3d-007.html": [ - "c9094cebd749ae93f8223fb19ffaf4b3f1b3a2ba", - "reftest" - ], - "css/css-transforms-1/transform3d-preserve3d-008.html": [ - "8225a2128e90385eea08476a862e8f9de13670ae", - "reftest" - ], - "css/css-transforms-1/transform3d-preserve3d-009.html": [ - "39dedf037196ef4c2b36ac39f9a7f908d4d6f5b9", - "reftest" - ], - "css/css-transforms-1/transform3d-preserve3d-010.html": [ - "3d62c5fa5ef43ba277beca40dbe522bf7f4d3b70", - "reftest" - ], - "css/css-transforms-1/transform3d-preserve3d-011.html": [ - "f0987b87fa431ae4b0bd2f02d314622120f0acd6", - "reftest" - ], - "css/css-transforms-1/transform3d-preserve3d-012.html": [ - "b08e42abee5d16b05acb688a0f4e790fee865f50", - "reftest" - ], - "css/css-transforms-1/transform3d-preserve3d-013-ref.html": [ - "5e5ce267ea8960f6abb761df38501935a22a90b2", - "support" - ], - "css/css-transforms-1/transform3d-preserve3d-013.html": [ - "df5c56d629d439fb3f58f8c81e7b9d4800c7c213", - "reftest" - ], - "css/css-transforms-1/transform3d-rotate3d-001.html": [ - "8e6d6231cdeef19bb1918308bf5fedf10ba8d94d", - "reftest" - ], - "css/css-transforms-1/transform3d-rotate3d-002.html": [ - "774bdada1a00e1b8b851c607403a29efe45ab6f5", - "reftest" - ], - "css/css-transforms-1/transform3d-rotatex-001.html": [ - "927aad51d5159d7b62bab1fabe7b4889985be817", - "reftest" - ], - "css/css-transforms-1/transform3d-rotatex-perspective-001.html": [ - "7739806cfce349a05356b1b72ecd36ff23ba7dba", - "reftest_node" - ], - "css/css-transforms-1/transform3d-rotatex-perspective-002.html": [ - "aa24e6f3ab7ccab934f9290e50661a1d70a7505d", - "reftest" - ], - "css/css-transforms-1/transform3d-rotatex-perspective-003.html": [ - "ea0121f0c1869f599c4af474579eab96abdc3bdf", - "reftest" - ], - "css/css-transforms-1/transform3d-rotatex-perspective-notref.html": [ - "b6c99df1b1516136a6a67966386ac994afa7f7ff", - "support" - ], - "css/css-transforms-1/transform3d-rotatex-perspective-ref.html": [ - "96952e6ff632b6b8bb0a91bf1d91bcbde1be4549", - "support" - ], - "css/css-transforms-1/transform3d-rotatex-ref.html": [ - "82a273c0d12fccfe72575945368e7ef08f9d2e75", - "reftest_node" - ], - "css/css-transforms-1/transform3d-rotatex-transformorigin-001.html": [ - "d4e710536aa6a866a0e4960ba2bd2d297e475c61", - "reftest" - ], - "css/css-transforms-1/transform3d-rotatex-transformorigin-ref.html": [ - "d2182228823cc0567a659492b5036f46031859fd", - "support" - ], - "css/css-transforms-1/transform3d-rotatey-001.html": [ - "dfa1ed1da82843a33a044cd7979f16a76f52ce32", - "reftest" - ], - "css/css-transforms-1/transform3d-rotatey-ref.html": [ - "24c0c17d734abdc0e78ac1e6fe7cedbd8f148fe3", - "support" - ], - "css/css-transforms-1/transform3d-scale-001-notref.html": [ - "df78056ff5d4bcafd9a0d7db8cde4f72123783db", - "support" - ], - "css/css-transforms-1/transform3d-scale-001-ref.html": [ - "ea66007354d3a8c46183e5952fc051ab9aeed210", - "support" - ], - "css/css-transforms-1/transform3d-scale-001.html": [ - "10a1affb62998f775f52047f958dee28e69ad02c", - "reftest" - ], - "css/css-transforms-1/transform3d-scale-002.html": [ - "e45883765dbe15e24bc49b1d0d68fddc9a9bf1f2", - "reftest" - ], - "css/css-transforms-1/transform3d-scale-003.html": [ - "fe0fb16ceecc8d7cd136c62774bf399c1e2daf78", - "reftest" - ], - "css/css-transforms-1/transform3d-scale-004.html": [ - "c4e303ad025da6ee8c6e6611fa42c621b95dec83", - "reftest" - ], - "css/css-transforms-1/transform3d-scale-005-ref.html": [ - "bd6d9099a87f68a0d98f34b9615682caebf07c47", - "support" - ], - "css/css-transforms-1/transform3d-scale-005.html": [ - "e4a2338f5b15b850018153930d7bc43cb5be8a58", - "reftest" - ], - "css/css-transforms-1/transform3d-scale-006.html": [ - "a27805a911b3450f1d39e25ec6a7fa1b785c8c81", - "reftest" - ], - "css/css-transforms-1/transform3d-scale-007-ref.html": [ - "740c3c278bb430e72c9a5fcbe2e54d3aa5e73ca3", - "support" - ], - "css/css-transforms-1/transform3d-scale-007.html": [ - "360cbaaacc575b625ac2f4a702117ec2fe29b915", - "reftest" - ], - "css/css-transforms-1/transform3d-sorting-001.html": [ - "b6a16085d25e433126608510ef6cdd08de2c0bd4", - "reftest" - ], - "css/css-transforms-1/transform3d-sorting-002.html": [ - "f270a187d6f76bcd65a66c6ec823d5203ec956c2", - "reftest" - ], - "css/css-transforms-1/transform3d-sorting-003.html": [ - "5cd592e351215f7287bfeb58c1b73daf17e58302", - "reftest" - ], - "css/css-transforms-1/transform3d-sorting-004.html": [ - "d1f914d69056ab0d22864f631d892a9fa02b1821", - "reftest" - ], - "css/css-transforms-1/transform3d-sorting-005.html": [ - "7bea328a35eb98185c6fcb22e0a91d954af29c8b", - "reftest" - ], - "css/css-transforms-1/transform3d-sorting-006-ref.html": [ - "0b3836428b88182d3babf9ca6d87f65cf866687d", - "support" - ], - "css/css-transforms-1/transform3d-sorting-006.html": [ - "b7c1bdb05e5976d815a3e9b2be632209f36268cf", - "reftest" - ], - "css/css-transforms-1/transform3d-translate3d-001.html": [ - "22fadbcf6998700e0fffb8b61cd9684f62788c68", - "reftest" - ], - "css/css-transforms-1/transform3d-translate3d-ref.html": [ - "4265898c081d9aebc1a34cc1e7310c36e77427ac", - "support" - ], - "css/css-transforms-1/transform3d-translatez-001.html": [ - "a1b1cd0afed61c82197ab16fc147f39eff8f6d03", - "reftest" - ], - "css/css-transforms-1/transform3d-translatez-notref.html": [ - "2c9867cc3c4d0c4e22e999d389e9b098699dde8b", - "support" - ], - "css/css-transforms-1/transform3d-translatez-ref.html": [ - "3e4e8c98e69f26d8d1f8b7766d354c6796ceaaf1", - "support" - ], "css/css-transforms-1/transform_translate.html": [ "c7991077fc0b056d4e96b5b39ea5fd22c086dee5", "testharness" @@ -510684,10 +524351,6 @@ "0ae1c85687d3f0237cdd64e6fd9ef7a536d7c56a", "reftest" ], - "css/css-transforms-1/transforms-rotateY-degree-60.html": [ - "22be4aa4bf544a19f36a3f9d9c17f154adeb8cb9", - "reftest" - ], "css/css-transforms-1/transforms-skewX.html": [ "8004846d34e63657fde991d7a2056f1c855dd7d0", "reftest" @@ -511544,26 +525207,6 @@ "744f7db9d2b17a1b2c9793f0a68c39feedda1f3a", "reftest" ], - "css/css-transforms-1/transofrmed-preserve-3d-1.html": [ - "6b9049d0a41eaa593b0d7aa2eaceebe952850851", - "reftest" - ], - "css/css-transforms-1/transofrmed-rotateX-3.html": [ - "d378e2bdffb5b08b666cc9cd5c6053868dba8dbf", - "reftest" - ], - "css/css-transforms-1/transofrmed-rotateY-1.html": [ - "2347f08259c66228f948bc92459d5831dd8bf514", - "reftest" - ], - "css/css-transforms-1/ttwf-css-3d-polygon-cycle-mismatch.html": [ - "82aa999cc1d9004f495275cbbe455f627a87b161", - "reftest" - ], - "css/css-transforms-1/ttwf-css-3d-polygon-cycle.html": [ - "d8254f8b84f863336d4fb263d5b28c8b0d312162", - "reftest" - ], "css/css-transforms-1/ttwf-reftest-rotate.html": [ "511739015536d816e45ad9d5a592c7693462daed", "reftest" @@ -511584,6 +525227,614 @@ "7a9cc02dc9cddb5888ffe57ff57693689a510594", "reftest" ], + "css/css-transforms-2/backface-visibility-hidden-001.html": [ + "d12cfa3b31b7f98d0ff5693bfde49247d34cb156", + "reftest" + ], + "css/css-transforms-2/css-rotate-2d-3d-001-ref.html": [ + "e8eb884dee96dd6ed6af0b06aff76b45ef2f4996", + "support" + ], + "css/css-transforms-2/css-rotate-2d-3d-001.html": [ + "86556cd9a54966121cf402786385ff7f47cef246", + "reftest" + ], + "css/css-transforms-2/css-transform-3d-rotate3d-X-negative.html": [ + "37bd6861754cf17598841e29a155a7c67ae2f2bd", + "reftest" + ], + "css/css-transforms-2/css-transform-3d-rotate3d-X-positive.html": [ + "dcc4f9d2e9fec1bc96ec561a63081af5768a34cd", + "reftest" + ], + "css/css-transforms-2/css-transform-3d-rotate3d-Y-negative.html": [ + "cbbb67c4539ebcc5bfdb531a71c80df36269ec78", + "reftest" + ], + "css/css-transforms-2/css-transform-3d-rotate3d-Y-positive.html": [ + "fa211df46cc50492aa958022261168ab23f20323", + "reftest" + ], + "css/css-transforms-2/css-transform-3d-rotate3d-Z-negative.html": [ + "f0e5db686673589768680fe6b6336936b965811c", + "reftest" + ], + "css/css-transforms-2/css-transform-3d-rotate3d-Z-positive.html": [ + "fcfbc8852663832c9d8d6f24116bf105136f43fe", + "reftest" + ], + "css/css-transforms-2/css-transform-3d-rotateX-negative.html": [ + "a7e74dbc43a9574f2b0ccf791631dfaa24bc208b", + "reftest" + ], + "css/css-transforms-2/css-transform-3d-rotateX-positive.html": [ + "e356f11bae520feb49663023cced5ed774b6736e", + "reftest" + ], + "css/css-transforms-2/css-transform-3d-rotateY-negative.html": [ + "0c918a581a5d3cc73f16cc6ec175f58d4695bf67", + "reftest" + ], + "css/css-transforms-2/css-transform-3d-rotateY-positive.html": [ + "a91e66ae4d4ac7b70b7013eb33cfc86fe998b755", + "reftest" + ], + "css/css-transforms-2/css-transform-3d-rotateZ-negative.html": [ + "d05a7e8d943353ab303d63705567e4f1713bd2ad", + "reftest" + ], + "css/css-transforms-2/css-transform-3d-rotateZ-positive.html": [ + "0c339b7685280fb87ac68772a2bcc9704b5b4527", + "reftest" + ], + "css/css-transforms-2/css-transform-3d-transform-style.html": [ + "755aa03cd4767e0874e33bcbe6028dab96c3ffb1", + "reftest" + ], + "css/css-transforms-2/css-transforms-3d-on-anonymous-block-001.html": [ + "e77f6a80cc62b40fe05071e63207b960271ec211", + "reftest" + ], + "css/css-transforms-2/css3-transform-perspective.html": [ + "959cf0e1c786152ed3671761c5cba1d80ebf2667", + "reftest" + ], + "css/css-transforms-2/css3-transform-rotateY-ref.html": [ + "c66247807e289ebafa7c636b6ad43736e67fd5da", + "support" + ], + "css/css-transforms-2/css3-transform-rotateY.html": [ + "ebd273cafc060a113a20b7c3c624e2eb046e76fd", + "reftest" + ], + "css/css-transforms-2/parsing/resources/parsing-testcommon.js": [ + "bb1376de12185a14f77fd28be757cc8db2a9929d", + "support" + ], + "css/css-transforms-2/parsing/rotate-parsing-invalid.html": [ + "a100bb50a364d8d532bf30e35d4dd945f6116dfd", + "testharness" + ], + "css/css-transforms-2/parsing/rotate-parsing-valid.html": [ + "9fd6d0693afb51ee0edf30950cdf574fde29d096", + "testharness" + ], + "css/css-transforms-2/parsing/scale-parsing-invalid.html": [ + "947aa8e51a396dcbd3e88c66d82b8b6efb9a58a7", + "testharness" + ], + "css/css-transforms-2/parsing/scale-parsing-valid.html": [ + "b715fd67ba6e2aa0d0bddd7c0342c80af1f70690", + "testharness" + ], + "css/css-transforms-2/parsing/translate-parsing-invalid.html": [ + "1f4abad86af0f7be1ccafe8892c8a0a34b4e41b4", + "testharness" + ], + "css/css-transforms-2/parsing/translate-parsing-valid.html": [ + "5fae7004fc23d69a0d21853254974ce94889f68b", + "testharness" + ], + "css/css-transforms-2/perspective-origin-001.html": [ + "a30bca8426d88f4ebd0aebd642832db48546980b", + "reftest" + ], + "css/css-transforms-2/perspective-origin-002.html": [ + "4aec3734282e12a99018e4675911c0919c147062", + "reftest" + ], + "css/css-transforms-2/perspective-origin-003.html": [ + "49eb60433bdce2ec573d51ff7fbb5654ddb3fa57", + "reftest" + ], + "css/css-transforms-2/perspective-origin-004.html": [ + "2d5fef2a8a45a52c5ceda729f96e466d539f3ceb", + "reftest" + ], + "css/css-transforms-2/perspective-origin-005.html": [ + "dd2b22317aef43eaa63fae037f477d405d2b226e", + "reftest" + ], + "css/css-transforms-2/perspective-origin-006.html": [ + "078f8ddd0e17a3457cd62b63bc07814ebce92272", + "reftest" + ], + "css/css-transforms-2/perspective-origin-x.html": [ + "517eff2f88736c29dae60157abdd935cabbc22c6", + "reftest" + ], + "css/css-transforms-2/perspective-origin-xy.html": [ + "6692e971c11daa06f1426bba5a4a99b3837ff594", + "reftest" + ], + "css/css-transforms-2/perspective-translateZ-0.html": [ + "bdc72125f473677f1bc2f6f3e1e26afba1303048", + "reftest" + ], + "css/css-transforms-2/perspective-translateZ-negative.html": [ + "4c27334074987b2ec8508812bd337299636d571a", + "reftest" + ], + "css/css-transforms-2/perspective-translateZ-positive.html": [ + "e41fae82433d7f9f1092c4f3d7b6303ffbbcadaa", + "reftest" + ], + "css/css-transforms-2/reference/backface-visibility-hidden-ref.html": [ + "6c9ea1dd1f462d101449e2a7694a5cdc1f08d56f", + "support" + ], + "css/css-transforms-2/reference/css-transform-3d-rotateX-ref.html": [ + "6ad0fd2fb09e33930851e88621977a991b2c64fa", + "support" + ], + "css/css-transforms-2/reference/css-transform-3d-rotateZ-ref.html": [ + "d6f2085e80a7cdcb2d65c63a6fc84d65aeb5e558", + "support" + ], + "css/css-transforms-2/reference/css-transform-3d-transform-style-ref.html": [ + "655ec4a651f435b70975547a01299a49762cb4c5", + "support" + ], + "css/css-transforms-2/reference/css-transforms-3d-anonymous-block-ref.html": [ + "06844a8b244bd92827c17a09ee1ec15cdce452d8", + "support" + ], + "css/css-transforms-2/reference/css3-transform-perspective-ref.html": [ + "1a453a1be65039e17f4372c61380da6f2af9cfe9", + "support" + ], + "css/css-transforms-2/reference/perspective-origin-reftest.html": [ + "a2f6acf79f314d7da6d8fc68ad577e89f3408fa8", + "support" + ], + "css/css-transforms-2/reference/perspective-reftest.html": [ + "a2f6acf79f314d7da6d8fc68ad577e89f3408fa8", + "support" + ], + "css/css-transforms-2/reference/rotateY-ref.html": [ + "4addbed67635015d617c7691ff7da2fff369c61a", + "support" + ], + "css/css-transforms-2/reference/transforms-rotateY-degree-60-ref.html": [ + "67b64e0e8ec5ec125776915da9803fb6e9a17432", + "support" + ], + "css/css-transforms-2/reference/transofrmed-preserve-3d-1-ref.html": [ + "97926e5fc0937e5488f36a0435d578f2e425cabd", + "support" + ], + "css/css-transforms-2/reference/transofrmed-rotateX-3-ref.html": [ + "46faa26de7a365a51e9e3d9ce530142a2ef88c04", + "support" + ], + "css/css-transforms-2/reference/transofrmed-rotateY-1-ref.html": [ + "2ab1c9960bf9441f9de3aa16aa8dcde374e54391", + "support" + ], + "css/css-transforms-2/reference/ttwf-css-3d-polygon-cycle-ref.html": [ + "22f7acd6bf3a4cb73f91693cdae616c68fd3ed37", + "support" + ], + "css/css-transforms-2/reftest/transform-3d-rotateY-stair-above-ref-001.xht": [ + "5a95f00a766653f3a68c1ec84830d8bd54e7eec4", + "support" + ], + "css/css-transforms-2/rotateY.html": [ + "8df5e87d2b85dfc096c19123b021d214b17b6e50", + "reftest" + ], + "css/css-transforms-2/rotate_x_45deg-ref.html": [ + "0143a8cfb8c76c98d3e08e9f81d590e2c13e853f", + "support" + ], + "css/css-transforms-2/rotate_x_45deg.html": [ + "0d440155459bcbe857d7c50aaeeb1f5458001cd1", + "reftest" + ], + "css/css-transforms-2/rotate_y_45deg-ref.html": [ + "75d5bea7c323ae530fc9d4fffb6de259a6e11b67", + "support" + ], + "css/css-transforms-2/rotate_y_45deg.html": [ + "8dcb1d6de224693a1cfef51c50b152f4ec92d72f", + "reftest" + ], + "css/css-transforms-2/transform-3d-rotateY-stair-above-001.xht": [ + "2cb0828505e8595014462096da6f806b8dd28966", + "reftest" + ], + "css/css-transforms-2/transform-3d-rotateY-stair-below-001.xht": [ + "273d6e2f8a137f8785bb4a20952fbeeffda863f1", + "reftest" + ], + "css/css-transforms-2/transform-blank-ref.html": [ + "ce510cf7f18b469b45a3176d92b56ad91fd79f3c", + "support" + ], + "css/css-transforms-2/transform-lime-square-ref.html": [ + "0bf77aa89f5d9a9d5f1c7d86c5334a0830251e02", + "support" + ], + "css/css-transforms-2/transform3d-backface-visibility-001.html": [ + "4cb7e772d8e8fdc39a3ebce8ecb5999d89295e5c", + "reftest" + ], + "css/css-transforms-2/transform3d-backface-visibility-002.html": [ + "5d7bfcd03a59e354fd38aedcf2134fb221c08031", + "reftest" + ], + "css/css-transforms-2/transform3d-backface-visibility-003.html": [ + "0046b1f3ed2566db3f9afd8029ae1a250a64fad7", + "reftest" + ], + "css/css-transforms-2/transform3d-backface-visibility-004.html": [ + "4ae9b36b8b8c8fb8e7978fc1f167bad87c70ad29", + "reftest" + ], + "css/css-transforms-2/transform3d-backface-visibility-005.html": [ + "cc29631338fb3c206916a33855e616a7717d1b74", + "reftest" + ], + "css/css-transforms-2/transform3d-backface-visibility-006.html": [ + "2529ef2ccf312e822877db3f916d641bb2aa919b", + "reftest" + ], + "css/css-transforms-2/transform3d-backface-visibility-007.html": [ + "a42ea74c7fe24565032af6f4f4c9c424fafbc3d7", + "reftest" + ], + "css/css-transforms-2/transform3d-backface-visibility-008.html": [ + "ae601cda6c6a5096545a20dc5a10d5ec40d39c92", + "reftest" + ], + "css/css-transforms-2/transform3d-image-scale-001.html": [ + "f9937a3682eb896675d6b848faaa187f6e98f7b6", + "reftest" + ], + "css/css-transforms-2/transform3d-image-scale-002.html": [ + "580ea992a9df6591a138276d50b5e7c77ce4472c", + "reftest" + ], + "css/css-transforms-2/transform3d-matrix3d-001-ref.html": [ + "50af5e396e42028b8c1baa728438d5bf5db19d08", + "support" + ], + "css/css-transforms-2/transform3d-matrix3d-001.html": [ + "9791358cd5eb972e8861790d9bc6e152fd8b923e", + "reftest" + ], + "css/css-transforms-2/transform3d-matrix3d-002-ref.html": [ + "4691a3484059fbc64a558507c716f2705550afe4", + "support" + ], + "css/css-transforms-2/transform3d-matrix3d-002.html": [ + "bbb766ffeed8caaccc7964363fa6ac7234d6431d", + "reftest" + ], + "css/css-transforms-2/transform3d-matrix3d-003-ref.html": [ + "879eb325372a0d6c99b1ed3080d63730c68f28ca", + "support" + ], + "css/css-transforms-2/transform3d-matrix3d-003.html": [ + "c8fa6a8541620e156fd0cde67af432ea76aca2d3", + "reftest" + ], + "css/css-transforms-2/transform3d-matrix3d-004-ref.html": [ + "43b649b62dc659536f277ba05c50e4462ce60c5b", + "support" + ], + "css/css-transforms-2/transform3d-matrix3d-004.html": [ + "605bb19eab24c37866e467e1a27074776474680a", + "reftest" + ], + "css/css-transforms-2/transform3d-matrix3d-005-ref.html": [ + "420a858d8e22753ac1a6cd037cffbd1d1c00e91d", + "support" + ], + "css/css-transforms-2/transform3d-matrix3d-005.html": [ + "4f28758eb76dbe9a3cedc8a3b8da445341044358", + "reftest" + ], + "css/css-transforms-2/transform3d-perspective-001-ref.html": [ + "8cb82025d031c4b9ca416d9a9c13699351b79d4a", + "support" + ], + "css/css-transforms-2/transform3d-perspective-001.html": [ + "dd2dffda632a010faa06591cfab550e78f266658", + "reftest" + ], + "css/css-transforms-2/transform3d-perspective-002.html": [ + "a611669ecd5c4eb44ad35fecb0765a5423d28757", + "reftest" + ], + "css/css-transforms-2/transform3d-perspective-003.html": [ + "1940cc8961d79bd9bed09f98a0386b5bb566440a", + "reftest" + ], + "css/css-transforms-2/transform3d-perspective-004.html": [ + "df2618f773b53753c62b1def5198b4501b892369", + "reftest" + ], + "css/css-transforms-2/transform3d-perspective-005.html": [ + "f769ba4a2ade0a4d02bc9a2ee55b504690c43ef1", + "reftest" + ], + "css/css-transforms-2/transform3d-perspective-006.html": [ + "cbf20a0c6bd852dbac160efbc6129ac42bc345ba", + "reftest" + ], + "css/css-transforms-2/transform3d-perspective-007.html": [ + "79c5dc873a3c26d75df606a82f8d0f7ab1b98603", + "reftest" + ], + "css/css-transforms-2/transform3d-perspective-008.html": [ + "1b5d8f76f4b489a31803962179c39e5ceb2b982e", + "reftest" + ], + "css/css-transforms-2/transform3d-perspective-009-ref.html": [ + "8ce84fb8ca493ea7d61b4aa8a50129f715840927", + "support" + ], + "css/css-transforms-2/transform3d-perspective-009.html": [ + "c599251db3073aef5373b2d0152ba3010197c682", + "reftest" + ], + "css/css-transforms-2/transform3d-perspective-origin-001.html": [ + "9f05a51c2c704d5d8dc12b1b4b7abc81b049ae78", + "reftest" + ], + "css/css-transforms-2/transform3d-perspective-origin-ref.html": [ + "f66058d229269894a052e7d933b37d34b0f0ab6e", + "support" + ], + "css/css-transforms-2/transform3d-preserve3d-001-ref.html": [ + "a7fcd3c010bc339b3d53dd7b62027f54a5c75315", + "support" + ], + "css/css-transforms-2/transform3d-preserve3d-001.html": [ + "2fd8bacabbe3352765211c75f933a4eaae26be12", + "reftest" + ], + "css/css-transforms-2/transform3d-preserve3d-002.html": [ + "0f51055d3e2ddac2ec5fff86f5ec074c43c329d1", + "reftest" + ], + "css/css-transforms-2/transform3d-preserve3d-003.html": [ + "5f8edf04bcc6f4984644c27da6a46862edc14470", + "reftest" + ], + "css/css-transforms-2/transform3d-preserve3d-004.html": [ + "f728eb512bf13e959782ed76003e62bc3eeb57ff", + "reftest" + ], + "css/css-transforms-2/transform3d-preserve3d-005.html": [ + "efecebf9d5d6de3b4959a6ec1294e84278a4593e", + "reftest" + ], + "css/css-transforms-2/transform3d-preserve3d-006.html": [ + "1bbe9f369ff2feeb5a5db28c89c3ee86cd450b06", + "reftest" + ], + "css/css-transforms-2/transform3d-preserve3d-007.html": [ + "b8d467529bf7d126ee8006be523dbf4d65f3f8b9", + "reftest" + ], + "css/css-transforms-2/transform3d-preserve3d-008.html": [ + "1c14ed3a59daec1a7f8a15edfe149da75648ad2a", + "reftest" + ], + "css/css-transforms-2/transform3d-preserve3d-009.html": [ + "bf682ff8184cf47e253af1c4a92287e4ed1eddb8", + "reftest" + ], + "css/css-transforms-2/transform3d-preserve3d-010.html": [ + "008995832eaef304ab4f0bcbe3e6f599b50b41f0", + "reftest" + ], + "css/css-transforms-2/transform3d-preserve3d-011.html": [ + "060ebef10473f4a8cbd3846b2f32934d112d85b9", + "reftest" + ], + "css/css-transforms-2/transform3d-preserve3d-012.html": [ + "0affa4b3c8a4815c3a228a10c11044025723f625", + "reftest" + ], + "css/css-transforms-2/transform3d-preserve3d-013-ref.html": [ + "5e5ce267ea8960f6abb761df38501935a22a90b2", + "support" + ], + "css/css-transforms-2/transform3d-preserve3d-013.html": [ + "9d9f6f4cef23e871332bbd4218885aa37daa9886", + "reftest" + ], + "css/css-transforms-2/transform3d-rotate3d-001.html": [ + "a23ee425c212f3300eace0912af1ec7e3d2dd225", + "reftest" + ], + "css/css-transforms-2/transform3d-rotate3d-002.html": [ + "36a90cce9e47ead23a16542becbffdbe7520a5c9", + "reftest" + ], + "css/css-transforms-2/transform3d-rotatex-001.html": [ + "92c9a87129ec4b92b4168755ab4f8d7a0b3df1ba", + "reftest" + ], + "css/css-transforms-2/transform3d-rotatex-perspective-001.html": [ + "3f14d7bb72ce40e9037c8bee9cfb5024cabc9d72", + "reftest_node" + ], + "css/css-transforms-2/transform3d-rotatex-perspective-002.html": [ + "dcfcce7db485501948f77341770094e13c8efcc6", + "reftest" + ], + "css/css-transforms-2/transform3d-rotatex-perspective-003.html": [ + "716125a626f77ff9ddfc8d4142ad68f039878d2d", + "reftest" + ], + "css/css-transforms-2/transform3d-rotatex-perspective-notref.html": [ + "b6c99df1b1516136a6a67966386ac994afa7f7ff", + "support" + ], + "css/css-transforms-2/transform3d-rotatex-perspective-ref.html": [ + "96952e6ff632b6b8bb0a91bf1d91bcbde1be4549", + "support" + ], + "css/css-transforms-2/transform3d-rotatex-ref.html": [ + "82a273c0d12fccfe72575945368e7ef08f9d2e75", + "reftest_node" + ], + "css/css-transforms-2/transform3d-rotatex-transformorigin-001.html": [ + "72c1521051fb694779626c8055f216d639249f64", + "reftest" + ], + "css/css-transforms-2/transform3d-rotatex-transformorigin-ref.html": [ + "d2182228823cc0567a659492b5036f46031859fd", + "support" + ], + "css/css-transforms-2/transform3d-rotatey-001.html": [ + "5e2342abd56f2eb38ade0360212f3fdb35275435", + "reftest" + ], + "css/css-transforms-2/transform3d-rotatey-ref.html": [ + "24c0c17d734abdc0e78ac1e6fe7cedbd8f148fe3", + "support" + ], + "css/css-transforms-2/transform3d-scale-001-notref.html": [ + "df78056ff5d4bcafd9a0d7db8cde4f72123783db", + "support" + ], + "css/css-transforms-2/transform3d-scale-001-ref.html": [ + "ea66007354d3a8c46183e5952fc051ab9aeed210", + "support" + ], + "css/css-transforms-2/transform3d-scale-001.html": [ + "46da5b941e643ab999ee54c90c474f385e8108d2", + "reftest" + ], + "css/css-transforms-2/transform3d-scale-002.html": [ + "44917aef396daa459df4f0e96f8de07d82049f37", + "reftest" + ], + "css/css-transforms-2/transform3d-scale-003.html": [ + "e636b5620a97bd4280a5809f473b53b49bfb3a29", + "reftest" + ], + "css/css-transforms-2/transform3d-scale-004.html": [ + "1a5babff27940e65f69f35a8d84403161a402178", + "reftest" + ], + "css/css-transforms-2/transform3d-scale-005-ref.html": [ + "bd6d9099a87f68a0d98f34b9615682caebf07c47", + "support" + ], + "css/css-transforms-2/transform3d-scale-005.html": [ + "2567f8a057aa238b9e9cf8c1f2ca62b9a5b5b1e5", + "reftest" + ], + "css/css-transforms-2/transform3d-scale-006.html": [ + "7774f2d15819cd2b8cbce35f6bdc5abf1513ab66", + "reftest" + ], + "css/css-transforms-2/transform3d-scale-007-ref.html": [ + "740c3c278bb430e72c9a5fcbe2e54d3aa5e73ca3", + "support" + ], + "css/css-transforms-2/transform3d-scale-007.html": [ + "92367c2d4c93cb344ae5deada40651328bcc9186", + "reftest" + ], + "css/css-transforms-2/transform3d-sorting-001.html": [ + "8c447f932e8876c79f6605b2f41eaee300a7fc0e", + "reftest" + ], + "css/css-transforms-2/transform3d-sorting-002.html": [ + "920f2a82f06ec340df900a1dc988fa00c15c6cdc", + "reftest" + ], + "css/css-transforms-2/transform3d-sorting-003.html": [ + "9bfdd032de02fc03326435a745d715dbc6779a7f", + "reftest" + ], + "css/css-transforms-2/transform3d-sorting-004.html": [ + "74b32151d1bf59f78f0d1f87f7f639ad4cde1e72", + "reftest" + ], + "css/css-transforms-2/transform3d-sorting-005.html": [ + "e8b18ca098c2292956740a1ef769be499698727e", + "reftest" + ], + "css/css-transforms-2/transform3d-sorting-006-ref.html": [ + "0b3836428b88182d3babf9ca6d87f65cf866687d", + "support" + ], + "css/css-transforms-2/transform3d-sorting-006.html": [ + "8c53aba60791b628d3f4842c7338592555c065e1", + "reftest" + ], + "css/css-transforms-2/transform3d-translate3d-001.html": [ + "126daa18926af03ce70250b655855c44dbd23dba", + "reftest" + ], + "css/css-transforms-2/transform3d-translate3d-ref.html": [ + "4265898c081d9aebc1a34cc1e7310c36e77427ac", + "support" + ], + "css/css-transforms-2/transform3d-translatez-001.html": [ + "3ff1ef555666072a408e9bab8d6d87603b8b5fb8", + "reftest" + ], + "css/css-transforms-2/transform3d-translatez-notref.html": [ + "2c9867cc3c4d0c4e22e999d389e9b098699dde8b", + "support" + ], + "css/css-transforms-2/transform3d-translatez-ref.html": [ + "3e4e8c98e69f26d8d1f8b7766d354c6796ceaaf1", + "support" + ], + "css/css-transforms-2/transforms-rotateY-degree-60.html": [ + "cf9af05cb3d0f2a54fce7554f15cf0159c16a5a7", + "reftest" + ], + "css/css-transforms-2/transofrmed-preserve-3d-1.html": [ + "6b9049d0a41eaa593b0d7aa2eaceebe952850851", + "reftest" + ], + "css/css-transforms-2/transofrmed-rotateX-3.html": [ + "d378e2bdffb5b08b666cc9cd5c6053868dba8dbf", + "reftest" + ], + "css/css-transforms-2/transofrmed-rotateY-1.html": [ + "2347f08259c66228f948bc92459d5831dd8bf514", + "reftest" + ], + "css/css-transforms-2/ttwf-css-3d-polygon-cycle-mismatch.html": [ + "bd86420b838edd1e422a9443533d6e5916c56072", + "reftest" + ], + "css/css-transforms-2/ttwf-css-3d-polygon-cycle.html": [ + "58c9cfa09d465ea6a3cb551f04e58a427138e837", + "reftest" + ], "css/css-transitions-1/OWNERS": [ "93ac9e1447551ce93112e7ba3380b825cee5368c", "support" @@ -513121,7 +527372,7 @@ "reftest" ], "css/css-ui-3/outline-004.html": [ - "b7de0a066abc25374084495269b2d7714974e039", + "32d13f9c1961fce97831b76427083cef847d2366", "reftest" ], "css/css-ui-3/outline-005.html": [ @@ -514704,14 +528955,186 @@ "5e0ab512c788c78ed24ae2610e134149ae7ee8fa", "support" ], + "css/css-variables-1/resources/variable-reference-refresh-iframe.css": [ + "50eec760578accdbb2a9471918f458b7adb2525e", + "support" + ], + "css/css-variables-1/resources/variable-reference-refresh-iframe.html": [ + "64f4f7be1a341dcda14547bc9c59c8ae914607a8", + "support" + ], "css/css-variables-1/test_variable_legal_values.html": [ "a6ffd6e1e3479aad164dcf678e7382b365473448", "testharness" ], + "css/css-variables-1/variable-animation-from-to.html": [ + "b01ee8e5cc18a84eedb0026c18569e0de5eaae11", + "testharness" + ], + "css/css-variables-1/variable-animation-over-transition.html": [ + "cfe9fc33ac567d4c2c613b135ed85ec25e712f32", + "testharness" + ], + "css/css-variables-1/variable-animation-substitute-into-keyframe-shorthand.html": [ + "c5c2783e0b0da82ae7b68e2516781ef742c128da", + "testharness" + ], + "css/css-variables-1/variable-animation-substitute-into-keyframe-transform.html": [ + "aa5bd94faf68430e5f9dd00c8388e89d903d644f", + "testharness" + ], + "css/css-variables-1/variable-animation-substitute-into-keyframe.html": [ + "40fc0bbe92be5de7c66ec808a71109290af7c9cd", + "testharness" + ], + "css/css-variables-1/variable-animation-substitute-within-keyframe-fallback.html": [ + "7bb1c1c9f5cd2a65867d9158a8b6297f85d7361d", + "testharness" + ], + "css/css-variables-1/variable-animation-substitute-within-keyframe-multiple.html": [ + "7a7ec6c1f19f52e71d80a90ee7743c665ed7797e", + "testharness" + ], + "css/css-variables-1/variable-animation-substitute-within-keyframe.html": [ + "fa1814b333fc6105f0bc35d096cd921be5f7c968", + "testharness" + ], + "css/css-variables-1/variable-animation-to-only.html": [ + "805429b0e860d20fa19e01d40be94bc1767ae5a6", + "testharness" + ], + "css/css-variables-1/variable-created-document.html": [ + "50b1ab1f4ce2b77f852af113818b94d03d74732e", + "testharness" + ], + "css/css-variables-1/variable-created-element.html": [ + "e2c135317f9b78c0fa4f90dbb751b73f3d988b7e", + "testharness" + ], + "css/css-variables-1/variable-cssText.html": [ + "601a35a06498f52982dbce18531fb8e12ab292ba", + "testharness" + ], + "css/css-variables-1/variable-definition-border-shorthand-serialize.html": [ + "be7f736f5909ef11ec11466bb81da8cdc4095df3", + "testharness" + ], + "css/css-variables-1/variable-definition-cascading.html": [ + "0be93185a6f1ef0c380a692c051db4e66a82b333", + "testharness" + ], + "css/css-variables-1/variable-definition-keywords.html": [ + "eef27787c48ec2b6c9849bfc2e9caf2b2e6eba29", + "testharness" + ], + "css/css-variables-1/variable-definition.html": [ + "78682dc5f85a471147adb6fcfb56b39c616ba976", + "testharness" + ], + "css/css-variables-1/variable-first-letter.html": [ + "91e97471b4470918b6477994f8ed0f39ad761a84", + "testharness" + ], + "css/css-variables-1/variable-first-line.html": [ + "13085879fd567a224901d142cee05a96836ff749", + "testharness" + ], + "css/css-variables-1/variable-invalidation.html": [ + "11106961651b3920aa302bd42695af7fe1b7484a", + "testharness" + ], + "css/css-variables-1/variable-presentation-attribute.html": [ + "6c32dad5317f2b0b3ac71e41c90816603c7e6249", + "testharness" + ], + "css/css-variables-1/variable-pseudo-element.html": [ + "342a14cfb0ffca8ce1d9a98c035407762e73f0f1", + "testharness" + ], + "css/css-variables-1/variable-reference-cssom.html": [ + "bef60020890df3a16812c6c00a694d86c75d18ab", + "testharness" + ], + "css/css-variables-1/variable-reference-refresh.html": [ + "58b278fc4f78f3a22ae373dce2009e4ecce36e3a", + "testharness" + ], + "css/css-variables-1/variable-reference-shorthands-cssom.html": [ + "568ef4aeda575c70c74e4b5b59aa53063c98a71c", + "testharness" + ], + "css/css-variables-1/variable-reference-shorthands.html": [ + "c1b689e7189cf45789d3ee25c01b00d4dec4bb52", + "testharness" + ], + "css/css-variables-1/variable-reference-variable.html": [ + "40a2984bac072b5b0ee6dec9b37a23acf7be8336", + "testharness" + ], "css/css-variables-1/variable-reference-without-whitespace.html": [ "731f3f5d0f5900f296bfdd545b0c4dff95576daa", "reftest" ], + "css/css-variables-1/variable-reference.html": [ + "9e4be802fc956e801ed055835ea57e65d3bc18a1", + "testharness" + ], + "css/css-variables-1/variable-substitution-background-properties.html": [ + "1999e763c54cc6fdcfc2c218876ab438a55f608a", + "testharness" + ], + "css/css-variables-1/variable-substitution-basic.html": [ + "4dfbb8442da7180763bf184bebd7d663ed56d174", + "testharness" + ], + "css/css-variables-1/variable-substitution-filters.html": [ + "48151be36bd6fa4d8358f15df3f2d70c538506b7", + "testharness" + ], + "css/css-variables-1/variable-substitution-plus-box-shadow.html": [ + "db543bb540e8d9fe4490dd9e97ca94392194ae18", + "testharness" + ], + "css/css-variables-1/variable-substitution-replaced-size.html": [ + "c72105fc2018b020125ad860b964f5a78910ed5b", + "testharness" + ], + "css/css-variables-1/variable-substitution-shadow-properties.html": [ + "0febbaa27e8692583fa2cc29fc8a1523eea9be43", + "testharness" + ], + "css/css-variables-1/variable-substitution-shorthands.html": [ + "fc3c70235d28761659937cab5ae18e3e2b04d747", + "testharness" + ], + "css/css-variables-1/variable-substitution-variable-declaration.html": [ + "561e824ad190c1859826dbf10989d5c4d343b71f", + "testharness" + ], + "css/css-variables-1/variable-transitions-from-no-value.html": [ + "f4123d6500891731b3d70d49a1d15ed8484bc619", + "testharness" + ], + "css/css-variables-1/variable-transitions-to-no-value.html": [ + "a4fb263a72fa90aec14f88681c0276e81a0fa6a9", + "testharness" + ], + "css/css-variables-1/variable-transitions-transition-property-all-before-value.html": [ + "6cd18d2c18375980036fe8dd65a781965e9bcc4f", + "testharness" + ], + "css/css-variables-1/variable-transitions-transition-property-variable-before-value.html": [ + "2efbc1ffe66ccf3b5f60baae4f7ad9ed447d60fd", + "testharness" + ], + "css/css-variables-1/variable-transitions-value-before-transition-property-all.html": [ + "75df32eb1cee6f2c0dca55cd9c7daba6c6476aae", + "testharness" + ], + "css/css-variables-1/variable-transitions-value-before-transition-property-variable.html": [ + "a083618c3caf3636a6133ae5c1a06b71bafcfe43", + "testharness" + ], "css/css-variables-1/vars-background-shorthand-001.html": [ "3c49d366fb429f9f563e293f96abc32ec42d8c7a", "reftest" @@ -514721,7 +529144,7 @@ "testharness" ], "css/css-variables-1/vars-font-shorthand-001.html": [ - "e8e42a789ecef21f9db235c3735c1815cbb58c1c", + "52b5d737026e63f382b2f626fe3039a529005db1", "reftest" ], "css/css-writing-modes-3/OWNERS": [ @@ -518453,7 +532876,7 @@ "support" ], "css/css-writing-modes-3/reference/text-combine-upright-value-single-character.html": [ - "1495ea0160b079c3dd03904753975802fa7bf966", + "516945b3461b8a8986703ede77858428596e4cff", "support" ], "css/css-writing-modes-3/reference/vertical-ahem-1x1-ref.html": [ @@ -518589,11 +533012,11 @@ "reftest" ], "css/css-writing-modes-3/sizing-orthog-htb-in-vlr-008-ref.xht": [ - "f49d20966f16af9fc9774b0116da0d4a272b7665", + "53c323c3e644c0e561d89fd9e64bf0482e188427", "support" ], "css/css-writing-modes-3/sizing-orthog-htb-in-vlr-008.xht": [ - "c55449c7ed1ba0b3b01160f40a5e7d0218f3862c", + "3a77f22047e22a067cd1e5e73eee94b31fa5618a", "reftest" ], "css/css-writing-modes-3/sizing-orthog-htb-in-vlr-009.xht": [ @@ -518661,11 +533084,11 @@ "reftest" ], "css/css-writing-modes-3/sizing-orthog-htb-in-vlr-020-ref.xht": [ - "c996a1ae6e2317a78e00b819f8390da953b185c7", + "8c7ddc2be2595d97bdc96cf2f182ff3f8133e528", "support" ], "css/css-writing-modes-3/sizing-orthog-htb-in-vlr-020.xht": [ - "ec95de42949e90c2bff96eda72bcefb8bacdc81b", + "74e46119562afb3a4cb289e561c7da33ffadb0d4", "reftest" ], "css/css-writing-modes-3/sizing-orthog-htb-in-vlr-021.xht": [ @@ -518729,11 +533152,11 @@ "reftest" ], "css/css-writing-modes-3/sizing-orthog-htb-in-vrl-008-ref.xht": [ - "e89ec7a936221097d7bd20643edf88bd17d6862d", + "207d331cc97a52b75d86d53473a872b8965c270e", "support" ], "css/css-writing-modes-3/sizing-orthog-htb-in-vrl-008.xht": [ - "3750b16c211cb481b7287c4e9f7f5050ee8b35ee", + "ce09d940b2648fac1459aa2bb2c1a6025e135ebc", "reftest" ], "css/css-writing-modes-3/sizing-orthog-htb-in-vrl-009.xht": [ @@ -518797,11 +533220,11 @@ "reftest" ], "css/css-writing-modes-3/sizing-orthog-htb-in-vrl-020-ref.xht": [ - "f6d58247b99fd53f0f4e0ac5dbb9d0af82848153", + "d65db617493cd491135bed7034b3b1a7f68a21a9", "support" ], "css/css-writing-modes-3/sizing-orthog-htb-in-vrl-020.xht": [ - "3aaa2ff5e680f7a1ee7dc9f2385d9f50a7a5f98b", + "cbcc15795b61c0fb0115332799bd1451205e8570", "reftest" ], "css/css-writing-modes-3/sizing-orthog-htb-in-vrl-021.xht": [ @@ -519125,11 +533548,11 @@ "reftest" ], "css/css-writing-modes-3/sizing-orthog-vlr-in-htb-008-ref.xht": [ - "cce0e482d36943bbcd962997948a8f68b2919275", + "9e36d2c0769b18f9ef227827f6376feb3b78bf07", "support" ], "css/css-writing-modes-3/sizing-orthog-vlr-in-htb-008.xht": [ - "310ac645547881bd4c21bf29d6818566e73fd032", + "ee9669997069ba792ea54b9e461c36b2de5df3bc", "reftest" ], "css/css-writing-modes-3/sizing-orthog-vlr-in-htb-009-ref.xht": [ @@ -519205,11 +533628,11 @@ "reftest" ], "css/css-writing-modes-3/sizing-orthog-vlr-in-htb-020-ref.xht": [ - "a2aab79326e20dd8f5b6314f110b294df31fce79", + "a723fd3992bda407bcee9f8ca2b8712bea6023d3", "support" ], "css/css-writing-modes-3/sizing-orthog-vlr-in-htb-020.xht": [ - "10d5711d87ab2d364e69d69753490d09c3bd301d", + "c9604dfbe57ec804862fca7d1679c92251179bf7", "reftest" ], "css/css-writing-modes-3/sizing-orthog-vlr-in-htb-021.xht": [ @@ -519277,11 +533700,11 @@ "reftest" ], "css/css-writing-modes-3/sizing-orthog-vrl-in-htb-008-ref.xht": [ - "f262bc2cbf83978fb8306d6d99f7898e5734eccf", + "650381805263bc7570564044cc16047513a7a5cd", "support" ], "css/css-writing-modes-3/sizing-orthog-vrl-in-htb-008.xht": [ - "4cb14e9e924e60bb57a4f9c4607511a79a03b202", + "8ffd5250ca99768e52b70466837185136cc5cb03", "reftest" ], "css/css-writing-modes-3/sizing-orthog-vrl-in-htb-009-ref.xht": [ @@ -519357,11 +533780,11 @@ "reftest" ], "css/css-writing-modes-3/sizing-orthog-vrl-in-htb-020-ref.xht": [ - "5d88c71d6b5cefab86ae0da8cb94e3b16d4bb3c9", + "cf47bdbf58e4ffccbbb05cd71e3387cf3c901791", "support" ], "css/css-writing-modes-3/sizing-orthog-vrl-in-htb-020.xht": [ - "8df1675c6926dd5a2cbb682414408690b71be6d3", + "2883e0047361b95e3176e84fe0fee27d31e32f5e", "reftest" ], "css/css-writing-modes-3/sizing-orthog-vrl-in-htb-021.xht": [ @@ -520513,24 +534936,24 @@ "reftest" ], "css/css-writing-modes-3/text-orientation-mixed-vlr-100-ref.html": [ - "cc02d587b97fd04c9a06c93e6e959e56ce189621", + "39ba3ba45ba3890bbdaa87c7a9b0d11dc83da080", "support" ], "css/css-writing-modes-3/text-orientation-mixed-vlr-100.html": [ - "104687b88793dc73cd0820ed158b7f7f80061b92", - "manual" + "2f7cb3fcc51dbe26ae5089a33373ca0d0125418e", + "reftest" ], "css/css-writing-modes-3/text-orientation-mixed-vrl-002.xht": [ "da19d6136b8f893a2cebf4d2ad93a366c4f5a46d", "visual" ], "css/css-writing-modes-3/text-orientation-mixed-vrl-100-ref.html": [ - "5976dc344843ff0c378f47f645add8738facd98f", + "087e9e542b2da12e644db5decec347578001df03", "support" ], "css/css-writing-modes-3/text-orientation-mixed-vrl-100.html": [ - "17b6b9b9dbcbb618e9e94fddd1d2fb5bffe7718f", - "manual" + "2d6206d3f2694febacd326b58bc739f5f00730bf", + "reftest" ], "css/css-writing-modes-3/text-orientation-parsing-001.html": [ "b6198b2cf726db1f7dbf084b95652c192015cf14", @@ -520541,76 +534964,76 @@ "testharness" ], "css/css-writing-modes-3/text-orientation-script-001.html": [ - "ed2070a6a14f06a5e8c66f01f1b7948d3803906e", - "manual" + "f0633f62d0ff869b96e05d893901cf3b1d52503f", + "testharness" ], "css/css-writing-modes-3/text-orientation-script-001a.html": [ - "51759f192f70733fe909c13929194aa81f52033a", - "manual" + "94b19649824be3d9ed055e095104a80edff3667a", + "testharness" ], "css/css-writing-modes-3/text-orientation-script-001b.html": [ - "7ede580638c9807ae3f497876ba05640622ec7ad", - "manual" + "42cfc4941fce943b071dbbe34ccc51ec371900c6", + "testharness" ], "css/css-writing-modes-3/text-orientation-script-001c.html": [ - "9b588cccf8d1ba39b7439ebef82691a04cb355ea", - "manual" + "9c5584338748811650ee00b8efc9afd837c671c0", + "testharness" ], "css/css-writing-modes-3/text-orientation-script-001d.html": [ - "84bb9135a8be6130b65fc8777025c4c3a0872653", - "manual" + "e56f41bdea73dee1c2c1915073dd7af2c8498915", + "testharness" ], "css/css-writing-modes-3/text-orientation-script-001e.html": [ - "7870f49b94a7bbe00c03c65df7969d1e7a7c3e7d", - "manual" + "9ca2c2243c11d10195af86da8b3f5bda895bb279", + "testharness" ], "css/css-writing-modes-3/text-orientation-script-001f.html": [ - "ae9fbe2e48cd0c636c42bcb6edf7bc1a887c276a", - "manual" + "18a4e76007bf4f218b1ad3d99a7630e4f169b652", + "testharness" ], "css/css-writing-modes-3/text-orientation-script-001g.html": [ - "b448402793b31b316c08f4ada4be56abdcde91d5", - "manual" + "28e7534cc8505cd2a90c6d7acdb3bfbf874c11ae", + "testharness" ], "css/css-writing-modes-3/text-orientation-script-001h.html": [ - "21abfb504cc2fe9ad87d7f3ad90a04a66f33b38c", - "manual" + "95a969dbde8acc4ba5c6e79909338ea1978ac705", + "testharness" ], "css/css-writing-modes-3/text-orientation-script-001i.html": [ - "a32b0d15434d60cfeca9d3098971d06ed4b47651", - "manual" + "0e78d8642016f35face846aad4cf17d47b71ede7", + "testharness" ], "css/css-writing-modes-3/text-orientation-script-001j.html": [ - "78e6f70e592329d760cff9a54e3180432627ee03", - "manual" + "d9e605f89d01d26ae1ac7edfeed2a8b6d3643902", + "testharness" ], "css/css-writing-modes-3/text-orientation-script-001k.html": [ - "e8fdebfc66c8f4fa141829ff41698c2d555264d2", - "manual" + "0f5de7ee55beaf3066519bcc4d16f8eb8bbf2621", + "testharness" ], "css/css-writing-modes-3/text-orientation-script-001l.html": [ - "376c5c2518e6b7dae5d79d7f68b54bbad9bc5894", - "manual" + "a2114b28253dfecea111090f231c7696e0ea93c0", + "testharness" ], "css/css-writing-modes-3/text-orientation-script-001m.html": [ - "effc5c78dc42c27865812c1611bfb4700973cfe3", - "manual" + "d8e1cd0e959482c422f869099c5162f06ec5be1b", + "testharness" ], "css/css-writing-modes-3/text-orientation-script-001n.html": [ - "0be6755625846e2c0030a70064a05639a3a475c1", - "manual" + "38e6d7af1936dc376bbd4a27b6b5dd1269faf7ec", + "testharness" ], "css/css-writing-modes-3/text-orientation-script-001o.html": [ - "a979de43a7b864fbaadfc8d893cf6caebd958bd5", - "manual" + "19d69394d557ea1e666b17291c7e1883144ada54", + "testharness" ], "css/css-writing-modes-3/text-orientation-script-001p.html": [ - "cf8a9b59f05fcd4918b01df515aa79d9e81c57c4", - "manual" + "66e54487995db3916d5fd5da8200600cdd517dd8", + "testharness" ], "css/css-writing-modes-3/text-orientation-script-001q.html": [ - "11046bc1de10027efa9ac5af254328ae3ea1e64f", - "manual" + "9daf7ffd5a66acf0ebb150ed87ec27e02d8ef9f1", + "testharness" ], "css/css-writing-modes-3/text-orientation-sideways-001.xht": [ "c6f9160ba49cf870c8a929d2e165c9a455dd6ef5", @@ -520621,20 +535044,20 @@ "visual" ], "css/css-writing-modes-3/text-orientation-sideways-vlr-100-ref.html": [ - "47f92415f5c20fdec0e5bcdd79b98b9e7776d437", + "7b36a5a352ef4fadec1e7e23adda1ad6fd7c9444", "support" ], "css/css-writing-modes-3/text-orientation-sideways-vlr-100.html": [ - "6f18077948509b2e198b857a31fd80d6ac9d33bc", - "manual" + "5ad9b90c069c918269d0363938e9786240df04ec", + "reftest" ], "css/css-writing-modes-3/text-orientation-sideways-vrl-100-ref.html": [ - "ed3f50fb22f4f4d082631d87dc3303483ec18c5a", + "34700ce4b5c88e6a78c139825a4ffdb2176a26c1", "support" ], "css/css-writing-modes-3/text-orientation-sideways-vrl-100.html": [ - "1d2a10c90be07cd3374f11ed853969dc34edf3d8", - "manual" + "3d6e7e8646cdabad0a69c7dcfd5887600235dcb3", + "reftest" ], "css/css-writing-modes-3/text-orientation-upright-slr-017.xht": [ "1d1562b66d77b5589ee86363ca709d0aa30cab2a", @@ -520645,24 +535068,24 @@ "reftest" ], "css/css-writing-modes-3/text-orientation-upright-vlr-100-ref.html": [ - "3bb029eab9bc201bf27fec85c8d79d6783f61bab", + "0a623fd2d3f0fa2eb88b1c15078751cc3a569f75", "support" ], "css/css-writing-modes-3/text-orientation-upright-vlr-100.html": [ - "96148879ec4b228c6cc81884d2793da501e6d604", - "manual" + "06bcabdb125af775c8a54a191e0220d45770ec3e", + "reftest" ], "css/css-writing-modes-3/text-orientation-upright-vrl-002.xht": [ "1448f241e5237217fae2d9b58d7304bb3d957c49", "visual" ], "css/css-writing-modes-3/text-orientation-upright-vrl-100-ref.html": [ - "439e06914274231d3f65e5fd03d2af4976088a62", + "c269642bb8c2db4a8fd3ac8ff4afb1faf4e62e61", "support" ], "css/css-writing-modes-3/text-orientation-upright-vrl-100.html": [ - "d5000c9500cfbfc87fd711595fa1205f2364e6b2", - "manual" + "ffe5237dd3712eb3a762dc16c05cb6c9b86a5f65", + "reftest" ], "css/css-writing-modes-3/text-underline-position-alphabetic-001.xht": [ "efa7e201762fc878a76a9f492ed582c501e5330f", @@ -520713,11 +535136,11 @@ "support" ], "css/css-writing-modes-3/tools/generators/text-orientation-generator.js": [ - "d454f12c996acb9375bdc02c2b36211b807e22fe", + "29814715774314c527deb6897ce94911c827de92", "support" ], "css/css-writing-modes-3/tools/generators/text-orientation-ref.ejs": [ - "9d9e7f03c8ba4a46b23eb46b5adbbcf815b4085d", + "3469e9e36d2c36dbd726e23e3692c52e19f94539", "support" ], "css/css-writing-modes-3/tools/generators/text-orientation-script.ejs": [ @@ -520737,7 +535160,7 @@ "support" ], "css/css-writing-modes-3/tools/generators/unicode-data.js": [ - "6d08cf57c48598d28eae5456d4742095d7fb3c2a", + "4d0d0734df208147f8cbf1fd3714bdb28a1a9ff5", "support" ], "css/css-writing-modes-3/underline-font-size-vlr-003.xht": [ @@ -523753,7 +538176,7 @@ "support" ], "css/geometry-1/DOMMatrix-001.html": [ - "44c5a08d5e04aa37d4085c0166c449861b6eb313", + "a8cfa83e572a766b61e4eae5946e7efb62e9eab7", "testharness" ], "css/geometry-1/DOMMatrix-002.html": [ @@ -523761,7 +538184,27 @@ "testharness" ], "css/geometry-1/DOMMatrix-003.html": [ - "546e1556be89eddb7d24adc97bb1024f686d7df6", + "9e2d031f83fbcc4d32a3891fdf2c2d8bc2cc774c", + "testharness" + ], + "css/geometry-1/DOMMatrix-a-f-alias.html": [ + "6041bd4e7fd1535d9c8515f1b2f07981b2bdd366", + "testharness" + ], + "css/geometry-1/DOMMatrix-css-string.worker.js": [ + "e97dcab8cdf554c5f60c12dd037ece69d7c854b2", + "testharness" + ], + "css/geometry-1/DOMMatrix-newobject.html": [ + "44764bc9b2a59045830fcc1bcedceaf4c2034dcb", + "testharness" + ], + "css/geometry-1/DOMMatrix-stringifier.html": [ + "fbcaa50f5daab1a11325cbbd46e10c524a1f6f80", + "testharness" + ], + "css/geometry-1/DOMMatrixInit-validate-fixup.html": [ + "201d59db6923ae141d980ac40ddce08375bd1900", "testharness" ], "css/geometry-1/DOMPoint-001.html": [ @@ -523769,13 +538212,17 @@ "testharness" ], "css/geometry-1/DOMPoint-002.html": [ - "30ca7cda7adda2bddda3643488a478af116f14cd", + "fec9a7f01841a19cdd6a37845a78320885065e74", "testharness" ], "css/geometry-1/DOMQuad-001.html": [ "5f48cfc224a18cfe37a7cf94cf48665a19681f21", "testharness" ], + "css/geometry-1/DOMQuad-002.html": [ + "722ba06b5998c0ed9608ef3509a536df3a914880", + "testharness" + ], "css/geometry-1/DOMRect-001.html": [ "f24895dc1d994388c45fb6fa39132a7e1c03d18b", "testharness" @@ -523784,10 +538231,38 @@ "4b2b22591c272446136118ce3d174d1b66200743", "support" ], + "css/geometry-1/WebKitCSSMatrix.html": [ + "353fb5d2950784a88ce7764bb23c4267ac837ca8", + "testharness" + ], + "css/geometry-1/WebKitCSSMatrix.worker.js": [ + "35d9a1d1a7f655b55d94d0b409e9562a3fd08db5", + "testharness" + ], + "css/geometry-1/historical.html": [ + "f3462b981784755425a82ba050850ef8d3d36976", + "testharness" + ], + "css/geometry-1/interfaces.html": [ + "5381de7d65645da14f56f906363b00ffda90e524", + "testharness" + ], + "css/geometry-1/interfaces.worker.js": [ + "22348a0aaeec8dcd677b8f60486f2e043b8f8a86", + "testharness" + ], + "css/geometry-1/structured-serialization.html": [ + "6f38a37d56ffb9d2ddc17f7c4ed0613b7a5c8136", + "testharness" + ], "css/geometry-1/support/dommatrix-test-util.js": [ "d0f0c482648ac39ccaebe359880b079369a8ba21", "support" ], + "css/geometry-1/support/interfaces.js": [ + "083416b9f77bf1d06802ca30b6231c2897f4348d", + "support" + ], "css/mediaqueries-3/OWNERS": [ "38493049aff40e744da38bc0755d40fa4d56bfc9", "support" @@ -523920,6 +538395,86 @@ "4f4f13f66e77a41e97ee5035568f1e0944ec8b2e", "testharness" ], + "css/motion-1/offset-path-ray-ref.html": [ + "dfea2bd9cadf9d1b83e95bc2dbffef3539937ff1", + "support" + ], + "css/motion-1/offset-path-ray.html": [ + "3142cc8d33d56a00d40322400d164fbb92701592", + "reftest" + ], + "css/motion-1/offset-path-string-ref.html": [ + "fde0c63d10b7f26251a916c2435f1232e7db9b19", + "support" + ], + "css/motion-1/offset-path-string.html": [ + "f9cdf54e93f1b3646b7a414f4df59a216793cff1", + "reftest" + ], + "css/motion-1/offset-rotate-001.html": [ + "d2a73d7472f90b97e39083944b3b046094a125d9", + "reftest" + ], + "css/motion-1/offset-rotate-002.html": [ + "c65ab19d613a963138a2e2c01ccb3ced63bc3e8c", + "reftest" + ], + "css/motion-1/offset-rotate-ref.html": [ + "09f4897e2d2fa99303edb59e2872a9a373db3e26", + "support" + ], + "css/motion-1/parsing/offset-anchor-parsing-invalid.html": [ + "b48194c7ee35af7d114fd514f060ea9e8aae6372", + "testharness" + ], + "css/motion-1/parsing/offset-anchor-parsing-valid.html": [ + "f3408e205ea2e2f91c40a35bb68cd18535889e5e", + "testharness" + ], + "css/motion-1/parsing/offset-distance-parsing-invalid.html": [ + "93fa55e813b8fd82a11c1c70e331f07e2ef8ff8c", + "testharness" + ], + "css/motion-1/parsing/offset-distance-parsing-valid.html": [ + "cfd7f351c6e3721c28d5b4992be02d5f1f86fcb6", + "testharness" + ], + "css/motion-1/parsing/offset-parsing-invalid.html": [ + "34fdad4a9791aaf30687b070830a5b34934bcda5", + "testharness" + ], + "css/motion-1/parsing/offset-parsing-valid.html": [ + "2ec82b84908d897abb22ae366a0c1bbb0847d466", + "testharness" + ], + "css/motion-1/parsing/offset-path-parsing-invalid.html": [ + "5a37548528ea4d633f17b9a3215f9e6a30ce617c", + "testharness" + ], + "css/motion-1/parsing/offset-path-parsing-valid.html": [ + "dad552eff4cbb61796c2b7954e4dbf2fdce96324", + "testharness" + ], + "css/motion-1/parsing/offset-position-parsing-invalid.html": [ + "9a6a5cef379e2f81ae6b48662a83c6bd88bfc259", + "testharness" + ], + "css/motion-1/parsing/offset-position-parsing-valid.html": [ + "878ef0365545f1ee0efcbd4ded1ec3dcda2c7543", + "testharness" + ], + "css/motion-1/parsing/offset-rotate-parsing-invalid.html": [ + "36cebf21d27913e201a445cee732ed7bf6152b30", + "testharness" + ], + "css/motion-1/parsing/offset-rotate-parsing-valid.html": [ + "8712c429bf7f7f2e3d16e3548edd7eddc6ae3e7d", + "testharness" + ], + "css/motion-1/parsing/resources/parsing-testcommon.js": [ + "bb1376de12185a14f77fd28be757cc8db2a9929d", + "support" + ], "css/reference/OWNERS": [ "946f23f945163bf9f9da080291b21473f6e1cbd0", "support" @@ -523980,6 +538535,14 @@ "2f6ee60666fbb65497dc8749683d66ae543bad12", "support" ], + "css/reference/ref-filled-green-200px-square.html": [ + "c7c664ce492ddee12caeebc45235073b65b46c42", + "support" + ], + "css/reference/ref-filled-green-300px-square.html": [ + "ae0b29e989b96750353e32c1cc5f597604cb26dc", + "support" + ], "css/reference/single_square_list_marker.xht": [ "24f700c8434ba676f079c99ad02bbc5c05be49da", "support" @@ -523992,6 +538555,10 @@ "9ff82c1dc6b43d58c5bf5d1dfa885a83c1ed219d", "support" ], + "css/selectors4/focus-display-none-001.html": [ + "b56479be3f0c6cdf9e59f54d197526e6d66c9b54", + "testharness" + ], "css/selectors4/focus-within-001-ref.html": [ "cd36270f1a34ea74b10b761cb153a7eb85b221bc", "support" @@ -524016,8 +538583,12 @@ "86dd5c49bb80eb7c5fc31fa5ccde03cb3cd1eaa6", "reftest" ], + "css/selectors4/focus-within-006-ref.html": [ + "cd252364cc3bcdbd1ee08cb05fd7f3170743b6a5", + "support" + ], "css/selectors4/focus-within-006.html": [ - "559c91d9c1fde3acff64e8306c5336a128403f77", + "98c8ac4a0a0af6fdf5cc223665a80905a49ebab5", "reftest" ], "css/selectors4/focus-within-007-ref.html": [ @@ -524033,7 +538604,15 @@ "reftest" ], "css/selectors4/focus-within-009.html": [ - "443e4d2892aced8fd5bef0cf83c62933437c3702", + "099cc34fc6e8303f6698fa173950c969f626f1c5", + "testharness" + ], + "css/selectors4/focus-within-010.html": [ + "150745c52d09926db02fdff2038858aa9c3bbf7d", + "reftest" + ], + "css/selectors4/focus-within-display-none-001.html": [ + "d6cf51a6bc63173550d4822fe6bf9c2cb6a74ad0", "testharness" ], "css/selectors4/focus-within-shadow-001-ref.html": [ @@ -524041,23 +538620,23 @@ "support" ], "css/selectors4/focus-within-shadow-001.html": [ - "04bea6ccfca052e4f1145bbc2ee29eafea6ec28c", + "d40955b06bcfe9b301ee107a9ed5bf04185778f2", "reftest" ], "css/selectors4/focus-within-shadow-002.html": [ - "7d42c180427eeb8914a2d87a5de6041962cde606", + "2cdc61827ca490926c7b6b9a66c667792ef2bc33", "reftest" ], "css/selectors4/focus-within-shadow-003.html": [ - "bb2a85b95b8d3a3bf9d99035522f02f2a85710d8", + "3350a0d3f5f50f150b7fb08a7d973a7a2f55fa29", "reftest" ], "css/selectors4/focus-within-shadow-004.html": [ - "4339aa03e5120ddcca25a268e2d94539b1e04523", + "a5721ff3e15dc01114f823b43ad8411f9817fecf", "reftest" ], "css/selectors4/focus-within-shadow-005.html": [ - "99c5fcb361ae4903b4e87315dfb8ba80f0296037", + "3a350e398a252d9687070f5dd02aaae3449c2425", "reftest" ], "css/selectors4/focus-within-shadow-006.html": [ @@ -528408,6 +542987,10 @@ "f256fe7fb8a8653c39a2b33ee7ba45d4d627f69b", "reftest" ], + "css/vendor-imports/mozilla/mozilla-central-reftests/masking/mask-composite-1d.html": [ + "e75f1ed572f0ab77b7c49cd80874b3905e88b2cc", + "reftest" + ], "css/vendor-imports/mozilla/mozilla-central-reftests/masking/mask-composite-2-ref.html": [ "bcb1b7f8cf2d1bebc24bc3ac6ebb40c175f031ec", "support" @@ -528528,6 +543111,10 @@ "749677b374606b0e69af2daded11a3c9c9b9b712", "reftest" ], + "css/vendor-imports/mozilla/mozilla-central-reftests/masking/mask-mode-d.html": [ + "e8fe2f2883d87a47738958adec9a41e479ae6db9", + "reftest" + ], "css/vendor-imports/mozilla/mozilla-central-reftests/masking/mask-mode-ref.html": [ "228e76f08cc7efe877d2cd636bc0247fec15be94", "support" @@ -528813,7 +543400,7 @@ "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/masking/reftest.list": [ - "59ba2fb5e968d68f6a5ce575653ea4ab32f722cc", + "d591c5c591aaea8725b58fc8af66819208ebd2ca", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/masking/support/50x100-opaque-blue.svg": [ @@ -529028,6 +543615,14 @@ "cca1f69024262abd003a75ad4f8182b12d7f364f", "reftest" ], + "css/vendor-imports/mozilla/mozilla-central-reftests/selectors4/class-id-attr-selector-invalidation-01-ref.html": [ + "e071deedf049f09776c8948daec3ae760cce9561", + "support" + ], + "css/vendor-imports/mozilla/mozilla-central-reftests/selectors4/class-id-attr-selector-invalidation-01.html": [ + "52e8738ca9bdb4e76f835f2c1c51e9882edddb95", + "reftest" + ], "css/vendor-imports/mozilla/mozilla-central-reftests/selectors4/dir-style-01-ref.html": [ "c81743c7dc2f213973ebeb9f3b8cd9850ab129f1", "support" @@ -529097,7 +543692,7 @@ "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/selectors4/reftest.list": [ - "3e35cb063778acd8a9126dd89075fcfde0786853", + "76c907a127aec740e17d009a517acccd5d3e9fd4", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/reftest.list": [ @@ -531025,11 +545620,11 @@ "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/transforms/perspective-containing-block-dynamic-1a.html": [ - "06c5e578b60c3c812e523f40008f4e593dcb90c3", + "6a4dd7a18cd9d400fb704eaa8ceb0e63607eb207", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/transforms/perspective-containing-block-dynamic-1b.html": [ - "e1727ff1f5d325eb6ab246f410d9c8b88b8e7227", + "1f6e81539cf5a3c3a339e3a69f4c6446688c3cd3", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/transforms/perspective-zero-2-ref.html": [ @@ -544844,10 +559439,6 @@ "3a19220664c43723cdfe942598cd0cb11025d99a", "support" ], - "css/work-in-progress/hixie/comments-010.xht": [ - "5e0680e80e99006d242565d0434c008239207d76", - "support" - ], "css/work-in-progress/hixie/css3-box/box-compact-001-alt.html": [ "707d2306f6b9987c9b705793bc8516410e128679", "support" @@ -548757,127 +563348,127 @@ "support" ], "css/work-in-progress/microsoft/css-tables/base.css": [ - "cd3778879fe33523417ad3655f3abca35e603b9d", + "cb31986a92c4e431c1882e241cdbaf96ca882fd9", "support" ], "css/work-in-progress/microsoft/css-tables/bounding-box-computation-1.html": [ - "ba54904dfdb2de0d676fc9f4e77bace25534b06b", + "09bbaf166fa04e3b35794a2a0a85541f44f811e9", "support" ], "css/work-in-progress/microsoft/css-tables/bounding-box-computation-2.html": [ - "aee25a0d5cc0d095876ea013cf6020604bca1a5e", + "d53df3d1f867c5ef69324bf66d1e44eb6cc40d56", "support" ], "css/work-in-progress/microsoft/css-tables/bounding-box-computation-3.html": [ - "36f1f4e76af7a2e36ea3214717f33a2ff3d6828b", + "9df872172f858cb2df9eb2673206bb427f71f81c", "support" ], "css/work-in-progress/microsoft/css-tables/caption-side-1.html": [ - "9fdc2a8043e843fdaf46dbef376ed8654b009d39", + "6506b9d5b926c8f74235bf5eccb3437801728e3b", "support" ], "css/work-in-progress/microsoft/css-tables/fixed-layout-1.html": [ - "f603c07b0c41acca7792ec1c168f3cbd2b91efdc", + "803017420fc43c6ea36f57d009bbe9030d8a9f6b", "support" ], "css/work-in-progress/microsoft/css-tables/fixed-layout-2.html": [ - "fd142ba5317f4bc028e6fac9deeebcaf9d225082", + "bab3af419cc2243715ddff839828169e8f0b2e83", "support" ], "css/work-in-progress/microsoft/css-tables/height-distribution/computing-row-measure-0.html": [ - "fca8efa080f005ff4a832058e4a49014078665f7", + "1c9027b4317dd990cd01cd7a4b2db9838a5574cd", "support" ], "css/work-in-progress/microsoft/css-tables/height-distribution/computing-row-measure-1.html": [ - "694d1c7e8efabbd7e55aa7055ab66d1ab6cf0c3b", + "61ef69a72b0307506df6277f9fb694e4589114d2", "support" ], "css/work-in-progress/microsoft/css-tables/height-distribution/percentage-sizing-of-table-cell-children.html": [ - "f30e577e114626824f87f5aadfed0c84e6b866dc", + "442cdb710e53dc8705f4aa3641ac849ba874e5d5", "support" ], "css/work-in-progress/microsoft/css-tables/html-to-css-mapping-1.html": [ - "114e651adbc47c8a1d8b5939cd27f9fdac866220", + "f11a5c7c6ce8a264789f59820f3262c4a281741b", "support" ], "css/work-in-progress/microsoft/css-tables/html-to-css-mapping-2.html": [ - "f498d53539b1f5c9e791ae0401254496cedcff53", + "f17c742ff09402355799f190c505ffa408609157", "support" ], "css/work-in-progress/microsoft/css-tables/html5-table-formatting-1.html": [ - "b0ca2ba4a9e7e4fc8e0ad229836ae567ee2ae3cf", + "d9727fd1d9c3b711360ed97ecbba24d179a08847", "support" ], "css/work-in-progress/microsoft/css-tables/html5-table-formatting-2.html": [ - "c04eac6dec41fde9840e533e68248af1647f5912", + "5967f05120b4338f606546070b1a889503998047", "support" ], "css/work-in-progress/microsoft/css-tables/html5-table-formatting-3.html": [ - "ba56850edc7060930564ce3cc2b07e8918d96f0d", + "92f526a695fa5bc53e6e64272c7b0119e144f6f7", "support" ], "css/work-in-progress/microsoft/css-tables/html5-table-formatting-fixed-layout-1.html": [ - "bed9f4e85004e72362f59288df7de7a6864af51d", + "e06bd936c60251f5fc57433d773c961274525e21", "support" ], "css/work-in-progress/microsoft/css-tables/markup-generator.html": [ - "bbcb0b726f9c850ef863a88cca8ac35798fe1224", + "fbaac74233746fa6a82a0ef6c8536642f87ee8fe", "support" ], "css/work-in-progress/microsoft/css-tables/table-model-fixup-2.html": [ - "4382a7bea767baf40f7fd51fa8ec831f510ec789", + "fbba92722349247b88b5f617b6e83e666b326331", "support" ], "css/work-in-progress/microsoft/css-tables/table-model-fixup.html": [ - "40b6fb63246f3d2682d0962e28e28c04047f371b", + "52c4184ac3821b8dc0145f8b2ef0056579820904", "support" ], "css/work-in-progress/microsoft/css-tables/visibility-collapse-col-001.html": [ - "cf88122b81d38d0e6ffd91aa9cabf010cc3eea1a", + "1f1f0d71a8ae5047f54947874cf8eba5a8ff9837", "support" ], "css/work-in-progress/microsoft/css-tables/visibility-collapse-row-001.html": [ - "5e3bff4c59ad3a2bc7b3d336e3e87f90edcdad18", + "a394aeb3b5549f4cbbd5752e089fb95f310d1e77", "support" ], "css/work-in-progress/microsoft/css-tables/width-distribution/computing-column-measure-0.html": [ - "19601abf196f1abb0be879088065e10b766bb39e", + "04c271cc480b5daf958840ec79b953bbb48961a2", "support" ], "css/work-in-progress/microsoft/css-tables/width-distribution/computing-column-measure-1.html": [ - "5ada51e404beeae09f21214471cdb6674a2008b9", + "15ee7b380c6de4e20cd33c8543f083eec2b91f4f", "support" ], "css/work-in-progress/microsoft/css-tables/width-distribution/computing-table-width-0.html": [ - "72f88c9573478bfd020e48106d50d69e8682bad6", + "c1f6bd30f79ef0c6d128782cbe4fe1e79cd90c6d", "support" ], "css/work-in-progress/microsoft/css-tables/width-distribution/computing-table-width-1.html": [ - "a64979315de42972308b93f9f0e519ee94c0a2fb", + "a62ae8535c9b897600dcba6c0c859cb8cd5df53e", "support" ], "css/work-in-progress/microsoft/css-tables/width-distribution/distribution-algo-1.html": [ - "a877a21ba3047889a23356f64af031ea556acbae", + "4682ed687deb81cf1a0b2d4677301bf45dec7576", "support" ], "css/work-in-progress/microsoft/css-tables/width-distribution/distribution-algo-2.html": [ - "a877a21ba3047889a23356f64af031ea556acbae", + "4682ed687deb81cf1a0b2d4677301bf45dec7576", "support" ], "css/work-in-progress/microsoft/css-tables/width-distribution/distribution-algo-min-content-guess.html": [ - "14e45dfa3705724a581a0de5725419953f2606bb", + "79ac2e7b0dee9c850c31d7cab695c7359ed06a00", "support" ], "css/work-in-progress/microsoft/css-tables/width-distribution/distribution-algo-min-content-percent-guess.html": [ - "249cc8701e2d71c8f9b8fcd0d7b1eb7c68d25d38", + "8516ace74e2ad17055a0b68476b49b0e21fa1b1e", "support" ], "css/work-in-progress/microsoft/css-tables/width-distribution/distribution-algo-min-content-specified-guess.1.html": [ - "b2216059ead8d4564230e0704c67d989ab5ed280", + "9f0f30a6d1f4f81206830d8168c91da4eb8cfbd7", "support" ], "css/work-in-progress/microsoft/css-tables/width-distribution/distribution-algo-min-content-specified-guess.html": [ - "f978b8d7ae9075d6d4574647f1f059ba73cce3c9", + "06eedc341154f88c9e4b0720ce3df746b201d776", "support" ], "css/work-in-progress/microsoft/emboxes.png": [ @@ -553545,7 +568136,7 @@ "testharness" ], "cssom-view/MediaQueryList-001.html": [ - "ba8bc3856ebda05bc1c5b075b50d0c39665086a6", + "4b209fa18eda5f0c50639357e9851de28e545cf7", "testharness" ], "cssom-view/MediaQueryList-with-empty-string.html": [ @@ -553577,15 +568168,15 @@ "testharness" ], "cssom-view/cssom-view-window-screen-interface.html": [ - "8fb3e3327f8f657e2215c91c75f49fd739c15c57", + "ed3dc5f811d0e0920689b051da26c6b3c34b9a54", "testharness" ], "cssom-view/cssom-view/media-query-list-interface.xht": [ - "3f867c6e608d318d870d3269b9eb886955c119fc", + "62f0fdd48d1a4194d439ee22829b3346bed9a154", "testharness" ], "cssom-view/cssom-view/window-interface.xht": [ - "47aee3e273f90c1f1eb08884afecdef8a96630c5", + "4d8c4ddb997d85ca2c971602a3096f57565c01eb", "testharness" ], "cssom-view/elementFromPoint-001.html": [ @@ -553601,7 +568192,7 @@ "testharness" ], "cssom-view/elementScroll.html": [ - "56d85d2973ad630dd28842df6479b1f571b7f340", + "416cff5602d8836fcc7c2369e6f5abd86e43eed5", "testharness" ], "cssom-view/elementsFromPoint.html": [ @@ -553613,7 +568204,7 @@ "testharness" ], "cssom-view/htmlelement-offset-width-001.html": [ - "04fd2129b8dd587d8456be7e70ae34732110d884", + "071bcc0320577077bc6768921f28e33e892ccd9a", "testharness" ], "cssom-view/iframe.html": [ @@ -553637,7 +568228,19 @@ "testharness" ], "cssom-view/offsetParent_element_test.html": [ - "6e7579de7add0162ac99f3326f070bbd6051932b", + "b2261ec702116c211ab5ac6fbb53698dfe60a7be", + "testharness" + ], + "cssom-view/scrollIntoView-empty-args.html": [ + "c1bd398158cc935c8c69cb0291c2ef0e0faa6bad", + "testharness" + ], + "cssom-view/scrollIntoView-shadow.html": [ + "3c4a18992105fd7bf19cbf29f0b6d80cb12ca98c", + "testharness" + ], + "cssom-view/scrollIntoView-smooth.html": [ + "0561564f185dcaf2ad3a8e14e081efb3c2c273e3", "testharness" ], "cssom-view/scrollWidthHeight.xht": [ @@ -553652,6 +568255,10 @@ "1b504d68ded5e70043da04e89b77342585144f4b", "testharness" ], + "cssom-view/scrolling-quirks-vs-nonquirks.html": [ + "a799c737e7962865c3ed3e380a664cafe97dcfe8", + "testharness" + ], "cssom-view/scrollingElement.html": [ "e3bc7ab9a646c1275e5dab9394df97d72ef8a42e", "testharness" @@ -553861,7 +568468,7 @@ "testharness" ], "cssom/CSSKeyframeRule.html": [ - "0351ebe1e975932c7a79a0888e001e2afb41242b", + "0246cf2511a18c247db1eabefec8b3590127d3ee", "testharness" ], "cssom/CSSKeyframesRule.html": [ @@ -553877,7 +568484,7 @@ "testharness" ], "cssom/CSSStyleRule.html": [ - "83a876458ba609b81c86354160549ab11b018d38", + "9fe62d2e23709b77e9b5cda4522ec1c04d2940cf", "testharness" ], "cssom/CSSStyleSheet.html": [ @@ -553952,6 +568559,10 @@ "c9ed57c7ef7a035c25feff4ea60547a57d727f31", "testharness" ], + "cssom/getComputedStyle-pseudo.html": [ + "6c74e57a2e32a13cc3b7e955a2d89dafdf6d1730", + "testharness" + ], "cssom/historical.html": [ "2c78218b89efb9bdf60cf708920be142051347c7", "testharness" @@ -553972,6 +568583,22 @@ "377c8610bc597d47a93f70a9cf95b3c7657d8319", "testharness" ], + "cssom/insertRule-charset-no-index.html": [ + "cd3a96351a4c8dcd417fb03963f9d4fb0760c746", + "testharness" + ], + "cssom/insertRule-import-no-index.html": [ + "ba89bad41a8d243f89ec91a0c02a34e97b378bc8", + "testharness" + ], + "cssom/insertRule-namespace-no-index.html": [ + "109ed203fabac2da4279419deb34d5bc5a393d09", + "testharness" + ], + "cssom/insertRule-no-index.html": [ + "812f2b02d7694dd270b7a3e1ef205b99890ab216", + "testharness" + ], "cssom/interfaces.html": [ "5876c88acd95d18166fdd049bdb3f09cdde4eb3f", "testharness" @@ -554100,6 +568727,10 @@ "461fd17b274662b88500cdf42bab7f3b79e6019d", "support" ], + "cssom/support/import-charset.css": [ + "c6a36f4dc3198897a189d638de272733f99e5157", + "support" + ], "cssom/support/import-green.css": [ "db4f420efdb292d6520be1a3bf052ed3f6f9e7e3", "support" @@ -554232,6 +568863,10 @@ "0c1c8fb977b24bb3b5ca33051b32932f36f5a960", "testharness" ], + "cssom/variable-names.html": [ + "5ab67b9e86fd700a556d153898c2896448cc1759", + "testharness" + ], "custom-elements/CustomElementRegistry.html": [ "d1661ab1734f7d1a252030aeac7e9842a7a4cb3b", "testharness" @@ -554268,6 +568903,10 @@ "4f3d4da1aae8efab035a4b951147904d71e7de3b", "testharness" ], + "custom-elements/custom-element-registry/per-global.html": [ + "3b143f80d77a0b15b59cc6e6f5344f85dafe4f4e", + "testharness" + ], "custom-elements/disconnected-callbacks.html": [ "ad030517981b11892126023bc758b7fe323a3d14", "testharness" @@ -554276,6 +568915,10 @@ "11b7927c9a2946c752f56e5b44cfb4051ab8b6d6", "testharness" ], + "custom-elements/microtasks-and-constructors.html": [ + "088fcd47e328e30c6119a37bbf19768e7f14763d", + "testharness" + ], "custom-elements/parser/parser-constructs-custom-element-in-document-write.html": [ "b338f193a803ea679bbf0e041f71daf1e6d703f6", "testharness" @@ -554525,7 +569168,7 @@ "support" ], "docs/_writing-tests/css-metadata.md": [ - "64bee512bd4382925d6b87ab60e3756110fe30f2", + "a7606cd41a6211a9e24850ae4c35a0621961230e", "support" ], "docs/_writing-tests/css-user-styles.md": [ @@ -554536,8 +569179,8 @@ "7574493bd02c0586f61424de2e2f3f337f67f270", "support" ], - "docs/_writing-tests/idlharness.html": [ - "2d127308c9dbb03c3e4a69964511b5e1a0e12030", + "docs/_writing-tests/idlharness.md": [ + "9f908f014553757d12fb91626a31a8312ec75bc5", "support" ], "docs/_writing-tests/index.md": [ @@ -554568,12 +569211,12 @@ "62747b6d0328445778050f3e4d6ec46dbdc3a18c", "support" ], - "docs/_writing-tests/testharness-api.html": [ - "fad99e6c6946066568e605a8ac6de7e2e49ac148", + "docs/_writing-tests/testharness-api.md": [ + "41fd0824ee16043f2b59ce51f00f42785e8ed0ee", "support" ], "docs/_writing-tests/testharness.md": [ - "150d8638cff4e28c06014dbc0e7e9d9ef150c096", + "154bd922b6f50ec003280616381522a24faffb14", "support" ], "docs/_writing-tests/visual.md": [ @@ -554581,7 +569224,7 @@ "support" ], "docs/assets/_reftest_graph_example.dot": [ - "5fb97d276ed847bc271376dc6c068f57c067d790", + "bc8ebc09e30ff18994b32aa9e5ea43334c276ade", "support" ], "docs/assets/commit-directly.png": [ @@ -554609,7 +569252,7 @@ "support" ], "docs/assets/main.scss": [ - "427cae125889f51bef386097f0127e948f02652e", + "a0f4501b19a64a73c1037e2843a49060c4659bc9", "support" ], "docs/assets/menu.js": [ @@ -554733,7 +569376,7 @@ "testharness" ], "dom/events/Event-dispatch-click.html": [ - "9d1941dd42c70c1551b680f1a8fb06f68f0cb7a5", + "e76875443d33790f017e1ee6163f5ffe200b2b78", "testharness" ], "dom/events/Event-dispatch-detached-click.html": [ @@ -554861,7 +569504,7 @@ "testharness" ], "dom/historical.html": [ - "1cbb05f47017bfb409e9c7e93bcac61c0d7582d6", + "99cd2739cdfcb5b2c6bf0df098abdfcc4203b891", "testharness" ], "dom/interface-objects.html": [ @@ -554869,7 +569512,7 @@ "testharness" ], "dom/interfaces.html": [ - "0cbf5532f442fdb9ba773fd053f8831b7b522767", + "f8eb7f5fcfdc9ca4a500d5e43855a24a169c81cf", "testharness" ], "dom/lists/DOMTokenList-Iterable.html": [ @@ -554961,7 +569604,7 @@ "testharness" ], "dom/nodes/DOMImplementation-createDocumentType.html": [ - "09a9749b83780791c66d8695023165cd544ec23c", + "515a2a4dc52fafb890899ff340201ed87418fc1f", "testharness" ], "dom/nodes/DOMImplementation-createHTMLDocument.html": [ @@ -554996,8 +569639,16 @@ "fee8777427d2db47164e793ce5b00e5645ac6080", "testharness" ], + "dom/nodes/Document-constructor-svg.svg": [ + "246e97b07cec7eef9a6ade1fce7276410499dde3", + "testharness" + ], + "dom/nodes/Document-constructor-xml.xml": [ + "1d9f7031a6eab0b904db1c87a71c247858d56487", + "testharness" + ], "dom/nodes/Document-constructor.html": [ - "1489f07f9a363eafcbed8e579e555183620e7d17", + "38aa896f335ff68927e72af1c5de552e56ef195c", "testharness" ], "dom/nodes/Document-contentType/contentType/contenttype_bmp.html": [ @@ -555293,11 +569944,11 @@ "testharness" ], "dom/nodes/Document-createElementNS.js": [ - "9b6cf141da4b259fd2a032d47082b70ccfe4a59b", + "a0cb73e1bef92ce357f50e03c74794ec25a98c2e", "support" ], "dom/nodes/Document-createEvent.html": [ - "00da7c85dab7a6f6414d4c58205ac501be0c588d", + "9274ffffe1b08dee78b64ffc70582957f0386bca", "testharness" ], "dom/nodes/Document-createEvent.js": [ @@ -555429,7 +570080,7 @@ "testharness" ], "dom/nodes/Element-classlist.html": [ - "c6f2331b2479606064cc7d4428912ff275718390", + "c197df35960b77a7794eed10a1a927867a6658f4", "testharness" ], "dom/nodes/Element-closest.html": [ @@ -555725,23 +570376,23 @@ "testharness" ], "dom/nodes/ParentNode-querySelector-All-content.html": [ - "2fe29f94771df7368eb02888aeff862197d6131f", + "6f8c08e2c6dd453f07040f6e0dfaac2496d83bfa", "support" ], "dom/nodes/ParentNode-querySelector-All-content.xht": [ - "42dd306a4c1466ba22464c959d4d8bbb83f1a95a", + "05af5651daed7b7f01e5413c7f8f95b0a4673bf2", "support" ], "dom/nodes/ParentNode-querySelector-All-xht.xht": [ - "ad28a6ca45cc102865b170dac5a9837a09ad5563", + "5469b8ad07ecbb07d5ca46d82c71aa4e470a5c2e", "testharness" ], "dom/nodes/ParentNode-querySelector-All.html": [ - "c94c9d2b9d84260e9ef7ae36a77ffceaaf18fad1", + "83baf7fa751b086622742908845c7a4db2e65fcb", "testharness" ], "dom/nodes/ParentNode-querySelector-All.js": [ - "9466cb7dd4c3400f4a9dc683db1a729a5988c993", + "2bb7218b5c57e98cf7e92c2db5c8b1f61f86198e", "support" ], "dom/nodes/ProcessingInstruction-escapes-1.xhtml": [ @@ -555769,7 +570420,7 @@ "testharness" ], "dom/nodes/attributes.html": [ - "1b93fbf6c7d2c3e018cb34f50c5332d2c43b5355", + "cddff48a942168622772069ca2b2bcf0318deed4", "testharness" ], "dom/nodes/attributes.js": [ @@ -555845,7 +570496,7 @@ "testharness" ], "dom/nodes/getElementsByClassName-14.htm": [ - "524a8b849bdcfa11205e02ad0f534d16e83aa1dc", + "2bcdf796012cd88f2ee23187d70d32b06c2663ed", "testharness" ], "dom/nodes/getElementsByClassName-15.htm": [ @@ -555925,7 +570576,7 @@ "testharness" ], "dom/nodes/mutationobservers.js": [ - "cbbccd9dc0cc4003feb6a4db7087590d5df9d6c5", + "595d6f555e03c0158c24448bf2bf35a3684a61fb", "support" ], "dom/nodes/prepend-on-Document.html": [ @@ -555945,7 +570596,7 @@ "testharness" ], "dom/nodes/selectors.js": [ - "ec9fcd4f84ceca6f87efa5d12f328d6e552bfe33", + "15faac9fc281d4a0e5c525292f691fbcdf84bfc9", "support" ], "dom/ranges/Range-attributes.html": [ @@ -556188,6 +570839,10 @@ "5126931d2b4f9b3372e8fd84f24821bebea39522", "testharness" ], + "domparsing/DOMParser-parseFromString-xml-internal-subset.html": [ + "60cfe168e07bec35251daa4cc167ed81fedb3667", + "testharness" + ], "domparsing/DOMParser-parseFromString-xml.html": [ "bef45b2ff4f474982a84d80d3e37ccae0d459f4b", "testharness" @@ -556289,13 +570944,169 @@ "support" ], "dpub-aam/OWNERS": [ - "16577d2283b826f0541dbc795177c7aac7e1b228", + "3a6002295ea2893ba74763e46965bd2d1291d55b", "support" ], "dpub-aam/README.md": [ "4b90a271f1ae6bfe28684797085ed59b2471b0f3", "support" ], + "dpub-aam/doc-abstract-manual.html": [ + "db010032cbeebdde1c59d301d02dc1079ac8bef8", + "manual" + ], + "dpub-aam/doc-acknowledgments-manual.html": [ + "a2275ae536cd37f9014e32db720f3c9de3e31731", + "manual" + ], + "dpub-aam/doc-afterword-manual.html": [ + "1b5984592c07f925b7e5e50a975415871d0fbef5", + "manual" + ], + "dpub-aam/doc-appendix-manual.html": [ + "a95c68b3db24bba85efad275c2d88fc84ab513b1", + "manual" + ], + "dpub-aam/doc-backlink-manual.html": [ + "e311587406c5b88e592bfd4a1bd8b6c0562dc38f", + "manual" + ], + "dpub-aam/doc-biblioentry-manual.html": [ + "cede32da267cdb9da0ef0a3a94b38bebd88db4cc", + "manual" + ], + "dpub-aam/doc-bibliography-manual.html": [ + "dc2845dca57c7dcb3d8afe5b864e5221ce13e3b1", + "manual" + ], + "dpub-aam/doc-biblioref-manual.html": [ + "b8462b8f347678042dd35cea11269d2e4d4c5db3", + "manual" + ], + "dpub-aam/doc-chapter-manual.html": [ + "ec1bb79d43c515815fe51c435c942daf971aff4f", + "manual" + ], + "dpub-aam/doc-colophon-manual.html": [ + "f6e5f99ca284a1edb1ee3954897384fe35025103", + "manual" + ], + "dpub-aam/doc-conclusion-manual.html": [ + "1335bbf52562adfc9439961d31b7edf0f50ef024", + "manual" + ], + "dpub-aam/doc-cover-manual.html": [ + "8f643cef033607187f2ade6328e8eb48989fb4fb", + "manual" + ], + "dpub-aam/doc-credit-manual.html": [ + "89c08d3ba2f7a199e91a32b4be8b079f8c01c96f", + "manual" + ], + "dpub-aam/doc-credits-manual.html": [ + "73f018976929746530ded8ecf98d53af0b59ae5b", + "manual" + ], + "dpub-aam/doc-dedication-manual.html": [ + "c93d97051189aec775a1d62e2ee50a98fb6735c7", + "manual" + ], + "dpub-aam/doc-endnote-manual.html": [ + "59fbf494eae63db03455fb0e28c5c02627d3363d", + "manual" + ], + "dpub-aam/doc-endnotes-manual.html": [ + "e55ed6488a0a8b6901085e175c57b83dc5ec5861", + "manual" + ], + "dpub-aam/doc-epigraph-manual.html": [ + "0680698a36ee7104e45426e8d2801cb9c95c9770", + "manual" + ], + "dpub-aam/doc-epilogue-manual.html": [ + "bf79ff7ef266ae329881fe569fc94272e24ec10e", + "manual" + ], + "dpub-aam/doc-errata-manual.html": [ + "750c10409f689ad5355cddafdbcdc67ffa1d8377", + "manual" + ], + "dpub-aam/doc-example-manual.html": [ + "e23b0e0fbfe8d7943c1369d5a9801f9bf2266d21", + "manual" + ], + "dpub-aam/doc-footnote-manual.html": [ + "7ec6a5a11c609da425ba24eba2177ff9f6a9a271", + "manual" + ], + "dpub-aam/doc-foreword-manual.html": [ + "c568b2a39ceede888795fde325e3afbdae8d4b7e", + "manual" + ], + "dpub-aam/doc-glossary-manual.html": [ + "4e563f91709a81b1a3328595b0dbda4071336abf", + "manual" + ], + "dpub-aam/doc-glossref-manual.html": [ + "b4312dca5df927018ae6bc9b4f19e87614101ac9", + "manual" + ], + "dpub-aam/doc-index-manual.html": [ + "dad15f86619ce8485bc08bc97cd3c260b5151b12", + "manual" + ], + "dpub-aam/doc-introduction-manual.html": [ + "d8193c4a29c7c0179b19ea2da55f26b004f5cfc2", + "manual" + ], + "dpub-aam/doc-noteref-manual.html": [ + "92dd7d70c414ed617d98e453e61cef11ca039694", + "manual" + ], + "dpub-aam/doc-notice-manual.html": [ + "cf0d12bb10f3d4300c8fd165fd210a6c3bb2ac85", + "manual" + ], + "dpub-aam/doc-pagebreak-manual.html": [ + "a45144f32e79c5073b61eb9b94ac88a992026793", + "manual" + ], + "dpub-aam/doc-pagelist-manual.html": [ + "ab945743bff60e4dcac61efc4e5c6db57cd4ef90", + "manual" + ], + "dpub-aam/doc-part-manual.html": [ + "9747a5139ead45a6d5abee26528bc195be42b61a", + "manual" + ], + "dpub-aam/doc-preface-manual.html": [ + "9f1908845b75e63b7a590364cb6b9bdbc351dc00", + "manual" + ], + "dpub-aam/doc-prologue-manual.html": [ + "251c03feb95ea33b9f25c07f6e0d74445ee5b82f", + "manual" + ], + "dpub-aam/doc-pullquote-manual.html": [ + "a6a15a5d7a86a2fd3e6f7235668cbd09292239a6", + "manual" + ], + "dpub-aam/doc-qna-manual.html": [ + "4d3e659dc66aea87e44426a815a128cabcf339e7", + "manual" + ], + "dpub-aam/doc-subtitle-manual.html": [ + "ad507918447a7fd73b73104a279d3782457d53f3", + "manual" + ], + "dpub-aam/doc-tip-manual.html": [ + "c54e3458ed49b3824d1236a74f8bb389fd285d83", + "manual" + ], + "dpub-aam/doc-toc-manual.html": [ + "0c5b3572dc1b27b7a1bf331b78b8f0f75100cd6b", + "manual" + ], "dpub-aria/.editorconfig": [ "18e9e31b4beb20bcfa5ad281584d816204a3f531", "support" @@ -556320,136 +571131,144 @@ "faf2706da35ec626faa833c0498ef1e356584d27", "support" ], + "editing/data/README.md": [ + "f6eade04ca964b7f9adbb4246734433014442175", + "support" + ], "editing/data/backcolor.js": [ - "a988f4c9e1ee5aa5c1ef1159b4b8b9c260bc8272", + "61761a49890c5b955929e655b53ad0587eec8e91", "support" ], "editing/data/bold.js": [ - "42c827538938e385a2c0f33e7fcbf26820fad74c", + "0022a155aba2db8619b5625b45960746d3d8d1ee", "support" ], "editing/data/createlink.js": [ - "3fd0f1356c1036f83f4151790dc3d989b47b7b6a", + "95f3043ab22e5a804483bd8505f140865ecde088", + "support" + ], + "editing/data/delete-list-items-in-table-cells.js": [ + "9d8ac27f6617cfdfe0ea5a2da6bbf69bff181ed1", "support" ], "editing/data/delete.js": [ - "fef65beefeb76d9fdafd9afbb0fc70a9de3a61f5", + "7af419763d9e8354361a109645da610099cf97b7", "support" ], "editing/data/fontname.js": [ - "c436324c10eb0b76cae3bb6d162776e8af62ac91", + "b4ffcc3be199393827079bf73dd7433d810e2466", "support" ], "editing/data/fontsize.js": [ - "0a1a242603bea5199a334843f33a7bc757423ea1", + "7077999cd649765a09ca16d843a7cd780eaaa1a8", "support" ], "editing/data/forecolor.js": [ - "4704c7d76160f9fca158bdbe2d84117706aaadd2", + "531d9fd219aec6c36231a1927e234a9ea6f5009b", "support" ], "editing/data/formatblock.js": [ - "7ec42b88c07ea41a37ee890bdc9ac5730f5edbb5", + "d4cadc6257aa75a7dc85c0c258f5b884e23a620c", "support" ], "editing/data/forwarddelete.js": [ - "f6495290991e83aa0438e100d1ad8286f44b00b3", + "1836be2c6f827de512381e9556e99de6cad165d6", "support" ], "editing/data/hilitecolor.js": [ - "bcf7e39416f394bf2120b04ccb3edaeca7b7f863", + "8901795b4f4cde2f59d616764870b93220366180", "support" ], "editing/data/indent.js": [ - "10bb2567852a40d480785cd147a0f5cbe888d19b", + "821cc4fefcfce96832c1a4547698801b554ae426", "support" ], "editing/data/inserthorizontalrule.js": [ - "a65609ebe407670a94a2ff59ed62ea4c2a3e1080", + "118414ee839b94b9a747e0dfd2068d728c171db7", "support" ], "editing/data/inserthtml.js": [ - "8e8c02364a0f5ff7bff12a5446c9896fca5e6886", + "3e853e0b406e4441a2326468b4e21c5b6ffc1c98", "support" ], "editing/data/insertimage.js": [ - "c2e2ad08ea335bb3be59d99de96132366f446eda", + "19f38b05e1694ecb8e26aea374c2b7cd3b2a2467", "support" ], "editing/data/insertlinebreak.js": [ - "fd09fb1a5c1f24f53b9a896c073dc3eed5d8cfd5", + "ba0a0f2eda2703c742dd71b3106a3c78da27e677", "support" ], "editing/data/insertorderedlist.js": [ - "99217ac94529676adc19b8a49460becf92a9d7c4", + "9387d479a52fd5146d5d708eb1244250f3dd02b6", "support" ], "editing/data/insertparagraph.js": [ - "6e70f6c308844af53888cd4093580242fd73a275", + "5cc4cee5d1ba32775a3a940e11ce46215b276466", "support" ], "editing/data/inserttext.js": [ - "5a0ceb860b775c14a2a096edfc75881eea1909f5", + "be6f17c7af88382808ee574d9291fbc606ab7ec4", "support" ], "editing/data/insertunorderedlist.js": [ - "259f57149badc8c124f3e963b6f1d5fbe4e9dbdb", + "ed8c92ce7bc902a5125e082798ad9abfef469f18", "support" ], "editing/data/italic.js": [ - "5459c6140ac7aadc49b716b82feba092eb8f67af", + "c2f373e29fd1894189243718e8bd003b92f3375a", "support" ], "editing/data/justifycenter.js": [ - "d61ca0251b32c1d11db99222bb48dfec4a18c6fa", + "066b910ecb3b087abe17279ab7c35eb43a883e19", "support" ], "editing/data/justifyfull.js": [ - "5f39fc5babb2d785f63a74989bf4d900a03f932d", + "906d2f7ec92f26695e760e6cdf855ef697869b61", "support" ], "editing/data/justifyleft.js": [ - "413a8ebf1501bd136bd4b789c5cec272a9204e9d", + "aa7d9db71cb624eae3acfce352c83ada85fcfe3c", "support" ], "editing/data/justifyright.js": [ - "563d0d450b72d94cf062ec6c74ee1160ed8fc13a", + "bc17e41ed4e658ff2b6622d76f2ca781da2cf5e9", "support" ], "editing/data/misc.js": [ - "d890db05d5166992d6a9aa5269d60f51a277de8a", + "5e7a34bcaccb5ef4c2efa782fbc19991931bf8bc", "support" ], "editing/data/multitest.js": [ - "aaecbcfb0c1077e4940181f74c6ddbd91d23fcbd", + "5caa8e9d6140d6ebc68611784f9c2e535cc6daa0", "support" ], "editing/data/outdent.js": [ - "98d12d9e2eaadb98ab9580ebac19c1bf372ea5c7", + "370659febaa07f3cb3045931efdbe0ccdb6bd26d", "support" ], "editing/data/removeformat.js": [ - "b7a24b8162be7c11b0cf2a6443fe0d3973e3bc75", + "f3f054d79780525df262cb9d1c90799eec4751d1", "support" ], "editing/data/strikethrough.js": [ - "6016f3210874b49ae49093d0c3ab63ac8cd5abf8", + "728a5a2f08ff217757017cde8e7646e1ae42ea7f", "support" ], "editing/data/subscript.js": [ - "0bf0515ad3643a09ab8af047fa01e14f62d13208", + "8259fca2d6342a2de81752eab6f19223d0fe4140", "support" ], "editing/data/superscript.js": [ - "f8b0e882d6911894e0b3b9ba74faad382d3db478", + "2211663469529e5811c73fc30bafe2182341bcbe", "support" ], "editing/data/underline.js": [ - "cb53bbac4065882c9bb1ef95975794cfd6b8616a", + "aa89a58d130544c25b8483179b7ea80c52fb7e37", "support" ], "editing/data/unlink.js": [ - "b15636f4a5dc2a56712aa5133139244d0ba77624", + "7b5266ad05b6fc4c8653c026030e74b10ba1de31", "support" ], "editing/event.html": [ @@ -556504,6 +571323,10 @@ "c812df13215631719f8ff17eee4e0a854684670d", "testharness" ], + "editing/other/extra-text-nodes.html": [ + "ae2676afe7fb739c9fe7f2557971d8c1e9b58fdc", + "testharness" + ], "editing/other/restoration.html": [ "432d9d66ec7621faf22a31960816290193b60aed", "testharness" @@ -556520,6 +571343,10 @@ "ec46bf84c1e1a93884e84cd8508fb80954e5509e", "testharness" ], + "editing/run/delete-list-items-in-table-cell.html": [ + "cee0d3872ad5abe8bb160e098d408d3b42334296", + "testharness" + ], "editing/run/delete.html": [ "453817d93bbee28d068b35b79ef2708046380d6e", "testharness" @@ -556684,6 +571511,738 @@ "3e1ef3ebcb1f0c15251dd968848b9e6805aa8b90", "testharness" ], + "encoding/legacy-mb-japanese/shift_jis/jis0208_index.js": [ + "b6f1d6cbe2cfa878b4317930176750a9209fd143", + "support" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-decode-csshiftjis.html": [ + "d4d171de17f81f98cd240ff08257fcb33e1d2b54", + "testharness" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-decode-errors.html": [ + "f2c37c888dff50feebd5797adfe265e82ae2afde", + "testharness" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms932.html": [ + "c866259244a4460f41869311e9ee194fb57045ca", + "testharness" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms_kanji.html": [ + "b62ce57f3f53cc455507c64266f6b9e4e6ad25f8", + "testharness" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-decode-shift-jis.html": [ + "ce645b76538fb62b63e9a9cd71bdfc57293f71f9", + "testharness" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-decode-sjis.html": [ + "bdc93e4f8aa501cb1d144278cb30df9c8e1ee76b", + "testharness" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-decode-windows-31j.html": [ + "14db20c9e48a3ba187d86225af2173f509ffc69d", + "testharness" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-decode-x-sjis.html": [ + "96d67ef3a09f579192b60469b1c6f0fcea709e83", + "testharness" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-decode.html": [ + "aa249b101da22936c53da5a3ae535bdac2bcd8d9", + "testharness" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-decoder.js": [ + "b62da9bead74bfa85fc74022aafbe5a56870e49d", + "support" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-csshiftjis.html": [ + "22a6fef29cf831742bea680190d79a7ad9f7a344", + "testharness" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-csshiftjis.html.headers": [ + "d3b8133bd6e1dfc049db581bc8b8bb52b440cfae", + "support" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-han.html": [ + "84cd159f998e8e6ad80d0403d0128bd72718e674", + "testharness" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-han.html.headers": [ + "02a4097ff662201c4b3833abb6521c7a9e1235dc", + "support" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-hangul.html": [ + "125c9ecd59012aa5b4ad6c6dfaa7586d1f6b2593", + "testharness" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-hangul.html.headers": [ + "02a4097ff662201c4b3833abb6521c7a9e1235dc", + "support" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-misc.html": [ + "0099dd77b846ad2771aa278070b85ebf1b577a77", + "testharness" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-misc.html.headers": [ + "02a4097ff662201c4b3833abb6521c7a9e1235dc", + "support" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms932.html": [ + "81a3377b7bcef81ea1472c4751e8e8d4724a603b", + "testharness" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms932.html.headers": [ + "91fc760e084e8b9ad1d7d53508676cdb23895c80", + "support" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms_kanji.html": [ + "e1e71336c2799dad56fef0e2d84f626ed7f86e5e", + "testharness" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms_kanji.html.headers": [ + "37a871d3437cec09f7dd8bb643545b51f1b3c126", + "support" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-shift-jis.html": [ + "edf365f82441e1e50f128be66dc11ccb71402e16", + "testharness" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-shift-jis.html.headers": [ + "3896e88c02bd6f02fbba4acecd889d8ae7f7cb09", + "support" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-sjis.html": [ + "2d537643263ef5731f5cfe91a9023173c9402b23", + "testharness" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-sjis.html.headers": [ + "4b2375263534395c2a245e336b46615720f8439b", + "support" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-windows-31j.html": [ + "9879e7651eae4894739cdf47d27e557cd986ecda", + "testharness" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-windows-31j.html.headers": [ + "975f6cdd906371281658ef17a7b8b8efc9e6e400", + "support" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-x-sjis.html": [ + "f435452102431058c9337d5bd1f7a133f9d0bb97", + "testharness" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-x-sjis.html.headers": [ + "1dfcb40c6401c379ff9c3022011d2e7356d8f4dd", + "support" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form.html": [ + "cfd117bfde470ed113357ebcb9d47a8f106c0ff0", + "testharness" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form.html.headers": [ + "02a4097ff662201c4b3833abb6521c7a9e1235dc", + "support" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-han.html": [ + "a5ad64e3cfbd60d2f7df60c3708c66441a0511df", + "testharness" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-han.html.headers": [ + "02a4097ff662201c4b3833abb6521c7a9e1235dc", + "support" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-hangul.html": [ + "c92ed9030f97d8e86fdafdb024fc7d32b0b87861", + "testharness" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-hangul.html.headers": [ + "02a4097ff662201c4b3833abb6521c7a9e1235dc", + "support" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-misc.html": [ + "cb8f12a62af6ea1be459ff8ca1c3e8846a8b9d55", + "testharness" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-misc.html.headers": [ + "02a4097ff662201c4b3833abb6521c7a9e1235dc", + "support" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-href.html": [ + "8aec6118dd060483017b49e802cfe3ad30cef367", + "testharness" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encode-href.html.headers": [ + "02a4097ff662201c4b3833abb6521c7a9e1235dc", + "support" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis-encoder.js": [ + "16f0b721a8c8a5609e31725359d8d44ea566fb69", + "support" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis_chars-csshiftjis.html": [ + "dde4bc17ac0abcececea8987e54236d17a85ae86", + "support" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis_chars-csshiftjis.html.headers": [ + "d3b8133bd6e1dfc049db581bc8b8bb52b440cfae", + "support" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis_chars-ms932.html": [ + "356e1085a33d6cc4f3a4b3af6b5a4ab8b9ec3dae", + "support" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis_chars-ms932.html.headers": [ + "91fc760e084e8b9ad1d7d53508676cdb23895c80", + "support" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis_chars-ms_kanji.html": [ + "a42ebde92c43557ca04a27a5858a3fb0da137681", + "support" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis_chars-ms_kanji.html.headers": [ + "37a871d3437cec09f7dd8bb643545b51f1b3c126", + "support" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis_chars-shift-jis.html": [ + "e9b2ef1e21d3787e4a777f80ab1e4ee240ca9f4a", + "support" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis_chars-shift-jis.html.headers": [ + "3896e88c02bd6f02fbba4acecd889d8ae7f7cb09", + "support" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis_chars-sjis.html": [ + "779e810454a0a7dc7bebffe6f3757d741d23c3d7", + "support" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis_chars-sjis.html.headers": [ + "4b2375263534395c2a245e336b46615720f8439b", + "support" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis_chars-windows-31j.html": [ + "5cd33424e10a25d43399f81e584b13e6a5b1cb78", + "support" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis_chars-windows-31j.html.headers": [ + "975f6cdd906371281658ef17a7b8b8efc9e6e400", + "support" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis_chars-x-sjis.html": [ + "eac5048ca5945f5a50aed3f903aa6a2234c72eac", + "support" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis_chars-x-sjis.html.headers": [ + "1dfcb40c6401c379ff9c3022011d2e7356d8f4dd", + "support" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis_chars.html": [ + "5e8631e161ecbe4d23c67ad2fc725f753e76edb5", + "support" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis_chars.html.headers": [ + "02a4097ff662201c4b3833abb6521c7a9e1235dc", + "support" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis_errors.html": [ + "20977a1a594b86ca33c083dc54e2ba38eddc8f84", + "support" + ], + "encoding/legacy-mb-japanese/shift_jis/sjis_errors.html.headers": [ + "02a4097ff662201c4b3833abb6521c7a9e1235dc", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-decode-cseuckr.html": [ + "9e729590a574c8e0a9f6e07d378197c2bafde0a2", + "testharness" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-decode-csksc56011987.html": [ + "d4a4a944fc1cf03a0780fcf4309e4061324c8098", + "testharness" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-decode-errors.html": [ + "1d562589a3752c4994002cdb441923fdc27bfe8e", + "testharness" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-decode-iso-ir-149.html": [ + "bf9d9edd88da4ddff223800fa6ae68852b73cb99", + "testharness" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-decode-korean.html": [ + "6ae51030974e7e607c6a3fea34eafbf10de62605", + "testharness" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-decode-ks_c_5601-1987.html": [ + "c8381944a21d5b44dc9a984068987a4030dd5319", + "testharness" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-decode-ks_c_5601-1989.html": [ + "6eb5b0d291030e565210ae8546f14e641b8a187b", + "testharness" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-decode-ksc5601.html": [ + "430d70a811f3469fdbf90159b6a78d2b2fdd93da", + "testharness" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-decode-ksc_5601.html": [ + "f9ea25a81d5268a20b7a9673496142fba7f14189", + "testharness" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-decode-windows-949.html": [ + "8306399cd88ee735be247e8a3f102a03ff905ac6", + "testharness" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-decode.html": [ + "294baa8a7364504443d9ddbabeadfd8fda0e19f3", + "testharness" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-decoder.js": [ + "ee317acdc4c6ad8a737ac9f47a292015b0fab081", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-cseuckr.html": [ + "5530823dd5556d646b4a0f9090cf402e847c4827", + "testharness" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-cseuckr.html.headers": [ + "07c8ee71f48d08d3cac54c52ef3d9ca1b2d5ce4d", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987.html": [ + "569abb7b5211b3c404a8c5b73781fa576c471770", + "testharness" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987.html.headers": [ + "1d83197942d969528458a09998b6070331d8ff1e", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-han.html": [ + "ac3af4e3ae4831d6bbb4a10cf20165c8c6f6f0c0", + "testharness" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-han.html.headers": [ + "c79f9150befa2f7ce67d17069da7fb66f7f22ca0", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-hangul.html": [ + "3a2d013060c95824579de848af715c1c8135c206", + "testharness" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-hangul.html.headers": [ + "c79f9150befa2f7ce67d17069da7fb66f7f22ca0", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-misc.html": [ + "ac75e0cdb92edcec4ccbcea4e4d45329305fd4be", + "testharness" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-misc.html.headers": [ + "c79f9150befa2f7ce67d17069da7fb66f7f22ca0", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149.html": [ + "5a480ddabd671ab24b9fbc6485ae1bb543787ddb", + "testharness" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149.html.headers": [ + "eb4e384383eea636c6ee36c42bdd83851560d6d6", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean.html": [ + "3a161c00a862191e63b03672edd165a4b2488bf4", + "testharness" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean.html.headers": [ + "e1eb3537b5c5b184d8baafefd026097a7042fa9b", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987.html": [ + "196a6bf5cb61ae5743f676ca18c59b5c559926ec", + "testharness" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987.html.headers": [ + "0f38fd98a428e4825237334f670d6068d95b9a4b", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989.html": [ + "b7d941acafd598b06b2898108815f5a3c849b7e2", + "testharness" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989.html.headers": [ + "83ea110e65d38a7bad96a31aa2368ab5079aed1e", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc5601.html": [ + "c67014bd3da49c1d87c830af119c5b3c3e8deb65", + "testharness" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc5601.html.headers": [ + "7d71a6cdfd8d8f8efea05beaeff42163e0e8ba8f", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601.html": [ + "b1fb4fcb8ea4ef38ef88df5229e3d315790a8110", + "testharness" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601.html.headers": [ + "18669624f116dfa99e04c0f24a70bc0db44f8b26", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-windows-949.html": [ + "7ce4b142ff073509b76b4f473dd1bff1211ce8c8", + "testharness" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-windows-949.html.headers": [ + "732a047c0491ef2c8a5e63c342e5da5ad62b76ba", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form.html": [ + "934c25bf57b7a57390d38cc2f21230b16e142241", + "testharness" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form.html.headers": [ + "c79f9150befa2f7ce67d17069da7fb66f7f22ca0", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-han.html": [ + "ad6ba78bc2ebc5b88b08ac19efe60f6220a1f636", + "testharness" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-han.html.headers": [ + "c79f9150befa2f7ce67d17069da7fb66f7f22ca0", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-misc.html": [ + "dce0fad843d12c98905f1bb3edbe5343f7849b0c", + "testharness" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-misc.html.headers": [ + "c79f9150befa2f7ce67d17069da7fb66f7f22ca0", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-href.html": [ + "20b152603cbca961959653c8c042ea004f58334f", + "testharness" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-href.html.headers": [ + "c79f9150befa2f7ce67d17069da7fb66f7f22ca0", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encoder.js": [ + "00d536de97386456dd1455bc3b8ea8328ba68c52", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr_chars-cseuckr.html": [ + "8dbe0017601d722bdc61ce75ddaf13a8f19d4ae7", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr_chars-cseuckr.html.headers": [ + "07c8ee71f48d08d3cac54c52ef3d9ca1b2d5ce4d", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr_chars-csksc56011987.html": [ + "fec30f8f72a96e3b8220bf704dda499546642970", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr_chars-csksc56011987.html.headers": [ + "1d83197942d969528458a09998b6070331d8ff1e", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr_chars-iso-ir-149.html": [ + "77a03a016b09c1c474e2172f9b30545ed2b9cbfd", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr_chars-iso-ir-149.html.headers": [ + "eb4e384383eea636c6ee36c42bdd83851560d6d6", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr_chars-korean.html": [ + "d563004dc29d254b2ccee8e664aa3c64f4dbbdd8", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr_chars-korean.html.headers": [ + "e1eb3537b5c5b184d8baafefd026097a7042fa9b", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr_chars-ks_c_5601-1987.html": [ + "ae46f6b2bc9f3e32beea5d5b819d92b6441851e9", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr_chars-ks_c_5601-1987.html.headers": [ + "0f38fd98a428e4825237334f670d6068d95b9a4b", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr_chars-ks_c_5601-1989.html": [ + "9b350c167140e46316d4b26e157d93cd5741f733", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr_chars-ks_c_5601-1989.html.headers": [ + "83ea110e65d38a7bad96a31aa2368ab5079aed1e", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr_chars-ksc5601.html": [ + "77efcdaef42dadfdf37cc118f64c8552fcf2d529", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr_chars-ksc5601.html.headers": [ + "7d71a6cdfd8d8f8efea05beaeff42163e0e8ba8f", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr_chars-ksc_5601.html": [ + "8b57a48f9b036bb604fcf6f23d6035c497184abb", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr_chars-ksc_5601.html.headers": [ + "18669624f116dfa99e04c0f24a70bc0db44f8b26", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr_chars-windows-949.html": [ + "31c40577ee5bbaa130bb8e3ae97235de1446dcf6", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr_chars-windows-949.html.headers": [ + "732a047c0491ef2c8a5e63c342e5da5ad62b76ba", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr_chars.html": [ + "2723848f434cf4a69b800f5570cabcf01aa1c403", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr_chars.html.headers": [ + "c79f9150befa2f7ce67d17069da7fb66f7f22ca0", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr_errors.html": [ + "8a4a4f838070a2581caaa3553ed477c6df5ebf5c", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr_errors.html.headers": [ + "c79f9150befa2f7ce67d17069da7fb66f7f22ca0", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr_index.js": [ + "4206ed4e5e085a96ae5d0d08a2d3752f1d6c7ff7", + "support" + ], + "encoding/legacy-mb-tchinese/big5/big5-decode-big5-hkscs.html": [ + "1e41252d834091a1f2069eb83ceb04c1ae502aed", + "testharness" + ], + "encoding/legacy-mb-tchinese/big5/big5-decode-cn-big5.html": [ + "61bff3fa165736f77d1f09b0d3087acaa66f2fa9", + "testharness" + ], + "encoding/legacy-mb-tchinese/big5/big5-decode-csbig5.html": [ + "bb60208f1d75de351e057310415db81869f39be6", + "testharness" + ], + "encoding/legacy-mb-tchinese/big5/big5-decode-errors.html": [ + "a559253dfdd5671a231d17d5abcc6b7fd0cb0bbf", + "testharness" + ], + "encoding/legacy-mb-tchinese/big5/big5-decode-extra.html": [ + "2f8917690621f23c8844bf7a1f93713e878f6841", + "testharness" + ], + "encoding/legacy-mb-tchinese/big5/big5-decode-x-x-big5.html": [ + "3e0cba9f9ca8692767e535a5f4328edec151d3fb", + "testharness" + ], + "encoding/legacy-mb-tchinese/big5/big5-decode.html": [ + "a1d709dad31f27e9c3a5c958a3f666bf79c6fe9f", + "testharness" + ], + "encoding/legacy-mb-tchinese/big5/big5-decoder.js": [ + "895fb1caf07ea90bea9d34db70b0974f11d6c149", + "support" + ], + "encoding/legacy-mb-tchinese/big5/big5-enc-ascii.html": [ + "8bede0c09c65f957d4c6545025038bef3e01e418", + "testharness" + ], + "encoding/legacy-mb-tchinese/big5/big5-enc-ascii.html.headers": [ + "17edf8b3f37188f85a7c4af654dd93026ac96825", + "support" + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-form-big5-hkscs.html": [ + "e9ab06a4999556053f53e5c9ee951d47411b0d2b", + "testharness" + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-form-big5-hkscs.html.headers": [ + "eafc846b634c4cc6f004ab86c01a70b708d428ee", + "support" + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-form-cn-big5.html": [ + "136bc3abafdfe069b32ddfae85056bbaffd0d7ca", + "testharness" + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-form-cn-big5.html.headers": [ + "935ef2721d4bb56f7dc3fa0ec92b9fb527d0ac37", + "support" + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-form-csbig5.html": [ + "ed5c833f250f1713193b56371298c73b4b412d50", + "testharness" + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-form-csbig5.html.headers": [ + "e6a39aaefd7bf7a8bccf1821248119ded43388f7", + "support" + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBa.html": [ + "158e2df87e89f8d10ac045a8c6d7b1a879c60c05", + "testharness" + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBa.html.headers": [ + "17edf8b3f37188f85a7c4af654dd93026ac96825", + "support" + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBb.html": [ + "07fc6c15fc19b39e458670b19efc95d46822a889", + "testharness" + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBb.html.headers": [ + "17edf8b3f37188f85a7c4af654dd93026ac96825", + "support" + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-han.html": [ + "0c4726348095a7b2a2954e4516bfad4b6bf64e59", + "testharness" + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-han.html.headers": [ + "17edf8b3f37188f85a7c4af654dd93026ac96825", + "support" + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-hangul.html": [ + "9835733d78de331c1ad9297572b321265a6a03c9", + "testharness" + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-hangul.html.headers": [ + "17edf8b3f37188f85a7c4af654dd93026ac96825", + "support" + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-misc.html": [ + "65056fd448b1783a93866c6dfe4f0f84ecc65058", + "testharness" + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-misc.html.headers": [ + "17edf8b3f37188f85a7c4af654dd93026ac96825", + "support" + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-pua.html": [ + "836a669b04de5ba3a3c3c429ea7d89b67d6f58b4", + "testharness" + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-form-x-x-big5.html": [ + "6014d5a50918d4d16389df0c7a07f71bd78babeb", + "testharness" + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-form-x-x-big5.html.headers": [ + "be6965af1c7bddb506b6fa2030d4386d1d4b1274", + "support" + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-form.html": [ + "3d272e5b51ca3bcd8bb34807024df71807da3c05", + "testharness" + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-form.html.headers": [ + "17edf8b3f37188f85a7c4af654dd93026ac96825", + "support" + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-han.html": [ + "b0f2f3bd2bad4eb4b2979bf8c11105f6c0a42dd8", + "testharness" + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-han.html.headers": [ + "17edf8b3f37188f85a7c4af654dd93026ac96825", + "support" + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-hangul.html": [ + "c6850b7f03fbfd76bfc156593d7e75887799baa4", + "testharness" + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-hangul.html.headers": [ + "17edf8b3f37188f85a7c4af654dd93026ac96825", + "support" + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-misc.html": [ + "493dd0361da6e0ce711e05e90fd3a40125be5ba3", + "testharness" + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-misc.html.headers": [ + "17edf8b3f37188f85a7c4af654dd93026ac96825", + "support" + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-href.html": [ + "6df38fd56a6eee0b2a8fbe84dc62258fef405ea9", + "testharness" + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-href.html.headers": [ + "17edf8b3f37188f85a7c4af654dd93026ac96825", + "support" + ], + "encoding/legacy-mb-tchinese/big5/big5-encoder.js": [ + "6f019eb1c0354bf3873edf7c0db361c4cfca13e5", + "support" + ], + "encoding/legacy-mb-tchinese/big5/big5_chars-big5-hkscs.html": [ + "d555ef220ebe844d7db98bc54b0d160efb82e2e0", + "support" + ], + "encoding/legacy-mb-tchinese/big5/big5_chars-big5-hkscs.html.headers": [ + "eafc846b634c4cc6f004ab86c01a70b708d428ee", + "support" + ], + "encoding/legacy-mb-tchinese/big5/big5_chars-cn-big5.html": [ + "eddca2c7bd20c6734e6526caefcb5c4dfcbb2f29", + "support" + ], + "encoding/legacy-mb-tchinese/big5/big5_chars-cn-big5.html.headers": [ + "935ef2721d4bb56f7dc3fa0ec92b9fb527d0ac37", + "support" + ], + "encoding/legacy-mb-tchinese/big5/big5_chars-csbig5.html": [ + "a05fa28467949efa2fe06497cf5a482f01042208", + "support" + ], + "encoding/legacy-mb-tchinese/big5/big5_chars-csbig5.html.headers": [ + "e6a39aaefd7bf7a8bccf1821248119ded43388f7", + "support" + ], + "encoding/legacy-mb-tchinese/big5/big5_chars-x-x-big5.html": [ + "baa405e76c80d5c4939a80c3bf39d0be6da28cd9", + "support" + ], + "encoding/legacy-mb-tchinese/big5/big5_chars-x-x-big5.html.headers": [ + "be6965af1c7bddb506b6fa2030d4386d1d4b1274", + "support" + ], + "encoding/legacy-mb-tchinese/big5/big5_chars.html": [ + "b2b7141aea68003271dac1ce2ff61b08e1d9b30b", + "support" + ], + "encoding/legacy-mb-tchinese/big5/big5_chars.html.headers": [ + "17edf8b3f37188f85a7c4af654dd93026ac96825", + "support" + ], + "encoding/legacy-mb-tchinese/big5/big5_chars_extra.html": [ + "d535b46f863208f1c887c017c55dbff227aecbb2", + "support" + ], + "encoding/legacy-mb-tchinese/big5/big5_chars_extra.html.headers": [ + "17edf8b3f37188f85a7c4af654dd93026ac96825", + "support" + ], + "encoding/legacy-mb-tchinese/big5/big5_errors.html": [ + "23712ccc702c3663386d990c46b44579b4502e7d", + "support" + ], + "encoding/legacy-mb-tchinese/big5/big5_errors.html.headers": [ + "17edf8b3f37188f85a7c4af654dd93026ac96825", + "support" + ], + "encoding/legacy-mb-tchinese/big5/big5_index.js": [ + "22f0299c5a8741c6585c3f56b471d6970d0bb499", + "support" + ], "encoding/resources/encodings.js": [ "27b7c95700ec1b5bfa45257574a01cf9ff30ca96", "support" @@ -557397,7 +572956,7 @@ "support" ], "encrypted-media/resources/drm-retrieve-persistent-license.html": [ - "9d377b1e8873eec3567129f0ebb6aaa83a6d883a", + "44dd2ebae1e0fb9997b9c4dc9ae6bf7cd24b87c7", "support" ], "encrypted-media/resources/drm-retrieve-persistent-usage-record.html": [ @@ -557457,7 +573016,7 @@ "support" ], "encrypted-media/scripts/playback-persistent-license-events.js": [ - "4da8422663f8779b5cd676a5a99a20c8a2fc8bca", + "284440ac193d29168721569538ef93a60d80ce69", "support" ], "encrypted-media/scripts/playback-persistent-license.js": [ @@ -557473,7 +573032,7 @@ "support" ], "encrypted-media/scripts/playback-retrieve-persistent-license.js": [ - "2955061619866159f7050b6b87d6f3e9725225c3", + "bdd878f11a98e79058e2a7b0fab56f9b2006f5a8", "support" ], "encrypted-media/scripts/playback-retrieve-persistent-usage-record.js": [ @@ -557517,7 +573076,7 @@ "support" ], "encrypted-media/scripts/requestmediakeysystemaccess.js": [ - "6a40a2db2ae0657bda978bcaee1a12f7670634bb", + "022356b6f89ddbda4c2341ff3411a725260c5494", "support" ], "encrypted-media/scripts/reset-src-after-setmediakeys.js": [ @@ -557673,7 +573232,7 @@ "testharness" ], "eventsource/eventsource-cross-origin.htm": [ - "968a3083770ed51e8875e59cde05a1591fb359e6", + "6bc3997aa73b5664920a0ca656db5f52538ab771", "testharness" ], "eventsource/eventsource-eventtarget.htm": [ @@ -558173,7 +573732,7 @@ "testharness" ], "fetch/api/headers/headers-idl.html": [ - "13804a9850b05753cf2ad85c926fd071f9fc1888", + "42dc60a28c86ef378a8aa614f411f13bae0a081a", "testharness" ], "fetch/api/headers/headers-normalize.html": [ @@ -558181,7 +573740,7 @@ "testharness" ], "fetch/api/headers/headers-record.html": [ - "26b2eb6cb1836f6431f16b1e60256919d9427f2b", + "a1daa97525019a1ff4b2951d788c97f6394bf705", "testharness" ], "fetch/api/headers/headers-structure.html": [ @@ -558457,7 +574016,7 @@ "testharness" ], "fetch/api/request/request-consume-empty.html": [ - "04b50f51753109fbb6ea6290f927c3905527703c", + "0b7f4d7e51825b125b9ebcc56f6bcaf0b6791faf", "testharness" ], "fetch/api/request/request-consume.html": [ @@ -558589,7 +574148,7 @@ "testharness" ], "fetch/api/response/response-consume-empty.html": [ - "28a00b4256364d785f491bcde677e18424b1e423", + "a9606b70a21e24dde0da19656773fc0c60fa255f", "testharness" ], "fetch/api/response/response-consume-stream.html": [ @@ -558760,8 +574319,16 @@ "94af02c5ca5146386acd4fae5856f89cd244bed1", "testharness" ], - "fonts/CanvasTest.sfd": [ - "c8103241670f9b5d4e5ae9083bbf7ec0221afe3b", + "fetch/security/dangling-markup-mitigation.tentative.html": [ + "1321f79af7ba2b5140605a88f3ea8c92cc1f4de6", + "testharness" + ], + "fetch/security/embedded-credentials.tentative.sub.html": [ + "678e1f80a090021a240933034d1a9206cddde8a4", + "testharness" + ], + "fetch/security/support/embedded-credential-window.sub.html": [ + "09ab38acc0bc980af3e96a61390cd000885b2fe5", "support" ], "fonts/CanvasTest.ttf": [ @@ -559049,7 +574616,7 @@ "testharness" ], "fullscreen/api/document-exit-fullscreen-manual.html": [ - "673d72414fab3dbb677d21a05008d9014daf71bf", + "398a52fc8728e07771249c017baf0c1867c4ea44", "manual" ], "fullscreen/api/document-exit-fullscreen-nested-in-iframe-manual.html": [ @@ -559061,11 +574628,11 @@ "manual" ], "fullscreen/api/document-exit-fullscreen-timing-manual.html": [ - "fcac6966d40246ce9b62dd80233b9967c7d9c146", + "e152a235daa9e5721695c6f347fddd3f111180fc", "manual" ], "fullscreen/api/document-exit-fullscreen-twice-manual.html": [ - "9b6cda0c63e56720f1ab29ffca524384967d7a2f", + "c6e9696b4cfdef6a7042ccbe9beaddf8c56d8031", "manual" ], "fullscreen/api/document-fullscreen-element-manual.html": [ @@ -559112,8 +574679,12 @@ "a840821f2e75f14d43d385f79de359c37e529921", "manual" ], + "fullscreen/api/element-request-fullscreen-active-document.html": [ + "f8c6c1a63b5738a442bcf01c09535d4bb48512a7", + "testharness" + ], "fullscreen/api/element-request-fullscreen-and-exit-iframe-manual.html": [ - "b09e6ee5ac5086094bd07cc4ebe431bd91b598bc", + "870575cb59c5a7f76097e19da8b3854120d6cb86", "manual" ], "fullscreen/api/element-request-fullscreen-and-move-manual.html": [ @@ -559121,19 +574692,19 @@ "manual" ], "fullscreen/api/element-request-fullscreen-and-move-to-iframe-manual.html": [ - "412ea81c4697594c9cc63709ef29ea2abc3c10d7", + "d797dc061a01a11ec0d308f3f27b6ba837f52f2f", "manual" ], "fullscreen/api/element-request-fullscreen-and-remove-iframe-manual.html": [ - "465cb3419b1f3e7b6b385722833e20f285fa864d", + "1af39f94382522afa04ea91e148696216512cae0", "manual" ], "fullscreen/api/element-request-fullscreen-and-remove-manual.html": [ - "5153805ee2b098649ddced4ae8f22b37db6600bf", + "86c1ac20aa86e860cfa8f05a9873f3a3cddbdcd9", "manual" ], "fullscreen/api/element-request-fullscreen-manual.html": [ - "6b9c17d77529ea1b49d60317a72eda8cb79f0dd5", + "ed7683b3c4a7134b640e07a7329a21361b122402", "manual" ], "fullscreen/api/element-request-fullscreen-non-top-manual.html": [ @@ -559141,7 +574712,7 @@ "manual" ], "fullscreen/api/element-request-fullscreen-not-allowed.html": [ - "6ac16e4af17eaa3f16fa3cb04836fe28edb6016c", + "8991e8df530fa7c24a9e084f2ab17fa9c70fb120", "testharness" ], "fullscreen/api/element-request-fullscreen-same-manual.html": [ @@ -559157,7 +574728,7 @@ "manual" ], "fullscreen/api/element-request-fullscreen-timing-manual.html": [ - "e0af92a93669102ec578ac19e95e417ea17de924", + "4c4b93ed28a9c778a80f277e39b2f406900baf28", "manual" ], "fullscreen/api/element-request-fullscreen-top-manual.html": [ @@ -559165,7 +574736,7 @@ "manual" ], "fullscreen/api/element-request-fullscreen-twice-manual.html": [ - "b83f5d0212137f1b939e0f84e5ecd86dd06916b9", + "c6a85dc45d161ae2c3aaff333b54ae7572167f77", "manual" ], "fullscreen/api/element-request-fullscreen-two-elements-manual.html": [ @@ -559180,24 +574751,32 @@ "9d9bec938f185b2461da4d00a5683ad5d07ee577", "testharness" ], + "fullscreen/interfaces.html": [ + "f6f0dbc8a505896a0e7ec7aca2746bbd5c1eb7d9", + "testharness" + ], + "fullscreen/model/move-to-iframe-manual.html": [ + "818cb1b5db729db4959591dc75d4bb1ae3c7542d", + "manual" + ], "fullscreen/model/remove-child-manual.html": [ "b1142930c6c972057213bd477cf116fcc9e7fc2a", "manual" ], "fullscreen/model/remove-first-manual.html": [ - "1314c7133a51ddfa76fd562775ec7fe40ceb0977", + "3de98ae96822370fa80c1b8d61df254910a63ff9", "manual" ], "fullscreen/model/remove-last-manual.html": [ - "322a0397f483ee04789ccca2bc242364212ec885", + "8caa21a892edeaba9996a7f2bf1c670385e0a91b", "manual" ], "fullscreen/model/remove-parent-manual.html": [ - "895db7a5857479e83ce431b18e499df87e940690", + "e5791db04ab5e2b75a00c922457fcc8ba87c7ce7", "manual" ], "fullscreen/model/remove-single-manual.html": [ - "ddc429f4b1cd9f906ee934ec3bc20f6c17e32622", + "c7fc8323d503adb6d7f0c390a8add90c5c9e8082", "manual" ], "fullscreen/trusted-click.js": [ @@ -559232,20 +574811,24 @@ "0a3ea46f600d1af4fb6f4a9777812476c3c66fcc", "support" ], + "generic-sensor/generic-sensor-tests.js": [ + "7b36a69dd7d9148f70a1d40d4108dcd747cb2913", + "support" + ], "generic-sensor/idlharness.html": [ "0e3f29a3a065a3db2f6e0e77d9c6bbdf47bf5ca8", "testharness" ], "geolocation-API/OWNERS": [ - "0657e9c1d1281428355eb545ba0b4552dc8900ec", + "84c4182ceed0f75ada11e63c3dfc2acc2939cbb6", "support" ], "geolocation-API/PositionOptions.https.html": [ - "3ed405ebbe4b6fde9dfa6b3426c52c7025efd84c", + "772c305b5b9e6a8ae61a44b395771b8d60bd7187", "testharness" ], "geolocation-API/clearWatch_TypeError.html": [ - "281cdbc3d81e498514a0cca3e839c33e1b217974", + "cce531a95f13a25148903807da87725390dd13dc", "testharness" ], "geolocation-API/getCurrentPosition_IDL.https.html": [ @@ -559265,7 +574848,7 @@ "manual" ], "geolocation-API/getCurrentPosition_permission_allow.https.html": [ - "695f80f5a06279b3a0bdd137e6a402da66a5eeee", + "02b0a2b3c021da0b811ba1c21ce0fc63d7839652", "testharness" ], "geolocation-API/getCurrentPosition_permission_deny-manual.html": [ @@ -559273,7 +574856,7 @@ "manual" ], "geolocation-API/getCurrentPosition_permission_deny.https.html": [ - "28939dd8e719ba66497a814edd1f4500ad348e95", + "aabbc7b2d392e2bbc26c08262bae4d57348da7a2", "testharness" ], "geolocation-API/interfaces.html": [ @@ -559281,7 +574864,7 @@ "testharness" ], "geolocation-API/support.js": [ - "021f696f918554830708d272e95caf13c7d596e4", + "68515a39a244240502d7a871be505a079360cdce", "support" ], "geolocation-API/watchPosition_TypeError.html": [ @@ -559293,17 +574876,33 @@ "manual" ], "geolocation-API/watchPosition_permission_deny.https.html": [ - "8da70bf5b65ace1e8a26e458d6c011c6183c5501", + "ca3036737a662e8673477b1a09b6fce89f0f98f4", "testharness" ], + "gyroscope/Gyroscope.https.html": [ + "03510d4964a52a53fc7648b5435e810e75ea747a", + "testharness" + ], + "gyroscope/Gyroscope_insecure_context.html": [ + "319bcf346337ccdd67f94ba2d0d4849e5b57da5e", + "testharness" + ], + "gyroscope/Gyroscope_onerror-manual.https.html": [ + "1e15b883bd317ca83783864fc563794cb0f6df8e", + "manual" + ], "gyroscope/OWNERS": [ "36770a71443523aa2f91f9958ba24066f0b4dcec", "support" ], "gyroscope/idlharness.https.html": [ - "2a2de0a720181358749232ce7a5301d79eb120d1", + "567b200f0ea88894bbffbffb6d20ea546f516e7d", "testharness" ], + "gyroscope/support-iframe.html": [ + "b02be6c1cdae86e449b8bf635e18e0b60957bb81", + "support" + ], "hr-time/OWNERS": [ "b82f9756b15ef3ea45fb250e304031d9ceaee9c7", "support" @@ -559541,7 +575140,7 @@ "manual" ], "html-media-capture/capture_image_environment-manual.html": [ - "7a82ad0510839decac71e40938bf364cd37124fa", + "d158d667ecd004ab145cbe5b4fc4689b61fc1e51", "manual" ], "html-media-capture/capture_image_invalid-manual.html": [ @@ -559553,7 +575152,7 @@ "manual" ], "html-media-capture/capture_image_user-manual.html": [ - "678a6c42a9e8dece75bfebe79e76b51b9b545c82", + "16a810530a8101a0c672bad9c425ca0e8f1e16cc", "manual" ], "html-media-capture/capture_reflect.html": [ @@ -559565,7 +575164,7 @@ "manual" ], "html-media-capture/capture_video_environment-manual.html": [ - "a66870152f56861d62562ac78902a33e868abba2", + "2e39f6ea0ff308c022aea53d8b64b32ba1718200", "manual" ], "html-media-capture/capture_video_invalid-manual.html": [ @@ -559577,7 +575176,7 @@ "manual" ], "html-media-capture/capture_video_user-manual.html": [ - "a292b6066ee8470a5db3d9fa74ba1dd75be9b588", + "acef04c2541d30fdff411c74ccce81ee2086c9d2", "manual" ], "html-media-capture/idlharness.html": [ @@ -559701,7 +575300,7 @@ "testharness" ], "html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/scroll-restoration-fragment-scrolling-cross-origin.html": [ - "18bd98353460da1c9d376e9453d9a96b7c273291", + "0f8425ba4fcdd12e357ec975c6439c89c72c1c3e", "testharness" ], "html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/scroll-restoration-fragment-scrolling-samedoc.html": [ @@ -560772,6 +576371,10 @@ "ce4fbca059263f6731e2e7bd99c1df7293c07291", "testharness" ], + "html/browsers/history/the-location-interface/location-origin-idna.sub.window.js": [ + "09cda81eb2673c56af2e2a151b50c31c6cefb0e6", + "testharness" + ], "html/browsers/history/the-location-interface/location-pathname-setter-question-mark.html": [ "011522f6b56184f49dd6555b507d6d895b53f11e", "testharness" @@ -560936,6 +576539,10 @@ "923e6d0e13f71e2e79799005ac0bcd6415ad1ffa", "manual" ], + "html/browsers/history/the-location-interface/per-global.window.js": [ + "04de6e863ec1816fccda38e50b81d67bbcedb125", + "testharness" + ], "html/browsers/history/the-location-interface/reload_document_open_write-1.html": [ "464fa292c3fa04da8594401bbdb7cbe2a30b41dc", "support" @@ -560968,6 +576575,10 @@ "3f86c065f9ea20c9b9a0c6fd2f0fd94ae73f3088", "testharness" ], + "html/browsers/history/the-location-interface/resources/post-your-origin.html": [ + "56c03a4c666d4ae3498fafb9c507d6ef16508179", + "support" + ], "html/browsers/history/the-location-interface/resources/post-your-protocol.html": [ "d6a54e137ca516d16fb64bed157b0ac3ceaab99c", "support" @@ -561276,6 +576887,18 @@ "d33427abcc87693bce1f5610f460aad12cb99759", "support" ], + "html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_setter_null.tentative.html": [ + "212e7be483bcb35413156231afcda8fe074558fc", + "testharness" + ], + "html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_setter_srcdoc.html": [ + "f707d1f40216d35afd04f4cd68cce66feaadddfd", + "testharness" + ], + "html/browsers/origin/relaxing-the-same-origin-restriction/support/document_domain_frame.html": [ + "80d3d94c22642b2c07dae8f9cd8a50b563d36ef3", + "support" + ], "html/browsers/sandboxing/.gitkeep": [ "da39a3ee5e6b4b0d3255bfef95601890afd80709", "support" @@ -561461,7 +577084,7 @@ "testharness" ], "html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-noopener.html": [ - "ed921a0c8aaeda3d2b55ac3cbaedd0372ad2a894", + "0d37066f498228705c175d7d7a15e4d2ac279397", "testharness" ], "html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-screenx-screeny.html": [ @@ -561576,6 +577199,10 @@ "097642b27ec2a37fa4e26f5bf31d7639946fe2e6", "manual" ], + "html/browsers/the-window-object/historical.window.js": [ + "75f8a65267df8d34a4ab600b88b785b887fb0ce6", + "testharness" + ], "html/browsers/the-window-object/named-access-on-the-window-object/.gitkeep": [ "da39a3ee5e6b4b0d3255bfef95601890afd80709", "support" @@ -561597,7 +577224,7 @@ "support" ], "html/browsers/the-window-object/security-window/window-security.html": [ - "364472d494aab31647a85553f4a4265c64af4035", + "a590848d52c2ed7d66e9889957d58828566717c1", "testharness" ], "html/browsers/the-window-object/support/noopener-target.html": [ @@ -561637,11 +577264,11 @@ "testharness" ], "html/browsers/the-window-object/window-indexed-properties-strict.html": [ - "57a32c2a9c636762b2d77301c9a6258a4773190c", + "ac9d401368b75e00adbdf80ee42dd8dce1e48e13", "testharness" ], "html/browsers/the-window-object/window-indexed-properties.html": [ - "bf31e152c35b33c32366950fa84837fab74a6bec", + "22d5cb06bfc4724d27f565b8ffa2280bf2e8538b", "testharness" ], "html/browsers/the-window-object/window-named-properties.html": [ @@ -561653,7 +577280,7 @@ "testharness" ], "html/browsers/the-window-object/window-properties.html": [ - "851f2113d0578bff6e04d568001dec5ba50e79c6", + "ee0ade0a8de422597c362d15cf4a9dd446e4af00", "testharness" ], "html/browsers/the-window-object/window-prototype-chain.html": [ @@ -561945,7 +577572,7 @@ "testharness" ], "html/browsers/windows/noreferrer-window-name.html": [ - "163e478a1fb6bb341d10f2ac94f868207b71bbf1", + "8fd82f21adec890ec3cf1271ab1c464b2e835222", "testharness" ], "html/browsers/windows/opener-cross-origin-manual.sub.html": [ @@ -562188,6 +577815,14 @@ "355bab1b5b13483ef5f3bb890ea6ccd09700c049", "testharness" ], + "html/dom/documents/dom-tree-accessors/nameditem-07.html": [ + "f9eddafeddf7f4e7ca99b080f98e3e379b5434d0", + "testharness" + ], + "html/dom/documents/dom-tree-accessors/nameditem-08.html": [ + "5ae6d9718f6568cf9c42a7ebdf2cbae767c68852", + "testharness" + ], "html/dom/documents/loading-xml-documents/.gitkeep": [ "da39a3ee5e6b4b0d3255bfef95601890afd80709", "support" @@ -562789,11 +578424,11 @@ "support" ], "html/dom/elements-metadata.js": [ - "bcd86ba6bbe3ce770091279ec4c3005b16dbc633", + "7e6becc4e2f4136a1c64d28724d1f21160900dd1", "support" ], "html/dom/elements-misc.js": [ - "ec0bd7b81c0d0fe1c525380eafd2a04a0a0fb219", + "59a2e8a1f2eddff79c28c72a7ac7aabb0d3dd87e", "support" ], "html/dom/elements-obsolete.js": [ @@ -562805,7 +578440,7 @@ "support" ], "html/dom/elements-tabular.js": [ - "929e628d165561489a2b68b2faf44a47a7f856d7", + "d48ca746757d7745c2ed7bdab4d8403e05a890d0", "support" ], "html/dom/elements-text.js": [ @@ -562837,7 +578472,7 @@ "support" ], "html/dom/elements/elements-in-the-dom/historical.html": [ - "c7866c9d75f6e11aaa16f6e6ee340ec3d7431441", + "89eb9192001cf925d0e0f66150fed0e525f731c6", "testharness" ], "html/dom/elements/elements-in-the-dom/unknown-element.html": [ @@ -563609,7 +579244,7 @@ "support" ], "html/dom/interfaces.html": [ - "1f34a3ba45166c0d0c14cebb7846408ec120b9f1", + "4c0db96824033d94b98123954254930fb742d7e3", "testharness" ], "html/dom/interfaces.worker.js": [ @@ -563665,27 +579300,19 @@ "testharness" ], "html/dom/reflection.js": [ - "d952a2936d184f18f3de4c00c5a871ce303b3963", - "support" - ], - "html/dom/resources/interfaces.idl": [ - "c712b0532395b08c2e6b3c68b8580f560b47a594", + "406cdc2d3a78d7a16d6f6e41430992a36678eb84", "support" ], "html/dom/resources/self-origin-subframe.html": [ "a94fee503c6ad28fdedf1f62fcd96465f7b88e71", "support" ], - "html/dom/resources/untested-interfaces.idl": [ - "5aef136a29dace7a43fd70958428bba4304f4502", - "support" - ], "html/dom/self-origin.any.js": [ "187b3657775b815f9360c01d2ddb358a53e1f920", "testharness" ], "html/dom/self-origin.sub.html": [ - "d821d4b41ac8517d345f86a9f8298f67284d1967", + "482b716c4e76fd71e99720e3b82658a5db010a5a", "testharness" ], "html/editing/.gitkeep": [ @@ -564077,7 +579704,11 @@ "support" ], "html/editing/dnd/datastore/datatransfer-constructor-001.html": [ - "36fcac7d7116a68f31f183def92e16b11ba8392f", + "f3f94ba2abbe268617912e753c37462d9337d227", + "testharness" + ], + "html/editing/dnd/datastore/datatransfer-types.html": [ + "f69aab50136582af3c3436f228a92643ab11167b", "testharness" ], "html/editing/dnd/datastore/helper-drop-box-here.xhtml": [ @@ -564488,6 +580119,10 @@ "f0507c80eeed6374b08db1a2d5f2191f346cb42a", "support" ], + "html/editing/dnd/events/relatedTarget-attribute-manual.html": [ + "473744413151ae7e8e25a4a3eccfad837b19bc02", + "manual" + ], "html/editing/dnd/file/001.html": [ "dd64d4fd33adc1fbdd639df9696ae549bafcc195", "support" @@ -567524,6 +583159,50 @@ "da39a3ee5e6b4b0d3255bfef95601890afd80709", "support" ], + "html/editing/editing-0/spelling-and-grammar-checking/references/spelling-markers-001-ref.html": [ + "a21ca78b9c6a8795eb4e2fa95f30a51a553a3e52", + "support" + ], + "html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-001.html": [ + "5c20688ee9f871cdc0b1553287dfe6d4d64dcf15", + "reftest" + ], + "html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-002.html": [ + "80318bc3c90f72803255831a95c482bf99105d29", + "reftest" + ], + "html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-003.html": [ + "ae4f1d7e6c954fd1f3fa53fcd77833954bcdf6d9", + "reftest" + ], + "html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-004.html": [ + "ace6101644d2c0e426d611016a3cb3dc30968f4a", + "reftest" + ], + "html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-005.html": [ + "5aae7d56aa63f90160ba1e296378b0a0832c07f0", + "reftest" + ], + "html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-006.html": [ + "e329657b5ebf7211237fa7712a3c710d3ea4b956", + "reftest" + ], + "html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-007.html": [ + "10c986cf6e428c782a09572be5c5438d256b17c1", + "reftest" + ], + "html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-008.html": [ + "c026d35ec89818f5624daad20163fb4ceed62828", + "reftest" + ], + "html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-009.html": [ + "68e7e27bc3777a8fe0807380a28c1ce60aa3becc", + "reftest" + ], + "html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-010.html": [ + "0320abd956316beff38f2ff06e0f32ee2b2e9887", + "reftest" + ], "html/editing/editing-0/spelling-and-grammar-checking/user-interaction-editing-spellcheck.html": [ "228e52ef1987df94158305799dc53086e435b24b", "testharness" @@ -567892,6 +583571,146 @@ "da39a3ee5e6b4b0d3255bfef95601890afd80709", "support" ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/broadcastchannel-success-and-failure.html": [ + "8375e9daeb9a11e53a9841874fef50677f0970dc", + "testharness" + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/broadcastchannel-success.html": [ + "0a8847896c5a598c7cda654ec912447cfd2d6312", + "testharness" + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/identity-not-preserved.html": [ + "594d11e18e7ef8e9aaa0eca3dc2865033827ce7c", + "testharness" + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-worker-success-dedicatedworker.html": [ + "1fa9a3ae8d33bfd08d37a18853d511b9de66889b", + "testharness" + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-worker-success-sharedworker.html": [ + "c93bd6d985380cde5e3309897ad56fccd0a73709", + "testharness" + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-worker-success.js": [ + "42b788cb6d8a9509239bbb5c141c1f014dd9a6bf", + "support" + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-transferring.html": [ + "17b67f8d75e558be808493f5cba82f978a0b6822", + "testharness" + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/blank.html": [ + "c4461f454a7dfd85e9345832ecaabd9cbf6e6cda", + "support" + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/broadcastchannel-iframe.html": [ + "f6102979837864b2d472a71e425f021a29d76184", + "support" + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/broadcastchannel-sharedworker.js": [ + "afbfe4d0178bd33062ccb9b05f27f8643ed9cad8", + "support" + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/broadcastchannel-worker.js": [ + "4c253242a8b665d04deb00825e9a81662665ead7", + "support" + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/echo-iframe.html": [ + "6284dea4f647cce02cc8b54fc5e8c6bedc0b633b", + "support" + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/echo-worker.js": [ + "7e7480dc1cc966ad2fef985a7d5d4dbdfa0e24e9", + "support" + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/incrementer-iframe-domain.sub.html": [ + "18185b1c53475814cb8f4d9ad820a2d85a283b1f", + "support" + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/incrementer-iframe.html": [ + "d3d2dd8c8a277386a550cafd91a4b068daa035e0", + "support" + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/incrementer-popup.html": [ + "a27679e95d330e2a2efbc62b80fca999a3aa672e", + "support" + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/incrementer-worker-with-channel.js": [ + "ddc07ed4ef35ce73744506cbd11817e48b65e976", + "support" + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/incrementer-worker.js": [ + "f89bea23edb1ebddb02c5f83c1bd36d30b5b48c6", + "support" + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-iframe-1.html": [ + "635658ddc3fa586abc078211842b4bc43b4a53d7", + "support" + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-iframe-2.html": [ + "4ddb26b10fea29e35068e5854009b6ae848fe032", + "support" + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-iframe-3.html": [ + "c112135e61cb799953b6009db7017952266bbaa1", + "support" + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-iframe-4-incrementer.html": [ + "fd947afdad730f4826cc893ea5516fc20a08b87e", + "support" + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/serviceworker-failure.js": [ + "ff16d63cc344365df0e6c0f30d4d30b82d1df2e4", + "support" + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/sharedworker-failure.js": [ + "f5614900f151d8c4c659979b67bf8ac128efa3cb", + "support" + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/test-incrementer.js": [ + "9f0a9648c72af785c3a7f44f26d6509f1a4f81f7", + "support" + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/test-sab.js": [ + "a8d3ce61436cb0d5b23c275820fcde7d63cdafec", + "support" + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-history.html": [ + "8f66e9b640ba812f3846a8fb0dc8f29fcf502f1e", + "testharness" + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-idb.any.js": [ + "a6e82ee3583bbf2667c59cb04460c1fd9aea4aee", + "testharness" + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-notifications-api.any.js": [ + "bba8979a9270460b976f8c2ca6912c1b3dedeab2", + "testharness" + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-domain-success.sub.html": [ + "dac4b1fd873c3ec42d05e24166e77424b15377d4", + "testharness" + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-messagechannel-success.html": [ + "298b5dba54eafaee6dafe5356b5196ed37f59b21", + "testharness" + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-serviceworker-failure.https.html": [ + "11794f2d67e97eb97ad1871027b4a19e017e9624", + "testharness" + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-sharedworker-failure.html": [ + "735bfeda2e72815f331766b32ac02af71179902b", + "testharness" + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-similar-but-cross-origin-success.sub.html": [ + "5d30957d37646bd4ebc7112db8c055bae8cc6e23", + "testharness" + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-simple-success.html": [ + "7c0b8b2e411236aeeed3a8b7962dc70d8a94969f", + "testharness" + ], "html/infrastructure/safe-passing-of-structured-data/structured_clone_blob.html": [ "2a3deba2534cad6f5e0aa85cfc3c90debcead20a", "testharness" @@ -567977,7 +583796,7 @@ "support" ], "html/infrastructure/urls/resolving-urls/query-encoding/resources/resolve-url.js": [ - "2c408d03723d2b0fca4d15ec233f6b5143c93680", + "6f3dd9aeb9bc4c2419765519586349aaea4c4495", "support" ], "html/infrastructure/urls/resolving-urls/query-encoding/resources/resource.py": [ @@ -568680,6 +584499,14 @@ "da39a3ee5e6b4b0d3255bfef95601890afd80709", "support" ], + "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-block-formatting-context.html": [ + "80d80d4934f0ad148458c5d5494946f5c7b126c8", + "testharness" + ], + "html/rendering/non-replaced-elements/the-fieldset-element-0/legend.html": [ + "0e2847a09449bb086f2a18ed14e1b44315e3f84d", + "testharness" + ], "html/rendering/non-replaced-elements/the-fieldset-element-0/min-width-not-important.html": [ "1b765f689ff6c297942d79fd093cb2d572e66f9a", "reftest" @@ -568708,6 +584535,14 @@ "37ba851b3393d3fe2e60985f502bf29438947449", "reftest" ], + "html/rendering/non-replaced-elements/the-hr-element-0/hr.html": [ + "c9b0d9a027965ad3d2b9414b2a1bf9cadaa845c5", + "testharness" + ], + "html/rendering/non-replaced-elements/the-hr-element-0/setting-overflow-visible.html": [ + "3feaff941f19801bff86d3ee364a4da9e07ab60b", + "testharness" + ], "html/rendering/non-replaced-elements/the-hr-element-0/width-ref.html": [ "33d7505b42b0507d8fd73151e32fa71d73e3b862", "support" @@ -568732,6 +584567,22 @@ "0dd816530943f3a6fa3235b1d481f70ca578b6e6", "reftest" ], + "html/rendering/non-replaced-elements/the-page/iframe-body-margin-attributes.html": [ + "68e9c15f160415a652650331f403dd324cd402e9", + "testharness" + ], + "html/rendering/non-replaced-elements/the-page/iframe-marginwidth-marginheight.html": [ + "db8b96ffd3b16bc78d937b46860de8c22d857947", + "testharness" + ], + "html/rendering/non-replaced-elements/the-page/support/body-marginwidth-marginheight.html": [ + "d75fd3830c23860db68fe23589f74a7bdc95be91", + "support" + ], + "html/rendering/non-replaced-elements/the-page/support/body-topmargin-leftmargin.html": [ + "1c31ddd13c97504f59d1e403f6ab90252fa68e0c", + "support" + ], "html/rendering/non-replaced-elements/the-page/test-body.xhtml": [ "7a229199399e678847280e6e88e40e5b37bfdd11", "support" @@ -568872,6 +584723,14 @@ "56b84cbf730afd1a5dc4d9081cddf2527f6ee71a", "support" ], + "html/rendering/replaced-elements/the-option-element/option-with-br-ref.html": [ + "5018e42444829d391d4ba7a82d3a4d0e0a73033f", + "support" + ], + "html/rendering/replaced-elements/the-option-element/option-with-br.html": [ + "99187e557e72c3a87068a73f4cdc22e9d202f7c6", + "reftest" + ], "html/rendering/replaced-elements/toolbars-0/.gitkeep": [ "da39a3ee5e6b4b0d3255bfef95601890afd80709", "support" @@ -571148,6 +587007,22 @@ "fb713f6068016a6315220716a858397a241eb7c3", "testharness" ], + "html/semantics/embedded-content/the-img-element/ismap/img-ismap-coordinates-iframe-after.html": [ + "5ec785b7dc1390356f74630e4bd6c0f5c1da0abc", + "support" + ], + "html/semantics/embedded-content/the-img-element/ismap/img-ismap-coordinates-iframe-before.html": [ + "07a23f5131fc9f4075de99c66216ce0d21db6c82", + "support" + ], + "html/semantics/embedded-content/the-img-element/ismap/img-ismap-coordinates-iframe-inside.html": [ + "2e2ff60afae40da9367897c6752e000692a9598e", + "support" + ], + "html/semantics/embedded-content/the-img-element/ismap/img-ismap-coordinates-manual.html": [ + "1d58aab3f3fee594404e34681bde43f85824a738", + "manual" + ], "html/semantics/embedded-content/the-img-element/nonexistent-image.html": [ "ed3a4e8ec0ffe8411176c91de37e965f252534cd", "testharness" @@ -571556,6 +587431,10 @@ "2b9329c270fb73a2ab60f5e9549afdfa91a13522", "testharness" ], + "html/semantics/forms/resetting-a-form/reset-form-2.html": [ + "6f9c1879eab27d8e54273d73eeffe815d0483935", + "testharness" + ], "html/semantics/forms/resetting-a-form/reset-form-event-realm-support.html": [ "2530f8b46c8ec015b165deec1c99e0a495325073", "support" @@ -571581,7 +587460,7 @@ "testharness" ], "html/semantics/forms/textfieldselection/selection-after-content-change.html": [ - "c7f9433a664b59f59be933cdf607c158a599dff7", + "b239830964f86fd94304a4239b41413699fb2344", "testharness" ], "html/semantics/forms/textfieldselection/selection-not-application-textarea.html": [ @@ -571624,6 +587503,10 @@ "fd6cbf436213e6a1324d3944f28199b5b7a04d87", "testharness" ], + "html/semantics/forms/the-button-element/button-click-submits.html": [ + "2572c669271b48b218a4ff058789fabed5f3751c", + "testharness" + ], "html/semantics/forms/the-button-element/button-events.html": [ "322fc4a9f013595a9ac2550401a2743b2ab85b07", "testharness" @@ -571632,6 +587515,10 @@ "61d2efc186cc8124ca884dbb8f5b74ef6ca339e8", "testharness" ], + "html/semantics/forms/the-button-element/button-type.html": [ + "dad1f595fb83eefbb8fa8261a42654c1178f3a13", + "testharness" + ], "html/semantics/forms/the-button-element/button-validation.html": [ "a4bb6a1e45b5b92e170e87d153a44f2027ff3717", "testharness" @@ -571664,12 +587551,28 @@ "da39a3ee5e6b4b0d3255bfef95601890afd80709", "support" ], - "html/semantics/forms/the-form-element/form-action-url.html": [ - "999b3fa2309085d3fb04385bb159d86f1565bffd", + "html/semantics/forms/the-form-element/form-action-reflection-with-base-url.html": [ + "e86e9b28d5f1bab91b198f59f877de0ccef32731", + "testharness" + ], + "html/semantics/forms/the-form-element/form-action-reflection.html": [ + "5006f6381f10f5bb08a2bd89bab403a8db76d32a", + "testharness" + ], + "html/semantics/forms/the-form-element/form-action-submission-with-base-url.html": [ + "614c1614bf86f202ee0c007778f5351f1cc66239", + "testharness" + ], + "html/semantics/forms/the-form-element/form-action-submission.html": [ + "e2a223d34051f8c80a2e6cb2afb24dfc8971c33a", "testharness" ], "html/semantics/forms/the-form-element/form-autocomplete.html": [ - "e3548e62923d62b5844f8d4d7222006bbfd3cb2a", + "c3aae63b6c007e3f39a7bf39c56bcdb7172273ad", + "testharness" + ], + "html/semantics/forms/the-form-element/form-elements-filter.html": [ + "bfed166cfad06a5afb59cad6c5e5aea223e4d50b", "testharness" ], "html/semantics/forms/the-form-element/form-elements-interfaces-01.html": [ @@ -571700,12 +587603,24 @@ "928a0029fbad4251a30dc660de10ad6fd7f08def", "testharness" ], - "html/semantics/forms/the-form-element/resources/form-action-url-iframe.html": [ - "75f2e51329853a6ff5e0a77f0eebf3ec7e4832ca", + "html/semantics/forms/the-form-element/resources/form-no-action-with-base.html": [ + "e4baa661a5ffc42b0d79c99a9deb6302c62d5550", + "support" + ], + "html/semantics/forms/the-form-element/resources/form-no-action.html": [ + "0b2be99bcdd371840f80edc1f6e00bcc14a9b3f8", + "support" + ], + "html/semantics/forms/the-form-element/resources/form-with-action-and-base.sub.html": [ + "01bf510923d01ed51e6980c0dcd730521540b817", + "support" + ], + "html/semantics/forms/the-form-element/resources/form-with-action.sub.html": [ + "77255eb0028ccd532b71b2022ca1ee551b0dd923", "support" ], "html/semantics/forms/the-form-element/resources/target/form-action-url-target.html": [ - "e3066a4b4518618aa1326e8dd364c769964fe4af", + "6edba9819119125ff562cb8ecc4555106cba1993", "support" ], "html/semantics/forms/the-input-element/.gitkeep": [ @@ -571716,6 +587631,10 @@ "b827cd11bb58fdffa11fb8d1fa9634ab41368602", "testharness" ], + "html/semantics/forms/the-input-element/checkbox-click-events.html": [ + "9e1d67b4488c9ba65f103ab6a6780ee91362b128", + "testharness" + ], "html/semantics/forms/the-input-element/checkbox.html": [ "1bbb79b50f54bb363d6b8ff1503139520128fbc5", "testharness" @@ -571816,8 +587735,12 @@ "98985c9572d61e4a22a5dcf927e7cc20288c1d88", "testharness" ], + "html/semantics/forms/the-input-element/radio-input-cancel.html": [ + "b362825a7811c7025da5abf77511ef1a5057b936", + "testharness" + ], "html/semantics/forms/the-input-element/radio.html": [ - "f80348bd3b3947eefc993323988799df13e7280e", + "e7b37335f58290c4f5a8e1a098c1cc50fb78a7b2", "testharness" ], "html/semantics/forms/the-input-element/range-2.html": [ @@ -571869,7 +587792,7 @@ "testharness" ], "html/semantics/forms/the-input-element/valueMode.html": [ - "1446be6aa4ad1b3baee156a332d56989ebd88d3f", + "b9d5105852c5b2b8a4dc2feb2544ad709797669f", "testharness" ], "html/semantics/forms/the-input-element/week.html": [ @@ -571888,6 +587811,10 @@ "421328f898fb2487152f6fd8df315fc22ddea61a", "testharness" ], + "html/semantics/forms/the-label-element/proxy-click-to-associated-element.html": [ + "49f17bfea3e8080fd8690b7be4bc3aa0c82e63e2", + "testharness" + ], "html/semantics/forms/the-legend-element/.gitkeep": [ "da39a3ee5e6b4b0d3255bfef95601890afd80709", "support" @@ -571920,10 +587847,18 @@ "566d5202b873e0dddbbdf76d2a07fdb28554b709", "manual" ], + "html/semantics/forms/the-option-element/option-element-constructor.html": [ + "0f82cd42b418c654dbad129424f315b922280960", + "testharness" + ], "html/semantics/forms/the-option-element/option-form.html": [ "d5a7b7f4c0ed63c3062382ac90074dfe9172e75b", "testharness" ], + "html/semantics/forms/the-option-element/option-index.html": [ + "59026acc6b941050d74ae32feb9ec9352988e190", + "testharness" + ], "html/semantics/forms/the-option-element/option-label-value.js": [ "52c03671d679b391814480fcf068d291d626de15", "support" @@ -571996,6 +587931,10 @@ "e9689464e9ffa86ac5cd9364a4e8fb9ed6af065e", "testharness" ], + "html/semantics/forms/the-select-element/select-multiple.html": [ + "e4b076af4acf3fe019dad21b49c1df9b777a817a", + "testharness" + ], "html/semantics/forms/the-select-element/select-named-getter.html": [ "40412a620cb3ae20853c95cae15f3516e5f553da", "testharness" @@ -572004,6 +587943,10 @@ "19bbb52e85726d68d612a65999d104212057a119", "testharness" ], + "html/semantics/forms/the-select-element/select-selectedOptions.html": [ + "81805a8f0b1f0c6dbf056d370b96472309ffe36d", + "testharness" + ], "html/semantics/forms/the-select-element/select-validity.html": [ "f1cf30c31b0bfeacbe5ef4cfe863a32ff198ad14", "testharness" @@ -572048,6 +587991,10 @@ "81a270bc3c9304f8b2e7dd526519f4eab7d94f45", "testharness" ], + "html/semantics/forms/the-textarea-element/value-defaultValue-textContent.html": [ + "55e04e640fd48d92c4be16a912cba57fb4bb9e27", + "testharness" + ], "html/semantics/forms/the-textarea-element/wrap-reflect-1-ref.html": [ "176e2ca4fdb0fe1b83e0154f5b61340fdacf66a9", "support" @@ -572360,13 +588307,9 @@ "6737e2d1d4510e1d0fd105c5a45f0d67e1a7ea0a", "support" ], - "html/semantics/interactive-elements/context-menus/contextmenu-event-manual.htm": [ - "da34a14c36842d855a3d73a171e3e5a03282360f", - "manual" - ], - "html/semantics/interactive-elements/the-command-element/.gitkeep": [ - "da39a3ee5e6b4b0d3255bfef95601890afd80709", - "support" + "html/semantics/interactive-elements/contextmenu-historical.html": [ + "6e16c7701d1e8f0fe49b01d0edf0451d7f34d60e", + "testharness" ], "html/semantics/interactive-elements/the-details-element/.gitkeep": [ "da39a3ee5e6b4b0d3255bfef95601890afd80709", @@ -572408,10 +588351,6 @@ "da39a3ee5e6b4b0d3255bfef95601890afd80709", "support" ], - "html/semantics/interactive-elements/the-menu-element/contains.json": [ - "a79ad27e8f1e2eee47c89fa4530f7babfbb07dd5", - "support" - ], "html/semantics/interactive-elements/the-summary-element/.gitkeep": [ "da39a3ee5e6b4b0d3255bfef95601890afd80709", "support" @@ -572425,7 +588364,7 @@ "testharness" ], "html/semantics/interfaces.js": [ - "ca5bd62a7392b8dfb9aada99372e44e518b722d6", + "b63c7402601bbf801f65dff9bef38797cdaf9eae", "support" ], "html/semantics/links/.gitkeep": [ @@ -572620,12 +588559,24 @@ "12842b6e600ac2fc737718d8a9ba3385ed8b678b", "support" ], + "html/semantics/scripting-1/the-script-element/module/bad-module-specifier.js": [ + "4014bf8d2c024f3c9bc8d90595fa9af7786fed3e", + "support" + ], + "html/semantics/scripting-1/the-script-element/module/compilation-error-1.html": [ + "e36eda2e9941e0cfefbfd867d36da6de4dfe7b2e", + "testharness" + ], + "html/semantics/scripting-1/the-script-element/module/compilation-error-2.html": [ + "fe3191547b7292f0c486febe0cef930a0a8fa590", + "testharness" + ], "html/semantics/scripting-1/the-script-element/module/crossorigin-common.js": [ "a58804b6e2495f99ec3f8b7894ff52186a49a427", "support" ], "html/semantics/scripting-1/the-script-element/module/crossorigin-import-different.sub.html": [ - "eac09ab0af026a54e327d2677e5ce59b357e4f87", + "2de317a6d55ecd7068aa5807387480c777cdd91a", "support" ], "html/semantics/scripting-1/the-script-element/module/crossorigin-import-missingheader.sub.html": [ @@ -572641,7 +588592,7 @@ "support" ], "html/semantics/scripting-1/the-script-element/module/crossorigin-root-different.sub.html": [ - "e49b493849c6dd9475415ffe3a2605a1cf3d8bbc", + "5828ce9cc3f468b6b9b6db9cec2ecec077680852", "support" ], "html/semantics/scripting-1/the-script-element/module/crossorigin-root-missingheader.sub.html": [ @@ -572661,7 +588612,35 @@ "support" ], "html/semantics/scripting-1/the-script-element/module/crossorigin.html": [ - "d18faac90e11617824f0a2bc2ead29ad14de3622", + "a52aa9bb0ea2e266fd04760ca3f5b21498d12029", + "testharness" + ], + "html/semantics/scripting-1/the-script-element/module/currentScript-null.html": [ + "20f8022ca7d47c57a08c20a17b547d0d89630fb3", + "testharness" + ], + "html/semantics/scripting-1/the-script-element/module/currentscript.js": [ + "6bd1fff05e91002539688b03eff9d7313e0de9dc", + "support" + ], + "html/semantics/scripting-1/the-script-element/module/cycle-tdz-access-a.js": [ + "00e8e5ec0b5bd3b3e8735bb38ceb5749a5090efa", + "support" + ], + "html/semantics/scripting-1/the-script-element/module/cycle-tdz-access.js": [ + "05790f5b907949c6f3cea9f9e2b07c957fbf4c64", + "support" + ], + "html/semantics/scripting-1/the-script-element/module/cycle-unresolvable-a.js": [ + "8754ccc2192b6ff241bdfed2ff4a32c68f096c87", + "support" + ], + "html/semantics/scripting-1/the-script-element/module/cycle-unresolvable.js": [ + "32b68baebfa9d82753f186ff34789922b1467e81", + "support" + ], + "html/semantics/scripting-1/the-script-element/module/error-and-slow-dependency.html": [ + "3c45e09c2192615bc44da576403a5ba065eb1ebf", "testharness" ], "html/semantics/scripting-1/the-script-element/module/errorhandling-parseerror-common.js": [ @@ -572700,6 +588679,22 @@ "ffd411f153c55abf313fba5ab349b6a0cc50ba0f", "testharness" ], + "html/semantics/scripting-1/the-script-element/module/evaluation-error-1.html": [ + "896463b228f17bac6cac54fc9ec4d786f8e73779", + "testharness" + ], + "html/semantics/scripting-1/the-script-element/module/evaluation-error-2.html": [ + "20c9cd678fb90c4e7bc5df6355a54f2026f23e92", + "testharness" + ], + "html/semantics/scripting-1/the-script-element/module/evaluation-error-3.html": [ + "c1b6698493ad56bb8759671f2e515deac4756b7c", + "testharness" + ], + "html/semantics/scripting-1/the-script-element/module/evaluation-error-4.html": [ + "d80e7d18efba685f2003dc790a5399e8c00541d2", + "testharness" + ], "html/semantics/scripting-1/the-script-element/module/execorder-dynamicordered2.js": [ "9a7d69437d3dda9d5f5de30cf917365d660b85ac", "support" @@ -572737,7 +588732,35 @@ "support" ], "html/semantics/scripting-1/the-script-element/module/execorder.html": [ - "a1b14284d50eda5bd745c113cf9df10a621895f2", + "2180793400b87fa0793a9e30ec35608bc156a25e", + "testharness" + ], + "html/semantics/scripting-1/the-script-element/module/export-something-nested.js": [ + "83de43bdd4d71d0e350c55df4c70ffbde2711ddd", + "support" + ], + "html/semantics/scripting-1/the-script-element/module/export-something.js": [ + "9c097dd9b8f8055c18e5c4ab832cd4a18b8dce30", + "support" + ], + "html/semantics/scripting-1/the-script-element/module/fetch-error-1.html": [ + "8ff8d8764eabdff075cda09743de5eeb26e8d3b8", + "testharness" + ], + "html/semantics/scripting-1/the-script-element/module/fetch-error-2.html": [ + "d18b06bd5835cba56ca070637d649e002b1aadbb", + "testharness" + ], + "html/semantics/scripting-1/the-script-element/module/fetch-error-2.js": [ + "aeee3b59817843111b37ec65d643a09e1ea7d77a", + "support" + ], + "html/semantics/scripting-1/the-script-element/module/import-something-namespace.js": [ + "3488bcae45d3094858fad47be6c3b21bfc3ac402", + "support" + ], + "html/semantics/scripting-1/the-script-element/module/import-subgraph-404.html": [ + "ecd62e08242206bfe40c5729e2dc0042e2172e50", "testharness" ], "html/semantics/scripting-1/the-script-element/module/imports-a.js": [ @@ -572757,7 +588780,7 @@ "support" ], "html/semantics/scripting-1/the-script-element/module/imports-cycle.js": [ - "462fe462bf92e1df232228cc1ce338ff522febbd", + "e9cad195e5e718080c21f7cf15a58a775a1226de", "support" ], "html/semantics/scripting-1/the-script-element/module/imports-inc-a.js": [ @@ -572777,19 +588800,127 @@ "support" ], "html/semantics/scripting-1/the-script-element/module/imports-self.js": [ - "26b832413187999e45c0520e171f5fc61a911b20", + "a18743fbd553b68e0ceb657a5d65e3424e6f6a52", "support" ], "html/semantics/scripting-1/the-script-element/module/imports.html": [ - "997cee37dcd202498196e63e0f66035979121b7f", + "15b0b32d86bc6411b29c5d978db71053c00a1d65", "testharness" ], + "html/semantics/scripting-1/the-script-element/module/instantiation-error-1.html": [ + "2b4fa3b558dccb50bf0aee12a78e3320501ea1b5", + "testharness" + ], + "html/semantics/scripting-1/the-script-element/module/instantiation-error-1.js": [ + "f2a20180b6bf5f9c89f5b9541885d55dc8a8ade6", + "support" + ], + "html/semantics/scripting-1/the-script-element/module/instantiation-error-2.html": [ + "70271ef6fbf9f6e4f6e61438691b6fce317137e9", + "testharness" + ], + "html/semantics/scripting-1/the-script-element/module/instantiation-error-3.html": [ + "80fa90a214bb4839703c36f9db36e07f3a2ca7f2", + "testharness" + ], + "html/semantics/scripting-1/the-script-element/module/late-namespace-request.html": [ + "a04ecfd484ada80c436c880c6fb39abba47eac1c", + "testharness" + ], + "html/semantics/scripting-1/the-script-element/module/late-star-export-request.html": [ + "2fd8c4ee6fcc66a8ddc2100a0840ebcc324a7d58", + "testharness" + ], + "html/semantics/scripting-1/the-script-element/module/missing-export-nested.js": [ + "5c6c1dae178b88b42ce87964e372f7d7db99ba70", + "support" + ], + "html/semantics/scripting-1/the-script-element/module/missing-export.js": [ + "27cd038ca24450b1aeb9fe52cb9dea85998d108c", + "support" + ], + "html/semantics/scripting-1/the-script-element/module/module-vs-script-1.html": [ + "a7fd504c7bfeefb445de9f2a1212986f27e80465", + "testharness" + ], + "html/semantics/scripting-1/the-script-element/module/module-vs-script-2.html": [ + "ca5ee235cc345d01e3d98cf3512dc26b9ad1896e", + "testharness" + ], + "html/semantics/scripting-1/the-script-element/module/nested-missing-export.js": [ + "4aa0a44e82a72b9a68f2a8ee64c4e10fbf26de42", + "support" + ], + "html/semantics/scripting-1/the-script-element/module/nomodule-attribute.html": [ + "4ce8bcce2537785c41f054175119e39169ed6110", + "testharness" + ], + "html/semantics/scripting-1/the-script-element/module/resources/delayed-modulescript.py": [ + "f09db3d2acdf3aba3fc8c67b2f089a0ba506c799", + "support" + ], + "html/semantics/scripting-1/the-script-element/module/script-for-event.html": [ + "c225684e0c7d09f9628aab589c8673b140994243", + "testharness" + ], + "html/semantics/scripting-1/the-script-element/module/set-currentScript-on-window.js": [ + "ad9a90f05a7a64901b18474c49d0baa579bfc60d", + "support" + ], + "html/semantics/scripting-1/the-script-element/module/single-evaluation-1.html": [ + "68a2b469c248c5f828159dcd20d1c979badc8985", + "testharness" + ], + "html/semantics/scripting-1/the-script-element/module/single-evaluation-2.html": [ + "36fdeb10e157db42895dd3ed0337eb5c1f311ae8", + "testharness" + ], + "html/semantics/scripting-1/the-script-element/module/slow-cycle.html": [ + "12b7e271beb788b5cb197f797ff9ea39284da32e", + "testharness" + ], + "html/semantics/scripting-1/the-script-element/module/slow-module-graph-a.js": [ + "790ded4fa1b111b3a1e445f897000bb84f67bf08", + "support" + ], + "html/semantics/scripting-1/the-script-element/module/slow-module-graph-b.js": [ + "0563272baa7fd69ab7a05be44e7f195cd65cab9f", + "support" + ], + "html/semantics/scripting-1/the-script-element/module/specifier-error.html": [ + "ab17328119bf2b495b7e078233a68cccfd9ead39", + "testharness" + ], + "html/semantics/scripting-1/the-script-element/module/syntaxerror-nested.js": [ + "06839d94710ba9f2322a624dbeb60455f194d182", + "support" + ], + "html/semantics/scripting-1/the-script-element/module/syntaxerror.js": [ + "6febe4088fd80a7d83a8114527ec65f4d0791922", + "support" + ], + "html/semantics/scripting-1/the-script-element/module/this-nested.js": [ + "cf24b5c168e95e610c2dc3a7008582b6664ab0d4", + "support" + ], + "html/semantics/scripting-1/the-script-element/module/this.js": [ + "e6f03a1d03faf88a31cdc08eddab26b2d4c029f4", + "support" + ], + "html/semantics/scripting-1/the-script-element/module/throw-nested.js": [ + "c0672d30dc8a0109b5a1a3e38b9a1b481e36c94a", + "support" + ], + "html/semantics/scripting-1/the-script-element/module/throw.js": [ + "d071fd2e76896c4b66636f359d4426fe101f6d0f", + "support" + ], "html/semantics/scripting-1/the-script-element/nomodule-reflect.html": [ "ac2b3c16e9e9263cd4c14de205b63709c14ec2e3", "testharness" ], "html/semantics/scripting-1/the-script-element/nomodule-set-on-async-classic-script.html": [ - "5b4a532b21caa6235bed10a28878c65523a816aa", + "19fe5862149465a52c6437e12535c6febdac2324", "testharness" ], "html/semantics/scripting-1/the-script-element/nomodule-set-on-external-module-script.html": [ @@ -572805,7 +588936,7 @@ "testharness" ], "html/semantics/scripting-1/the-script-element/nomodule-set-on-synchronously-loaded-classic-scripts.html": [ - "a5600b1fcb40e3dbdf223fbeee40c0a3f096eed1", + "4ce8a4cf095d43c542aa8cbcdfd57c5cf381a97b", "testharness" ], "html/semantics/scripting-1/the-script-element/resources/cocoa-module.js": [ @@ -573197,7 +589328,7 @@ "manual" ], "html/semantics/selectors/pseudo-classes/checked.html": [ - "14572cac6499939da279b1a4372dc86253617e75", + "b5790716eff3f91ac04f78e669bfacac4ede5642", "testharness" ], "html/semantics/selectors/pseudo-classes/default.html": [ @@ -573217,7 +589348,7 @@ "testharness" ], "html/semantics/selectors/pseudo-classes/enabled.html": [ - "ddd449bcf115f5c8616698cc0c249c0b8c2d7023", + "ad21e09513509f1131673dda3c3ed685b6cea069", "testharness" ], "html/semantics/selectors/pseudo-classes/focus-autofocus.html": [ @@ -573292,10 +589423,18 @@ "da39a3ee5e6b4b0d3255bfef95601890afd80709", "support" ], + "html/semantics/tabular-data/processing-model-1/col-span-limits.html": [ + "8a50d7de81bb0b1372fa6f5b8182af79207802ed", + "testharness" + ], "html/semantics/tabular-data/processing-model-1/contains.json": [ "2bee37bc667b7aaf9ffc2be912288540896e3f03", "support" ], + "html/semantics/tabular-data/processing-model-1/span-limits.html": [ + "221803eac571dfc67c97122467743be20b1d17c0", + "testharness" + ], "html/semantics/tabular-data/the-caption-element/.gitkeep": [ "da39a3ee5e6b4b0d3255bfef95601890afd80709", "support" @@ -574301,7 +590440,7 @@ "testharness" ], "html/syntax/serializing-html-fragments/serializing.html": [ - "dfc037432227ab79b9ce795547fb370594651b9e", + "cd9e3b8412231aa393081a6234efc7476e00c48e", "testharness" ], "html/syntax/serializing-xml-fragments/outerHTML.html": [ @@ -574352,8 +590491,48 @@ "da39a3ee5e6b4b0d3255bfef95601890afd80709", "support" ], + "html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-1.htm": [ + "3c58f1659b1e7a06fbc9068a243b8777fb00b730", + "testharness" + ], + "html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-10.htm": [ + "a57ac305ef379f0ddd61c0bb401278855b87146c", + "testharness" + ], + "html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-2.htm": [ + "a599308e7803ede1851741a813f4eb4838554a32", + "testharness" + ], + "html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-3.htm": [ + "2313b85385e2cad99257ca985c005126eb2fc009", + "testharness" + ], + "html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-4.htm": [ + "af4c7c1bb4b26dcc8c6e8dc53201499f0086de4e", + "testharness" + ], + "html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-5.htm": [ + "5e4189278e14a78fc78edb7960ff33c69f9fa4bf", + "testharness" + ], + "html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-6.htm": [ + "0fd5c5703309abab66cf553da9685d8e766f5278", + "testharness" + ], + "html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-7.htm": [ + "b7a95380287b3c8299f2028d055cb68e1f11fc6e", + "testharness" + ], + "html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-8.htm": [ + "61c32e514cdc7b3d40f6a7bdb0d4babf19ec562c", + "testharness" + ], + "html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-9.htm": [ + "c35672e53b9ebe1d778de8ec8ea654390389bea5", + "testharness" + ], "html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-support.htm": [ - "060659a3aafbbf51c8e1a909d5e7d451fdba2893", + "f675bac0053a5e0b8dffe83cbaf48709537409d7", "support" ], "html/the-xhtml-syntax/parsing-xhtml-fragments/.gitkeep": [ @@ -574457,7 +590636,7 @@ "testharness" ], "html/webappapis/idle-callbacks/callback-multiple-calls.html": [ - "6375309c43a1e7c9fafdc95f01fcccb4c92f8afc", + "af6e6a65fda2486ac8669340988b1d57a178e77a", "testharness" ], "html/webappapis/idle-callbacks/callback-removed-frame.html": [ @@ -574544,6 +590723,14 @@ "2b05164b274d7719e27e3b9def3f25eaa156b839", "support" ], + "html/webappapis/scripting/events/contextmenu-event-manual.htm": [ + "da34a14c36842d855a3d73a171e3e5a03282360f", + "manual" + ], + "html/webappapis/scripting/events/event-handler-all-global-events.html": [ + "51076fe86edb21299d64d6a08616e677af98f4ff", + "testharness" + ], "html/webappapis/scripting/events/event-handler-attributes-body-window.html": [ "c25750e626c5c2121833fd4627f656ffe9c83d38", "testharness" @@ -574552,10 +590739,6 @@ "2dece90b5e8b3ac3371a732e158ff44b8ea63b00", "testharness" ], - "html/webappapis/scripting/events/event-handler-onauxclick.html": [ - "0f882828f5cc321992ab9265fe632e55c6d6760b", - "testharness" - ], "html/webappapis/scripting/events/event-handler-onresize.html": [ "917a10cd8a60b916eb4e2ad7bb7cb1ae657335a8", "testharness" @@ -574633,11 +590816,11 @@ "testharness" ], "html/webappapis/scripting/events/inline-event-handler-ordering.html": [ - "0bf73411e0a015a81aefc1327d4c7ef1ca824a56", + "873c69a87a5257a0e5278532b162338e9de2a596", "testharness" ], "html/webappapis/scripting/events/invalid-uncompiled-raw-handler-compiled-late.html": [ - "3a16be9d55c95a04eb426676ff89802974e88b95", + "f26d145d438561fb737956d50c37d165808d3ebf", "testharness" ], "html/webappapis/scripting/events/invalid-uncompiled-raw-handler-compiled-once.html": [ @@ -574744,6 +590927,30 @@ "6427c8ff06c11f2877f026124d46748b5270bc8e", "support" ], + "html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/canblock-dedicatedworker.html": [ + "e9ef057de8593404b63e34c8c2ff038236f26d7b", + "testharness" + ], + "html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/canblock-serviceworker.https.html": [ + "f6cdef79aefb4739025c0c805dfc1ee7fcddef52", + "testharness" + ], + "html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/canblock-sharedworker.html": [ + "6927215d83fc6562dabf74b1a089531556256f5c", + "testharness" + ], + "html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/canblock-window.html": [ + "5aab1e791ad444eb73383e06f4e2fbb1fb512072", + "testharness" + ], + "html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/worker-that-requires-failure.js": [ + "8a24096d84baf51c6d2e3c26131093dccec74195", + "support" + ], + "html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/worker-that-requires-success.js": [ + "e4c2b99ca0379bfe0531ede9d2da46832f2c95dc", + "support" + ], "html/webappapis/scripting/processing-model-2/runtime-error-cross-origin-setInterval.html": [ "c8c4ba120b74c1beb6d24901e3d1b8a87e5b8837", "testharness" @@ -574900,18 +591107,6 @@ "da39a3ee5e6b4b0d3255bfef95601890afd80709", "support" ], - "html/webappapis/system-state-and-capabilities/the-navigator-object/NavigatorID.html": [ - "61f05d56702a02acf80809605c46a31033192df9", - "testharness" - ], - "html/webappapis/system-state-and-capabilities/the-navigator-object/NavigatorID.js": [ - "37f13d24527fcdb5ded608b2ce58e1b51343cf96", - "support" - ], - "html/webappapis/system-state-and-capabilities/the-navigator-object/NavigatorID.worker.js": [ - "f08f131c44189e8aaf6c9bb34479a7cfaf6b586d", - "testharness" - ], "html/webappapis/system-state-and-capabilities/the-navigator-object/contains.json": [ "2c41fa08c5296f814d286d8b459424c5c488e3e1", "support" @@ -574952,6 +591147,14 @@ "3a478a2d6f508242244308641a2d57d4eb00798b", "testharness" ], + "html/webappapis/system-state-and-capabilities/the-navigator-object/navigator-pluginarray.html": [ + "f1907fd820e2f6a195400a9bca96f3dae45fc308", + "testharness" + ], + "html/webappapis/system-state-and-capabilities/the-navigator-object/navigator.any.js": [ + "defa186d15df9349c70ca1c2b4f4877e06f63d3e", + "testharness" + ], "html/webappapis/system-state-and-capabilities/the-navigator-object/navigatorlanguage.html": [ "8f141c495c1b4444c8e25ba57924d7917f97d1b9", "testharness" @@ -575056,6 +591259,18 @@ "bc4c7a8b5eef0e082a5fa7c8c763957d92730747", "support" ], + "image-decodes/image-decode-iframe.html": [ + "2632f69b005ea382ed91bfb71a7e0e2ee931a0c8", + "testharness" + ], + "image-decodes/image-decode-path-changes.html": [ + "64dde3f7b1f9ed02e4433858f075123f18c092a4", + "testharness" + ], + "image-decodes/image-decode.html": [ + "02d38d593fb42587c3ef261c349f7c42db345005", + "testharness" + ], "imagebitmap-renderingcontext/bitmaprenderer-as-imagesource.html": [ "f80d1496329c64643d2b40e478779929de20c499", "testharness" @@ -575276,6 +591491,54 @@ "cd25518dd402033694667ccd1982fd3b85faa412", "testharness" ], + "input-events/input-events-typing-data-manual.html": [ + "f94325d74e69fbd62bfdff3c0f4676a3d2c50d09", + "manual" + ], + "interfaces/OWNERS": [ + "f9c94ab08fa997459cba17e61d8cd00ee8b07b46", + "support" + ], + "interfaces/cssom.idl": [ + "bb17bbe93776dbeb33f061a7a90889e922e3138e", + "support" + ], + "interfaces/dom.idl": [ + "86f2e15d4b32af7b5127283eb3cfab5a78b46c0a", + "support" + ], + "interfaces/fullscreen.idl": [ + "fda57b55aabdc54d674851851451c6c69c514ed1", + "support" + ], + "interfaces/geometry.idl": [ + "b4c2837ade7a509306755eb7b682f6648c3684e3", + "support" + ], + "interfaces/html.idl": [ + "137e061bbab6b23150d6ae9128df56a96cd1d68f", + "support" + ], + "interfaces/mediacapture-main.idl": [ + "3d59aebd6219a0312ade8c543bb389030d670d82", + "support" + ], + "interfaces/remoteplayback.idl": [ + "f7c100f4275f2e32fbca3bb8d9c4900df879ffe4", + "support" + ], + "interfaces/touchevents.idl": [ + "6ce4f601cda6cd3b99a300e0b28d2886647f06d3", + "support" + ], + "interfaces/uievents.idl": [ + "3fabcfa40caf9c66bc74bcd83663eddb0f385051", + "support" + ], + "interfaces/webrtc-pc.idl": [ + "4f94c4236168ed722f71d81bd957e0da72b29c71", + "support" + ], "js/behaviours/SetPrototypeOf-window.html": [ "92efe1a4f3910a32097fb3cbeef0019d82a0e78a", "testharness" @@ -575337,13 +591600,33 @@ "testharness" ], "js/builtins/Promise-subclassing.html": [ - "af7bd3f8657eb91da5cb769f666fee002b2d4d8e", + "aac7ab0c0e6beecf28ede1967ecff3ea226e8883", "testharness" ], "js/builtins/WeakMap.prototype-properties.html": [ "581702f5f6b8f6e547918ae8f8a8547b103a9b6c", "testharness" ], + "keyboard-lock/idlharness.https.html": [ + "8b2fe1d77e8c4cc8a759a31bfb6f3d962f24992e", + "testharness" + ], + "keyboard-lock/navigator-cancelKeyboardLock.https.html": [ + "5109eb45591bba9ce48d3db91fa02c0590397886", + "testharness" + ], + "keyboard-lock/navigator-requestKeyboardLock-two-parallel-requests.https.html": [ + "6a05080698fbeff768c4f5c85dbbc89cf3cfa09a", + "testharness" + ], + "keyboard-lock/navigator-requestKeyboardLock-two-sequential-requests.https.html": [ + "79ed9f93e2f72bf8e11d04e25c6fa847c91971e4", + "testharness" + ], + "keyboard-lock/navigator-requestKeyboardLock.https.html": [ + "6f8091035f4aa18131c548a81cbe80ba328169c9", + "testharness" + ], "longtask-timing/longtask-attributes.html": [ "a88bd658adcb9ef3dcbfa803397910e531bc864b", "testharness" @@ -575392,14 +591675,30 @@ "4acb6764c2fb60ad55733c420dfd7c1946542f17", "support" ], + "magnetometer/Magnetometer.https.html": [ + "4e7d890f37469aecbce415187bb0bcf239dac37b", + "testharness" + ], + "magnetometer/Magnetometer_insecure_context.html": [ + "9708569b2e2764c973efe31e9f2f4e3de7f7a449", + "testharness" + ], + "magnetometer/Magnetometer_onerror-manual.https.html": [ + "6adfb807ff2c1b24dad702b21f636e7805543704", + "manual" + ], "magnetometer/OWNERS": [ "36770a71443523aa2f91f9958ba24066f0b4dcec", "support" ], "magnetometer/idlharness.https.html": [ - "0a9194605503377bad3f8e66dd60959d2ac5c909", + "b21217da9dc986e605d172d72a5f4f3e7b2aa216", "testharness" ], + "magnetometer/support-iframe.html": [ + "4afaea574bcbd68422278c5e093cf6d37ab4f9f1", + "support" + ], "mathml/README.md": [ "9a0f19770c7f633e06913d9d138e8f3a6d1a1104", "support" @@ -575857,7 +592156,7 @@ "support" ], "media-capabilities/decodingInfo.html": [ - "1d8f79cb9e47042aa7eff1b63fe72af4941830e2", + "80c20b9a3c3c055aff8afa64472e44b2e7c4c34c", "testharness" ], "media-capabilities/idlharness.html": [ @@ -576304,12 +592603,8 @@ "cb9a48e1d53911d5be214320adfbf7596632a316", "support" ], - "media/CanvasTest.ttf": [ - "10a7017b4caead6817aa08b25f14950e6402dd95", - "support" - ], "media/OWNERS": [ - "f478084fb2b04fe93435b3c33e9791bf613ba7f8", + "30004bfb49495e067cf71c702ac5985d24589c06", "support" ], "media/foo.vtt": [ @@ -576368,6 +592663,10 @@ "ceeb48e7982eb88561f4c1630cb0fcf15d9cf73c", "testharness" ], + "mediacapture-image/idlharness.html": [ + "7ccf7fcab0344a2e1893e89d7689e2312287b64d", + "testharness" + ], "mediacapture-record/BlobEvent-constructor.html": [ "29d5649ff97ca0631f8c841425a88248525f9774", "testharness" @@ -576381,11 +592680,11 @@ "testharness" ], "mediacapture-streams/GUM-api.https.html": [ - "6f4e3b2b4fdb287f99935193f273cb21becb9669", + "8df77e469f423b7c7e84ddc6924e01d63b1ffc20", "testharness" ], "mediacapture-streams/GUM-deny.https.html": [ - "58581b53ff1a1edd5144c428145d668b073ef22f", + "ff6cf94acac74d1a650d6c2515b762fa483b110f", "testharness" ], "mediacapture-streams/GUM-empty-option-param.https.html": [ @@ -576408,6 +592707,14 @@ "bfd825c8fb46797d043d57d70689a766fa557bd3", "testharness" ], + "mediacapture-streams/MediaDevices-IDL-all.html": [ + "f1927866a05c7700dc2218e3a45eae1532a4171c", + "testharness" + ], + "mediacapture-streams/MediaDevices-IDL-enumerateDevices.html": [ + "0bebfb5c5a6204257f30d03fb16e4a35b8943814", + "testharness" + ], "mediacapture-streams/MediaDevices-enumerateDevices.https.html": [ "487ce67220fdefbb70d507c86d34711a315521fa", "testharness" @@ -577852,6 +594159,10 @@ "6a0548ef4b906e539d89940aa791a78bba905262", "support" ], + "mixed-content/imageset.https.sub.html": [ + "e2005b813384f38b64baec9bc431e25aa61f417f", + "testharness" + ], "mixed-content/optionally-blockable/http-csp/cross-origin-http/audio-tag/top-level/keep-scheme-redirect/opt-in-blocks.https.html": [ "9219890ab0efa31e4f2db0646e12882da3a5443d", "testharness" @@ -578301,11 +594612,11 @@ "support" ], "navigation-timing/resources/webperftestharness.js": [ - "277312011faf560c6333a0810391e0cf50fdb61d", + "670154a84de50de0c6b310edfeb23a1f3d0d72d1", "support" ], "navigation-timing/test_document_open.html": [ - "13e0ed36e865e06060cfb4cf0d3efc6dfc09d684", + "627ec3a534f3e6ce030a7f5824a67f26f458b091", "testharness" ], "navigation-timing/test_document_readiness_exist.html": [ @@ -578313,71 +594624,75 @@ "testharness" ], "navigation-timing/test_navigate_within_document.html": [ - "c2a4e7340d17ed4dfbe0899e827a96a733997b7d", + "ee8c8581c79be154437e9765885c125d22593b9c", "testharness" ], "navigation-timing/test_navigation_attributes_exist.html": [ - "1dcf7144e6feb00f58fcfdf3c93b6bc65f49ff09", + "a1a9b3ebb814de031920729019d8917ddf906b12", "testharness" ], "navigation-timing/test_navigation_redirectCount_none.html": [ - "5b6f58efd9837f60f47d5ad1a691c8a183b6020b", + "d1308890904883b0a5d684f56b8201f30f8633ff", "testharness" ], "navigation-timing/test_navigation_type_backforward.html": [ - "39bafd06aab6f52e2e61181554cd5d1c0366c6d6", + "5a87b34ea921ef05ee43fe7cc3bdc4d2be56e2fd", "testharness" ], "navigation-timing/test_navigation_type_enums.html": [ - "65927fa5f352377fee57ff4ed86518f36efc4777", + "ca1a454659dd9b0790905ec4ebaa67fee16229c0", "testharness" ], "navigation-timing/test_navigation_type_reload.html": [ - "861072d2026f3fc4e35c7d3caf568eac2c8225a9", + "8b4e1b729a2f97932fe54018c8ea07629fb8ed00", "testharness" ], "navigation-timing/test_no_previous_document.html": [ - "7cf63a018da4a387b7c1f4599f786b6e0cf3211b", + "728aea673231311336585484140f975993198c9b", "testharness" ], "navigation-timing/test_performance_attributes_exist.html": [ - "93bb823553d23292d6f07b24d8d2e99135b5e75f", + "77ce7940ef510aad4545975e717bf5557dbfc948", "testharness" ], "navigation-timing/test_performance_attributes_exist_in_object.html": [ - "f20d7fca8a279f8df8ba221bf229374a387ce29d", + "2ab286b7504e1976d02e6880b758c22fba10ba17", "testharness" ], "navigation-timing/test_readwrite.html": [ - "f210f135fc9eb2040d81b3855eeccf34cfd81a35", + "20507630ddb21872b8eb5f0bca5d62064b8bd0ff", "testharness" ], "navigation-timing/test_timing_attributes_exist.html": [ - "c7d2b16b357482f0da04662d81f0bc1d9ff6696e", + "199aa3389a6a0adf6cb5b18d133c889728cb4411", "testharness" ], "navigation-timing/test_timing_attributes_order.html": [ - "db411d2ac783d49f059d24697fb0bea5e1b382d0", + "7719f088b9ff3bdedb8567ab9eab3f6ca776ecae", "testharness" ], "navigation-timing/test_timing_client_redirect.html": [ - "6d747b5ea0c0f56bbfa4fdbf44924b40fec39b04", + "c6aed0cb03b941e0b8c62a0b086099759b4b25ef", "testharness" ], "navigation-timing/test_timing_reload.html": [ - "8daff711c794f7e4f9d3f4fb4d2ef6df08df8ff9", + "57ba3573d672dbbc60695d049dec39efd5e1feb9", "testharness" ], "navigation-timing/test_timing_server_redirect.html": [ - "199cd011e687ac74b647c7f1fe5214f965d8f85c", + "10b7f221c4667e92a993f0aae70820a95ea445aa", "testharness" ], "navigation-timing/test_timing_xserver_redirect.html": [ - "f0ff9c47a25b6c6a93c6b5e0ffddc3b78444df14", + "a08120e4302c51307fa97de3d521c85c82adb53f", "testharness" ], "navigation-timing/test_unique_performance_objects.html": [ - "c7d89bf7a3119dbfe9a581f82b5ac43ff6645a64", + "b9d933d6a33eabc0b9c9f856c91b802677fa1094", + "testharness" + ], + "netinfo/netinfo-basics.html": [ + "c98cb1ac5580fbd9f378313c5be1eb785585ede3", "testharness" ], "notifications/OWNERS": [ @@ -584668,10 +600983,6 @@ "ce7769f9fa964b7b7a36edcbf09e4b4087588b30", "support" ], - "old-tests/submission/Microsoft/sandbox/iframe_sandbox_009.htm": [ - "a21e51bace7afe7833a0ec6ae5933e07be50d61d", - "support" - ], "old-tests/submission/Microsoft/sandbox/iframe_sandbox_010.htm": [ "ef69e9687003a9119bd031b71b5a2ebb035da1a5", "support" @@ -584768,10 +601079,6 @@ "ec87b739d6b4abdd68b27302fe61d60c7bd06e46", "manual" ], - "old-tests/submission/Microsoft/sandbox/sandbox_009-manual.htm": [ - "f30c0d3027ee25e259b89f61bd8c3757b26f6ccf", - "manual" - ], "old-tests/submission/Microsoft/sandbox/sandbox_010-manual.htm": [ "9f446f802853684f79ea0ad4ae8f87c578751eea", "manual" @@ -586288,6 +602595,14 @@ "6948dbbdc88ffd9aa84ad5a6c822b354809561b2", "manual" ], + "orientation-sensor/OWNERS": [ + "36770a71443523aa2f91f9958ba24066f0b4dcec", + "support" + ], + "orientation-sensor/idlharness.https.html": [ + "049b5e9505165723cec70237e2ae5f0e2c7948f0", + "testharness" + ], "page-visibility/OWNERS": [ "b82f9756b15ef3ea45fb250e304031d9ceaee9c7", "support" @@ -586345,7 +602660,7 @@ "testharness" ], "payment-request/OWNERS": [ - "b494320c405eae71a1bd2d8dec144d61ee450eb5", + "78f6ac38657ede306b767f1156cebd44bebbfb8e", "support" ], "payment-request/allowpaymentrequest/active-document-cross-origin.https.sub.html": [ @@ -586404,10 +602719,58 @@ "29af302db74de64e2bd1352ad92092a309d28c92", "testharness" ], + "payment-request/payment-request-abort-method.https.html": [ + "c9ee5af2ccd5ad364090807c8427f1d4624d3747", + "testharness" + ], + "payment-request/payment-request-canmakepayment-method.https.http": [ + "b20131bc3f2717212f9940920183d650ee111333", + "support" + ], + "payment-request/payment-request-constructor-crash.https.html": [ + "bbf131cd4517d450299cac05560a137c23f47e8f", + "testharness" + ], + "payment-request/payment-request-constructor.https.html": [ + "44d2656f2990c51063254326521a02218a7fc500", + "testharness" + ], + "payment-request/payment-request-id.https.html": [ + "3e74f97fdf39bb1ca9f2cb5596155705cd15b5b0", + "testharness" + ], "payment-request/payment-request-in-iframe.html": [ "26f2715d33e6d00e5ce03d7b07f35db2ac027acf", "testharness" ], + "payment-request/payment-request-onshippingaddresschange-attribute.https.html": [ + "9a16b563d8b5f355b73b84d01f61f910bab7eb18", + "testharness" + ], + "payment-request/payment-request-onshippingoptionchange-attribute.https.html": [ + "439c524e66216aad471ecea680a36430f89d9af9", + "testharness" + ], + "payment-request/payment-request-response-id.html": [ + "88df88efdb1d44b56ac9758295f2e2920ae6c9ff", + "support" + ], + "payment-request/payment-request-show-method.https.html": [ + "518136ad885f95172e578f6e2c165a559c51896b", + "testharness" + ], + "payment-request/payment-request-update-event-constructor.http.html": [ + "6ddbcd3b5847492daf0c2e913369bc861e4d006a", + "testharness" + ], + "payment-request/payment-request-update-event-constructor.https.html": [ + "6b546870fd384a5bf2106d25fd3159a72f8537b2", + "testharness" + ], + "payment-request/payment-request-update-event-updatewith-method.https.html": [ + "d85bca2ccb865c11c550a9d9c1d8770b2c68d6bd", + "testharness" + ], "performance-timeline/OWNERS": [ "b82f9756b15ef3ea45fb250e304031d9ceaee9c7", "support" @@ -586444,6 +602807,10 @@ "78b32c64ddb9e6da80b57fb1f91576dd0f59b13a", "testharness" ], + "performance-timeline/po-observe.html": [ + "0076397128975660e1f66f8d23e6b6945d2a804e", + "testharness" + ], "performance-timeline/po-resource.html": [ "e06354c2fd72bb868f8964cbf9ab393b629a3789", "testharness" @@ -586469,11 +602836,11 @@ "testharness" ], "pointerevents/extension/pointerevent_coalesced_events_attributes-manual.html": [ - "3e8cfad251f604125c570c923b8fbe441f2b5d5b", + "f0393e603c25eb52d5144c95e808f2ab96cbe1f7", "manual" ], "pointerevents/extension/pointerevent_constructor.html": [ - "2af9a0d673339553ddfd30433c569f42b4803c22", + "11d5baa9206313270be6289205b002b623af85db", "testharness" ], "pointerevents/idlharness.html": [ @@ -586569,7 +602936,7 @@ "manual" ], "pointerevents/pointerevent_pointerleave_pen-manual.html": [ - "084c13aa90b9cd0e542f3d8d9897964fa1ea01e0", + "d2490b8525a3343357fa9a6b255310900e5962fc", "manual" ], "pointerevents/pointerevent_pointermove-manual.html": [ @@ -586661,7 +603028,7 @@ "manual" ], "pointerevents/pointerevent_suppress_compat_events_on_drag_mouse-manual.html": [ - "b191ba60977fa384568def97c23d35c204a9ea73", + "074ac2e1e75c974a49f4615924986c7695656094", "manual" ], "pointerevents/pointerevent_touch-action-auto-css_touch-manual.html": [ @@ -586744,6 +603111,10 @@ "0d656f37a7307047b07f59ed340a82d9a33a5b87", "manual" ], + "pointerevents/pointerevent_touch-action-rotated-divs_touch-manual.html": [ + "e34340964c74ac0601911de3ac3b260db6ad620d", + "manual" + ], "pointerevents/pointerevent_touch-action-span-test_touch-manual.html": [ "666e92e9be855d1290e97f1c732e021a98c666de", "manual" @@ -586764,6 +603135,14 @@ "09da177c312d4112bc0177221cccaf787455db7e", "manual" ], + "pointerevents/pointerlock/pointerevent_pointerlock_after_pointercapture-manual.html": [ + "c3f3e1ed9ed8b404e4d6c68b9b518047ed87002f", + "manual" + ], + "pointerevents/pointerlock/pointerevent_pointerlock_supercedes_capture-manual.html": [ + "1968369ffe9917377fe3bb8801f8543aa9c0a9cf", + "manual" + ], "pointerevents/pointerlock/resources/pointerevent_movementxy-iframe.html": [ "829b27c2a0f9281d65f7e2d760c7204781c71660", "support" @@ -586820,6 +603199,10 @@ "6262b231ca8af095dee42c493e77662ee132dc05", "manual" ], + "pointerlock/pointerlock_remove_target_on_mouseup-manual.html": [ + "21bba49e139c491f29d3a04c72601d688dfe5977", + "manual" + ], "pointerlock/pointerlock_shadow-manual.html": [ "9e687345acc5b9966172bab7da04e3e7019e34c5", "manual" @@ -586833,7 +603216,7 @@ "testharness" ], "preload/download-resources.html": [ - "f7e3c1ebfbb2b018dd0e5af4a81b0ab0eecac15c", + "df19c269c7193a5dc86630799afcd16a941f58a5", "testharness" ], "preload/dynamic-adding-preload.html": [ @@ -586861,11 +603244,11 @@ "support" ], "preload/onerror-event.html": [ - "aeb775170f956860edf37d492484531d1cd5aabc", + "8d07912e570ef8ece9ffdc8f6cc8eeae219a3e5c", "testharness" ], "preload/onload-event.html": [ - "a28bdbf41a8e74bee92ef00e77d283d198a77cfc", + "8d190661c002ffe0c6f2fca51454fc2d67a6f465", "testharness" ], "preload/preload-csp.sub.html": [ @@ -586877,7 +603260,11 @@ "testharness" ], "preload/preload-with-type.html": [ - "dbae18f696990e4f5b76ca1324141df8ae190fb8", + "b15b6022d8fd4bdc88e7a54429667eb223bc2464", + "testharness" + ], + "preload/reflected-as-value.html": [ + "835cd55f66486f2a66fd65d201a9184fb276ddab", "testharness" ], "preload/resources/dummy.css": [ @@ -586913,7 +603300,7 @@ "testharness" ], "preload/single-download-preload.html": [ - "e83015080694026c96466863c385e3425982479b", + "3ee15736925ad7eed449ff3074353140598461bd", "testharness" ], "presentation-api/OWNERS": [ @@ -586925,27 +603312,27 @@ "support" ], "presentation-api/controlling-ua/PresentationAvailability_onchange-manual.https.html": [ - "8053c6ff43feb6e76f2b9551770bc1e6a9e05b2e", + "5464608f20125a853ed46e96f86b274aa09e22bc", "manual" ], - "presentation-api/controlling-ua/PresentationConnection_onclosed-manual.html": [ - "adc9e8f82f7ea66a0008665e302429988c586436", + "presentation-api/controlling-ua/PresentationConnection_onclose-manual.https.html": [ + "66712b085fce57ac61fe720876d95da6a76dfa90", "manual" ], - "presentation-api/controlling-ua/PresentationConnection_onconnected-manual.html": [ - "dec89eb25f5967724cd5e5f21069e6feede088a6", + "presentation-api/controlling-ua/PresentationConnection_onconnect-manual.https.html": [ + "34f05d114969f43eecda63ab0b683b1cb7784840", "manual" ], "presentation-api/controlling-ua/PresentationConnection_onmessage-manual.https.html": [ - "724bf7c2c00fab23a86f9a925b430cf4d4a0fe19", + "b4b35bcb01a7399a5e4d4220be01fa1980cd454e", "manual" ], - "presentation-api/controlling-ua/PresentationConnection_onterminated-manual.html": [ - "856d3f3ad3af5f9c68d5b0d325a3b289cf1c6668", + "presentation-api/controlling-ua/PresentationConnection_onterminate-manual.https.html": [ + "450dc0940b414f4150df66dcdbbd69a7f90b3ab5", "manual" ], "presentation-api/controlling-ua/PresentationConnection_send-manual.https.html": [ - "a2c002edf9dcc302390c8695afe1fc04025c32ee", + "4f34387b135ee40a6f8fc363659096409a1eb0bd", "manual" ], "presentation-api/controlling-ua/PresentationRequest_error.https.html": [ @@ -586961,7 +603348,7 @@ "testharness" ], "presentation-api/controlling-ua/PresentationRequest_onconnectionavailable-manual.https.html": [ - "b807b3936cec14007e739de3fc4e5077f67bbd56", + "2f787b190b9135763255ab4cf5b8a8ec9fb0bab1", "manual" ], "presentation-api/controlling-ua/PresentationRequest_sandboxing_error.https.html": [ @@ -586973,19 +603360,23 @@ "testharness" ], "presentation-api/controlling-ua/PresentationRequest_success.https.html": [ - "b8c26ec718a198562154e75cb32eedfd1778cb01", + "74cc007c2472f11bdc08410f870f270e8e4b0f4a", "testharness" ], "presentation-api/controlling-ua/common.js": [ "6b788aa76cb93a0454839209bb84aa25cd38011f", "support" ], + "presentation-api/controlling-ua/defaultRequest.https.html": [ + "a2e430e3413075293534bf62b23ff0c8c5360282", + "testharness" + ], "presentation-api/controlling-ua/defaultRequest_success-manual.https.html": [ "a09556d22f83c79789942bc3cf316459175aede0", "manual" ], "presentation-api/controlling-ua/getAvailability.https.html": [ - "4a857ebc68eb00bde37206a01f7eae43fe5c1e01", + "80884de4235d7e98137a76c90fcc414efc8d1ac6", "testharness" ], "presentation-api/controlling-ua/getAvailability_sandboxing_success.https.html": [ @@ -587005,7 +603396,7 @@ "testharness" ], "presentation-api/controlling-ua/reconnectToPresentation_success-manual.https.html": [ - "c6fac0eba8eccf9697cc46bcc57e312ab4ab8ac2", + "ecede2c96372bc026479cefbb598bea716ac7d6e", "manual" ], "presentation-api/controlling-ua/startNewPresentation_displaynotallowed-manual.https.html": [ @@ -587033,11 +603424,11 @@ "manual" ], "presentation-api/controlling-ua/support/iframe.html": [ - "a827113e644e65e97085658d445a31d0341fa0ef", + "f5a6ce64215fa87768688795dada87c8c42638db", "support" ], "presentation-api/controlling-ua/support/presentation.html": [ - "0cad4d8b7725b287cd30284caab639cf21f6c1de", + "d7af1d52de52f04fd4fc0b0fd1e80c0c43ba2f8f", "support" ], "presentation-api/controlling-ua/support/stash.js": [ @@ -587048,6 +603439,14 @@ "f64f2ab5d0afa93e5adfa327e478936c0e295823", "support" ], + "presentation-api/receiving-ua/PresentationConnectionList_onconnectionavailable-manual.https.html": [ + "ac16b8b189403d4b3c520f69c1675b6acd979e18", + "manual" + ], + "presentation-api/receiving-ua/PresentationConnection_onclose-manual.https.html": [ + "e44406efbfe55bb74ac62d5fae7700102ce8e706", + "manual" + ], "presentation-api/receiving-ua/PresentationConnection_onmessage-manual.https.html": [ "3c98bfaf0bc18436501f724210a1f33d9f273573", "manual" @@ -587056,6 +603455,10 @@ "4c699e42e5f19e0b47145b8ce1f235bc14c7cadf", "manual" ], + "presentation-api/receiving-ua/PresentationConnection_terminate-manual.https.html": [ + "0a3a7c6265cfd941ea2d394907bb577836bcd49b", + "manual" + ], "presentation-api/receiving-ua/PresentationReceiver_create-manual.https.html": [ "1830e4420c668b77dbd835912f518920743c5592", "manual" @@ -587076,14 +603479,26 @@ "0aeff382c23d0ade231af0f478c40c7aeda626f7", "support" ], + "presentation-api/receiving-ua/support/PresentationConnectionList_onconnectionavailable_receiving-ua.html": [ + "9f18b9602f6866fd9b56ca4759a66b8624b05d17", + "support" + ], + "presentation-api/receiving-ua/support/PresentationConnection_onclose_receiving-ua.html": [ + "0e34d34220d548fdbda843b3864bc516fd1fa638", + "support" + ], "presentation-api/receiving-ua/support/PresentationConnection_onmessage_receiving-ua.html": [ - "8dc8d4229c03ccc1575ccc2206f85574bbd79500", + "7d7b0bb899d0ab8415c1705f5bee2ca7a9866561", "support" ], "presentation-api/receiving-ua/support/PresentationConnection_send_receiving-ua.html": [ "0010c0a25797031ec9f2a3f56864329a43c84f34", "support" ], + "presentation-api/receiving-ua/support/PresentationConnection_terminate_receiving-ua.html": [ + "605596c4e21c4b1553fc5d9f26604aa81223ed42", + "support" + ], "presentation-api/receiving-ua/support/PresentationReceiver_create_receiving-ua.html": [ "84f37932fc911d5dbf692b42569b564ebf9b8e7d", "support" @@ -587100,12 +603515,16 @@ "adffe1f696cf03f0041383992ab59e47db0ab8c0", "support" ], + "presentation-api/receiving-ua/support/iframe.html": [ + "d52f10c9971a36350150b39c8d3e800c24c941ac", + "support" + ], "presentation-api/receiving-ua/support/serviceworker.js": [ "6aec0aa7cee4f7a63951a41bec757acc6e486397", "support" ], "presentation-api/receiving-ua/support/stash.js": [ - "abaa736a325dd7e7ce12b092e8ee0162122f584d", + "f7a354462a5159ac11e56d13c5972ddfa5af0a70", "support" ], "presentation-api/receiving-ua/support/stash.py": [ @@ -587165,7 +603584,7 @@ "support" ], "quirks-mode/active-and-hover-manual.html": [ - "391270ae4496c67d098cffc91c5f921e3ef891ee", + "b82c3af04387a133935d1eed50be37fdc34474b2", "manual" ], "quirks-mode/blocks-ignore-line-height.html": [ @@ -594649,11 +611068,11 @@ "testharness" ], "remote-playback/README.md": [ - "f76a7ece018ba65d920c5df4b6e287521254399f", + "ec6bc4453c4f187bd0640195a912a364955f6569", "support" ], "remote-playback/cancel-watch-availability.html": [ - "f74aa07eec9e1e47915a7165518429c78c9af28a", + "bc36ac54697b9c9a6df47b6db6b79922b777582e", "testharness" ], "remote-playback/disable-remote-playback-cancel-watch-availability-throws.html": [ @@ -594668,6 +611087,10 @@ "2779fd2a3bd27a011e8ba20dd6fb214978d8a54c", "testharness" ], + "remote-playback/idlharness.html": [ + "70cfb1603b69e1daff48682cf41e746221158a55", + "testharness" + ], "remote-playback/watch-availability-initial-callback.html": [ "3d220a3cc0e6a05fbc40c0ab0e46a2e60162b2be", "testharness" @@ -594693,9 +611116,45 @@ "testharness" ], "resource-timing/resource-timing.js": [ - "b5c7951856ebacd27c11a0685bb7730f02487fcb", + "9351f640380bd9a71bca28d32d724bd5f6373650", "support" ], + "resource-timing/resource_TAO_match_origin.htm": [ + "32faacb791313be60380fa744608853b24442f42", + "testharness" + ], + "resource-timing/resource_TAO_match_wildcard.htm": [ + "f21fa1fac755e91b21293abfd738a1220cec57c2", + "testharness" + ], + "resource-timing/resource_TAO_multi.htm": [ + "1325e992dd31943fde96038c215a73db1c382ce6", + "testharness" + ], + "resource-timing/resource_TAO_null.htm": [ + "020acb6ea74fec2582c5d3320d91a2f647625f44", + "testharness" + ], + "resource-timing/resource_TAO_origin.htm": [ + "bd7572f9790c69cf76e31c2c1cc7d4c3bd35da4c", + "testharness" + ], + "resource-timing/resource_TAO_origin_uppercase.htm": [ + "83bb18cf7ec915595ad716b2b24e0bb01b7c4047", + "testharness" + ], + "resource-timing/resource_TAO_space.htm": [ + "5e4bf4e71b9b99db494896b1708600224e271fe8", + "testharness" + ], + "resource-timing/resource_TAO_wildcard.htm": [ + "2fbaf85feeb4e621f6e13d67232cc31e221da5d8", + "testharness" + ], + "resource-timing/resource_TAO_zero.htm": [ + "174444cc2f9b8e505bcf35343522f74c792bd997", + "testharness" + ], "resource-timing/resource_cached.htm": [ "819ac54de6901a911a34d63629b9f22be4502f42", "testharness" @@ -594708,6 +611167,10 @@ "1b6e111056101c88623eda6148042c310a5b7a6d", "testharness" ], + "resource-timing/resources/TAOResponse.py": [ + "9e8051a2ff8fff72b36ed1cecb61f9e7bba29071", + "support" + ], "resource-timing/resources/fake_responses.html": [ "c942abc1e8c1672935ffc8ce34821891345bacb9", "support" @@ -594720,6 +611183,42 @@ "dfddf3eb3e80d77163ae12a5df71ed3e9559722a", "support" ], + "resource-timing/resources/iframe_TAO_match_origin.html": [ + "9a3adace2991c7bd1876a904b6c4389633b9828f", + "support" + ], + "resource-timing/resources/iframe_TAO_match_wildcard.html": [ + "243dca266e68cd7a0e42d22a6336026b79849718", + "support" + ], + "resource-timing/resources/iframe_TAO_multi.html": [ + "58394e0163e68665b594d2d73cfccfdf28306e5f", + "support" + ], + "resource-timing/resources/iframe_TAO_null.html": [ + "3a244b286861c68a20ff44c05f7f8590e96cf6d0", + "support" + ], + "resource-timing/resources/iframe_TAO_origin.html": [ + "cf7447fe31cf12d488c432c4c3b93b990949c5ec", + "support" + ], + "resource-timing/resources/iframe_TAO_origin_uppercase.html": [ + "b29b2861966f0a8d0a8827b28885adc48522a324", + "support" + ], + "resource-timing/resources/iframe_TAO_space.html": [ + "80989e08c952b7598a44e73e17f655c0f59ca917", + "support" + ], + "resource-timing/resources/iframe_TAO_wildcard.html": [ + "62e23926dec6ab2bbb1f845582ea488b2619144f", + "support" + ], + "resource-timing/resources/iframe_TAO_zero.html": [ + "9fd73766be85d71a0456cf54dc2407ee74c3d1b8", + "support" + ], "resource-timing/resources/inject_resource_test.html": [ "f53513f6f47fd4a6d4994a4ef7d6e37d1777ea57", "support" @@ -594804,6 +611303,86 @@ "a900654e798241fb52ea214e90d25c272494e058", "support" ], + "scroll-anchoring/README.md": [ + "08b4d5a7a055cacf28b5f2011a22f17e682f320a", + "support" + ], + "scroll-anchoring/abspos-containing-block-outside-scroller.html": [ + "d7a8e9904637c833d897b2e9c0da0a1628455670", + "testharness" + ], + "scroll-anchoring/abspos-contributes-to-static-parent-bounds.html": [ + "22a644ace4ce062795fe22b9adfb8832eae52cdd", + "testharness" + ], + "scroll-anchoring/ancestor-change-heuristic.html": [ + "71fe4701baacc42151795ada988d2de67d863e85", + "testharness" + ], + "scroll-anchoring/anchor-updates-after-explicit-scroll.html": [ + "c2d5fccdb6beaa8944aee84365597cabd325ff89", + "testharness" + ], + "scroll-anchoring/anchoring-with-bounds-clamping-div.html": [ + "07a8a3784fbf105342b66b3702b91471973a475b", + "testharness" + ], + "scroll-anchoring/anchoring-with-bounds-clamping.html": [ + "f317bd3dfd5c0e2e8311a805e0eb036506b19fa4", + "testharness" + ], + "scroll-anchoring/anonymous-block-box.html": [ + "5a2a5de699a8dd46c2c0de5cc93a9cfa1242c3b7", + "testharness" + ], + "scroll-anchoring/basic.html": [ + "c185fc1ceb75bb2ee74db77850f7e0e4434a9485", + "testharness" + ], + "scroll-anchoring/clipped-scrollers-skipped.html": [ + "6cb749057f4db48c69a915e28efff9cd257574a2", + "testharness" + ], + "scroll-anchoring/descend-into-container-with-float.html": [ + "3f576c8cfdad4de96244d2939e9d4685369ebe52", + "testharness" + ], + "scroll-anchoring/descend-into-container-with-overflow.html": [ + "29549296be64ffbffb88ed3465de975936fadc25", + "testharness" + ], + "scroll-anchoring/exclude-fixed-position.html": [ + "b1d73a505f0e6c94ef4f66f0c0057413be45ffb8", + "testharness" + ], + "scroll-anchoring/inline-block.html": [ + "c22dd1ba4df2e04cc93dc32234b48224cffe6c0a", + "testharness" + ], + "scroll-anchoring/negative-layout-overflow.html": [ + "2682ff6a640c4b45a8a9195a17c5ff8dc3c90228", + "testharness" + ], + "scroll-anchoring/opt-out.html": [ + "1064eb745186a2558dfa53c258dca8e685a496a1", + "testharness" + ], + "scroll-anchoring/position-change-heuristic.html": [ + "c88ed793fa9253fb53118df5f2d10836b1f60b48", + "testharness" + ], + "scroll-anchoring/start-edge-in-block-layout-direction.html": [ + "0eb274f0e5d9bcb9ba2bb80cb65e5d3e663a3235", + "testharness" + ], + "scroll-anchoring/subtree-exclusion.html": [ + "dbfd02f30f8dc2750d697756e3c5f95bc1937c8a", + "testharness" + ], + "scroll-anchoring/wrapped-text.html": [ + "de66dba5bce15b7403e9e582d982d4e3e4aed552", + "testharness" + ], "secure-contexts/basic-dedicated-worker.html": [ "075f4170b133fe13e282ff5450871ef7960faf50", "testharness" @@ -594821,7 +611400,7 @@ "testharness" ], "secure-contexts/basic-popup-and-iframe-tests.https.js": [ - "69573c7565eacce1d1069f8ae116615340d404c2", + "26c7c307334b8a0e10265cf6fe3664d84cdd72cc", "support" ], "secure-contexts/basic-shared-worker.html": [ @@ -594953,15 +611532,23 @@ "support" ], "selection/collapse-00.html": [ - "6c06617a84c3d4e5f121e4ccf8f7761ba1be1ceb", + "5254f4f69e12405381b474cbdd16725a5f7df599", + "testharness" + ], + "selection/collapse-15.html": [ + "abb690493dd6526a12587cecf43eafb59dc357fd", "testharness" ], "selection/collapse-30.html": [ - "943e7d8960212bc5d5eadb45ff641b9d9525a44a", + "042baecceea3be9b1b828e98e7738a454bf3f8f2", + "testharness" + ], + "selection/collapse-45.html": [ + "a66ab339d964529b3ba8a9af48eb26a4b9b55028", "testharness" ], "selection/collapse.js": [ - "4cd755764b43e348b2dcf23d1c800953ee28f059", + "fdeaf514b240bdeadd89829e3321465d3e376926", "support" ], "selection/collapseToStartEnd.html": [ @@ -595005,7 +611592,7 @@ "testharness" ], "selection/interfaces.html": [ - "dc08fae99f9b481a63ed5f78aa8b32eeaba28b35", + "55d32a5d2a362a2d7bd0ddc580fa24180f3d3579", "testharness" ], "selection/isCollapsed.html": [ @@ -595013,11 +611600,11 @@ "testharness" ], "selection/removeAllRanges.html": [ - "23385a72a586db288b282eb251f9384048532666", + "bd203d8878c4de59de476fe6fa7417bd2678dfcc", "testharness" ], "selection/removeRange.html": [ - "c67aebaddeb575fe92b7339f0c2e67209faf468a", + "4a1ca00b32bca658f31bbff3f01a0d9154fb9779", "testharness" ], "selection/selectAllChildren.html": [ @@ -595032,14 +611619,10 @@ "3803c785b4a2fe2bbf9ecb895e6d3e1ae9e40164", "support" ], - "selectors-api/tests/submissions/Opera/ParentNode-query-queryAll.html": [ - "abb13a7744101652436171cf8b62b0722ec71b65", + "selection/type.html": [ + "01ae6e757d428800555012783e290ebba575bcab", "testharness" ], - "selectors-api/tests/submissions/Opera/ParentNode-query-queryAll.js": [ - "a7e8a78780937ab0b83081bba9914aefd931a355", - "support" - ], "selectors/attribute-selectors/attribute-case/cssom.html": [ "a7d352c93c9727bbdae2d44df7ea84baabf16252", "testharness" @@ -595072,6 +611655,30 @@ "cdf340dd83ea3a32d0d7edc31b5ded294585ef83", "testharness" ], + "server-timing/resources/blue.png": [ + "7de5cdb5ad04ac365430b3b5f5ba01d2ba57ea23", + "support" + ], + "server-timing/resources/blue.png.sub.headers": [ + "d14ff7ce6dce67417c14192a89f4fe2d31c099a7", + "support" + ], + "server-timing/resources/green.png": [ + "ef91d21307a12b2cfaf33a90dffe16aa1cba42c9", + "support" + ], + "server-timing/resources/green.png.sub.headers": [ + "e2fca01ea5a9c31731a1d5c4199849bf728da892", + "support" + ], + "server-timing/test_server_timing.html": [ + "eab2a2be6984346d7fd83c8f3dcc99b2f3e09a08", + "testharness" + ], + "server-timing/test_server_timing.html.sub.headers": [ + "c49030e9c6dabb55bff24b633b6660212bd2ecca", + "support" + ], "service-workers/OWNERS": [ "b74dce201157af7f50d382583674e1b979237f9b", "support" @@ -595409,11 +612016,11 @@ "testharness" ], "service-workers/service-worker/client-navigate.https.html": [ - "e0c704605ec008a29662e1804d512284899ddd6f", + "c0403a4538bf063745a59f5848e30b13d1b3afc1", "testharness" ], "service-workers/service-worker/clients-get-client-types.https.html": [ - "e86b86beb47802f4204510c44edc1465cab5d5f2", + "ea824a137a9be8a5e90088caee0f59432cc6f3b9", "testharness" ], "service-workers/service-worker/clients-get-cross-origin.https.html": [ @@ -595421,19 +612028,19 @@ "testharness" ], "service-workers/service-worker/clients-get.https.html": [ - "3627915a40ca2903f979560209f9a169a41429e2", + "4c57e2bb33b3783413b0545f11d164f73f14f64b", "testharness" ], "service-workers/service-worker/clients-matchall-client-types.https.html": [ - "02003bd248ffb0d54238339179105836ac7c4e14", + "3219697b2d6fb9694ad4db1e2d157807b5e5dbcb", "testharness" ], "service-workers/service-worker/clients-matchall-exact-controller.https.html": [ - "231ce3ee744eeb670e00ee3a670ba361d5ca0707", + "957231b3f09c78b7a0597ca53d734c07f3374205", "testharness" ], "service-workers/service-worker/clients-matchall-include-uncontrolled.https.html": [ - "a4f4cb575ffea826c642aa3de424c0a0f986fdd0", + "e5b1c29ebb5a3ca9c27c17e9bc4cb3c0d70cfed9", "testharness" ], "service-workers/service-worker/clients-matchall-on-evaluation.https.html": [ @@ -595445,7 +612052,7 @@ "testharness" ], "service-workers/service-worker/clients-matchall.https.html": [ - "ac873d343a0c9d0af058f84d7e8db2809825c64c", + "17d76ba9e5a93d8e13c99773c673911786c8abf3", "testharness" ], "service-workers/service-worker/controller-on-disconnect.https.html": [ @@ -595461,7 +612068,7 @@ "testharness" ], "service-workers/service-worker/extendable-event-async-waituntil.https.html": [ - "fe5c4595f528af34d83a64bae1fe94a14483cde5", + "d69e6d84a24ec77077cd1264c2946c578d379fd5", "testharness" ], "service-workers/service-worker/extendable-event-waituntil.https.html": [ @@ -595481,7 +612088,7 @@ "testharness" ], "service-workers/service-worker/fetch-csp.https.html": [ - "97fff975592937acda3e8f363685dc9a835c12be", + "acf1f933e5c399812c767b0ee0fc4aa9fbd08bab", "testharness" ], "service-workers/service-worker/fetch-event-after-navigation-within-page.https.html": [ @@ -595489,19 +612096,31 @@ "testharness" ], "service-workers/service-worker/fetch-event-async-respond-with.https.html": [ - "6ea721f98b2d145eeeb07b762901b9cfa1b51fbd", + "00c90429203c85ae8f10a6a6604cdf9619524f06", "testharness" ], "service-workers/service-worker/fetch-event-network-error.https.html": [ - "ee1cd2ed2c3204af53422116289c558f5eff68d9", + "07b81a0af207ee0723a9abae90e49482701f8935", "testharness" ], "service-workers/service-worker/fetch-event-redirect.https.html": [ "2a6f2d4f818ac325edd9c69c1b08801961728b20", "testharness" ], + "service-workers/service-worker/fetch-event-respond-with-argument.https.html": [ + "ce7e7cf76aace24a92d455cdb6b54fc9048960e8", + "testharness" + ], + "service-workers/service-worker/fetch-event-respond-with-readable-stream.https.html": [ + "cf31c2b1cba37a016dc9e9a3ddb2429a5d518052", + "testharness" + ], + "service-workers/service-worker/fetch-event-respond-with-response-body-with-invalid-chunk.https.html": [ + "b488946d3d00fdcc17249b6b2270537be8bcfa59", + "testharness" + ], "service-workers/service-worker/fetch-event-respond-with-stops-propagation.https.html": [ - "2feaa5022ee31fb980f97075d932b0d87d6efe75", + "7d9e18d316c74f2b887f01a4576eb14b10d99b14", "testharness" ], "service-workers/service-worker/fetch-event-throws-after-respond-with.https.html": [ @@ -595517,7 +612136,7 @@ "testharness" ], "service-workers/service-worker/fetch-event.https.html": [ - "fb2b3ea20415d9148cfda983ac785f0de16e6889", + "9f991210c315a2d436f760b099a43871692c64c4", "testharness" ], "service-workers/service-worker/fetch-frame-resource.https.html": [ @@ -595529,23 +612148,31 @@ "testharness" ], "service-workers/service-worker/fetch-mixed-content-to-inscope.https.html": [ - "e3035bdf8cec65bb0322b5dfce10a3a827bd415e", + "c9bc425bca04f96866b14a2d89ae9dbfcc900d5a", "testharness" ], "service-workers/service-worker/fetch-mixed-content-to-outscope.https.html": [ - "45a83eeeb922301fc399a4808bb4d1014a541733", + "e48ab49326706532a754268211586f7a29f71ddb", "testharness" ], "service-workers/service-worker/fetch-request-css-base-url.https.html": [ "01a5220ff2abe5735d7b03c2ee3ccbe21c9a260e", "testharness" ], + "service-workers/service-worker/fetch-request-css-cross-origin-mime-check.https.html": [ + "d41f17b4a7ea596ba38a91cfbd910aa6be43e70f", + "testharness" + ], "service-workers/service-worker/fetch-request-css-images.https.html": [ "ca776bff1f106f9a1e2dfe4d25ff3618d99758b7", "testharness" ], "service-workers/service-worker/fetch-request-fallback.https.html": [ - "60dcb3a4c3b3ca2e79adfc7b779724cbe3ffa1c4", + "31a150bf8504f0607ac77a617ca8094336d1f31b", + "testharness" + ], + "service-workers/service-worker/fetch-request-html-imports.https.html": [ + "b854db3540539d20aa0bef0f869edabd0b8b4d47", "testharness" ], "service-workers/service-worker/fetch-request-no-freshness-headers.https.html": [ @@ -595557,15 +612184,23 @@ "testharness" ], "service-workers/service-worker/fetch-request-resources.https.html": [ - "5ae2d1ae4eec846002635d6ff8d9d7c9a2aebd3f", + "cb072581704868845fe1ec57b3e7c70d53bac543", + "testharness" + ], + "service-workers/service-worker/fetch-request-xhr-sync.https.html": [ + "4aaa0b1995643f4e18c47d1947476a1a67fe997d", "testharness" ], "service-workers/service-worker/fetch-request-xhr.https.html": [ - "840aafe30e5a0c8129c05e3b311084b8c00267a6", + "088581ef6036d3cc8688d5974461d8e5b8ed1cfd", + "testharness" + ], + "service-workers/service-worker/fetch-response-taint.https.html": [ + "217383b4dddcc6f984c4cc7cd5f99e1f9b86cdd1", "testharness" ], "service-workers/service-worker/fetch-response-xhr.https.html": [ - "6d50c69d78a1eb077108209b94fdf0efe540883d", + "6b68ad7251c3daef1cd2bde8660f01c3e47b711f", "testharness" ], "service-workers/service-worker/fetch-waits-for-activate.https.html": [ @@ -595593,11 +612228,27 @@ "testharness" ], "service-workers/service-worker/getregistrations.https.html": [ - "d76c66c08bd5c1addbdb149447f2268ac52ffcb2", + "15c2be991ec5b02a0aecf54e6c7bb455f240141d", + "testharness" + ], + "service-workers/service-worker/http-to-https-redirect-and-register.https.html": [ + "95aee5b0d561467fb5da27f62210be9808539706", + "testharness" + ], + "service-workers/service-worker/iframe-sandbox-register-link-element.https.html": [ + "6cafc3245c88f7d96f6a4672b327d3b58ee4a0ee", + "testharness" + ], + "service-workers/service-worker/import-scripts-resource-map.https.html": [ + "6bc46467c667f942fd30de063806474e8c94cff0", + "testharness" + ], + "service-workers/service-worker/import-scripts-updated-flag.https.html": [ + "e902940bec870cf548c576b5fd06d2e71fd3f97a", "testharness" ], "service-workers/service-worker/indexeddb.https.html": [ - "6b25a37ebe79c60e3645a1006e61f1f2c272ce86", + "2211cdead473877e238cc13ed0ccfa8269bfc7cc", "testharness" ], "service-workers/service-worker/install-event-type.https.html": [ @@ -595609,15 +612260,19 @@ "testharness" ], "service-workers/service-worker/interfaces.https.html": [ - "9153cc6536203170ba8d2189d7646200a1ded72e", + "f5e18c249ad8264548923f3c875ffeff523ab424", "testharness" ], "service-workers/service-worker/invalid-blobtype.https.html": [ - "ca29ab7c214d2fa4973cf7be633a7fb8507ae897", + "e2867d9813601fffbe2f8ea3827430015e0c4444", "testharness" ], "service-workers/service-worker/invalid-header.https.html": [ - "393c3b3c393b58e74f82affecdd06c4e7be1787a", + "5cc3f2c872435df9c735390426a6cf8b4b788fb0", + "testharness" + ], + "service-workers/service-worker/iso-latin1-header.https.html": [ + "3c75caa66d3906602d10b07ff22e7d0f210cfee9", "testharness" ], "service-workers/service-worker/multi-globals/current/current.https.html": [ @@ -595653,7 +612308,7 @@ "testharness" ], "service-workers/service-worker/multiple-register.https.html": [ - "3c4ec4fc7c72408211ff954b5a54ede3e5b0c656", + "88dd84637f82e942e5efe6caafb99a18df602353", "testharness" ], "service-workers/service-worker/multiple-update.https.html": [ @@ -595688,6 +612343,10 @@ "fd50f2fd601e136d12fe815e6c1b8d5803663449", "testharness" ], + "service-workers/service-worker/navigation-preload/resource-timing.https.html": [ + "837273105d7a1521feff32338cdef7185a6786e3", + "testharness" + ], "service-workers/service-worker/navigation-preload/resources/broken-chunked-encoding-scope.asis": [ "d1fd50a8f194803dcc0c0f6d74bdc57197c3d6e5", "support" @@ -595740,22 +612399,42 @@ "0c02f9eb1f83a96f16d1d0f82669c78cc26e662d", "support" ], + "service-workers/service-worker/navigation-preload/resources/resource-timing-scope.py": [ + "817076c96f471bbdd8795478c70c7141cb1a5d24", + "support" + ], + "service-workers/service-worker/navigation-preload/resources/resource-timing-worker.js": [ + "8eb75e9bb7e3aaec818427b5f101a5d2353e65bf", + "support" + ], "service-workers/service-worker/navigation-preload/resources/wait-for-activate-worker.js": [ "a6ac7ce51f0c0ea47f2d9bbeb44d8db7d3f7864f", "support" ], + "service-workers/service-worker/navigation-redirect-body.https.html": [ + "72e4fc91dac6bdd42437b5034d1692a208a90de9", + "testharness" + ], + "service-workers/service-worker/navigation-redirect-to-http.https.html": [ + "12f109101a7d6fcb52ab070077297443fa7ab3eb", + "testharness" + ], "service-workers/service-worker/navigation-redirect.https.html": [ - "7d9f8501624e1832170d427657d6dbf19253c989", + "81d70e830ca8c522aedc152979f387ec1d6618bd", "testharness" ], "service-workers/service-worker/onactivate-script-error.https.html": [ - "7c397361b27e4c4d90a84d92b16593ac40d443a9", + "bfef14af67c3a21523b5a7283d7cf86ac288f081", "testharness" ], "service-workers/service-worker/oninstall-script-error.https.html": [ "0497bf37f0e3b55a6a4745cae2ec700b6f963fd3", "testharness" ], + "service-workers/service-worker/opaque-response-preloaded.https.html": [ + "4441c255d614ef6d898873f81aa9e5090fbf2875", + "testharness" + ], "service-workers/service-worker/performance-timeline.https.html": [ "23d9e3dc830b83370875387cd5d6e1d5e913452f", "testharness" @@ -595769,25 +612448,33 @@ "testharness" ], "service-workers/service-worker/postmessage-msgport-to-client.https.html": [ - "21ae7fb96321dc75e7063c27b7e6838e6b9ff6c6", + "a7d5f02a569179c9c9308ffab5aa6ea545d965f4", "testharness" ], "service-workers/service-worker/postmessage-to-client.https.html": [ - "4f91d302091df45ca72567c2cedc1584ad9045a9", + "4db5bfbf0f1afcace2a4ea79451c2ff5fc09ab3c", "testharness" ], "service-workers/service-worker/postmessage.https.html": [ - "5f713ca30ab26d1ee7f3e763911aeb41fcb660bb", + "ea380417fcad1583f764473c554bf519e5beecde", "testharness" ], "service-workers/service-worker/ready.https.html": [ - "77199b966f0ef2d05fddaf33b975cc3e7c593546", + "ff14496607e396281d28fb9a8bfdcbb46b8a7e9c", + "testharness" + ], + "service-workers/service-worker/redirected-response.https.html": [ + "38b406b1d9fd32296a72b264e2d7ccb0effed619", "testharness" ], "service-workers/service-worker/referer.https.html": [ "a9e4073192f5b69984624ad7376ec7787101dfea", "testharness" ], + "service-workers/service-worker/referrer-policy-header.https.html": [ + "eef44dace34ca278172d59a609ab4193c3c5af28", + "testharness" + ], "service-workers/service-worker/register-closed-window.https.html": [ "2e24c6664881449ab67f04b860a701c8b8ef93c1", "testharness" @@ -595796,6 +612483,10 @@ "864f5435fc40124dbe2c1ffb0e1942fee58228d2", "testharness" ], + "service-workers/service-worker/register-foreign-fetch-errors.https.html": [ + "785f0ea662160a5b7b3fe6a7580e62f793e100cf", + "testharness" + ], "service-workers/service-worker/register-link-element.https.html": [ "fcd2a244ad1f12c954c231c479f89beaa3c145e6", "testharness" @@ -595805,7 +612496,7 @@ "testharness" ], "service-workers/service-worker/register-same-scope-different-script-url.https.html": [ - "7c32948fe5ff738a38b08ff2d2497ddb63f0a8ef", + "2d337b2252fc4235830de53fcb3dc280d3aca82c", "testharness" ], "service-workers/service-worker/register-wait-forever-in-install-worker.https.html": [ @@ -595825,11 +612516,7 @@ "testharness" ], "service-workers/service-worker/registration-service-worker-attributes.https.html": [ - "7c49ce1c6170733033add6253a3f4a7e0483452e", - "testharness" - ], - "service-workers/service-worker/registration-useCache.https.html": [ - "73d662eafa93ca3dee4a4e5d34623cf069c2b8f8", + "04a6fd8d3ff62fa4d969b629eb5f541c6447ae12", "testharness" ], "service-workers/service-worker/registration.https.html": [ @@ -595840,12 +612527,16 @@ "785a18ac3c8001034f583a8e97195aa47093bd0d", "testharness" ], + "service-workers/service-worker/request-body-blob.https.html": [ + "14dcf42e1dbfdc7589f9df64e2622cc599411174", + "testharness" + ], "service-workers/service-worker/request-end-to-end.https.html": [ - "0f7bee59205515c72ae6d4aa1f408e8414f9659a", + "ee9f8140b492daf89cb715643ee40557f6ed904e", "testharness" ], "service-workers/service-worker/resource-timing.https.html": [ - "587060940cb25ff8072fa83cb41d538a73320ca6", + "403b3a0183ece928ecd93570067c9eac078aa901", "testharness" ], "service-workers/service-worker/resources/404.py": [ @@ -595889,21 +612580,29 @@ "support" ], "service-workers/service-worker/resources/client-navigate-worker.js": [ - "6b277e1dcde40babec32046f9e637a47830bf29b", + "876f60f8c7112cc0a7a2df2fe2b298a3c9504214", "support" ], "service-workers/service-worker/resources/client-navigated-frame.html": [ "efb9dd2b3468305396a3767fc780d07525bd8e61", "support" ], + "service-workers/service-worker/resources/clients-get-client-types-frame-worker.js": [ + "27000afd7982f0e421e2a556fd887de31d3af07b", + "support" + ], "service-workers/service-worker/resources/clients-get-client-types-frame.html": [ - "b41374d117b96fd2a702b7de3b6df08365032c95", + "5dc7405c19c4aa282204c0db891224d7d27b2978", "support" ], "service-workers/service-worker/resources/clients-get-client-types-shared-worker.js": [ "801473dd69333f8081201ed0f3d7f53cca30753b", "support" ], + "service-workers/service-worker/resources/clients-get-client-types-worker.js": [ + "27000afd7982f0e421e2a556fd887de31d3af07b", + "support" + ], "service-workers/service-worker/resources/clients-get-cross-origin-frame.html": [ "a883adc270b47c6a104d10fd7dd9e6bc32c31315", "support" @@ -595917,7 +612616,11 @@ "support" ], "service-workers/service-worker/resources/clients-get-worker.js": [ - "7b9493735cdb2d06bab7331d1840c34631e04e32", + "a48201939523eb5eb0357a8354f7770f44b941a0", + "support" + ], + "service-workers/service-worker/resources/clients-matchall-client-types-dedicated-worker.js": [ + "7a7b2bf8e609cdedd007baf4cdfba936c7d295c7", "support" ], "service-workers/service-worker/resources/clients-matchall-client-types-iframe.html": [ @@ -595985,7 +612688,7 @@ "support" ], "service-workers/service-worker/resources/extendable-event-async-waituntil.js": [ - "0383a4bcd4a4d0e4abd129262dc5b5fe329a3f26", + "6974e3550cb50b5789c10681abf0a1174bc1a3b8", "support" ], "service-workers/service-worker/resources/extendable-event-waituntil.js": [ @@ -595997,7 +612700,7 @@ "support" ], "service-workers/service-worker/resources/fetch-access-control-login.html": [ - "7603f015f115df4bc04e6c1b10d0d0b0abcd3f2d", + "c24c328c218060b8ee3a3d35abace8b2a498ef6f", "support" ], "service-workers/service-worker/resources/fetch-access-control.py": [ @@ -596009,11 +612712,11 @@ "support" ], "service-workers/service-worker/resources/fetch-cors-xhr-iframe.html": [ - "bbed4c0dcae12d91bcda4241103e674a6ffc73b1", + "604a64021a30d3cb9ecef7c3d8d6ec14bc75f5e8", "support" ], "service-workers/service-worker/resources/fetch-csp-iframe.html": [ - "0c82ccc773dc644bac0cef39faadcb3280c0c6f4", + "2c5420e191b2b891233d0c99624f022c1bb936fa", "support" ], "service-workers/service-worker/resources/fetch-csp-iframe.html.sub.headers": [ @@ -596040,12 +612743,36 @@ "f24007259baeab7e9a6932d35e0b2a5305b159a4", "support" ], + "service-workers/service-worker/resources/fetch-event-respond-with-argument-iframe.html": [ + "4a9d7e189909b5adfdd4d1c0ebddb7cd90fde159", + "support" + ], + "service-workers/service-worker/resources/fetch-event-respond-with-argument-worker.js": [ + "b58b92a145a89f71c414de5e837c1db026beb1d6", + "support" + ], + "service-workers/service-worker/resources/fetch-event-respond-with-readable-stream-iframe.html": [ + "16fe2d0f84bb7898f7a89182e24001b3bc64775e", + "support" + ], + "service-workers/service-worker/resources/fetch-event-respond-with-readable-stream-worker.js": [ + "7f120661c9b24647f33dc41c36610ad3a1afef6a", + "support" + ], + "service-workers/service-worker/resources/fetch-event-respond-with-response-body-with-invalid-chunk-iframe.html": [ + "a82860dd4b5e0e2edaeab79c445854c5d8264f01", + "support" + ], + "service-workers/service-worker/resources/fetch-event-respond-with-response-body-with-invalid-chunk-worker.js": [ + "085ecdbb182a461d42f10444e82bfbb1de3728be", + "support" + ], "service-workers/service-worker/resources/fetch-event-respond-with-stops-propagation-worker.js": [ "900fd1c2080fbb386589f7d6ee52c49da9d4fcb8", "support" ], "service-workers/service-worker/resources/fetch-event-test-worker.js": [ - "ca79da139169762737411cb6cffb66b55b901d04", + "f9eab9a493f43ec5a8a662815a979e70fb3e3900", "support" ], "service-workers/service-worker/resources/fetch-event-within-sw-worker.js": [ @@ -596080,14 +612807,46 @@ "30e4285e144a5c9caa0dd48224cefc4b41973de1", "support" ], + "service-workers/service-worker/resources/fetch-request-css-cross-origin-mime-check-cross.css": [ + "15954c87c81ad9bd3119b7b6113fbaba051414e8", + "support" + ], + "service-workers/service-worker/resources/fetch-request-css-cross-origin-mime-check-cross.html": [ + "0ca54820eb0e80acc5d1a04175e669ba17116ddd", + "support" + ], + "service-workers/service-worker/resources/fetch-request-css-cross-origin-mime-check-iframe.html": [ + "77fdb8a4bf48160dacb9b463fa075a91b1d34b10", + "support" + ], + "service-workers/service-worker/resources/fetch-request-css-cross-origin-mime-check-same.css": [ + "d16e353df273b206663d706c7f22d388db9ec238", + "support" + ], + "service-workers/service-worker/resources/fetch-request-css-cross-origin-mime-check-same.html": [ + "9770895a8ca9897a13b5f116e12b2b47dd59f009", + "support" + ], + "service-workers/service-worker/resources/fetch-request-css-cross-origin-mime-check-worker.js": [ + "5bdb78b2d188d06eea4a0243d7cf35c5542d868f", + "support" + ], "service-workers/service-worker/resources/fetch-request-fallback-iframe.html": [ - "a1202e192e51d625cc06c0f7a7e0a27efadc1f2d", + "deb9dc758d0c481f20f585b92014f6530ef6f425", "support" ], "service-workers/service-worker/resources/fetch-request-fallback-worker.js": [ "5195f7d76f6c77bd167c9192a0386c2f8b7863c1", "support" ], + "service-workers/service-worker/resources/fetch-request-html-imports-iframe.html": [ + "5828ad5fc04c9116419afe0ed02383b70b61c956", + "support" + ], + "service-workers/service-worker/resources/fetch-request-html-imports-worker.js": [ + "bb18b72ad06bf2ee179883e1e5df6cc8a9329d36", + "support" + ], "service-workers/service-worker/resources/fetch-request-no-freshness-headers-iframe.html": [ "6da48549aa02c25ffed99c9bdf3549e109f62e60", "support" @@ -596101,29 +612860,49 @@ "support" ], "service-workers/service-worker/resources/fetch-request-resources-iframe.https.html": [ - "0023475ba862c10277efb63a18275a79facdd9c2", + "95bcbc6a2f4560788f77fa717fa06d7d018d99c6", "support" ], "service-workers/service-worker/resources/fetch-request-resources-worker.js": [ - "db66bb2ec1cb1b70e1dddc50748ff134e623e401", + "4512140fe37ffd78086f54c6b0f6213675c0d74f", "support" ], "service-workers/service-worker/resources/fetch-request-xhr-iframe.https.html": [ - "e28b416c027c2ed1a633c0804ef826cad99509ff", + "3e514258608705763ee932821bee89696be1d2e9", + "support" + ], + "service-workers/service-worker/resources/fetch-request-xhr-sync-iframe.html": [ + "a168a0326207e734f0229d49cce12af9a37e81ec", + "support" + ], + "service-workers/service-worker/resources/fetch-request-xhr-sync-worker.js": [ + "fe1386a87464c16d62e23eb102b25891960e7209", "support" ], "service-workers/service-worker/resources/fetch-request-xhr-worker.js": [ "fcbb50668ec1a3f7bdbd4331babda5b6e0295f2e", "support" ], + "service-workers/service-worker/resources/fetch-response-taint-iframe.html": [ + "ce934e0f8f0a77ce236053f17c57f22bc44e4c27", + "support" + ], "service-workers/service-worker/resources/fetch-response-xhr-iframe.https.html": [ - "8bef6d586f438fa912c7e40ac82a5aa73e05706a", + "5b29c0807de1229631a27ad3c9d66f288631938a", "support" ], "service-workers/service-worker/resources/fetch-response-xhr-worker.js": [ "f94ad37a6f751b96a95c325b0787c1f0c28d2418", "support" ], + "service-workers/service-worker/resources/fetch-rewrite-worker-referrer-policy.js": [ + "fe56d7e1920c1da3d01101269c8c686cf034d4f4", + "support" + ], + "service-workers/service-worker/resources/fetch-rewrite-worker-referrer-policy.js.headers": [ + "0c0502e4e95eed858109d55995720689dacfdf3b", + "support" + ], "service-workers/service-worker/resources/fetch-rewrite-worker.js": [ "e390cdc4fa2324db03069193e2b049dde82fbc2d", "support" @@ -596164,16 +612943,40 @@ "c5f88c11333ff1faba5d57812a36553d174ab711", "support" ], + "service-workers/service-worker/resources/http-to-https-redirect-and-register-iframe.html": [ + "b1a69bedbfbcb8f5b38d35f637f75f167d80118a", + "support" + ], + "service-workers/service-worker/resources/iframe-register-link-element.html": [ + "9ea5eb8893ae3d75c18566f5862c66df6bc831c0", + "support" + ], "service-workers/service-worker/resources/import-mime-type-worker.py": [ "7881cd81f7fe54bf3be799f3549098c78b896574", "support" ], + "service-workers/service-worker/resources/import-scripts-echo.py": [ + "95d29c9b8749cabf795d9a867e260827a8360640", + "support" + ], + "service-workers/service-worker/resources/import-scripts-resource-map-worker.js": [ + "bafc81b044c2a52f4ceefcd15a0b8b3c7553146e", + "support" + ], + "service-workers/service-worker/resources/import-scripts-updated-flag-worker.js": [ + "b83d48b7ed268293b4788e36bcd7293b1b15e751", + "support" + ], + "service-workers/service-worker/resources/import-scripts-version.py": [ + "1f508292f99f22a8b4105658ebdb9568d46d2004", + "support" + ], "service-workers/service-worker/resources/indexeddb-worker.js": [ - "ed0ff45423ba74ad0b82e46debd865fdae2fbcb6", + "444b05736f532dc37ba3887cd02cf75d40f1706e", "support" ], "service-workers/service-worker/resources/install-event-type-worker.js": [ - "b6949fcd3d82a99595356448fce6ac830366200e", + "fd486a19472f142bbd2909929a67ac3d39adc845", "support" ], "service-workers/service-worker/resources/install-worker-helper.html": [ @@ -596181,7 +612984,7 @@ "support" ], "service-workers/service-worker/resources/interfaces-worker.sub.js": [ - "67190b30c485fe743de1515fe5c593aad584fcb3", + "393be6f93713e198afc5d2b7e6d229a39d591426", "support" ], "service-workers/service-worker/resources/interfaces.js": [ @@ -596189,7 +612992,7 @@ "support" ], "service-workers/service-worker/resources/invalid-blobtype-iframe.https.html": [ - "288f0edf60fe60a22ea4436528572053def5ab3f", + "b491adf190bf4d891dfc613c10e3a05b8852969d", "support" ], "service-workers/service-worker/resources/invalid-blobtype-worker.js": [ @@ -596205,13 +613008,21 @@ "support" ], "service-workers/service-worker/resources/invalid-header-iframe.https.html": [ - "fe4d734647044a68a35dbd0c0b9bdeb4f671c0b2", + "0ebcb0b918feb0f3cf9ab64fc29534c5a1718408", "support" ], "service-workers/service-worker/resources/invalid-header-worker.js": [ "eaa7fd4f6d2d92af8c27895fc9060296804ece21", "support" ], + "service-workers/service-worker/resources/iso-latin1-header-iframe.html": [ + "53c0981b7ccf2844863fca2946023b60d23aab68", + "support" + ], + "service-workers/service-worker/resources/iso-latin1-header-worker.js": [ + "3af11938ec23e1989785be2da453922686e5ace1", + "support" + ], "service-workers/service-worker/resources/link-header.py": [ "5717930bd579b9a63f1b3619195d65b46aa044cf", "support" @@ -596240,20 +613051,36 @@ "4d3b80c17efd78bda66333ba01ffde1b8f6e976b", "support" ], + "service-workers/service-worker/resources/navigation-redirect-body-worker.js": [ + "8c87066cb7a5b412d69f02384b95044bc39e22a4", + "support" + ], + "service-workers/service-worker/resources/navigation-redirect-body.py": [ + "2490c7c113985c30666bdd9fa69380e5f24561e9", + "support" + ], "service-workers/service-worker/resources/navigation-redirect-other-origin.html": [ "8c51024d8e369bc5ae21e94c486c59690df2de3e", "support" ], "service-workers/service-worker/resources/navigation-redirect-out-scope.py": [ - "b41d084ce18e177e59b7caa0d305fc11f37fd4d5", + "8a4436e53f60b74062f0788bce089dc707f61388", "support" ], "service-workers/service-worker/resources/navigation-redirect-scope1.py": [ - "b41d084ce18e177e59b7caa0d305fc11f37fd4d5", + "8a4436e53f60b74062f0788bce089dc707f61388", "support" ], "service-workers/service-worker/resources/navigation-redirect-scope2.py": [ - "b41d084ce18e177e59b7caa0d305fc11f37fd4d5", + "8a4436e53f60b74062f0788bce089dc707f61388", + "support" + ], + "service-workers/service-worker/resources/navigation-redirect-to-http-iframe.html": [ + "257dad1b514dbc3d654237abe02105f86e2aae2d", + "support" + ], + "service-workers/service-worker/resources/navigation-redirect-to-http-worker.js": [ + "56447ddcf101a60c64b4d2f7168c21deb4b3c0a8", "support" ], "service-workers/service-worker/resources/navigation-redirect-worker.js": [ @@ -596308,6 +613135,14 @@ "d81c494e7c0aedc7921c6d5a8c7a17b9b1f5a8aa", "support" ], + "service-workers/service-worker/resources/opaque-response-preloaded-iframe.html": [ + "df5f1602891ffd5344dfcdf8d2e406f27b3f54e8", + "support" + ], + "service-workers/service-worker/resources/opaque-response-preloaded-worker.js": [ + "84b0397640b74bc2cd5d8cd4fb90eb29dd5e032b", + "support" + ], "service-workers/service-worker/resources/other.html": [ "dee7af2b7e3877dbb3f076bfb5960da0f00ea02b", "support" @@ -596325,11 +613160,15 @@ "support" ], "service-workers/service-worker/resources/postmessage-msgport-to-client-worker.js": [ - "df0abb63c5c63fa97adb914e4281364bf1f82657", + "11d46afb4cf17c8dcd9b49cda4e07e110a42a36d", "support" ], "service-workers/service-worker/resources/postmessage-to-client-worker.js": [ - "ef8f04dd01a67d14ab61aec38c2ebfab3ad6c164", + "3758d8ba7d58e3f9b239016d9f35f537ebd7116b", + "support" + ], + "service-workers/service-worker/resources/postmessage-transferables-worker.js": [ + "341df2e470b10eab2bf785d2e4bbf77d56ebe172", "support" ], "service-workers/service-worker/resources/postmessage-worker.js": [ @@ -596344,10 +613183,22 @@ "6b549d0a185a0fb76c230274a672ef4843d33a90", "support" ], + "service-workers/service-worker/resources/referrer-policy-iframe.html": [ + "47fc8d4c110ff26a4ceadade703659af5464504d", + "support" + ], "service-workers/service-worker/resources/register-closed-window-iframe.html": [ "18ee27c8d6a5497bf16b3315ba9eee2b474154b5", "support" ], + "service-workers/service-worker/resources/register-foreign-fetch-errors-worker.js": [ + "20cbfcd09c00c81c0a3c433a6257f62237fecd64", + "support" + ], + "service-workers/service-worker/resources/register-iframe.html": [ + "b137bd995f0ca7b0ecc6ee6f5dc87a3a4e524364", + "support" + ], "service-workers/service-worker/resources/registration-tests.js": [ "bdb31335f8d15de455108e0186183f1acdaef41e", "support" @@ -596364,8 +613215,16 @@ "7fb39d9609893a0fbcada161c92dc3df40721f90", "support" ], + "service-workers/service-worker/resources/request-body-blob-iframe.html": [ + "b1f805a1120f3728a0e7accbc62041363e668ab0", + "support" + ], + "service-workers/service-worker/resources/request-body-blob-worker.js": [ + "867de00970be85ce6fbe25c175191450eb83c906", + "support" + ], "service-workers/service-worker/resources/request-end-to-end-worker.js": [ - "cafcb5f15ae073a68fbd10629374d8ad8f2b3b3c", + "984ea18286a9fa7446562a77284b942fa7e5217c", "support" ], "service-workers/service-worker/resources/request-headers.py": [ @@ -596413,7 +613272,7 @@ "support" ], "service-workers/service-worker/resources/skip-waiting-installed-worker.js": [ - "d9eb8111b190c412e9d5958423625d3de2583a4a", + "6c6338c7aad6dfc6ef45458fb40441a04820aa6d", "support" ], "service-workers/service-worker/resources/skip-waiting-worker.js": [ @@ -596444,14 +613303,6 @@ "cc8130f60240234fa216778dac70dd34fe4b2374", "support" ], - "service-workers/service-worker/resources/update-max-aged-worker-imported-script.py": [ - "23fa131d0d35e0e5394100b4bfaa5ebf1a349b4b", - "support" - ], - "service-workers/service-worker/resources/update-max-aged-worker.py": [ - "384ab2835ccb57316d59a911af57ba8638b26ad0", - "support" - ], "service-workers/service-worker/resources/update-nocookie-worker.py": [ "0790be63a2023cccf03f84b2e5c8f5daa7958dd0", "support" @@ -596476,6 +613327,10 @@ "dbf752f9a356f51f6ddf96053b39b5cd3515ddc8", "support" ], + "service-workers/service-worker/resources/windowclient-navigate-worker.js": [ + "f7a925c1fe330839ea52d45cd052c387303defd6", + "support" + ], "service-workers/service-worker/resources/worker-interception-iframe.https.html": [ "b9fd4ea281b328c1f21573d1563c968dac52cf22", "support" @@ -596509,7 +613364,7 @@ "testharness" ], "service-workers/service-worker/serviceworkerobject-scripturl.https.html": [ - "05bcf6689d4dcdf0ecac796d8d2bed9020f4d29a", + "a22a00bc791201302ce62f53a4980a4db7d41de1", "testharness" ], "service-workers/service-worker/shared-worker-controlled.https.html": [ @@ -596517,23 +613372,23 @@ "testharness" ], "service-workers/service-worker/skip-waiting-installed.https.html": [ - "d668e51387bb680aeb0508a52f4fe73cbc56a552", + "c635baadef3503e526f475132584da3f161b2d0a", "testharness" ], "service-workers/service-worker/skip-waiting-using-registration.https.html": [ - "3418673911e8c1424f67f5a6ff1f0370a9fa7e26", + "3069015a5cf2de7193f53456cebc387e6d32f49d", "testharness" ], "service-workers/service-worker/skip-waiting-without-client.https.html": [ - "dfb945cfd633272d96e79b6679263b2d6b4aa8a1", + "1bb04c378d0ab29f65b08de931f3c414237e4b07", "testharness" ], "service-workers/service-worker/skip-waiting-without-using-registration.https.html": [ - "2460eb074582e031701732392dd9cfc8b771816a", + "21a145eaadcea1751453c2258158e12710f3afee", "testharness" ], "service-workers/service-worker/skip-waiting.https.html": [ - "4f00e2fbd9c5520cabcc019c68f7f1de50221cca", + "bea28e051bc747d863dad9d1fd4ef8ffce432b54", "testharness" ], "service-workers/service-worker/state.https.html": [ @@ -596541,7 +613396,7 @@ "testharness" ], "service-workers/service-worker/synced-state.https.html": [ - "38d80bd51f81c549bb718e0a37370eeaa6c18f91", + "c6a3d6e8aa7a70e1bc670f89192240bac081bfe9", "testharness" ], "service-workers/service-worker/uncontrolled-page.https.html": [ @@ -596557,7 +613412,7 @@ "testharness" ], "service-workers/service-worker/unregister-then-register.https.html": [ - "4498c27c527d54b5a95fee29232b71f25ddd8c33", + "b4a5e1933296cf96fa001822b5e269a5db60b188", "testharness" ], "service-workers/service-worker/unregister.https.html": [ @@ -596569,7 +613424,7 @@ "testharness" ], "service-workers/service-worker/update-after-oneday.https.html": [ - "7c8c6c3edca83d54f1838eccf3afb0b1223c7a44", + "9f43ba359c4d564f75d4ce4b6a040aac6ba50d5b", "testharness" ], "service-workers/service-worker/update-recovery.https.html": [ @@ -596577,7 +613432,7 @@ "testharness" ], "service-workers/service-worker/update.https.html": [ - "73c129838eda3c18365f384b8b0a5c32b5e9cf6d", + "d55da98b05b5885084474ebdbabdf6c0998f8bca", "testharness" ], "service-workers/service-worker/waiting.https.html": [ @@ -596588,6 +613443,10 @@ "40ec7850c61a3ee7578f055d3eef87293cfad482", "testharness" ], + "service-workers/service-worker/windowclient-navigate.https.html": [ + "828d8d920459541a37e747ac01376fdcac51ffb3", + "testharness" + ], "service-workers/service-worker/worker-interception.https.html": [ "2c5e8cb2b7be6d394aaa1400158d3f14895909f3", "testharness" @@ -596844,6 +613703,10 @@ "f56d3b4e6f7f0afd6c13d3a89f69b7360ba99bfa", "support" ], + "shadow-dom/Range-prototype-insertNode.html": [ + "f840aa7e9789f052f9980a4db8ca1ad789d15242", + "testharness" + ], "shadow-dom/ShadowRoot-interface.html": [ "8c39afc1c5648c3e95fe69c4ea5003958f7734b7", "testharness" @@ -596909,19 +613772,23 @@ "testharness" ], "shadow-dom/slotchange-event.html": [ - "e9e7bfc014b1c8a9be7fa21da806860b60a62917", + "c72d9d156bf6772c3e5ea054310810b34a049b94", "testharness" ], "shadow-dom/slotchange.html": [ "fa2864cbf8e88250a793beeacf737c7d9413cdf2", "testharness" ], + "shadow-dom/slots-fallback-in-document.html": [ + "29ebbd1a4a4114acd4ff1fe5b30daf93b11d7910", + "testharness" + ], "shadow-dom/slots-fallback.html": [ - "595bf7e71283bcf219849ebe13a1b913cd36f1b9", + "d39644486f8c5307d8095cc32396ca146881320b", "testharness" ], "shadow-dom/slots.html": [ - "3cd698058a0f6a5a1185d24040c62964fd0a1d0f", + "1eadf08acc6340f9ebd46d7df1ced3dedb1c5915", "testharness" ], "shadow-dom/untriaged/LICENSE": [ @@ -597248,6 +614115,18 @@ "6ce5a9b14d80030f0adfa1808857294e8c923cb2", "testharness" ], + "storage/persist-permission-manual.https.html": [ + "6b7c0b9d5c8cee3922f6797dace85b441e5ea45c", + "manual" + ], + "storage/persisted-worker.https.html": [ + "87d7bf4c615b07b3fa701239fc1823826a054e80", + "testharness" + ], + "storage/persisted.https.html": [ + "98be04abdc48c76b30f90af007f214f9759083dd", + "testharness" + ], "storage/resources/storagemanager-persist-worker.js": [ "a9d24b2477938410371bae881a05a68cd56fe72e", "support" @@ -597260,6 +614139,10 @@ "660d3d068314c34d215df19c0b849ec711f57854", "support" ], + "storage/storage-persisted.js": [ + "dbf6e5bed3dec6ca59926c439ec9d6aca89d78b9", + "support" + ], "storage/storagemanager-estimate.https.html": [ "6319416d647f1671a7b8d36bbb4d79495e76a956", "testharness" @@ -597421,7 +614304,7 @@ "testharness" ], "streams/piping/flow-control.js": [ - "c39ecfb633e95ce4b4eac41d33d7268d3a5f768b", + "5f0665dd1618dc75423862d26debeac05caacac9", "support" ], "streams/piping/flow-control.serviceworker.https.html": [ @@ -597521,7 +614404,7 @@ "testharness" ], "streams/readable-byte-streams/general.js": [ - "b5d2f4c72f2e365e0716897a2fd398600e4eac6c", + "e8d971fb6491da06f9ceedb1b6cd6a5c06b6f3b4", "support" ], "streams/readable-byte-streams/general.serviceworker.https.html": [ @@ -597661,7 +614544,7 @@ "testharness" ], "streams/readable-streams/floating-point-total-queue-size.js": [ - "9e6ba92e9b69437c23f04c80fff47c951e509db1", + "905ea4815c8444a70d1fe3a2e1c2c36ff259c285", "support" ], "streams/readable-streams/floating-point-total-queue-size.serviceworker.https.html": [ @@ -597977,7 +614860,7 @@ "testharness" ], "streams/writable-streams/floating-point-total-queue-size.js": [ - "14d4a8f5559831fb266061e75177339ba0073edb", + "33db80c0ab6a4794e26816d83e6ece39b707ed63", "support" ], "streams/writable-streams/floating-point-total-queue-size.serviceworker.https.html": [ @@ -600381,7 +617264,7 @@ "support" ], "svg/interfaces.html": [ - "af04368e73b54ea570eba5fa483d3b1eeb462b17", + "0c355e7adc334d000991f4181d3bf254302eb915", "testharness" ], "svg/linking/reftests/href-a-element-attr-change.html": [ @@ -600564,6 +617447,10 @@ "bf426dc592940dbabd23db6c2343bcc5d29dc4b8", "support" ], + "uievents/auxclick/auxclick_event-manual.html": [ + "464073435190f51b2725653a0a0589e10f136d2d", + "manual" + ], "uievents/constructors/README.md": [ "771f659821e2860457b741385606f714acc01e05", "support" @@ -600888,6 +617775,10 @@ "58f5c03e1f544b12e467663cc2bc0c15673f80b9", "support" ], + "uievents/mouse/mouseevent_move_button-manual.html": [ + "9cc673035fef3c2e8677e8d6679babfe8a1af854", + "manual" + ], "uievents/order-of-events/README.md": [ "3a3e6ab77d25a8fe83085e24c0934e4b63eea553", "support" @@ -600981,11 +617872,11 @@ "testharness" ], "url/OWNERS": [ - "8dc7a69569b93a0e4cd0a0097fe6b9091177e30f", + "7fa17c86fb4b69c80e41b8b3d942f10acd158ca3", "support" ], "url/README.md": [ - "3dacc2783865ba292f20b72bc4c3942de521d9b0", + "165b2a70da8bc2a7df3fe424a540f36b4f7be899", "support" ], "url/a-element-origin-xhtml.xhtml": [ @@ -601013,25 +617904,29 @@ "support" ], "url/failure.html": [ - "900755b25db687f1e793fe4cf18cfc456c35060a", + "908456e354703473b0806bbdac6d60216505905f", "testharness" ], - "url/historical.html": [ - "94451e509174184811374cb8f0a346e76510eb54", + "url/historical.any.js": [ + "89dd0f84e69896c802c7a2062c9f4846cdca98c6", "testharness" ], - "url/historical.worker.js": [ - "d49e244853c361ad0d62269f48c8c5fe2661bc8f", - "testharness" - ], - "url/interfaces.html": [ - "25e16a1f57ab1acbb19a3b3acc77fccc3facf6cd", + "url/interfaces.any.js": [ + "85a047537943e6ca22536bc70d11aaebadd7cd3d", "testharness" ], "url/setters_tests.json": [ "6e388e46caf1a0259a6dc6778e7b33619e389751", "support" ], + "url/toascii.json": [ + "e8f5d819b9b4608d730a0a601e16ac2dd6c2d134", + "support" + ], + "url/toascii.window.js": [ + "7166d07215b578c5d11d7ac831ddb47d0821155a", + "testharness" + ], "url/url-constructor.html": [ "478523551e13b4066293fc2244972dd82b9bd87f", "testharness" @@ -601057,7 +617952,7 @@ "testharness" ], "url/urlsearchparams-constructor.html": [ - "d31c1bf06b2904cf09d6dfb835bac30844ef44f6", + "854e06efa9598f66705605bdef20c4a500ab2e9b", "testharness" ], "url/urlsearchparams-delete.html": [ @@ -601093,7 +617988,7 @@ "testharness" ], "url/urltestdata.json": [ - "6aa13a2c98f03031f1225a035890fc77a76efc52", + "dad11f4fb0275d1900f3d2362628bff54814c6dc", "support" ], "user-timing/OWNERS": [ @@ -601153,7 +618048,7 @@ "testharness" ], "user-timing/measure.html": [ - "9b753ac314aabc2e4ec6aee7381b956e7f345b78", + "8374bbae73ac549b6c8b953d25948ed33b579591", "testharness" ], "user-timing/measure_exceptions_navigation_timing.html": [ @@ -601161,7 +618056,7 @@ "testharness" ], "user-timing/measure_navigation_timing.html": [ - "9bc61c9ae7d5c83f883270c98db6cd088bb0ecd2", + "b54bbb96f5c24b61e4d64a3633229781213d9cd2", "testharness" ], "user-timing/measure_syntax_err.any.js": [ @@ -601169,7 +618064,7 @@ "testharness" ], "user-timing/resources/webperftestharness.js": [ - "8b534ce21f036d46da0183bd36676c7b0a2f468d", + "b1f81236de54467168bd09d749c2a6f453c5c3e1", "support" ], "user-timing/resources/webperftestharnessextension.js": [ @@ -601240,14 +618135,1082 @@ "f6ae98a534bfc2d0b57ef11f8f1ebb3d72629c3c", "manual" ], + "viewport/OWNERS": [ + "a4fed30c25d50d5ce774e4e5b431efa99f73ecf3", + "support" + ], + "viewport/viewport-dimensions-custom-scrollbars-manual.html": [ + "34e5aa69477e51f2102eacb1295de1296eaf3662", + "manual" + ], + "viewport/viewport-dimensions-scrollbars-manual.html": [ + "f6d7ef74f10b94ece1d3a7f0fc7573bf7672baca", + "manual" + ], + "viewport/viewport-no-resize-event-on-overflow-recalc.html": [ + "9605e8e77cf652aa62c3730a3a5b4fa2f4e38011", + "testharness" + ], + "viewport/viewport-offset-manual.html": [ + "f54fd0381984ca28532808d36e9c6806c3bfa09a", + "manual" + ], + "viewport/viewport-page-manual.html": [ + "4d0aabf3b0c75711d3978e9dec4d91f3f144755d", + "manual" + ], + "viewport/viewport-read-size-causes-layout.html": [ + "a5f89da7f731ad1627089dbd0df1ad292e53ccff", + "testharness" + ], + "viewport/viewport-read-size-in-iframe-causes-layout.html": [ + "8bb04e31e5d5cb7e8ba152507b4b94471d38bfe8", + "testharness" + ], + "viewport/viewport-resize-event-manual.html": [ + "f3d9b990138377eaf0d7ccb0a5e3ff6b2a5bb3b1", + "manual" + ], + "viewport/viewport-resize-event-on-load-overflowing-page.html": [ + "906f44dee3be5931400b2b99dd8b4b4c3f6f6020", + "testharness" + ], + "viewport/viewport-scale-iframe-manual.html": [ + "fe01308f32fe030aa4fcb442a3119bc40397cfcf", + "manual" + ], + "viewport/viewport-scale-manual.html": [ + "2350441e77ffb40ff0ace6ab565700eb605cbbbe", + "manual" + ], + "viewport/viewport-scroll-event-manual.html": [ + "3119a8ede3338afe24583d3f79b6cba699ef0ad0", + "manual" + ], + "viewport/viewport-scrollbars-cause-resize.html": [ + "b0a563926aedc95ce27182369b9921bea30b6ac6", + "testharness" + ], + "viewport/viewport-type.html": [ + "f6c1ff74ac054612661a741ed63cc9e38c704b02", + "testharness" + ], + "viewport/viewport-unscaled-scale-iframe.html": [ + "9026a7bc429e19def5d082405a44e39a106652f2", + "testharness" + ], + "viewport/viewport-unscaled-scale.html": [ + "68d25c2233a4e35bb6e0d24a07c39a3c23908e7b", + "testharness" + ], + "viewport/viewport-unscaled-scroll-iframe.html": [ + "f55662f1b5cbfc460014a13eabe470295555a98f", + "testharness" + ], + "viewport/viewport-unscaled-scroll.html": [ + "9e5e473de8a4d0ff7cacf1b4f0fb8b45281a6285", + "testharness" + ], + "viewport/viewport-unscaled-size-iframe.html": [ + "f2ab6df04eda125567a93c3221ba482cf2464875", + "testharness" + ], + "viewport/viewport-unscaled-size.html": [ + "ab196264ebd9d4deb1d7b510d5a08f4abf45fa5d", + "testharness" + ], + "viewport/viewport_support.js": [ + "2e2e9480e8ccca07d4334d957b6a1c597a1f8fbd", + "support" + ], "wai-aria/OWNERS": [ - "16577d2283b826f0541dbc795177c7aac7e1b228", + "3a6002295ea2893ba74763e46965bd2d1291d55b", "support" ], "wai-aria/README.md": [ "fcb3247bdc42a962ad609232f3be562d13d630e3", "support" ], + "wai-aria/alertdialog_modal_false-manual.html": [ + "4474f69ff5b08402d45009d375f1a0c1d97a3498", + "manual" + ], + "wai-aria/alertdialog_modal_true-manual.html": [ + "c4806b5257c4773833395a97811f9f6f53237ea8", + "manual" + ], + "wai-aria/application_activedescendant-manual.html": [ + "e0d72a20e249d425416ae87f1ae95af879170ff0", + "manual" + ], + "wai-aria/application_activedescendant_value_changes-manual.html": [ + "5d2fdd71f4aeb5a9a2206749acb88830e0a4b8da", + "manual" + ], + "wai-aria/aria-current_not_declared-manual.html": [ + "324c82df17ed329af958d09d374d1fe7c1af3dab", + "manual" + ], + "wai-aria/aria-current_with_value_changes-manual.html": [ + "f8d68ae8ceae0aeeb103a7480e867c8b8e7efe9f", + "manual" + ], + "wai-aria/aria-current_with_value_date-manual.html": [ + "b056105c712ff7d663ca1503480c0a73aacdaae5", + "manual" + ], + "wai-aria/aria-current_with_value_location-manual.html": [ + "99fa9466a41792114440a967e333070664581018", + "manual" + ], + "wai-aria/aria-current_with_value_page-manual.html": [ + "e7bd1caf26eb2b058420b7cc8e720749043962b8", + "manual" + ], + "wai-aria/aria-current_with_value_step-manual.html": [ + "012589a138d5c3423dd462994b6010da535d8d2d", + "manual" + ], + "wai-aria/aria-current_with_value_time-manual.html": [ + "be5a829a19818249201fed5f6ffd5a8ba02e69ca", + "manual" + ], + "wai-aria/aria-current_with_value_true-manual.html": [ + "cab939d028e95da1d1b0fcedc9760ddc914b0498", + "manual" + ], + "wai-aria/aria-current_with_value_unspecified-manual.html": [ + "3c10b7d11e42bd33ae564638b7bcf279d095ae2e", + "manual" + ], + "wai-aria/aria-details_pointing_to_details_element-manual.html": [ + "79a84e9212395255a0d66cacc1d7b2016013e795", + "manual" + ], + "wai-aria/aria-details_pointing_to_div_element-manual.html": [ + "e236e8a9b3636a4856102dd9ca0f357695113972", + "manual" + ], + "wai-aria/article_in_feed_posinset_and_setsize-manual.html": [ + "71c916f22a2281066ca2a6e8a078f86df7203646", + "manual" + ], + "wai-aria/article_in_feed_setsize_-1-manual.html": [ + "b8211ce48ef3169d8777147e436566bbc978d674", + "manual" + ], + "wai-aria/article_not_in_feed_posinset_and_setsize-manual.html": [ + "5e6ba423ced4df85aae71f0234e4df883f6f68ae", + "manual" + ], + "wai-aria/button_haspopup_dialog-manual.html": [ + "ebde034348367d0de4846f513b893fd4b538292d", + "manual" + ], + "wai-aria/button_haspopup_emptystring-manual.html": [ + "fe1a0669555d1fb535714ea9bf25c14b94272f53", + "manual" + ], + "wai-aria/button_haspopup_false-manual.html": [ + "81ac95759365a20f94d8d7279ac25fcc82610cc0", + "manual" + ], + "wai-aria/button_haspopup_foo-manual.html": [ + "bf80557381db22456142b63a985df7e47d7eb550", + "manual" + ], + "wai-aria/button_haspopup_grid-manual.html": [ + "14e21d25c31ddcc12801c70114b7efc947331e5c", + "manual" + ], + "wai-aria/button_haspopup_listbox-manual.html": [ + "8fc2bd88d9d4222d8b3c30a3888fa40592c76861", + "manual" + ], + "wai-aria/button_haspopup_menu-manual.html": [ + "5ae08497094b432b5fad8df9512512c1553ae916", + "manual" + ], + "wai-aria/button_haspopup_tree-manual.html": [ + "6c660c51df6aeab722bedbed64f7be7eb46bdac2", + "manual" + ], + "wai-aria/button_haspopup_true-manual.html": [ + "a7858f1137bb90d20e397478acc3106fc699a69b", + "manual" + ], + "wai-aria/button_haspopup_unspecified-manual.html": [ + "0d791a15ebdc111e48e6cf193b64fddbe1233ae0", + "manual" + ], + "wai-aria/button_roledescription_empty-manual.html": [ + "02e8c17c16956f706552e15f047ec7f7f285bf45", + "manual" + ], + "wai-aria/button_roledescription_valid-manual.html": [ + "ba34a9172cd4aca2f5b993bc89b5f6251455b02c", + "manual" + ], + "wai-aria/button_roledescription_whitespace_only-manual.html": [ + "9cbdb49690860b2f5d27667252a7bb70aada3482", + "manual" + ], + "wai-aria/cell-manual.html": [ + "834d5f2817238c77f2ff7d84cfcf130ea7fd93fa", + "manual" + ], + "wai-aria/cell_aria-colspan_2_on_div-manual.html": [ + "dbcfcede2f4b03c48f4f25a06cc86a0c4a55cbb4", + "manual" + ], + "wai-aria/cell_aria-colspan_2_on_td_html_colspan_3-manual.html": [ + "c43ff72c242ab1652d7ca7e7ca5eea23902f4d80", + "manual" + ], + "wai-aria/cell_aria-colspan_2_on_td_html_colspan_3_with_headers_and_border-manual.html": [ + "34726e1d88332b35f400bc38710489b36e6469fc", + "manual" + ], + "wai-aria/cell_aria-colspan_2_on_td_html_colspan_3_with_three_actual_columns-manual.html": [ + "50a66444648047d92364b285f96bd92d22a1fc5c", + "manual" + ], + "wai-aria/cell_aria-colspan_2_on_td_with_html_colspan_not_specified-manual.html": [ + "c72a990220f746dedb0501c1b429391c5d8ed656", + "manual" + ], + "wai-aria/cell_aria-rowspan_2_on_div-manual.html": [ + "d737e00d21d0caf030f586b652bcf9cede6f5e5c", + "manual" + ], + "wai-aria/cell_aria-rowspan_2_on_td_html_rowspan_3-manual.html": [ + "53bdc1deab18d8e6453ca4acda7818e2d40b3663", + "manual" + ], + "wai-aria/cell_aria-rowspan_2_on_td_html_rowspan_3_with_three_actual_rows-manual.html": [ + "ab7904288326ef7d37b1ef2edeac7457f379a425", + "manual" + ], + "wai-aria/cell_aria-rowspan_2_on_td_with_html_rowspan_not_specified-manual.html": [ + "2fe3fb2279567437098626704e29292d2604fe84", + "manual" + ], + "wai-aria/cell_colindex_4-manual.html": [ + "e4b772ffbec3971567a632611b4d24f89a90faa8", + "manual" + ], + "wai-aria/cell_rowindex_4-manual.html": [ + "12a6b478fe42a6d4c509a4db01390b598057d3d2", + "manual" + ], + "wai-aria/checkbox_readonly_false-manual.html": [ + "0ca8232077c8ebe6124e6348876e0d7e305fcdc9", + "manual" + ], + "wai-aria/checkbox_readonly_true-manual.html": [ + "c8710159d664ad1e47ffcede99591d36d19c758a", + "manual" + ], + "wai-aria/checkbox_readonly_unspecified-manual.html": [ + "39980b5e2b61c5b907b299f6581b61fc96176be0", + "manual" + ], + "wai-aria/columnheader_aria-colspan_2_on_div-manual.html": [ + "02dbbd5d5065016aa6ad251b6972efbdb2adc3cd", + "manual" + ], + "wai-aria/columnheader_aria-colspan_2_on_th_html_colspan_3-manual.html": [ + "833176caaa8cc43ddeef6910c3c91d34d0f27a81", + "manual" + ], + "wai-aria/columnheader_aria-colspan_2_on_th_html_colspan_3_with_three_actual_columns-manual.html": [ + "8e991fc01285bf8b0df4600f2185aae321690324", + "manual" + ], + "wai-aria/columnheader_aria-colspan_2_on_th_with_html_colspan_not_specified-manual.html": [ + "674ca111f421b11015b44680a894b124e0156e8e", + "manual" + ], + "wai-aria/columnheader_aria-rowspan_2_on_div-manual.html": [ + "f8d61b206efd7b14349270a9cfbc0fc7b45144b5", + "manual" + ], + "wai-aria/columnheader_aria-rowspan_2_on_th_html_rowspan_3-manual.html": [ + "46c1c3749203b0177b42c8517f8f1486493552dd", + "manual" + ], + "wai-aria/columnheader_aria-rowspan_2_on_th_html_rowspan_3_with_three_actual_rows-manual.html": [ + "a352ec0168c837f7ac41e238d9f6b556a1636b4c", + "manual" + ], + "wai-aria/columnheader_aria-rowspan_2_on_th_with_html_rowspan_not_specified-manual.html": [ + "f5ae66fb52322271cd48f8b0944c45f150a3c9a6", + "manual" + ], + "wai-aria/columnheader_colindex_4-manual.html": [ + "763cf2903449e52748f60c9d94ba804eeb36e8e0", + "manual" + ], + "wai-aria/columnheader_rowindex_4-manual.html": [ + "d7d2d22bbe8bd9653dfca49258966a3f5bddb630", + "manual" + ], + "wai-aria/columnheader_selected_false_not_automatically_propagated-manual.html": [ + "07905926b9a086a9dac09e4208bff5c7be62d9fb", + "manual" + ], + "wai-aria/columnheader_selected_true_not_automatically_propagated-manual.html": [ + "a94da04e13d0ffc5e4470fcd0681ca07cdb345a3", + "manual" + ], + "wai-aria/combobox_controls_an_invalid_id-manual.html": [ + "870df040569649c51aa55f1cd4999d26412f0fcc", + "manual" + ], + "wai-aria/combobox_haspopup_dialog-manual.html": [ + "fdd4269120fd9df0efe154b43a6153565da97943", + "manual" + ], + "wai-aria/combobox_haspopup_false-manual.html": [ + "cc7de354f4a21d4aa0e999ea2441be72a71a5822", + "manual" + ], + "wai-aria/combobox_haspopup_grid-manual.html": [ + "d125af338b649432214e6140189349981836e858", + "manual" + ], + "wai-aria/combobox_haspopup_listbox-manual.html": [ + "8acc1c480dea1acf88ca7ca569604b8e9ea88ef5", + "manual" + ], + "wai-aria/combobox_haspopup_menu-manual.html": [ + "378629479e77ea8389ec688bb33e539ce059ae2a", + "manual" + ], + "wai-aria/combobox_haspopup_tree-manual.html": [ + "b119af4fe48f9213c647e66a4a2a018558254bf9", + "manual" + ], + "wai-aria/combobox_haspopup_true-manual.html": [ + "0c513df922b7d0e343bc769253ac5ae8b52f4510", + "manual" + ], + "wai-aria/combobox_haspopup_unspecified-manual.html": [ + "710a825d44481c3f14d622e77b19c205f499dd1e", + "manual" + ], + "wai-aria/combobox_orientation_horizontal-manual.html": [ + "b0d1bfb6846a6c8008f5b61e5c86b7ff4507c10e", + "manual" + ], + "wai-aria/combobox_orientation_unspecified-manual.html": [ + "74cd83120d791c1c1328573ca078b7afeb62bcb7", + "manual" + ], + "wai-aria/combobox_orientation_vertical-manual.html": [ + "ee0c7a375ddfe72da1c0acdf61430efbcbadecc5", + "manual" + ], + "wai-aria/combobox_readonly_false-manual.html": [ + "d197de6dd8bc807819dbd97c70cc7806c0cba25c", + "manual" + ], + "wai-aria/combobox_readonly_true-manual.html": [ + "66add63e8639e204166b2d986600e45731b67f72", + "manual" + ], + "wai-aria/combobox_readonly_unspecified-manual.html": [ + "514077d1fe954cfb2880cf7490fa96a62993d3d9", + "manual" + ], + "wai-aria/dialog_modal_false-manual.html": [ + "15ca987281ad77292627823d69ecfaca9ac71523", + "manual" + ], + "wai-aria/dialog_modal_true-manual.html": [ + "24a9479dd97dd46a443477632fff425f80a44e3e", + "manual" + ], + "wai-aria/dialog_modal_unspecified-manual.html": [ + "beffdaa252e3043cb094ed655db013947d7d4ac8", + "manual" + ], + "wai-aria/div_element_without_role_roledescription_valid-manual.html": [ + "66ac2a107b7b7e517c5badfe10fcfed527d29235", + "manual" + ], + "wai-aria/errormessage_object_in_invalid_state-manual.html": [ + "0a2d618a703342da58071c35c510a370044e351f", + "manual" + ], + "wai-aria/errormessage_object_in_valid_state-manual.html": [ + "458716e14fab5e9146acd42a1b738aade9c4638e", + "manual" + ], + "wai-aria/feed-manual.html": [ + "946946d1fb7b9ded2b5c16f66315b999ccbcdfb8", + "manual" + ], + "wai-aria/figure-manual.html": [ + "7efb8eb80093de1cb3a825cccac111c4e4a92b52", + "manual" + ], + "wai-aria/grid_aria-readonly_false_automatically_propagated-manual.html": [ + "58e2c9fa82c4500e7dd3f2c60cbd7a07783d6dab", + "manual" + ], + "wai-aria/grid_aria-readonly_true_automatically_propagated-manual.html": [ + "defa6fb97d9d71a6da5fef97ac788ae40d35d2f5", + "manual" + ], + "wai-aria/grid_busy_false-manual.html": [ + "fc5293d1eaf17932548fb4ffabeba91636d4d333", + "manual" + ], + "wai-aria/grid_busy_true-manual.html": [ + "525e53aea870f694194e7337efc54f04e9bf450e", + "manual" + ], + "wai-aria/grid_busy_value_changes-manual.html": [ + "c6f8e48d0633e5d2299db6d9a57ef44064f537b3", + "manual" + ], + "wai-aria/grid_colcount_8-manual.html": [ + "d27a7c3ccc0186a970f85c12b177bd0390137887", + "manual" + ], + "wai-aria/grid_columnheader_readonly_false-manual.html": [ + "966772d35396d2946eecf282626ed76fff983bda", + "manual" + ], + "wai-aria/grid_columnheader_readonly_true-manual.html": [ + "c77203c5aff070fde3ba2a166a527a4047685fb5", + "manual" + ], + "wai-aria/grid_columnheader_readonly_unspecified-manual.html": [ + "b0ba733622e16cd2cd8d282995cfb251a8fbb348", + "manual" + ], + "wai-aria/grid_columnheader_required_false-manual.html": [ + "ff3177c827e9878f399ee9ea3d21408e382bd7a2", + "manual" + ], + "wai-aria/grid_columnheader_required_true-manual.html": [ + "f435b39b4c0c2a946a8b6f92fd9a602f652cde3f", + "manual" + ], + "wai-aria/grid_columnheader_required_unspecified-manual.html": [ + "8d6287495265d1b57dbb704e4d4be43b8aa6b84b", + "manual" + ], + "wai-aria/grid_rowcount_3-manual.html": [ + "cef045744fef8f057ace5432b94b1d4159403f4d", + "manual" + ], + "wai-aria/grid_rowheader_readonly_false-manual.html": [ + "4be468949bce221b4d2c8918510aef8502382667", + "manual" + ], + "wai-aria/grid_rowheader_readonly_true-manual.html": [ + "70bf1009bbdfe23edec4904631c1619c596e5b48", + "manual" + ], + "wai-aria/grid_rowheader_readonly_unspecified-manual.html": [ + "4f0e5ca22061d60117b3a9ba1ba0d912f1495a41", + "manual" + ], + "wai-aria/grid_rowheader_required_false-manual.html": [ + "63136f3c7b01adfbb2674fe0626bef5dc97f8ed5", + "manual" + ], + "wai-aria/grid_rowheader_required_true-manual.html": [ + "1d69644d4a256c3a86dba4d8cf305bf3689d0071", + "manual" + ], + "wai-aria/grid_rowheader_required_unspecified-manual.html": [ + "50a4f4995f11a6b92e3641853aa3ccfa4dc8ec21", + "manual" + ], + "wai-aria/gridcell_aria-colspan_2_on_div-manual.html": [ + "25067f7097c864aeda4eefe26f5be4bd325863af", + "manual" + ], + "wai-aria/gridcell_aria-rowspan_2_on_div-manual.html": [ + "010d88a933289303f232113e4e8f8622c8003598", + "manual" + ], + "wai-aria/gridcell_colindex_4-manual.html": [ + "6199a65ea843c7dcce4d4f1111cc2107aebe5097", + "manual" + ], + "wai-aria/gridcell_rowindex_4-manual.html": [ + "64fa525a32345da709081cee13a81fc792c7c6c3", + "manual" + ], + "wai-aria/group_hidden_undefined_element_not_rendered-manual.html": [ + "763f3cd871e5d962475d51c7c731c320771da71f", + "manual" + ], + "wai-aria/group_hidden_undefined_element_rendered-manual.html": [ + "49c532fd3f0f4860e824de0724d8b4a242f11787", + "manual" + ], + "wai-aria/heading_level_unspecified-manual.html": [ + "fb9281071562532515626298f454cb34df3ea103", + "manual" + ], + "wai-aria/keyshortcuts_multiple_shortcuts-manual.html": [ + "05a59ef67203ab6071e92c089c9dd827569aec54", + "manual" + ], + "wai-aria/keyshortcuts_one_shortcut-manual.html": [ + "4450737fa1d041dfade64fbcb53b52a5b3b15509", + "manual" + ], + "wai-aria/listbox_busy_false-manual.html": [ + "648441a3cdfe1497cca809ea8d1f2601ab5efd49", + "manual" + ], + "wai-aria/listbox_busy_true-manual.html": [ + "590263880933fbd11c7a23be0d4f79805e2736de", + "manual" + ], + "wai-aria/listbox_orientation_horizontal-manual.html": [ + "1e94ef3f3433847c24e19c5bbabb19c89b5cf47c", + "manual" + ], + "wai-aria/listbox_orientation_unspecified-manual.html": [ + "19be848a27f51882c242e2926829ffdfd6402557", + "manual" + ], + "wai-aria/listbox_orientation_vertical-manual.html": [ + "d61e7e5f80b898f33e098cd988928743e66e02e1", + "manual" + ], + "wai-aria/listbox_readonly_false-manual.html": [ + "6215aef6018d0bd2e96d8268c22f4e0e8b6470ce", + "manual" + ], + "wai-aria/listbox_readonly_true-manual.html": [ + "2a4c68f94c86705c977964a66b04ec9d77a76991", + "manual" + ], + "wai-aria/listbox_readonly_unspecified-manual.html": [ + "9730fa266f511e3fbe81571164bf6fd4ccbfc0af", + "manual" + ], + "wai-aria/listitem_setsize_-1-manual.html": [ + "d1c13740bdea5368782fc63d69a86724cb72e42b", + "manual" + ], + "wai-aria/menu_orientation_horizontal-manual.html": [ + "b9486b82f7021651631cd6b245a4a15dcdf76d36", + "manual" + ], + "wai-aria/menu_orientation_unspecified-manual.html": [ + "478c8468afce0cd6382d49c047e33309cfbb54f8", + "manual" + ], + "wai-aria/menu_orientation_vertical-manual.html": [ + "644f6a7babf3dedecc6fcbece2b064d95108d583", + "manual" + ], + "wai-aria/menubar_busy_false-manual.html": [ + "ae32a78c10bf8369f1964797b418e01b92a93f39", + "manual" + ], + "wai-aria/menubar_busy_true-manual.html": [ + "1f94737f35e78a4ab28ec77254e28b88e5db60c7", + "manual" + ], + "wai-aria/menubar_orientation_horizontal-manual.html": [ + "562009d3e450ffa6f17d13569ec685c53b349be7", + "manual" + ], + "wai-aria/menubar_orientation_unspecified-manual.html": [ + "7b643abbfb79a718239c7b7501142660a0ffeab1", + "manual" + ], + "wai-aria/menubar_orientation_vertical-manual.html": [ + "38cf7ac0a2da58bac662dcab5829bbf4a7cef7f5", + "manual" + ], + "wai-aria/menuitem_posinset_and_setsize-manual.html": [ + "891df600c46c77d090279f2b7982d55a657539c8", + "manual" + ], + "wai-aria/menuitemcheckbox_posinset_and_setsize-manual.html": [ + "699233b362c77df950b9e45cc3e6ee083b86a661", + "manual" + ], + "wai-aria/menuitemcheckbox_readonly_false-manual.html": [ + "6bf1377e5f89d1b675b6882d00818898c507e77c", + "manual" + ], + "wai-aria/menuitemcheckbox_readonly_true-manual.html": [ + "cd6ed1a83a7fb54651d695f1bdf70e457b803c77", + "manual" + ], + "wai-aria/menuitemcheckbox_readonly_unspecified-manual.html": [ + "7d78d89134691a360ca4c8694deaa44bbac47152", + "manual" + ], + "wai-aria/menuitemradio_posinset_and_setsize-manual.html": [ + "7ce92f27e514c4362c45f4387e839a5028e7a6e3", + "manual" + ], + "wai-aria/menuitemradio_readonly_false-manual.html": [ + "d8fcd51120ecf49dc423a8ce4db1b5960a55f9d7", + "manual" + ], + "wai-aria/menuitemradio_readonly_true-manual.html": [ + "2236c83482e0b0e4374880452f96a1316565d7a4", + "manual" + ], + "wai-aria/menuitemradio_readonly_unspecified-manual.html": [ + "7926d65dc6e034524ea46553aeee03b671494a8e", + "manual" + ], + "wai-aria/none-manual.html": [ + "005e4f982bbcb5d23a79383d50418fcfb05c8cd6", + "manual" + ], + "wai-aria/option_selected_false-manual.html": [ + "5a27d0b83878d76f9718a1c630e90f36da581f96", + "manual" + ], + "wai-aria/option_selected_true-manual.html": [ + "ac88cde0974d7f689f222b525dbdbc49644597a0", + "manual" + ], + "wai-aria/option_selected_undefined-manual.html": [ + "bd4f2244e9dee99e9d28ba535e94d5f5cffb4f4f", + "manual" + ], + "wai-aria/option_selected_value_changes-manual.html": [ + "4b88c894f9eb92b701de56c72f833da11ebf82fe", + "manual" + ], + "wai-aria/radiogroup_orientation_horizontal-manual.html": [ + "6fb68f322c3370a8cf27df1f195103225891d437", + "manual" + ], + "wai-aria/radiogroup_orientation_unspecified-manual.html": [ + "ec071b1efdb5e8adf0004058d3f37005bf7e0614", + "manual" + ], + "wai-aria/radiogroup_orientation_vertical-manual.html": [ + "7096f085928618c5d9aba1824ddaa61691d8403d", + "manual" + ], + "wai-aria/radiogroup_readonly_false-manual.html": [ + "921d0141f6783c0efbff6629bf1b1857053b421e", + "manual" + ], + "wai-aria/radiogroup_readonly_true-manual.html": [ + "7b0de053f6808aa7dc42862f3a56c6be11534868", + "manual" + ], + "wai-aria/radiogroup_readonly_unspecified-manual.html": [ + "d3c809e855dd926d159211b8492adc433f76e5e0", + "manual" + ], + "wai-aria/region_with_name-manual.html": [ + "bcdb5ba7f53fe1ec265b8916cea081c8404f1c0a", + "manual" + ], + "wai-aria/region_without_name-manual.html": [ + "7813ef502cf9d2bf19e32d4d90309fd11b63a7aa", + "manual" + ], + "wai-aria/row_colindex_4-manual.html": [ + "8e9afef99bfdaa9bea7dd1e45a56b64945d1bcb6", + "manual" + ], + "wai-aria/row_rowindex_4-manual.html": [ + "e9b43b20553dc2bcf96b4d748ea406da7a23f780", + "manual" + ], + "wai-aria/rowheader_aria-colspan_2_on_div-manual.html": [ + "dbef0cd0578126a0824fc7aef4eb78c0e181769a", + "manual" + ], + "wai-aria/rowheader_aria-rowspan_2_on_div-manual.html": [ + "83e110d8ba40814f2fe4c1f05d28b8836a78fb96", + "manual" + ], + "wai-aria/rowheader_colindex_4-manual.html": [ + "2292ac114585ab45abf82d52773bf7efe946b6ce", + "manual" + ], + "wai-aria/rowheader_rowindex_4-manual.html": [ + "8d691e8758b61ded2041f8d2c55c85c30e1533ab", + "manual" + ], + "wai-aria/rowheader_selected_false_not_automatically_propagated-manual.html": [ + "f40306ce25f9c5a7dc7f08ed9a4c0d536e481ba4", + "manual" + ], + "wai-aria/rowheader_selected_true_not_automatically_propagated-manual.html": [ + "c110ccc314a93a4824cc2f8cc8d24f92c334199f", + "manual" + ], + "wai-aria/scripts/ATTAcomm.js": [ + "1b6f41d8687a7294d580764d05eefc7996b2dc2e", + "support" + ], + "wai-aria/scripts/manual.css": [ + "093f7de0f2983e878ce88189b9e73d3a831de985", + "support" + ], + "wai-aria/scrollbar_all_values_unspecified-manual.html": [ + "5abf9c5b4e66a106ead1eadefca0557f4947f061", + "manual" + ], + "wai-aria/scrollbar_only_valuenow_unspecified-manual.html": [ + "09e7a2d0c666bd3e4bd9b0a879552119dab9ebe6", + "manual" + ], + "wai-aria/scrollbar_orientation_unspecified-manual.html": [ + "ff7005258d71d406b25e47070834ec0b07343885", + "manual" + ], + "wai-aria/searchbox-manual.html": [ + "0de383cb2d7006576ba35820e66ceebf61863b89", + "manual" + ], + "wai-aria/searchbox_activedescendant-manual.html": [ + "dd5f73bee1935829af7116d9f0fab21379143e3d", + "manual" + ], + "wai-aria/searchbox_activedescendant_value_changes-manual.html": [ + "d103b48d3326496c1856e02c9b1b2c2c3387381c", + "manual" + ], + "wai-aria/searchbox_autocomplete_both-manual.html": [ + "f7343424e6bc112e3acbcc34d4158c98228654b3", + "manual" + ], + "wai-aria/searchbox_autocomplete_inline-manual.html": [ + "e8d7c3ddb5df6db9147f9f06924b58115edd309a", + "manual" + ], + "wai-aria/searchbox_autocomplete_list-manual.html": [ + "0acb822f02bb8f28689f8c4b1712b64a6fd734dd", + "manual" + ], + "wai-aria/searchbox_autocomplete_none-manual.html": [ + "36bea2c8a923325fc27feea3af253b3983ac75dc", + "manual" + ], + "wai-aria/searchbox_autocomplete_unspecified-manual.html": [ + "2bf04a21da06e02bfea174345190d60c3882e9d0", + "manual" + ], + "wai-aria/searchbox_multiline_false-manual.html": [ + "8925514b998791a401e5d7057a09f8704d20e081", + "manual" + ], + "wai-aria/searchbox_multiline_true-manual.html": [ + "c3edc4db1f3771e9c4052eaa20290417c862557d", + "manual" + ], + "wai-aria/searchbox_multiline_unspecified-manual.html": [ + "0a95f460836d8cf3b74b29a99da2040a142a409e", + "manual" + ], + "wai-aria/searchbox_placeholder-manual.html": [ + "27e545c161a89de25268a5e3a316a2743ccb0027", + "manual" + ], + "wai-aria/searchbox_readonly_false-manual.html": [ + "e7843da9128a39a93b83a97e06c046f6b4b7f494", + "manual" + ], + "wai-aria/searchbox_readonly_true-manual.html": [ + "f5045cdf606ccdaf85047b37674437ed12fcc778", + "manual" + ], + "wai-aria/searchbox_readonly_unspecified-manual.html": [ + "7962346d46ef428826f3286b446e62328aacdf4a", + "manual" + ], + "wai-aria/searchbox_required_false-manual.html": [ + "1348c650dc9117cde518a541b228d61878a1628a", + "manual" + ], + "wai-aria/searchbox_required_true-manual.html": [ + "968edf9cca483de64a10e4042188394fcc1bf20a", + "manual" + ], + "wai-aria/searchbox_required_unspecified-manual.html": [ + "25cd28c00c19ecec1fe2e2f35c6b77c782472464", + "manual" + ], + "wai-aria/separator_focusable_all_values_unspecified-manual.html": [ + "b0ae5eea6d4c786c78e4983b7410b25750070762", + "manual" + ], + "wai-aria/separator_focusable_only_valuenow_unspecified-manual.html": [ + "e4f6b409e75ed0fd6f217ec3d09fa4b2b9f85b07", + "manual" + ], + "wai-aria/separator_focusable_valuetext-manual.html": [ + "b3c3280d13620a0eb16c11eb99fd0ad727ee65fe", + "manual" + ], + "wai-aria/separator_orientation_unspecified-manual.html": [ + "5058603cf64a799bee96ddfa6ba25d5382d2962d", + "manual" + ], + "wai-aria/separator_unfocusable_all_values_unspecified-manual.html": [ + "351cb43fb0a5b7259f20af99f799d26b61eda917", + "manual" + ], + "wai-aria/separator_unfocusable_valuetext-manual.html": [ + "196679826f29a8c2f35688d286ab96739ca89fd9", + "manual" + ], + "wai-aria/slider_all_values_unspecified-manual.html": [ + "676af2418ba5e2d81b40c1163fce968c4e09271e", + "manual" + ], + "wai-aria/slider_only_valuenow_unspecified-manual.html": [ + "e680b6db19d9e20f343662fe8cad18f2127969eb", + "manual" + ], + "wai-aria/slider_orientation_unspecified-manual.html": [ + "be4d713d88e3b5a695ee72d405ed5a7a6fef20b4", + "manual" + ], + "wai-aria/slider_readonly_false-manual.html": [ + "1f28f53f85f09ccbd1fd6d29006b52137b1a6e42", + "manual" + ], + "wai-aria/slider_readonly_true-manual.html": [ + "7da49fd65f5e7125e16ac11c72c1089343dac280", + "manual" + ], + "wai-aria/slider_readonly_unspecified-manual.html": [ + "3f30636e9d9a66c4b05c93f97cd07b5df1ae3ab3", + "manual" + ], + "wai-aria/spinbutton_all_values_unspecified-manual.html": [ + "6c8b07b26d43d0758022ae98b7d0a4948f3774b2", + "manual" + ], + "wai-aria/spinbutton_only_aria-valuenow_unspecified-manual.html": [ + "e37e9e695b4994d65e404736f615cc1ca3aa8e43", + "manual" + ], + "wai-aria/spinbutton_readonly_false-manual.html": [ + "57ab040f5916928f561ca8aa670ced4759a1dd3b", + "manual" + ], + "wai-aria/spinbutton_readonly_true-manual.html": [ + "7a8fc228f516d5c9b66af0c927f8cc05430fd351", + "manual" + ], + "wai-aria/spinbutton_readonly_unspecified-manual.html": [ + "a1a2fc5e6ad54304c05fb920dab84a49600f4076", + "manual" + ], + "wai-aria/switch_checked_false-manual.html": [ + "fa15dea1f4b4bc7b1aac5035f732920326e97f8f", + "manual" + ], + "wai-aria/switch_checked_mixed-manual.html": [ + "d55ea8551ab16c8d6d0a1cfb1a8c0974c87204cc", + "manual" + ], + "wai-aria/switch_checked_true-manual.html": [ + "baf1617beea35eb2f42ed1597ce6393f2bf8efc0", + "manual" + ], + "wai-aria/switch_checked_undefined-manual.html": [ + "c25629284a5acd599d91d9543a2a2eeee3a717de", + "manual" + ], + "wai-aria/switch_checked_value_changes-manual.html": [ + "4d74746193097d0a8967f1472c7e96bc122b8448", + "manual" + ], + "wai-aria/switch_readonly_false-manual.html": [ + "577993a64256c0894c2ed28fdc50781ac27ce04f", + "manual" + ], + "wai-aria/switch_readonly_true-manual.html": [ + "efc96c374cf33423b49230ea5becfa6ac3d16262", + "manual" + ], + "wai-aria/switch_readonly_unspecified-manual.html": [ + "816bafc802bced572c214c8ab425296ab84789f5", + "manual" + ], + "wai-aria/tab_posinset_and_setsize-manual.html": [ + "346e5c5270d1b1689fd05a6ecae6b7e756406478", + "manual" + ], + "wai-aria/table_colcount_-1-manual.html": [ + "cde4ff838a6a036be876272be42fb72fc8e1688e", + "manual" + ], + "wai-aria/table_colcount_8-manual.html": [ + "c09250107ec06f550f2e73c6949aacbfc21189fe", + "manual" + ], + "wai-aria/table_rowcount_-1-manual.html": [ + "7a3c9f6b33607f42d5797e28baac33431c29161b", + "manual" + ], + "wai-aria/table_rowcount_3-manual.html": [ + "400cb15cd7f415c87a2e46764b371c6194222c52", + "manual" + ], + "wai-aria/tablist_orientation_horizontal-manual.html": [ + "3951505d891a1a30aa9419be6440b877f823e26f", + "manual" + ], + "wai-aria/tablist_orientation_unspecified-manual.html": [ + "3f87b5f653114ff83de54c772302386ea8b5fa6c", + "manual" + ], + "wai-aria/tablist_orientation_vertical-manual.html": [ + "04b81f2596bca71ee915c0fea22f62c05735eb5f", + "manual" + ], + "wai-aria/term_role-manual.html": [ + "e30e255a9a38c567632d9ad4b6eae652a0c7fd70", + "manual" + ], + "wai-aria/textbox_placeholder-manual.html": [ + "e6e613dd04ab2be24fcfb3c04439e72694bbbe34", + "manual" + ], + "wai-aria/toolbar_orientation_horizontal-manual.html": [ + "e73f1accfe2a6f7363e7828a60eff9e6297727d9", + "manual" + ], + "wai-aria/toolbar_orientation_unspecified-manual.html": [ + "55eef19b3b47b045d87d6a1d9766e9f0a275b055", + "manual" + ], + "wai-aria/toolbar_orientation_vertical-manual.html": [ + "c4cae7a5ffd8e51778f8431684f8ee07a26fca06", + "manual" + ], + "wai-aria/tools/convert_wiki.pl": [ + "808a7a8b210e0118ae5d0c3035cd38375ee95b84", + "support" + ], + "wai-aria/tools/make_tests.pl": [ + "0b85da0135983b2f69b881fab53d18b56c0033ff", + "support" + ], + "wai-aria/tree_orientation_horizontal-manual.html": [ + "6b2563e7f29ca7aada9fa96988cccddd379cdaf3", + "manual" + ], + "wai-aria/tree_orientation_unspecified-manual.html": [ + "8c7182ca1a52daaf36d450751332c30f51d5018b", + "manual" + ], + "wai-aria/tree_orientation_vertical-manual.html": [ + "b09f9d7c54c3717198553178df9679f7f6d1a889", + "manual" + ], + "wai-aria/treegrid_colcount_8-manual.html": [ + "25447c872391678dd0a497ac4f3aabb88f283239", + "manual" + ], + "wai-aria/treegrid_orientation_horizontal-manual.html": [ + "ec787bf61b415949f79dc0e3a4ff327ce326f9b0", + "manual" + ], + "wai-aria/treegrid_orientation_unspecified-manual.html": [ + "4314603f45287d36af965fc08c254b731e374d08", + "manual" + ], + "wai-aria/treegrid_orientation_vertical-manual.html": [ + "aac9062cd2beb489325d12929ce6271792b6e9a0", + "manual" + ], + "wai-aria/treegrid_rowcount_3-manual.html": [ + "94405aed60e8e66eb09d9a47c42b7cce7aee18ea", + "manual" + ], + "wai-aria/treeitem_selected_false-manual.html": [ + "5f47782f253083d694e574662be46b7f4cd0e042", + "manual" + ], + "wai-aria/treeitem_selected_true-manual.html": [ + "91341d36056973a3e446a58798d8e5a6693d3403", + "manual" + ], + "wai-aria/treeitem_selected_undefined-manual.html": [ + "8924f1b2deb4239056b8c008bf58baec675ef4df", + "manual" + ], + "wai-aria/treeitem_selected_value_changes-manual.html": [ + "9cb6b12c4743d4a177ad44e62dae6e5ede3bdb78", + "manual" + ], + "wasm/compile_worker.js": [ + "652193b876206d7a0f361f145469a604d03e3784", + "support" + ], + "wasm/incrementer.wasm": [ + "acdf9d22c042ea3b2637c14b1576b4c8ffb4e97a", + "support" + ], + "wasm/resources/blank.html": [ + "0ddb4f1cf84729ed673295719ec58a3e5d600a12", + "support" + ], + "wasm/resources/frame.html": [ + "1fd433c40c7364f6cc396c2a4a02ad5ee9d6cc49", + "support" + ], + "wasm/resources/incrementer.wasm": [ + "acdf9d22c042ea3b2637c14b1576b4c8ffb4e97a", + "support" + ], + "wasm/resources/load_wasm.js": [ + "36981e77dd62c1bdb5cebe0db38d15fc637f2f1d", + "support" + ], + "wasm/resources/service-worker.js": [ + "240ed8ea51a45a84978a20240854ae70e1d460af", + "support" + ], + "wasm/wasm_indexeddb_test.html": [ + "277f1401e7704dec540cacb0784ab8fff55ef8d8", + "testharness" + ], + "wasm/wasm_indexeddb_test.js": [ + "4d17cb27a7541e117e5f7319f8103cabb591c1ce", + "support" + ], + "wasm/wasm_local_iframe_test.html": [ + "dd715a4da792b9d8d634536d938b278230c66df5", + "testharness" + ], + "wasm/wasm_serialization_tests.html": [ + "aa7f9d293f6752b392307b7bd346ac2913874356", + "testharness" + ], + "wasm/wasm_serialization_tests.js": [ + "e5a6d0f1a2218df9b080df7e99b684ddaceb4a11", + "support" + ], + "wasm/wasm_serialization_worker.js": [ + "d70aecce9f01ae39589bf339588d3a3002bed258", + "support" + ], + "wasm/wasm_service_worker_test.html": [ + "894981ab7cb20e72dd683c8063868311ea226838", + "testharness" + ], "web-animations/OWNERS": [ "c4f52fc673833f80178284b30d6fc4bad1f581d2", "support" @@ -601256,6 +619219,10 @@ "d6cb0e31dc3cc6d83b5051cee38a0b8e118fd43f", "support" ], + "web-animations/animation-model/animation-types/accumulation-per-property.html": [ + "316dd15ce99cbfb5754c236210ac9e04dfc0c7ba", + "testharness" + ], "web-animations/animation-model/animation-types/addition-per-property.html": [ "24fae46b5f7b47e1d098fa446037bf9cc52e050e", "testharness" @@ -601269,11 +619236,11 @@ "testharness" ], "web-animations/animation-model/animation-types/property-list.js": [ - "09135b91237467c4fbeeda3fd7b4d459a82ff4fb", + "83a52204cc36f6b757129dae947f03f6a8748bde", "support" ], "web-animations/animation-model/animation-types/property-types.js": [ - "ebccba780b163032d4aba54cdbbf1b892464bcfa", + "66c606f9451cc30ba6d23bcfffcb61871283b0b8", "support" ], "web-animations/animation-model/animation-types/spacing-keyframes-filters.html": [ @@ -601376,10 +619343,6 @@ "b23b76881f4d38c07710d0e59c1f6c8569de9060", "testharness" ], - "web-animations/interfaces/Animation/reverse.html": [ - "669b8b6722a2eed4383574c3fab9738b9702d723", - "testharness" - ], "web-animations/interfaces/Animation/startTime.html": [ "284d55c141e4a93def32393577888ffc215a8b15", "testharness" @@ -601425,7 +619388,7 @@ "testharness" ], "web-animations/interfaces/AnimationTimeline/document-timeline.html": [ - "033c4137ea1fcffc7c32a4cc353009b07b800c4a", + "2df691f77422d0e64833addf0c099e44f9afe051", "testharness" ], "web-animations/interfaces/AnimationTimeline/idlharness.html": [ @@ -601536,6 +619499,10 @@ "2b4f51977d43f9bf90c066bfcc57728ae096b6e9", "testharness" ], + "web-animations/timing-model/animations/reversing-an-animation.html": [ + "2b5631893d0d0846e5e57097ce4ae54dfa8a03e3", + "testharness" + ], "web-animations/timing-model/animations/set-the-animation-start-time.html": [ "84afa495b1a4c467e27b1394f6449a18c58ed98d", "testharness" @@ -601557,11 +619524,11 @@ "testharness" ], "web-nfc/OWNERS": [ - "214e3edd526f674d2bd69f4292c0681e54685a0d", + "d42f3f15d00686bf5a5c7c69169ef5cf2554bd7b", "support" ], "web-nfc/idlharness.https.html": [ - "b44413f6709ec74f6fc809726d0e988c127ef02d", + "83c52be8280bba314116ff1337028ea7835ddf43", "testharness" ], "webaudio/.gitignore": [ @@ -601569,11 +619536,11 @@ "support" ], "webaudio/OWNERS": [ - "d98264a830bdab63db07061e8b25080188e1aeab", + "72bd1a8929367ef9a8f8353d7fc5bda3354477a6", "support" ], "webaudio/README.md": [ - "4c364a7fe763f5d1fa603cfe5ab62234e7a1f9ee", + "230684ec60fd2e408f9b6014417f3eddfe2dc95a", "support" ], "webaudio/js/buffer-loader.js": [ @@ -601697,7 +619664,7 @@ "support" ], "webaudio/the-audio-api/the-constantsourcenode-interface/test-constantsourcenode.html": [ - "7672065b6eb124b55e7c09e5df9f0b1630eb969c", + "711b3f183d847e437a4c332f33054cc5a648fd22", "testharness" ], "webaudio/the-audio-api/the-convolvernode-interface/.gitkeep": [ @@ -601785,7 +619752,7 @@ "support" ], "webaudio/the-audio-api/the-waveshapernode-interface/curve-tests.html": [ - "3c9dc0358862e39dfc3be1d80add650d028283bb", + "cc9f8148b1e7d75a61599a094f9ed21377e97edb", "testharness" ], "webauthn/OWNERS": [ @@ -601833,23 +619800,27 @@ "wdspec" ], "webdriver/actions/key.py": [ - "bbb767c5b75b961d7eeed8960200276fb10fbd03", + "918bcadf034657dfcb679fd92c8a11efe34bfedf", "wdspec" ], "webdriver/actions/mouse.py": [ - "640ae3074200938ad63f77627d6645efa8c5716e", + "823e2b1e5ba200487d0598eecbb051f73b5ea69f", "wdspec" ], "webdriver/actions/sequence.py": [ "d80f382863e52ff223db735a2a551197e570774f", "wdspec" ], + "webdriver/actions/special_keys.py": [ + "b2d6c2fa8852c6299b6bd214f67007efebe3029a", + "wdspec" + ], "webdriver/actions/support/__init__.py": [ "da39a3ee5e6b4b0d3255bfef95601890afd80709", "support" ], "webdriver/actions/support/keys.py": [ - "85bfdbd3203166c2b84616cc1936f6dd98f8de3b", + "636991372c21e52b623ed4ada9dfb675dd7f7e14", "support" ], "webdriver/actions/support/refine.py": [ @@ -601857,15 +619828,23 @@ "support" ], "webdriver/actions/support/test_actions_wdspec.html": [ - "63b5de5ab6c7a00717663a18c3b4d79857ee2136", + "c56cc117512bf9a5b6378dcead8e2640493d23a4", "support" ], "webdriver/conftest.py": [ - "d58492066c9eba232867b4c2928e9e74839d3f8a", + "9d8720123b3b9a6a76d45fe4462965fb32af7158", "wdspec" ], "webdriver/contexts.py": [ - "302a1a0cb246aef74f2c1d961a210d9de7e366c5", + "23308285354163ead68a2e56042ec6703c25620c", + "wdspec" + ], + "webdriver/elements/active.py": [ + "40ac5fcc5db4d489a802f58bb03dfc78563eafa0", + "wdspec" + ], + "webdriver/get_title.py": [ + "7cfc8b7302442c585429094db89c12a042dc9fd2", "wdspec" ], "webdriver/interface.html": [ @@ -601881,11 +619860,11 @@ "support" ], "webdriver/support/asserts.py": [ - "68bde3a7b3e3fe3ecd45e43c9fbc3c1317828e08", + "cf1d298a9dc61b07eb9efe1ff3ed98a318d48bc4", "support" ], "webdriver/support/fixtures.py": [ - "1742e49d5661ce9e5a806fd17c293f6bd502227f", + "3820de38416455a7fc3c351dadfa761bacd9901d", "support" ], "webdriver/support/http_request.py": [ @@ -611352,6 +629331,14 @@ "629bb3f606b84cd201cff2ad420a736f019c0395", "testharness" ], + "webmessaging/broadcastchannel/origin.window.js": [ + "7f906e51a34a5ee36c7407e3d0104c1bfb0c12bb", + "testharness" + ], + "webmessaging/broadcastchannel/resources/origin.html": [ + "480c3aec73713c46808a1345d9f7199896fedb94", + "support" + ], "webmessaging/broadcastchannel/resources/sandboxed.html": [ "19db2a3048a9599dcfc488534fce65bc2a34b6ad", "support" @@ -611416,6 +629403,10 @@ "19fc5d2f7e0f30e9d35a8606c3fb05b537ea3a82", "testharness" ], + "webmessaging/messageerror.html": [ + "92c5359ad64394cb2d30402204968d49227c5daf", + "testharness" + ], "webmessaging/postMessage_ArrayBuffer.sub.htm": [ "ce4d489c97753d15ea9370093fdc3b2fe1592cf1", "testharness" @@ -611705,21 +629696,141 @@ "testharness" ], "webrtc/OWNERS": [ - "07bfd311abbe127d95ac7e49c8615f7948a4949e", + "afb3b4b35f06e38d392fc2ffd57025471a03eec1", "support" ], + "webrtc/RTCCertificate.html": [ + "76e0c5f601c8ba4aefb06d1ebab8454c78fe07df", + "testharness" + ], + "webrtc/RTCConfiguration-iceCandidatePoolSize.html": [ + "7816790d82628acb7cf04e0a046046884c1207e7", + "testharness" + ], + "webrtc/RTCDataChannel-bufferedAmount.html": [ + "49f27767835ae80163b2a2889e6d5e98def5e22a", + "testharness" + ], + "webrtc/RTCDataChannel-id.html": [ + "28ce3983bf04db02c62ed29b332a4a4b612affd2", + "testharness" + ], + "webrtc/RTCDataChannel-send.html": [ + "b8e373314036e3c9e23e7f884f5d6f1eee52f6bf", + "testharness" + ], "webrtc/RTCDataChannelEvent-constructor.html": [ "8a8b30a23abddb5d11a802fead534fd56aacbb62", "testharness" ], + "webrtc/RTCIceCandidate-constructor.html": [ + "6938c88a0167e418aa9e93416865c857cc3489c5", + "testharness" + ], + "webrtc/RTCPeerConnection-addIceCandidate.html": [ + "6ca52e2e6ec19dc38a7cc0a4ce132f7c5de9e398", + "testharness" + ], + "webrtc/RTCPeerConnection-addTransceiver.html": [ + "0ce85d1a83181d1bd0f337c7dbb5443efbda32cd", + "testharness" + ], + "webrtc/RTCPeerConnection-canTrickleIceCandidates.html": [ + "0f585a89bd8f25aa8f83b6ec39b704cbb8e970b2", + "testharness" + ], + "webrtc/RTCPeerConnection-connectionState.html": [ + "a733cd1ae59aace10832a7b5f98913967afb87f1", + "testharness" + ], + "webrtc/RTCPeerConnection-constructor.html": [ + "60e9ec4bec3e3d3b785568be8cf089c959e71813", + "testharness" + ], + "webrtc/RTCPeerConnection-createAnswer.html": [ + "3aa68d867967e466b493a4f6cf27ba4f5839af88", + "testharness" + ], + "webrtc/RTCPeerConnection-createDataChannel.html": [ + "47e58b26cf295fa1a0559ac7de7d1f119cb05106", + "testharness" + ], + "webrtc/RTCPeerConnection-createOffer.html": [ + "07b9d476471b20d827a09a0c8b79a36e48d986b0", + "testharness" + ], + "webrtc/RTCPeerConnection-generateCertificate.html": [ + "27fb46922255203da0fc26a63808aeb98a60b640", + "testharness" + ], + "webrtc/RTCPeerConnection-getTransceivers.html": [ + "498e9cb9d143626fb78839c1c550d05e9a46c22f", + "testharness" + ], + "webrtc/RTCPeerConnection-helper.js": [ + "fbfee08e2b8c5f031780b5efd1139cfe310c89fb", + "support" + ], + "webrtc/RTCPeerConnection-iceConnectionState.html": [ + "dad0787100a817c05dd871bf892a94464916a74a", + "testharness" + ], + "webrtc/RTCPeerConnection-iceGatheringState.html": [ + "ed3226f9673bc0b69c2a9f9ec6e1ccfa8e83e2e2", + "testharness" + ], + "webrtc/RTCPeerConnection-idl.html": [ + "e322b3ab7f8e0bc7ff802f00234a9a6e80b8285a", + "testharness" + ], + "webrtc/RTCPeerConnection-ondatachannel.html": [ + "6096ee14d729894e39eb2217828e8b0a5abc7f19", + "testharness" + ], + "webrtc/RTCPeerConnection-onnegotiationneeded.html": [ + "e74e16479aca577be6673056eef0fd0212ec7151", + "testharness" + ], + "webrtc/RTCPeerConnection-removeTrack.html": [ + "6e0b10df88f69f33ff9aac63975cfea2561f28a0", + "testharness" + ], + "webrtc/RTCPeerConnection-setLocalDescription.html": [ + "3a182c851b4724e34e0baaacb9f0670e741c0e49", + "testharness" + ], + "webrtc/RTCPeerConnection-setRemoteDescription.html": [ + "b3e0010a4e7a17a881c4d4a2dfc010cfad98a79a", + "testharness" + ], "webrtc/RTCPeerConnectionIceEvent-constructor.html": [ - "46bb1ba3a908f99b46a656d34094aae8998ed484", + "f273bd7fdfc883a15e8fb16fef5309061254c6cc", + "testharness" + ], + "webrtc/RTCRtpSender-replaceTrack.html": [ + "9e8eca4fa11cc72471bc48d98bec8e5936111334", + "testharness" + ], + "webrtc/RTCSctpTransport-constructor.html": [ + "3b975dbe89ea36a78df48510bf1db5d06628db0f", "testharness" ], "webrtc/datachannel-emptystring.html": [ "56a37968e489d6ee39a1234ca888dd628f17648e", "testharness" ], + "webrtc/datachannel-idlharness.html": [ + "a1753a9a537a626775194ccc5dfdbf6829c5df35", + "testharness" + ], + "webrtc/getstats.html": [ + "6656998d4adfab0e6ca51c98cd141cf162d3879c", + "testharness" + ], + "webrtc/interfaces.html": [ + "bd71316e6efddce47bb4cf3218b3133f8c69c3db", + "testharness" + ], "webrtc/no-media-call.html": [ "e9f056be5a865f1bb73d60ec72c38f8d5f16d747", "testharness" @@ -611728,30 +629839,6 @@ "f0292ca52ee86920d0fdb8bccae2bc40a8ef99af", "testharness" ], - "webrtc/rtcpeerconnection/canTrickleIceCandidates.html": [ - "0f585a89bd8f25aa8f83b6ec39b704cbb8e970b2", - "testharness" - ], - "webrtc/rtcpeerconnection/iceGatheringState.html": [ - "4f752838326116e65543a10e023a0cbe9c07e9e8", - "testharness" - ], - "webrtc/rtcpeerconnection/rtcconfiguration-icecandidatepoolsize.html": [ - "9551402aed448bf6abde4aa815d174ba321cc655", - "testharness" - ], - "webrtc/rtcpeerconnection/rtcpeerconnection-constructor.html": [ - "54fff02eab02b0be84c945ec7e77afe722d9f988", - "testharness" - ], - "webrtc/rtcpeerconnection/rtcpeerconnection-idl.html": [ - "e322b3ab7f8e0bc7ff802f00234a9a6e80b8285a", - "testharness" - ], - "webrtc/rtcpeerconnection/setRemoteDescription.html": [ - "987ba908b798954a80cdfcfdab476ac0bf62cca0", - "testharness" - ], "webrtc/simplecall.html": [ "ce76df05d5866807a4b58c9509ce66efcddaf3d7", "testharness" @@ -612629,7 +630716,7 @@ "testharness" ], "websockets/opening-handshake/003.html": [ - "e42909561f03341ab160dddb541fc27842ab79cc", + "5bab98fc3a872927771fb59101f6c3c3b6d5423e", "testharness" ], "websockets/opening-handshake/005.html": [ @@ -612944,10 +631031,42 @@ "e455416b72ce1b90a3b82b3fb44c57fba19f29df", "support" ], - "webusb/idlharness.html": [ + "webusb/idlharness.https.html": [ "e402105766a837cd26f6d020663ec4b50b757f86", "testharness" ], + "webusb/resources/check-availability.html": [ + "0c6ef6ab90dab93dde9577cdf1751c3df1e8e52a", + "support" + ], + "webusb/resources/featurepolicytest.js": [ + "a28b28b34371aaae8af41e4ba562fa98cfdf1f12", + "support" + ], + "webusb/usb-allowed-by-feature-policy-attribute.https.sub.html": [ + "37d342e708981b147904fb315f2b2d030ecab613", + "testharness" + ], + "webusb/usb-allowed-by-feature-policy.https.sub.html": [ + "8784cbaba39cd8ebafe22aae0438f54f88f8f288", + "testharness" + ], + "webusb/usb-allowed-by-feature-policy.https.sub.html.headers": [ + "a579c20e4a57dc30372470c685922e6a973a6d84", + "support" + ], + "webusb/usb-default-feature-policy.https.sub.html": [ + "c1e4f73710447815cc36edfc01d2c221b35a954e", + "testharness" + ], + "webusb/usb-disabled-by-feature-policy.https.sub.html": [ + "852f9e5816750a4f79e6205a46437977f15ef90f", + "testharness" + ], + "webusb/usb-disabled-by-feature-policy.https.sub.html.headers": [ + "c8b3c972c90674c75d652a31a8d0b28eec8ca6e7", + "support" + ], "webvr/OWNERS": [ "adb04954bffbb33f29864668db95f5c5367d6a05", "support" @@ -615845,7 +633964,7 @@ "testharness" ], "workers/Worker_ErrorEvent_error.htm": [ - "43f1cd277819f57c7708690ff3a91dde8b2a3af5", + "846776b35359748e8a256fd06eaedc4dcc66a354", "testharness" ], "workers/Worker_ErrorEvent_filename.htm": [ @@ -616013,7 +634132,7 @@ "support" ], "workers/constructors/SharedWorker/null-arguments.html": [ - "9034961b63d92367fd2066be86179a9265fc6503", + "58a6bcb00711dc7fab954a8e030b9073a16d6bd7", "testharness" ], "workers/constructors/SharedWorker/number-arguments.html": [ @@ -616121,7 +634240,7 @@ "support" ], "workers/constructors/Worker/unexpected-self-properties.worker.js": [ - "5ae6b1457d41b9c1cf8d9bf3a0b3abedc77cad72", + "73bc10eac3f8659e1f5e41d3e8a86beec05ed0bc", "testharness" ], "workers/constructors/Worker/unresolvable-url.html": [ @@ -616380,6 +634499,10 @@ "6bffa3be83d81e2faa93119e710e4fee93fb855e", "testharness" ], + "workers/name-property.html": [ + "762b7b4b65503e599560829675a1df07a61dd566", + "testharness" + ], "workers/nested_worker.worker.js": [ "04898c40ac4ff943cc83674ca6126464513abbd6", "testharness" @@ -616505,7 +634628,7 @@ "testharness" ], "workers/semantics/multiple-workers/001.html": [ - "aebec8535ae8a7bff4fa7f1193f3a48160657692", + "7964de6af3e4ed62b14b2484fea746538ef05ca1", "testharness" ], "workers/semantics/multiple-workers/002.html": [ @@ -616637,7 +634760,7 @@ "testharness" ], "workers/semantics/xhr/004.html": [ - "8c9efbc2db75e31605faf263b2ce980252eebbff", + "6846800e9503f339b410608d682dc0976a300da0", "testharness" ], "workers/semantics/xhr/005.html": [ @@ -616660,6 +634783,10 @@ "2c7e385c9ff3066201cc891e589f96ceb50484c0", "support" ], + "workers/shared-worker-name-via-options.html": [ + "78a93e663e1abb37a044ac0934c4ab2ed2c501a9", + "testharness" + ], "workers/support/ErrorEvent-error.js": [ "81db7dd9c9cb9ebbe2bf46629dea976cc6190689", "support" @@ -616716,6 +634843,10 @@ "b0e679dd7720701364abeaca6870d94db5d7ee74", "support" ], + "workers/support/name.js": [ + "af3a704319d8ee15cf7df2638e4c2c5e59af2403", + "support" + ], "workers/support/nosiniff-error-worker.py": [ "aa81cbafc77ccc9407cba3ac0bd4498e5076bf2b", "support" @@ -616723,6 +634854,38 @@ "workers/support/sandboxed-tests.html": [ "89547c85b03f401be7cfc0c29251d5bc55236e44", "support" + ], + "workers/support/shared-name.js": [ + "671ecb263ceb15ca28ef9cfc2ee6efa6e08a70fb", + "support" + ], + "x-frame-options/deny.sub.html": [ + "5a589f4b4c6f2503104b33ae7002dcc5c4153eb7", + "testharness" + ], + "x-frame-options/invalid.sub.html": [ + "0b9d0c5d3bf242e898f6f239d827ce617df27da2", + "testharness" + ], + "x-frame-options/multiple.sub.html": [ + "cd1431494daf1fdca5294de9c49dd4eb3c06d71f", + "testharness" + ], + "x-frame-options/sameorigin.sub.html": [ + "502ac9429cb53cb18a214770172552fe16c3c847", + "testharness" + ], + "x-frame-options/support/helper.js": [ + "6b824846aa40bc5cf25453b123883813da46dbc2", + "support" + ], + "x-frame-options/support/nested.py": [ + "8cfd9ef877a813898ea2f5741ffc56ae1c6f95dc", + "support" + ], + "x-frame-options/support/xfo.py": [ + "722b135e1633e63fbfcb06bca4759a9568a84ee8", + "support" ] }, "url_base": "/", diff --git a/tests/wpt/metadata/WebCryptoAPI/derive_bits_keys/test_ecdh_bits.html.ini b/tests/wpt/metadata/WebCryptoAPI/derive_bits_keys/test_ecdh_bits.html.ini deleted file mode 100644 index effde141c4b..00000000000 --- a/tests/wpt/metadata/WebCryptoAPI/derive_bits_keys/test_ecdh_bits.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[test_ecdh_bits.html] - type: testharness - [WebCryptoAPI: deriveBits() Using ECDH] - expected: FAIL - diff --git a/tests/wpt/metadata/WebCryptoAPI/derive_bits_keys/test_ecdh_keys.html.ini b/tests/wpt/metadata/WebCryptoAPI/derive_bits_keys/test_ecdh_keys.html.ini deleted file mode 100644 index 72469c050f9..00000000000 --- a/tests/wpt/metadata/WebCryptoAPI/derive_bits_keys/test_ecdh_keys.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[test_ecdh_keys.html] - type: testharness - [WebCryptoAPI:deriveKey() Using ECDH] - expected: FAIL - diff --git a/tests/wpt/metadata/WebCryptoAPI/derive_bits_keys/test_hkdf.html.ini b/tests/wpt/metadata/WebCryptoAPI/derive_bits_keys/test_hkdf.html.ini deleted file mode 100644 index 1dae1305828..00000000000 --- a/tests/wpt/metadata/WebCryptoAPI/derive_bits_keys/test_hkdf.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[test_hkdf.html] - type: testharness - [WebCryptoAPI: deriveBits() and deriveKey() Using HKDF] - expected: FAIL - diff --git a/tests/wpt/metadata/WebCryptoAPI/derive_bits_keys/test_pbkdf2.html.ini b/tests/wpt/metadata/WebCryptoAPI/derive_bits_keys/test_pbkdf2.html.ini deleted file mode 100644 index 6d8396bd37d..00000000000 --- a/tests/wpt/metadata/WebCryptoAPI/derive_bits_keys/test_pbkdf2.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[test_pbkdf2.html] - type: testharness - [WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2] - expected: FAIL - diff --git a/tests/wpt/metadata/WebCryptoAPI/digest/test_digest.html.ini b/tests/wpt/metadata/WebCryptoAPI/digest/test_digest.html.ini deleted file mode 100644 index f62ab02d06e..00000000000 --- a/tests/wpt/metadata/WebCryptoAPI/digest/test_digest.html.ini +++ /dev/null @@ -1,242 +0,0 @@ -[test_digest.html] - type: testharness - [SHA-1 with empty source data] - expected: FAIL - - [sha-1 with empty source data] - expected: FAIL - - [Sha-1 with empty source data] - expected: FAIL - - [SHA-1 with empty source data and altered buffer after call] - expected: FAIL - - [SHA-256 with empty source data] - expected: FAIL - - [sha-256 with empty source data] - expected: FAIL - - [Sha-256 with empty source data] - expected: FAIL - - [SHA-256 with empty source data and altered buffer after call] - expected: FAIL - - [SHA-384 with empty source data] - expected: FAIL - - [sha-384 with empty source data] - expected: FAIL - - [Sha-384 with empty source data] - expected: FAIL - - [SHA-384 with empty source data and altered buffer after call] - expected: FAIL - - [SHA-512 with empty source data] - expected: FAIL - - [sha-512 with empty source data] - expected: FAIL - - [Sha-512 with empty source data] - expected: FAIL - - [SHA-512 with empty source data and altered buffer after call] - expected: FAIL - - [SHA-1 with short source data] - expected: FAIL - - [sha-1 with short source data] - expected: FAIL - - [Sha-1 with short source data] - expected: FAIL - - [SHA-1 with short source data and altered buffer after call] - expected: FAIL - - [SHA-256 with short source data] - expected: FAIL - - [sha-256 with short source data] - expected: FAIL - - [Sha-256 with short source data] - expected: FAIL - - [SHA-256 with short source data and altered buffer after call] - expected: FAIL - - [SHA-384 with short source data] - expected: FAIL - - [sha-384 with short source data] - expected: FAIL - - [Sha-384 with short source data] - expected: FAIL - - [SHA-384 with short source data and altered buffer after call] - expected: FAIL - - [SHA-512 with short source data] - expected: FAIL - - [sha-512 with short source data] - expected: FAIL - - [Sha-512 with short source data] - expected: FAIL - - [SHA-512 with short source data and altered buffer after call] - expected: FAIL - - [SHA-1 with medium source data] - expected: FAIL - - [sha-1 with medium source data] - expected: FAIL - - [Sha-1 with medium source data] - expected: FAIL - - [SHA-1 with medium source data and altered buffer after call] - expected: FAIL - - [SHA-256 with medium source data] - expected: FAIL - - [sha-256 with medium source data] - expected: FAIL - - [Sha-256 with medium source data] - expected: FAIL - - [SHA-256 with medium source data and altered buffer after call] - expected: FAIL - - [SHA-384 with medium source data] - expected: FAIL - - [sha-384 with medium source data] - expected: FAIL - - [Sha-384 with medium source data] - expected: FAIL - - [SHA-384 with medium source data and altered buffer after call] - expected: FAIL - - [SHA-512 with medium source data] - expected: FAIL - - [sha-512 with medium source data] - expected: FAIL - - [Sha-512 with medium source data] - expected: FAIL - - [SHA-512 with medium source data and altered buffer after call] - expected: FAIL - - [SHA-1 with long source data] - expected: FAIL - - [sha-1 with long source data] - expected: FAIL - - [Sha-1 with long source data] - expected: FAIL - - [SHA-1 with long source data and altered buffer after call] - expected: FAIL - - [SHA-256 with long source data] - expected: FAIL - - [sha-256 with long source data] - expected: FAIL - - [Sha-256 with long source data] - expected: FAIL - - [SHA-256 with long source data and altered buffer after call] - expected: FAIL - - [SHA-384 with long source data] - expected: FAIL - - [sha-384 with long source data] - expected: FAIL - - [Sha-384 with long source data] - expected: FAIL - - [SHA-384 with long source data and altered buffer after call] - expected: FAIL - - [SHA-512 with long source data] - expected: FAIL - - [sha-512 with long source data] - expected: FAIL - - [Sha-512 with long source data] - expected: FAIL - - [SHA-512 with long source data and altered buffer after call] - expected: FAIL - - [AES-GCM with empty] - expected: FAIL - - [RSA-OAEP with empty] - expected: FAIL - - [PBKDF2 with empty] - expected: FAIL - - [AES-KW with empty] - expected: FAIL - - [AES-GCM with short] - expected: FAIL - - [RSA-OAEP with short] - expected: FAIL - - [PBKDF2 with short] - expected: FAIL - - [AES-KW with short] - expected: FAIL - - [AES-GCM with medium] - expected: FAIL - - [RSA-OAEP with medium] - expected: FAIL - - [PBKDF2 with medium] - expected: FAIL - - [AES-KW with medium] - expected: FAIL - - [AES-GCM with long] - expected: FAIL - - [RSA-OAEP with long] - expected: FAIL - - [PBKDF2 with long] - expected: FAIL - - [AES-KW with long] - expected: FAIL - diff --git a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_aes_cbc.html.ini b/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_aes_cbc.html.ini deleted file mode 100644 index 9e9f3a08e17..00000000000 --- a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_aes_cbc.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[test_aes_cbc.html] - type: testharness - [WebCryptoAPI: encrypt() Using AES-CBC] - expected: FAIL - diff --git a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_aes_ctr.html.ini b/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_aes_ctr.html.ini deleted file mode 100644 index 8e51146ef6d..00000000000 --- a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_aes_ctr.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[test_aes_ctr.html] - type: testharness - [WebCryptoAPI: encrypt() Using AES-CTR] - expected: FAIL - diff --git a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_aes_gcm.html.ini b/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_aes_gcm.html.ini deleted file mode 100644 index 1d47a68a696..00000000000 --- a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_aes_gcm.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[test_aes_gcm.html] - type: testharness - [WebCryptoAPI: encrypt() Using AES-GCM] - expected: FAIL - diff --git a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_rsa_oaep.html.ini b/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_rsa_oaep.html.ini deleted file mode 100644 index 2000648fe62..00000000000 --- a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_rsa_oaep.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[test_rsa_oaep.html] - type: testharness - [WebCryptoAPI: encrypt() Using RSA-OAEP] - expected: FAIL - diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_aes-cbc.html.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/test_aes-cbc.html.ini deleted file mode 100644 index 5fbc1bebef4..00000000000 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_aes-cbc.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[test_aes-cbc.html] - type: testharness - [WebCryptoAPI: generateKey() Successful Calls] - expected: FAIL - diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_aes-ctr.html.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/test_aes-ctr.html.ini deleted file mode 100644 index 7a77abc1d7b..00000000000 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_aes-ctr.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[test_aes-ctr.html] - type: testharness - [WebCryptoAPI: generateKey() Successful Calls] - expected: FAIL - diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_failures.html.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/test_failures.html.ini deleted file mode 100644 index 429ca067925..00000000000 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_failures.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[test_failures.html] - type: testharness - [WebCryptoAPI: generateKey() for Failures] - expected: FAIL - diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_failures_AES-CBC.html.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/test_failures_AES-CBC.html.ini deleted file mode 100644 index 44467f71caa..00000000000 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_failures_AES-CBC.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[test_failures_AES-CBC.html] - type: testharness - [WebCryptoAPI: generateKey() for Failures] - expected: FAIL - diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_failures_AES-CTR.html.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/test_failures_AES-CTR.html.ini deleted file mode 100644 index b54841509d6..00000000000 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_failures_AES-CTR.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[test_failures_AES-CTR.html] - type: testharness - [WebCryptoAPI: generateKey() for Failures] - expected: FAIL - diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_failures_AES-GCM.html.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/test_failures_AES-GCM.html.ini deleted file mode 100644 index 9f6e655633b..00000000000 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_failures_AES-GCM.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[test_failures_AES-GCM.html] - type: testharness - [WebCryptoAPI: generateKey() for Failures] - expected: FAIL - diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_failures_AES-KW.html.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/test_failures_AES-KW.html.ini deleted file mode 100644 index e3b35d818fb..00000000000 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_failures_AES-KW.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[test_failures_AES-KW.html] - type: testharness - [WebCryptoAPI: generateKey() for Failures] - expected: FAIL - diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_failures_ECDH.html.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/test_failures_ECDH.html.ini deleted file mode 100644 index a6f1b7272c6..00000000000 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_failures_ECDH.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[test_failures_ECDH.html] - type: testharness - [WebCryptoAPI: generateKey() for Failures] - expected: FAIL - diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_failures_ECDSA.html.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/test_failures_ECDSA.html.ini deleted file mode 100644 index 08369a60a4d..00000000000 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_failures_ECDSA.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[test_failures_ECDSA.html] - type: testharness - [WebCryptoAPI: generateKey() for Failures] - expected: FAIL - diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_failures_HMAC.html.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/test_failures_HMAC.html.ini deleted file mode 100644 index ad476c4c120..00000000000 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_failures_HMAC.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[test_failures_HMAC.html] - type: testharness - [WebCryptoAPI: generateKey() for Failures] - expected: FAIL - diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_failures_RSA-OAEP.html.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/test_failures_RSA-OAEP.html.ini deleted file mode 100644 index 1eba4462097..00000000000 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_failures_RSA-OAEP.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[test_failures_RSA-OAEP.html] - type: testharness - [WebCryptoAPI: generateKey() for Failures] - expected: FAIL - diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_failures_RSA-PSS.html.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/test_failures_RSA-PSS.html.ini deleted file mode 100644 index 13a1319d754..00000000000 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_failures_RSA-PSS.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[test_failures_RSA-PSS.html] - type: testharness - [WebCryptoAPI: generateKey() for Failures] - expected: FAIL - diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_failures_RSASSA-PKCS1-v1_5.html.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/test_failures_RSASSA-PKCS1-v1_5.html.ini deleted file mode 100644 index 7ef4f627b00..00000000000 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_failures_RSASSA-PKCS1-v1_5.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[test_failures_RSASSA-PKCS1-v1_5.html] - type: testharness - [WebCryptoAPI: generateKey() for Failures] - expected: FAIL - diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_successes.html.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/test_successes.html.ini deleted file mode 100644 index bdec50f137b..00000000000 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_successes.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[test_successes.html] - type: testharness - [WebCryptoAPI: generateKey() Successful Calls] - expected: FAIL - diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_successes_AES-CBC.html.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/test_successes_AES-CBC.html.ini deleted file mode 100644 index 056c14c5003..00000000000 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_successes_AES-CBC.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[test_successes_AES-CBC.html] - type: testharness - [WebCryptoAPI: generateKey() Successful Calls] - expected: FAIL - diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_successes_AES-CTR.html.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/test_successes_AES-CTR.html.ini deleted file mode 100644 index b06f70316fb..00000000000 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_successes_AES-CTR.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[test_successes_AES-CTR.html] - type: testharness - [WebCryptoAPI: generateKey() Successful Calls] - expected: FAIL - diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_successes_AES-GCM.html.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/test_successes_AES-GCM.html.ini deleted file mode 100644 index 1088756391c..00000000000 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_successes_AES-GCM.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[test_successes_AES-GCM.html] - type: testharness - [WebCryptoAPI: generateKey() Successful Calls] - expected: FAIL - diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_successes_AES-KW.html.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/test_successes_AES-KW.html.ini deleted file mode 100644 index 2efc157bed4..00000000000 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_successes_AES-KW.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[test_successes_AES-KW.html] - type: testharness - [WebCryptoAPI: generateKey() Successful Calls] - expected: FAIL - diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_successes_ECDH.html.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/test_successes_ECDH.html.ini deleted file mode 100644 index 57accd7cdc9..00000000000 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_successes_ECDH.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[test_successes_ECDH.html] - type: testharness - [WebCryptoAPI: generateKey() Successful Calls] - expected: FAIL - diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_successes_ECDSA.html.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/test_successes_ECDSA.html.ini deleted file mode 100644 index 564d22aabd3..00000000000 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_successes_ECDSA.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[test_successes_ECDSA.html] - type: testharness - [WebCryptoAPI: generateKey() Successful Calls] - expected: FAIL - diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_successes_HMAC.html.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/test_successes_HMAC.html.ini deleted file mode 100644 index 1f4b793b581..00000000000 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_successes_HMAC.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[test_successes_HMAC.html] - type: testharness - [WebCryptoAPI: generateKey() Successful Calls] - expected: FAIL - diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_successes_RSA-OAEP.html.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/test_successes_RSA-OAEP.html.ini deleted file mode 100644 index c04c0c3d0ea..00000000000 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_successes_RSA-OAEP.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[test_successes_RSA-OAEP.html] - type: testharness - [WebCryptoAPI: generateKey() Successful Calls] - expected: FAIL - diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_successes_RSA-PSS.html.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/test_successes_RSA-PSS.html.ini deleted file mode 100644 index 9d052e7dc1d..00000000000 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_successes_RSA-PSS.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[test_successes_RSA-PSS.html] - type: testharness - [WebCryptoAPI: generateKey() Successful Calls] - expected: FAIL - diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_successes_RSASSA-PKCS1-v1_5.html.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/test_successes_RSASSA-PKCS1-v1_5.html.ini deleted file mode 100644 index 29fd9c6746e..00000000000 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_successes_RSASSA-PKCS1-v1_5.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[test_successes_RSASSA-PKCS1-v1_5.html] - type: testharness - [WebCryptoAPI: generateKey() Successful Calls] - expected: FAIL - diff --git a/tests/wpt/metadata/WebCryptoAPI/import_export/test_ec_importKey.html.ini b/tests/wpt/metadata/WebCryptoAPI/import_export/test_ec_importKey.html.ini deleted file mode 100644 index 67e0e667500..00000000000 --- a/tests/wpt/metadata/WebCryptoAPI/import_export/test_ec_importKey.html.ini +++ /dev/null @@ -1,218 +0,0 @@ -[test_ec_importKey.html] - type: testharness - [Good parameters: P-256 bits (spki, buffer(91), {name: ECDSA, namedCurve: P-256}, true, [\])] - expected: FAIL - - [Good parameters: P-256 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-256}, true, [\])] - expected: FAIL - - [Good parameters: P-256 bits (pkcs8, buffer(138), {name: ECDSA, namedCurve: P-256}, true, [sign\])] - expected: FAIL - - [Good parameters: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-256}, true, [sign\])] - expected: FAIL - - [Good parameters: P-256 bits (spki, buffer(91), {name: ECDSA, namedCurve: P-256}, false, [\])] - expected: FAIL - - [Good parameters: P-256 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-256}, false, [\])] - expected: FAIL - - [Good parameters: P-256 bits (pkcs8, buffer(138), {name: ECDSA, namedCurve: P-256}, false, [sign\])] - expected: FAIL - - [Good parameters: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-256}, false, [sign\])] - expected: FAIL - - [Good parameters: P-384 bits (spki, buffer(120), {name: ECDSA, namedCurve: P-384}, true, [\])] - expected: FAIL - - [Good parameters: P-384 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-384}, true, [\])] - expected: FAIL - - [Good parameters: P-384 bits (pkcs8, buffer(185), {name: ECDSA, namedCurve: P-384}, true, [sign\])] - expected: FAIL - - [Good parameters: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-384}, true, [sign\])] - expected: FAIL - - [Good parameters: P-384 bits (spki, buffer(120), {name: ECDSA, namedCurve: P-384}, false, [\])] - expected: FAIL - - [Good parameters: P-384 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-384}, false, [\])] - expected: FAIL - - [Good parameters: P-384 bits (pkcs8, buffer(185), {name: ECDSA, namedCurve: P-384}, false, [sign\])] - expected: FAIL - - [Good parameters: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-384}, false, [sign\])] - expected: FAIL - - [Good parameters: P-521 bits (spki, buffer(158), {name: ECDSA, namedCurve: P-521}, true, [\])] - expected: FAIL - - [Good parameters: P-521 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-521}, true, [\])] - expected: FAIL - - [Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDSA, namedCurve: P-521}, true, [sign\])] - expected: FAIL - - [Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-521}, true, [sign\])] - expected: FAIL - - [Good parameters: P-521 bits (spki, buffer(158), {name: ECDSA, namedCurve: P-521}, false, [\])] - expected: FAIL - - [Good parameters: P-521 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-521}, false, [\])] - expected: FAIL - - [Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDSA, namedCurve: P-521}, false, [sign\])] - expected: FAIL - - [Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-521}, false, [sign\])] - expected: FAIL - - [Good parameters: P-256 bits (spki, buffer(91), {name: ECDH, namedCurve: P-256}, true, [\])] - expected: FAIL - - [Good parameters: P-256 bits (jwk, object(kty, crv, x, y), {name: ECDH, namedCurve: P-256}, true, [\])] - expected: FAIL - - [Good parameters: P-256 bits (pkcs8, buffer(138), {name: ECDH, namedCurve: P-256}, true, [deriveKey\])] - expected: FAIL - - [Good parameters: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-256}, true, [deriveKey\])] - expected: FAIL - - [Good parameters: P-256 bits (pkcs8, buffer(138), {name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey\])] - expected: FAIL - - [Good parameters: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey\])] - expected: FAIL - - [Good parameters: P-256 bits (pkcs8, buffer(138), {name: ECDH, namedCurve: P-256}, true, [deriveBits\])] - expected: FAIL - - [Good parameters: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-256}, true, [deriveBits\])] - expected: FAIL - - [Good parameters: P-256 bits (spki, buffer(91), {name: ECDH, namedCurve: P-256}, false, [\])] - expected: FAIL - - [Good parameters: P-256 bits (jwk, object(kty, crv, x, y), {name: ECDH, namedCurve: P-256}, false, [\])] - expected: FAIL - - [Good parameters: P-256 bits (pkcs8, buffer(138), {name: ECDH, namedCurve: P-256}, false, [deriveKey\])] - expected: FAIL - - [Good parameters: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-256}, false, [deriveKey\])] - expected: FAIL - - [Good parameters: P-256 bits (pkcs8, buffer(138), {name: ECDH, namedCurve: P-256}, false, [deriveBits, deriveKey\])] - expected: FAIL - - [Good parameters: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-256}, false, [deriveBits, deriveKey\])] - expected: FAIL - - [Good parameters: P-256 bits (pkcs8, buffer(138), {name: ECDH, namedCurve: P-256}, false, [deriveBits\])] - expected: FAIL - - [Good parameters: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-256}, false, [deriveBits\])] - expected: FAIL - - [Good parameters: P-384 bits (spki, buffer(120), {name: ECDH, namedCurve: P-384}, true, [\])] - expected: FAIL - - [Good parameters: P-384 bits (jwk, object(kty, crv, x, y), {name: ECDH, namedCurve: P-384}, true, [\])] - expected: FAIL - - [Good parameters: P-384 bits (pkcs8, buffer(185), {name: ECDH, namedCurve: P-384}, true, [deriveKey\])] - expected: FAIL - - [Good parameters: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-384}, true, [deriveKey\])] - expected: FAIL - - [Good parameters: P-384 bits (pkcs8, buffer(185), {name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey\])] - expected: FAIL - - [Good parameters: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey\])] - expected: FAIL - - [Good parameters: P-384 bits (pkcs8, buffer(185), {name: ECDH, namedCurve: P-384}, true, [deriveBits\])] - expected: FAIL - - [Good parameters: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-384}, true, [deriveBits\])] - expected: FAIL - - [Good parameters: P-384 bits (spki, buffer(120), {name: ECDH, namedCurve: P-384}, false, [\])] - expected: FAIL - - [Good parameters: P-384 bits (jwk, object(kty, crv, x, y), {name: ECDH, namedCurve: P-384}, false, [\])] - expected: FAIL - - [Good parameters: P-384 bits (pkcs8, buffer(185), {name: ECDH, namedCurve: P-384}, false, [deriveKey\])] - expected: FAIL - - [Good parameters: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-384}, false, [deriveKey\])] - expected: FAIL - - [Good parameters: P-384 bits (pkcs8, buffer(185), {name: ECDH, namedCurve: P-384}, false, [deriveBits, deriveKey\])] - expected: FAIL - - [Good parameters: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-384}, false, [deriveBits, deriveKey\])] - expected: FAIL - - [Good parameters: P-384 bits (pkcs8, buffer(185), {name: ECDH, namedCurve: P-384}, false, [deriveBits\])] - expected: FAIL - - [Good parameters: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-384}, false, [deriveBits\])] - expected: FAIL - - [Good parameters: P-521 bits (spki, buffer(158), {name: ECDH, namedCurve: P-521}, true, [\])] - expected: FAIL - - [Good parameters: P-521 bits (jwk, object(kty, crv, x, y), {name: ECDH, namedCurve: P-521}, true, [\])] - expected: FAIL - - [Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDH, namedCurve: P-521}, true, [deriveKey\])] - expected: FAIL - - [Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-521}, true, [deriveKey\])] - expected: FAIL - - [Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey\])] - expected: FAIL - - [Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey\])] - expected: FAIL - - [Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDH, namedCurve: P-521}, true, [deriveBits\])] - expected: FAIL - - [Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-521}, true, [deriveBits\])] - expected: FAIL - - [Good parameters: P-521 bits (spki, buffer(158), {name: ECDH, namedCurve: P-521}, false, [\])] - expected: FAIL - - [Good parameters: P-521 bits (jwk, object(kty, crv, x, y), {name: ECDH, namedCurve: P-521}, false, [\])] - expected: FAIL - - [Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDH, namedCurve: P-521}, false, [deriveKey\])] - expected: FAIL - - [Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-521}, false, [deriveKey\])] - expected: FAIL - - [Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDH, namedCurve: P-521}, false, [deriveBits, deriveKey\])] - expected: FAIL - - [Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-521}, false, [deriveBits, deriveKey\])] - expected: FAIL - - [Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDH, namedCurve: P-521}, false, [deriveBits\])] - expected: FAIL - - [Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-521}, false, [deriveBits\])] - expected: FAIL - diff --git a/tests/wpt/metadata/WebCryptoAPI/import_export/test_rsa_importKey.html.ini b/tests/wpt/metadata/WebCryptoAPI/import_export/test_rsa_importKey.html.ini deleted file mode 100644 index ec9d5a3900f..00000000000 --- a/tests/wpt/metadata/WebCryptoAPI/import_export/test_rsa_importKey.html.ini +++ /dev/null @@ -1,1442 +0,0 @@ -[test_rsa_importKey.html] - type: testharness - [Good parameters: 1024 bits (spki, buffer(162), {hash: SHA-1, name: RSA-OAEP}, true, [encrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e), {hash: SHA-1, name: RSA-OAEP}, true, [encrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (spki, buffer(162), {hash: SHA-1, name: RSA-OAEP}, true, [wrapKey, encrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e), {hash: SHA-1, name: RSA-OAEP}, true, [wrapKey, encrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (spki, buffer(162), {hash: SHA-1, name: RSA-OAEP}, true, [wrapKey\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e), {hash: SHA-1, name: RSA-OAEP}, true, [wrapKey\])] - expected: FAIL - - [Good parameters: 1024 bits (pkcs8, buffer(636), {hash: SHA-1, name: RSA-OAEP}, true, [decrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-1, name: RSA-OAEP}, true, [decrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (pkcs8, buffer(636), {hash: SHA-1, name: RSA-OAEP}, true, [unwrapKey, decrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-1, name: RSA-OAEP}, true, [unwrapKey, decrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (pkcs8, buffer(636), {hash: SHA-1, name: RSA-OAEP}, true, [unwrapKey\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-1, name: RSA-OAEP}, true, [unwrapKey\])] - expected: FAIL - - [Good parameters: 1024 bits (spki, buffer(162), {hash: SHA-1, name: RSA-OAEP}, false, [encrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e), {hash: SHA-1, name: RSA-OAEP}, false, [encrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (spki, buffer(162), {hash: SHA-1, name: RSA-OAEP}, false, [wrapKey, encrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e), {hash: SHA-1, name: RSA-OAEP}, false, [wrapKey, encrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (spki, buffer(162), {hash: SHA-1, name: RSA-OAEP}, false, [wrapKey\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e), {hash: SHA-1, name: RSA-OAEP}, false, [wrapKey\])] - expected: FAIL - - [Good parameters: 1024 bits (pkcs8, buffer(636), {hash: SHA-1, name: RSA-OAEP}, false, [decrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-1, name: RSA-OAEP}, false, [decrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (pkcs8, buffer(636), {hash: SHA-1, name: RSA-OAEP}, false, [unwrapKey, decrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-1, name: RSA-OAEP}, false, [unwrapKey, decrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (pkcs8, buffer(636), {hash: SHA-1, name: RSA-OAEP}, false, [unwrapKey\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-1, name: RSA-OAEP}, false, [unwrapKey\])] - expected: FAIL - - [Good parameters: 1024 bits (spki, buffer(162), {hash: SHA-256, name: RSA-OAEP}, true, [encrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e), {hash: SHA-256, name: RSA-OAEP}, true, [encrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (spki, buffer(162), {hash: SHA-256, name: RSA-OAEP}, true, [wrapKey, encrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e), {hash: SHA-256, name: RSA-OAEP}, true, [wrapKey, encrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (spki, buffer(162), {hash: SHA-256, name: RSA-OAEP}, true, [wrapKey\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e), {hash: SHA-256, name: RSA-OAEP}, true, [wrapKey\])] - expected: FAIL - - [Good parameters: 1024 bits (pkcs8, buffer(636), {hash: SHA-256, name: RSA-OAEP}, true, [decrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-256, name: RSA-OAEP}, true, [decrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (pkcs8, buffer(636), {hash: SHA-256, name: RSA-OAEP}, true, [unwrapKey, decrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-256, name: RSA-OAEP}, true, [unwrapKey, decrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (pkcs8, buffer(636), {hash: SHA-256, name: RSA-OAEP}, true, [unwrapKey\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-256, name: RSA-OAEP}, true, [unwrapKey\])] - expected: FAIL - - [Good parameters: 1024 bits (spki, buffer(162), {hash: SHA-256, name: RSA-OAEP}, false, [encrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e), {hash: SHA-256, name: RSA-OAEP}, false, [encrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (spki, buffer(162), {hash: SHA-256, name: RSA-OAEP}, false, [wrapKey, encrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e), {hash: SHA-256, name: RSA-OAEP}, false, [wrapKey, encrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (spki, buffer(162), {hash: SHA-256, name: RSA-OAEP}, false, [wrapKey\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e), {hash: SHA-256, name: RSA-OAEP}, false, [wrapKey\])] - expected: FAIL - - [Good parameters: 1024 bits (pkcs8, buffer(636), {hash: SHA-256, name: RSA-OAEP}, false, [decrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-256, name: RSA-OAEP}, false, [decrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (pkcs8, buffer(636), {hash: SHA-256, name: RSA-OAEP}, false, [unwrapKey, decrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-256, name: RSA-OAEP}, false, [unwrapKey, decrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (pkcs8, buffer(636), {hash: SHA-256, name: RSA-OAEP}, false, [unwrapKey\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-256, name: RSA-OAEP}, false, [unwrapKey\])] - expected: FAIL - - [Good parameters: 1024 bits (spki, buffer(162), {hash: SHA-384, name: RSA-OAEP}, true, [encrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e), {hash: SHA-384, name: RSA-OAEP}, true, [encrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (spki, buffer(162), {hash: SHA-384, name: RSA-OAEP}, true, [wrapKey, encrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e), {hash: SHA-384, name: RSA-OAEP}, true, [wrapKey, encrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (spki, buffer(162), {hash: SHA-384, name: RSA-OAEP}, true, [wrapKey\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e), {hash: SHA-384, name: RSA-OAEP}, true, [wrapKey\])] - expected: FAIL - - [Good parameters: 1024 bits (pkcs8, buffer(636), {hash: SHA-384, name: RSA-OAEP}, true, [decrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-384, name: RSA-OAEP}, true, [decrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (pkcs8, buffer(636), {hash: SHA-384, name: RSA-OAEP}, true, [unwrapKey, decrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-384, name: RSA-OAEP}, true, [unwrapKey, decrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (pkcs8, buffer(636), {hash: SHA-384, name: RSA-OAEP}, true, [unwrapKey\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-384, name: RSA-OAEP}, true, [unwrapKey\])] - expected: FAIL - - [Good parameters: 1024 bits (spki, buffer(162), {hash: SHA-384, name: RSA-OAEP}, false, [encrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e), {hash: SHA-384, name: RSA-OAEP}, false, [encrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (spki, buffer(162), {hash: SHA-384, name: RSA-OAEP}, false, [wrapKey, encrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e), {hash: SHA-384, name: RSA-OAEP}, false, [wrapKey, encrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (spki, buffer(162), {hash: SHA-384, name: RSA-OAEP}, false, [wrapKey\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e), {hash: SHA-384, name: RSA-OAEP}, false, [wrapKey\])] - expected: FAIL - - [Good parameters: 1024 bits (pkcs8, buffer(636), {hash: SHA-384, name: RSA-OAEP}, false, [decrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-384, name: RSA-OAEP}, false, [decrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (pkcs8, buffer(636), {hash: SHA-384, name: RSA-OAEP}, false, [unwrapKey, decrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-384, name: RSA-OAEP}, false, [unwrapKey, decrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (pkcs8, buffer(636), {hash: SHA-384, name: RSA-OAEP}, false, [unwrapKey\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-384, name: RSA-OAEP}, false, [unwrapKey\])] - expected: FAIL - - [Good parameters: 1024 bits (spki, buffer(162), {hash: SHA-512, name: RSA-OAEP}, true, [encrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e), {hash: SHA-512, name: RSA-OAEP}, true, [encrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (spki, buffer(162), {hash: SHA-512, name: RSA-OAEP}, true, [wrapKey, encrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e), {hash: SHA-512, name: RSA-OAEP}, true, [wrapKey, encrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (spki, buffer(162), {hash: SHA-512, name: RSA-OAEP}, true, [wrapKey\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e), {hash: SHA-512, name: RSA-OAEP}, true, [wrapKey\])] - expected: FAIL - - [Good parameters: 1024 bits (pkcs8, buffer(636), {hash: SHA-512, name: RSA-OAEP}, true, [decrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-512, name: RSA-OAEP}, true, [decrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (pkcs8, buffer(636), {hash: SHA-512, name: RSA-OAEP}, true, [unwrapKey, decrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-512, name: RSA-OAEP}, true, [unwrapKey, decrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (pkcs8, buffer(636), {hash: SHA-512, name: RSA-OAEP}, true, [unwrapKey\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-512, name: RSA-OAEP}, true, [unwrapKey\])] - expected: FAIL - - [Good parameters: 1024 bits (spki, buffer(162), {hash: SHA-512, name: RSA-OAEP}, false, [encrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e), {hash: SHA-512, name: RSA-OAEP}, false, [encrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (spki, buffer(162), {hash: SHA-512, name: RSA-OAEP}, false, [wrapKey, encrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e), {hash: SHA-512, name: RSA-OAEP}, false, [wrapKey, encrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (spki, buffer(162), {hash: SHA-512, name: RSA-OAEP}, false, [wrapKey\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e), {hash: SHA-512, name: RSA-OAEP}, false, [wrapKey\])] - expected: FAIL - - [Good parameters: 1024 bits (pkcs8, buffer(636), {hash: SHA-512, name: RSA-OAEP}, false, [decrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-512, name: RSA-OAEP}, false, [decrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (pkcs8, buffer(636), {hash: SHA-512, name: RSA-OAEP}, false, [unwrapKey, decrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-512, name: RSA-OAEP}, false, [unwrapKey, decrypt\])] - expected: FAIL - - [Good parameters: 1024 bits (pkcs8, buffer(636), {hash: SHA-512, name: RSA-OAEP}, false, [unwrapKey\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-512, name: RSA-OAEP}, false, [unwrapKey\])] - expected: FAIL - - [Good parameters: 2048 bits (spki, buffer(294), {hash: SHA-1, name: RSA-OAEP}, true, [encrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e), {hash: SHA-1, name: RSA-OAEP}, true, [encrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (spki, buffer(294), {hash: SHA-1, name: RSA-OAEP}, true, [wrapKey, encrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e), {hash: SHA-1, name: RSA-OAEP}, true, [wrapKey, encrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (spki, buffer(294), {hash: SHA-1, name: RSA-OAEP}, true, [wrapKey\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e), {hash: SHA-1, name: RSA-OAEP}, true, [wrapKey\])] - expected: FAIL - - [Good parameters: 2048 bits (pkcs8, buffer(1218), {hash: SHA-1, name: RSA-OAEP}, true, [decrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-1, name: RSA-OAEP}, true, [decrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (pkcs8, buffer(1218), {hash: SHA-1, name: RSA-OAEP}, true, [unwrapKey, decrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-1, name: RSA-OAEP}, true, [unwrapKey, decrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (pkcs8, buffer(1218), {hash: SHA-1, name: RSA-OAEP}, true, [unwrapKey\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-1, name: RSA-OAEP}, true, [unwrapKey\])] - expected: FAIL - - [Good parameters: 2048 bits (spki, buffer(294), {hash: SHA-1, name: RSA-OAEP}, false, [encrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e), {hash: SHA-1, name: RSA-OAEP}, false, [encrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (spki, buffer(294), {hash: SHA-1, name: RSA-OAEP}, false, [wrapKey, encrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e), {hash: SHA-1, name: RSA-OAEP}, false, [wrapKey, encrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (spki, buffer(294), {hash: SHA-1, name: RSA-OAEP}, false, [wrapKey\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e), {hash: SHA-1, name: RSA-OAEP}, false, [wrapKey\])] - expected: FAIL - - [Good parameters: 2048 bits (pkcs8, buffer(1218), {hash: SHA-1, name: RSA-OAEP}, false, [decrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-1, name: RSA-OAEP}, false, [decrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (pkcs8, buffer(1218), {hash: SHA-1, name: RSA-OAEP}, false, [unwrapKey, decrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-1, name: RSA-OAEP}, false, [unwrapKey, decrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (pkcs8, buffer(1218), {hash: SHA-1, name: RSA-OAEP}, false, [unwrapKey\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-1, name: RSA-OAEP}, false, [unwrapKey\])] - expected: FAIL - - [Good parameters: 2048 bits (spki, buffer(294), {hash: SHA-256, name: RSA-OAEP}, true, [encrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e), {hash: SHA-256, name: RSA-OAEP}, true, [encrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (spki, buffer(294), {hash: SHA-256, name: RSA-OAEP}, true, [wrapKey, encrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e), {hash: SHA-256, name: RSA-OAEP}, true, [wrapKey, encrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (spki, buffer(294), {hash: SHA-256, name: RSA-OAEP}, true, [wrapKey\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e), {hash: SHA-256, name: RSA-OAEP}, true, [wrapKey\])] - expected: FAIL - - [Good parameters: 2048 bits (pkcs8, buffer(1218), {hash: SHA-256, name: RSA-OAEP}, true, [decrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-256, name: RSA-OAEP}, true, [decrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (pkcs8, buffer(1218), {hash: SHA-256, name: RSA-OAEP}, true, [unwrapKey, decrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-256, name: RSA-OAEP}, true, [unwrapKey, decrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (pkcs8, buffer(1218), {hash: SHA-256, name: RSA-OAEP}, true, [unwrapKey\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-256, name: RSA-OAEP}, true, [unwrapKey\])] - expected: FAIL - - [Good parameters: 2048 bits (spki, buffer(294), {hash: SHA-256, name: RSA-OAEP}, false, [encrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e), {hash: SHA-256, name: RSA-OAEP}, false, [encrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (spki, buffer(294), {hash: SHA-256, name: RSA-OAEP}, false, [wrapKey, encrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e), {hash: SHA-256, name: RSA-OAEP}, false, [wrapKey, encrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (spki, buffer(294), {hash: SHA-256, name: RSA-OAEP}, false, [wrapKey\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e), {hash: SHA-256, name: RSA-OAEP}, false, [wrapKey\])] - expected: FAIL - - [Good parameters: 2048 bits (pkcs8, buffer(1218), {hash: SHA-256, name: RSA-OAEP}, false, [decrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-256, name: RSA-OAEP}, false, [decrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (pkcs8, buffer(1218), {hash: SHA-256, name: RSA-OAEP}, false, [unwrapKey, decrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-256, name: RSA-OAEP}, false, [unwrapKey, decrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (pkcs8, buffer(1218), {hash: SHA-256, name: RSA-OAEP}, false, [unwrapKey\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-256, name: RSA-OAEP}, false, [unwrapKey\])] - expected: FAIL - - [Good parameters: 2048 bits (spki, buffer(294), {hash: SHA-384, name: RSA-OAEP}, true, [encrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e), {hash: SHA-384, name: RSA-OAEP}, true, [encrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (spki, buffer(294), {hash: SHA-384, name: RSA-OAEP}, true, [wrapKey, encrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e), {hash: SHA-384, name: RSA-OAEP}, true, [wrapKey, encrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (spki, buffer(294), {hash: SHA-384, name: RSA-OAEP}, true, [wrapKey\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e), {hash: SHA-384, name: RSA-OAEP}, true, [wrapKey\])] - expected: FAIL - - [Good parameters: 2048 bits (pkcs8, buffer(1218), {hash: SHA-384, name: RSA-OAEP}, true, [decrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-384, name: RSA-OAEP}, true, [decrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (pkcs8, buffer(1218), {hash: SHA-384, name: RSA-OAEP}, true, [unwrapKey, decrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-384, name: RSA-OAEP}, true, [unwrapKey, decrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (pkcs8, buffer(1218), {hash: SHA-384, name: RSA-OAEP}, true, [unwrapKey\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-384, name: RSA-OAEP}, true, [unwrapKey\])] - expected: FAIL - - [Good parameters: 2048 bits (spki, buffer(294), {hash: SHA-384, name: RSA-OAEP}, false, [encrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e), {hash: SHA-384, name: RSA-OAEP}, false, [encrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (spki, buffer(294), {hash: SHA-384, name: RSA-OAEP}, false, [wrapKey, encrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e), {hash: SHA-384, name: RSA-OAEP}, false, [wrapKey, encrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (spki, buffer(294), {hash: SHA-384, name: RSA-OAEP}, false, [wrapKey\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e), {hash: SHA-384, name: RSA-OAEP}, false, [wrapKey\])] - expected: FAIL - - [Good parameters: 2048 bits (pkcs8, buffer(1218), {hash: SHA-384, name: RSA-OAEP}, false, [decrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-384, name: RSA-OAEP}, false, [decrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (pkcs8, buffer(1218), {hash: SHA-384, name: RSA-OAEP}, false, [unwrapKey, decrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-384, name: RSA-OAEP}, false, [unwrapKey, decrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (pkcs8, buffer(1218), {hash: SHA-384, name: RSA-OAEP}, false, [unwrapKey\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-384, name: RSA-OAEP}, false, [unwrapKey\])] - expected: FAIL - - [Good parameters: 2048 bits (spki, buffer(294), {hash: SHA-512, name: RSA-OAEP}, true, [encrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e), {hash: SHA-512, name: RSA-OAEP}, true, [encrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (spki, buffer(294), {hash: SHA-512, name: RSA-OAEP}, true, [wrapKey, encrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e), {hash: SHA-512, name: RSA-OAEP}, true, [wrapKey, encrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (spki, buffer(294), {hash: SHA-512, name: RSA-OAEP}, true, [wrapKey\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e), {hash: SHA-512, name: RSA-OAEP}, true, [wrapKey\])] - expected: FAIL - - [Good parameters: 2048 bits (pkcs8, buffer(1218), {hash: SHA-512, name: RSA-OAEP}, true, [decrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-512, name: RSA-OAEP}, true, [decrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (pkcs8, buffer(1218), {hash: SHA-512, name: RSA-OAEP}, true, [unwrapKey, decrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-512, name: RSA-OAEP}, true, [unwrapKey, decrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (pkcs8, buffer(1218), {hash: SHA-512, name: RSA-OAEP}, true, [unwrapKey\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-512, name: RSA-OAEP}, true, [unwrapKey\])] - expected: FAIL - - [Good parameters: 2048 bits (spki, buffer(294), {hash: SHA-512, name: RSA-OAEP}, false, [encrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e), {hash: SHA-512, name: RSA-OAEP}, false, [encrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (spki, buffer(294), {hash: SHA-512, name: RSA-OAEP}, false, [wrapKey, encrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e), {hash: SHA-512, name: RSA-OAEP}, false, [wrapKey, encrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (spki, buffer(294), {hash: SHA-512, name: RSA-OAEP}, false, [wrapKey\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e), {hash: SHA-512, name: RSA-OAEP}, false, [wrapKey\])] - expected: FAIL - - [Good parameters: 2048 bits (pkcs8, buffer(1218), {hash: SHA-512, name: RSA-OAEP}, false, [decrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-512, name: RSA-OAEP}, false, [decrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (pkcs8, buffer(1218), {hash: SHA-512, name: RSA-OAEP}, false, [unwrapKey, decrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-512, name: RSA-OAEP}, false, [unwrapKey, decrypt\])] - expected: FAIL - - [Good parameters: 2048 bits (pkcs8, buffer(1218), {hash: SHA-512, name: RSA-OAEP}, false, [unwrapKey\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-512, name: RSA-OAEP}, false, [unwrapKey\])] - expected: FAIL - - [Good parameters: 4096 bits (spki, buffer(550), {hash: SHA-1, name: RSA-OAEP}, true, [encrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e), {hash: SHA-1, name: RSA-OAEP}, true, [encrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (spki, buffer(550), {hash: SHA-1, name: RSA-OAEP}, true, [wrapKey, encrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e), {hash: SHA-1, name: RSA-OAEP}, true, [wrapKey, encrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (spki, buffer(550), {hash: SHA-1, name: RSA-OAEP}, true, [wrapKey\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e), {hash: SHA-1, name: RSA-OAEP}, true, [wrapKey\])] - expected: FAIL - - [Good parameters: 4096 bits (pkcs8, buffer(2376), {hash: SHA-1, name: RSA-OAEP}, true, [decrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-1, name: RSA-OAEP}, true, [decrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (pkcs8, buffer(2376), {hash: SHA-1, name: RSA-OAEP}, true, [unwrapKey, decrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-1, name: RSA-OAEP}, true, [unwrapKey, decrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (pkcs8, buffer(2376), {hash: SHA-1, name: RSA-OAEP}, true, [unwrapKey\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-1, name: RSA-OAEP}, true, [unwrapKey\])] - expected: FAIL - - [Good parameters: 4096 bits (spki, buffer(550), {hash: SHA-1, name: RSA-OAEP}, false, [encrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e), {hash: SHA-1, name: RSA-OAEP}, false, [encrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (spki, buffer(550), {hash: SHA-1, name: RSA-OAEP}, false, [wrapKey, encrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e), {hash: SHA-1, name: RSA-OAEP}, false, [wrapKey, encrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (spki, buffer(550), {hash: SHA-1, name: RSA-OAEP}, false, [wrapKey\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e), {hash: SHA-1, name: RSA-OAEP}, false, [wrapKey\])] - expected: FAIL - - [Good parameters: 4096 bits (pkcs8, buffer(2376), {hash: SHA-1, name: RSA-OAEP}, false, [decrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-1, name: RSA-OAEP}, false, [decrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (pkcs8, buffer(2376), {hash: SHA-1, name: RSA-OAEP}, false, [unwrapKey, decrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-1, name: RSA-OAEP}, false, [unwrapKey, decrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (pkcs8, buffer(2376), {hash: SHA-1, name: RSA-OAEP}, false, [unwrapKey\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-1, name: RSA-OAEP}, false, [unwrapKey\])] - expected: FAIL - - [Good parameters: 4096 bits (spki, buffer(550), {hash: SHA-256, name: RSA-OAEP}, true, [encrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e), {hash: SHA-256, name: RSA-OAEP}, true, [encrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (spki, buffer(550), {hash: SHA-256, name: RSA-OAEP}, true, [wrapKey, encrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e), {hash: SHA-256, name: RSA-OAEP}, true, [wrapKey, encrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (spki, buffer(550), {hash: SHA-256, name: RSA-OAEP}, true, [wrapKey\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e), {hash: SHA-256, name: RSA-OAEP}, true, [wrapKey\])] - expected: FAIL - - [Good parameters: 4096 bits (pkcs8, buffer(2376), {hash: SHA-256, name: RSA-OAEP}, true, [decrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-256, name: RSA-OAEP}, true, [decrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (pkcs8, buffer(2376), {hash: SHA-256, name: RSA-OAEP}, true, [unwrapKey, decrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-256, name: RSA-OAEP}, true, [unwrapKey, decrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (pkcs8, buffer(2376), {hash: SHA-256, name: RSA-OAEP}, true, [unwrapKey\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-256, name: RSA-OAEP}, true, [unwrapKey\])] - expected: FAIL - - [Good parameters: 4096 bits (spki, buffer(550), {hash: SHA-256, name: RSA-OAEP}, false, [encrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e), {hash: SHA-256, name: RSA-OAEP}, false, [encrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (spki, buffer(550), {hash: SHA-256, name: RSA-OAEP}, false, [wrapKey, encrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e), {hash: SHA-256, name: RSA-OAEP}, false, [wrapKey, encrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (spki, buffer(550), {hash: SHA-256, name: RSA-OAEP}, false, [wrapKey\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e), {hash: SHA-256, name: RSA-OAEP}, false, [wrapKey\])] - expected: FAIL - - [Good parameters: 4096 bits (pkcs8, buffer(2376), {hash: SHA-256, name: RSA-OAEP}, false, [decrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-256, name: RSA-OAEP}, false, [decrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (pkcs8, buffer(2376), {hash: SHA-256, name: RSA-OAEP}, false, [unwrapKey, decrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-256, name: RSA-OAEP}, false, [unwrapKey, decrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (pkcs8, buffer(2376), {hash: SHA-256, name: RSA-OAEP}, false, [unwrapKey\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-256, name: RSA-OAEP}, false, [unwrapKey\])] - expected: FAIL - - [Good parameters: 4096 bits (spki, buffer(550), {hash: SHA-384, name: RSA-OAEP}, true, [encrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e), {hash: SHA-384, name: RSA-OAEP}, true, [encrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (spki, buffer(550), {hash: SHA-384, name: RSA-OAEP}, true, [wrapKey, encrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e), {hash: SHA-384, name: RSA-OAEP}, true, [wrapKey, encrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (spki, buffer(550), {hash: SHA-384, name: RSA-OAEP}, true, [wrapKey\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e), {hash: SHA-384, name: RSA-OAEP}, true, [wrapKey\])] - expected: FAIL - - [Good parameters: 4096 bits (pkcs8, buffer(2376), {hash: SHA-384, name: RSA-OAEP}, true, [decrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-384, name: RSA-OAEP}, true, [decrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (pkcs8, buffer(2376), {hash: SHA-384, name: RSA-OAEP}, true, [unwrapKey, decrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-384, name: RSA-OAEP}, true, [unwrapKey, decrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (pkcs8, buffer(2376), {hash: SHA-384, name: RSA-OAEP}, true, [unwrapKey\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-384, name: RSA-OAEP}, true, [unwrapKey\])] - expected: FAIL - - [Good parameters: 4096 bits (spki, buffer(550), {hash: SHA-384, name: RSA-OAEP}, false, [encrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e), {hash: SHA-384, name: RSA-OAEP}, false, [encrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (spki, buffer(550), {hash: SHA-384, name: RSA-OAEP}, false, [wrapKey, encrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e), {hash: SHA-384, name: RSA-OAEP}, false, [wrapKey, encrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (spki, buffer(550), {hash: SHA-384, name: RSA-OAEP}, false, [wrapKey\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e), {hash: SHA-384, name: RSA-OAEP}, false, [wrapKey\])] - expected: FAIL - - [Good parameters: 4096 bits (pkcs8, buffer(2376), {hash: SHA-384, name: RSA-OAEP}, false, [decrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-384, name: RSA-OAEP}, false, [decrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (pkcs8, buffer(2376), {hash: SHA-384, name: RSA-OAEP}, false, [unwrapKey, decrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-384, name: RSA-OAEP}, false, [unwrapKey, decrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (pkcs8, buffer(2376), {hash: SHA-384, name: RSA-OAEP}, false, [unwrapKey\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-384, name: RSA-OAEP}, false, [unwrapKey\])] - expected: FAIL - - [Good parameters: 4096 bits (spki, buffer(550), {hash: SHA-512, name: RSA-OAEP}, true, [encrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e), {hash: SHA-512, name: RSA-OAEP}, true, [encrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (spki, buffer(550), {hash: SHA-512, name: RSA-OAEP}, true, [wrapKey, encrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e), {hash: SHA-512, name: RSA-OAEP}, true, [wrapKey, encrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (spki, buffer(550), {hash: SHA-512, name: RSA-OAEP}, true, [wrapKey\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e), {hash: SHA-512, name: RSA-OAEP}, true, [wrapKey\])] - expected: FAIL - - [Good parameters: 4096 bits (pkcs8, buffer(2376), {hash: SHA-512, name: RSA-OAEP}, true, [decrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-512, name: RSA-OAEP}, true, [decrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (pkcs8, buffer(2376), {hash: SHA-512, name: RSA-OAEP}, true, [unwrapKey, decrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-512, name: RSA-OAEP}, true, [unwrapKey, decrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (pkcs8, buffer(2376), {hash: SHA-512, name: RSA-OAEP}, true, [unwrapKey\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-512, name: RSA-OAEP}, true, [unwrapKey\])] - expected: FAIL - - [Good parameters: 4096 bits (spki, buffer(550), {hash: SHA-512, name: RSA-OAEP}, false, [encrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e), {hash: SHA-512, name: RSA-OAEP}, false, [encrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (spki, buffer(550), {hash: SHA-512, name: RSA-OAEP}, false, [wrapKey, encrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e), {hash: SHA-512, name: RSA-OAEP}, false, [wrapKey, encrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (spki, buffer(550), {hash: SHA-512, name: RSA-OAEP}, false, [wrapKey\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e), {hash: SHA-512, name: RSA-OAEP}, false, [wrapKey\])] - expected: FAIL - - [Good parameters: 4096 bits (pkcs8, buffer(2376), {hash: SHA-512, name: RSA-OAEP}, false, [decrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-512, name: RSA-OAEP}, false, [decrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (pkcs8, buffer(2376), {hash: SHA-512, name: RSA-OAEP}, false, [unwrapKey, decrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-512, name: RSA-OAEP}, false, [unwrapKey, decrypt\])] - expected: FAIL - - [Good parameters: 4096 bits (pkcs8, buffer(2376), {hash: SHA-512, name: RSA-OAEP}, false, [unwrapKey\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-512, name: RSA-OAEP}, false, [unwrapKey\])] - expected: FAIL - - [Good parameters: 1024 bits (spki, buffer(162), {hash: SHA-1, name: RSA-PSS}, true, [verify\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e), {hash: SHA-1, name: RSA-PSS}, true, [verify\])] - expected: FAIL - - [Good parameters: 1024 bits (pkcs8, buffer(636), {hash: SHA-1, name: RSA-PSS}, true, [sign\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-1, name: RSA-PSS}, true, [sign\])] - expected: FAIL - - [Good parameters: 1024 bits (spki, buffer(162), {hash: SHA-1, name: RSA-PSS}, false, [verify\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e), {hash: SHA-1, name: RSA-PSS}, false, [verify\])] - expected: FAIL - - [Good parameters: 1024 bits (pkcs8, buffer(636), {hash: SHA-1, name: RSA-PSS}, false, [sign\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-1, name: RSA-PSS}, false, [sign\])] - expected: FAIL - - [Good parameters: 1024 bits (spki, buffer(162), {hash: SHA-256, name: RSA-PSS}, true, [verify\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e), {hash: SHA-256, name: RSA-PSS}, true, [verify\])] - expected: FAIL - - [Good parameters: 1024 bits (pkcs8, buffer(636), {hash: SHA-256, name: RSA-PSS}, true, [sign\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-256, name: RSA-PSS}, true, [sign\])] - expected: FAIL - - [Good parameters: 1024 bits (spki, buffer(162), {hash: SHA-256, name: RSA-PSS}, false, [verify\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e), {hash: SHA-256, name: RSA-PSS}, false, [verify\])] - expected: FAIL - - [Good parameters: 1024 bits (pkcs8, buffer(636), {hash: SHA-256, name: RSA-PSS}, false, [sign\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-256, name: RSA-PSS}, false, [sign\])] - expected: FAIL - - [Good parameters: 1024 bits (spki, buffer(162), {hash: SHA-384, name: RSA-PSS}, true, [verify\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e), {hash: SHA-384, name: RSA-PSS}, true, [verify\])] - expected: FAIL - - [Good parameters: 1024 bits (pkcs8, buffer(636), {hash: SHA-384, name: RSA-PSS}, true, [sign\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-384, name: RSA-PSS}, true, [sign\])] - expected: FAIL - - [Good parameters: 1024 bits (spki, buffer(162), {hash: SHA-384, name: RSA-PSS}, false, [verify\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e), {hash: SHA-384, name: RSA-PSS}, false, [verify\])] - expected: FAIL - - [Good parameters: 1024 bits (pkcs8, buffer(636), {hash: SHA-384, name: RSA-PSS}, false, [sign\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-384, name: RSA-PSS}, false, [sign\])] - expected: FAIL - - [Good parameters: 1024 bits (spki, buffer(162), {hash: SHA-512, name: RSA-PSS}, true, [verify\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e), {hash: SHA-512, name: RSA-PSS}, true, [verify\])] - expected: FAIL - - [Good parameters: 1024 bits (pkcs8, buffer(636), {hash: SHA-512, name: RSA-PSS}, true, [sign\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-512, name: RSA-PSS}, true, [sign\])] - expected: FAIL - - [Good parameters: 1024 bits (spki, buffer(162), {hash: SHA-512, name: RSA-PSS}, false, [verify\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e), {hash: SHA-512, name: RSA-PSS}, false, [verify\])] - expected: FAIL - - [Good parameters: 1024 bits (pkcs8, buffer(636), {hash: SHA-512, name: RSA-PSS}, false, [sign\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-512, name: RSA-PSS}, false, [sign\])] - expected: FAIL - - [Good parameters: 2048 bits (spki, buffer(294), {hash: SHA-1, name: RSA-PSS}, true, [verify\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e), {hash: SHA-1, name: RSA-PSS}, true, [verify\])] - expected: FAIL - - [Good parameters: 2048 bits (pkcs8, buffer(1218), {hash: SHA-1, name: RSA-PSS}, true, [sign\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-1, name: RSA-PSS}, true, [sign\])] - expected: FAIL - - [Good parameters: 2048 bits (spki, buffer(294), {hash: SHA-1, name: RSA-PSS}, false, [verify\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e), {hash: SHA-1, name: RSA-PSS}, false, [verify\])] - expected: FAIL - - [Good parameters: 2048 bits (pkcs8, buffer(1218), {hash: SHA-1, name: RSA-PSS}, false, [sign\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-1, name: RSA-PSS}, false, [sign\])] - expected: FAIL - - [Good parameters: 2048 bits (spki, buffer(294), {hash: SHA-256, name: RSA-PSS}, true, [verify\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e), {hash: SHA-256, name: RSA-PSS}, true, [verify\])] - expected: FAIL - - [Good parameters: 2048 bits (pkcs8, buffer(1218), {hash: SHA-256, name: RSA-PSS}, true, [sign\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-256, name: RSA-PSS}, true, [sign\])] - expected: FAIL - - [Good parameters: 2048 bits (spki, buffer(294), {hash: SHA-256, name: RSA-PSS}, false, [verify\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e), {hash: SHA-256, name: RSA-PSS}, false, [verify\])] - expected: FAIL - - [Good parameters: 2048 bits (pkcs8, buffer(1218), {hash: SHA-256, name: RSA-PSS}, false, [sign\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-256, name: RSA-PSS}, false, [sign\])] - expected: FAIL - - [Good parameters: 2048 bits (spki, buffer(294), {hash: SHA-384, name: RSA-PSS}, true, [verify\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e), {hash: SHA-384, name: RSA-PSS}, true, [verify\])] - expected: FAIL - - [Good parameters: 2048 bits (pkcs8, buffer(1218), {hash: SHA-384, name: RSA-PSS}, true, [sign\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-384, name: RSA-PSS}, true, [sign\])] - expected: FAIL - - [Good parameters: 2048 bits (spki, buffer(294), {hash: SHA-384, name: RSA-PSS}, false, [verify\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e), {hash: SHA-384, name: RSA-PSS}, false, [verify\])] - expected: FAIL - - [Good parameters: 2048 bits (pkcs8, buffer(1218), {hash: SHA-384, name: RSA-PSS}, false, [sign\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-384, name: RSA-PSS}, false, [sign\])] - expected: FAIL - - [Good parameters: 2048 bits (spki, buffer(294), {hash: SHA-512, name: RSA-PSS}, true, [verify\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e), {hash: SHA-512, name: RSA-PSS}, true, [verify\])] - expected: FAIL - - [Good parameters: 2048 bits (pkcs8, buffer(1218), {hash: SHA-512, name: RSA-PSS}, true, [sign\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-512, name: RSA-PSS}, true, [sign\])] - expected: FAIL - - [Good parameters: 2048 bits (spki, buffer(294), {hash: SHA-512, name: RSA-PSS}, false, [verify\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e), {hash: SHA-512, name: RSA-PSS}, false, [verify\])] - expected: FAIL - - [Good parameters: 2048 bits (pkcs8, buffer(1218), {hash: SHA-512, name: RSA-PSS}, false, [sign\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-512, name: RSA-PSS}, false, [sign\])] - expected: FAIL - - [Good parameters: 4096 bits (spki, buffer(550), {hash: SHA-1, name: RSA-PSS}, true, [verify\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e), {hash: SHA-1, name: RSA-PSS}, true, [verify\])] - expected: FAIL - - [Good parameters: 4096 bits (pkcs8, buffer(2376), {hash: SHA-1, name: RSA-PSS}, true, [sign\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-1, name: RSA-PSS}, true, [sign\])] - expected: FAIL - - [Good parameters: 4096 bits (spki, buffer(550), {hash: SHA-1, name: RSA-PSS}, false, [verify\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e), {hash: SHA-1, name: RSA-PSS}, false, [verify\])] - expected: FAIL - - [Good parameters: 4096 bits (pkcs8, buffer(2376), {hash: SHA-1, name: RSA-PSS}, false, [sign\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-1, name: RSA-PSS}, false, [sign\])] - expected: FAIL - - [Good parameters: 4096 bits (spki, buffer(550), {hash: SHA-256, name: RSA-PSS}, true, [verify\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e), {hash: SHA-256, name: RSA-PSS}, true, [verify\])] - expected: FAIL - - [Good parameters: 4096 bits (pkcs8, buffer(2376), {hash: SHA-256, name: RSA-PSS}, true, [sign\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-256, name: RSA-PSS}, true, [sign\])] - expected: FAIL - - [Good parameters: 4096 bits (spki, buffer(550), {hash: SHA-256, name: RSA-PSS}, false, [verify\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e), {hash: SHA-256, name: RSA-PSS}, false, [verify\])] - expected: FAIL - - [Good parameters: 4096 bits (pkcs8, buffer(2376), {hash: SHA-256, name: RSA-PSS}, false, [sign\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-256, name: RSA-PSS}, false, [sign\])] - expected: FAIL - - [Good parameters: 4096 bits (spki, buffer(550), {hash: SHA-384, name: RSA-PSS}, true, [verify\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e), {hash: SHA-384, name: RSA-PSS}, true, [verify\])] - expected: FAIL - - [Good parameters: 4096 bits (pkcs8, buffer(2376), {hash: SHA-384, name: RSA-PSS}, true, [sign\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-384, name: RSA-PSS}, true, [sign\])] - expected: FAIL - - [Good parameters: 4096 bits (spki, buffer(550), {hash: SHA-384, name: RSA-PSS}, false, [verify\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e), {hash: SHA-384, name: RSA-PSS}, false, [verify\])] - expected: FAIL - - [Good parameters: 4096 bits (pkcs8, buffer(2376), {hash: SHA-384, name: RSA-PSS}, false, [sign\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-384, name: RSA-PSS}, false, [sign\])] - expected: FAIL - - [Good parameters: 4096 bits (spki, buffer(550), {hash: SHA-512, name: RSA-PSS}, true, [verify\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e), {hash: SHA-512, name: RSA-PSS}, true, [verify\])] - expected: FAIL - - [Good parameters: 4096 bits (pkcs8, buffer(2376), {hash: SHA-512, name: RSA-PSS}, true, [sign\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-512, name: RSA-PSS}, true, [sign\])] - expected: FAIL - - [Good parameters: 4096 bits (spki, buffer(550), {hash: SHA-512, name: RSA-PSS}, false, [verify\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e), {hash: SHA-512, name: RSA-PSS}, false, [verify\])] - expected: FAIL - - [Good parameters: 4096 bits (pkcs8, buffer(2376), {hash: SHA-512, name: RSA-PSS}, false, [sign\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-512, name: RSA-PSS}, false, [sign\])] - expected: FAIL - - [Good parameters: 1024 bits (spki, buffer(162), {hash: SHA-1, name: RSASSA-PKCS1-v1_5}, true, [verify\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e), {hash: SHA-1, name: RSASSA-PKCS1-v1_5}, true, [verify\])] - expected: FAIL - - [Good parameters: 1024 bits (pkcs8, buffer(636), {hash: SHA-1, name: RSASSA-PKCS1-v1_5}, true, [sign\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-1, name: RSASSA-PKCS1-v1_5}, true, [sign\])] - expected: FAIL - - [Good parameters: 1024 bits (spki, buffer(162), {hash: SHA-1, name: RSASSA-PKCS1-v1_5}, false, [verify\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e), {hash: SHA-1, name: RSASSA-PKCS1-v1_5}, false, [verify\])] - expected: FAIL - - [Good parameters: 1024 bits (pkcs8, buffer(636), {hash: SHA-1, name: RSASSA-PKCS1-v1_5}, false, [sign\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-1, name: RSASSA-PKCS1-v1_5}, false, [sign\])] - expected: FAIL - - [Good parameters: 1024 bits (spki, buffer(162), {hash: SHA-256, name: RSASSA-PKCS1-v1_5}, true, [verify\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e), {hash: SHA-256, name: RSASSA-PKCS1-v1_5}, true, [verify\])] - expected: FAIL - - [Good parameters: 1024 bits (pkcs8, buffer(636), {hash: SHA-256, name: RSASSA-PKCS1-v1_5}, true, [sign\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-256, name: RSASSA-PKCS1-v1_5}, true, [sign\])] - expected: FAIL - - [Good parameters: 1024 bits (spki, buffer(162), {hash: SHA-256, name: RSASSA-PKCS1-v1_5}, false, [verify\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e), {hash: SHA-256, name: RSASSA-PKCS1-v1_5}, false, [verify\])] - expected: FAIL - - [Good parameters: 1024 bits (pkcs8, buffer(636), {hash: SHA-256, name: RSASSA-PKCS1-v1_5}, false, [sign\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-256, name: RSASSA-PKCS1-v1_5}, false, [sign\])] - expected: FAIL - - [Good parameters: 1024 bits (spki, buffer(162), {hash: SHA-384, name: RSASSA-PKCS1-v1_5}, true, [verify\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e), {hash: SHA-384, name: RSASSA-PKCS1-v1_5}, true, [verify\])] - expected: FAIL - - [Good parameters: 1024 bits (pkcs8, buffer(636), {hash: SHA-384, name: RSASSA-PKCS1-v1_5}, true, [sign\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-384, name: RSASSA-PKCS1-v1_5}, true, [sign\])] - expected: FAIL - - [Good parameters: 1024 bits (spki, buffer(162), {hash: SHA-384, name: RSASSA-PKCS1-v1_5}, false, [verify\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e), {hash: SHA-384, name: RSASSA-PKCS1-v1_5}, false, [verify\])] - expected: FAIL - - [Good parameters: 1024 bits (pkcs8, buffer(636), {hash: SHA-384, name: RSASSA-PKCS1-v1_5}, false, [sign\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-384, name: RSASSA-PKCS1-v1_5}, false, [sign\])] - expected: FAIL - - [Good parameters: 1024 bits (spki, buffer(162), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, true, [verify\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, true, [verify\])] - expected: FAIL - - [Good parameters: 1024 bits (pkcs8, buffer(636), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, true, [sign\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, true, [sign\])] - expected: FAIL - - [Good parameters: 1024 bits (spki, buffer(162), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, false, [verify\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, false, [verify\])] - expected: FAIL - - [Good parameters: 1024 bits (pkcs8, buffer(636), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, false, [sign\])] - expected: FAIL - - [Good parameters: 1024 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, false, [sign\])] - expected: FAIL - - [Good parameters: 2048 bits (spki, buffer(294), {hash: SHA-1, name: RSASSA-PKCS1-v1_5}, true, [verify\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e), {hash: SHA-1, name: RSASSA-PKCS1-v1_5}, true, [verify\])] - expected: FAIL - - [Good parameters: 2048 bits (pkcs8, buffer(1218), {hash: SHA-1, name: RSASSA-PKCS1-v1_5}, true, [sign\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-1, name: RSASSA-PKCS1-v1_5}, true, [sign\])] - expected: FAIL - - [Good parameters: 2048 bits (spki, buffer(294), {hash: SHA-1, name: RSASSA-PKCS1-v1_5}, false, [verify\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e), {hash: SHA-1, name: RSASSA-PKCS1-v1_5}, false, [verify\])] - expected: FAIL - - [Good parameters: 2048 bits (pkcs8, buffer(1218), {hash: SHA-1, name: RSASSA-PKCS1-v1_5}, false, [sign\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-1, name: RSASSA-PKCS1-v1_5}, false, [sign\])] - expected: FAIL - - [Good parameters: 2048 bits (spki, buffer(294), {hash: SHA-256, name: RSASSA-PKCS1-v1_5}, true, [verify\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e), {hash: SHA-256, name: RSASSA-PKCS1-v1_5}, true, [verify\])] - expected: FAIL - - [Good parameters: 2048 bits (pkcs8, buffer(1218), {hash: SHA-256, name: RSASSA-PKCS1-v1_5}, true, [sign\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-256, name: RSASSA-PKCS1-v1_5}, true, [sign\])] - expected: FAIL - - [Good parameters: 2048 bits (spki, buffer(294), {hash: SHA-256, name: RSASSA-PKCS1-v1_5}, false, [verify\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e), {hash: SHA-256, name: RSASSA-PKCS1-v1_5}, false, [verify\])] - expected: FAIL - - [Good parameters: 2048 bits (pkcs8, buffer(1218), {hash: SHA-256, name: RSASSA-PKCS1-v1_5}, false, [sign\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-256, name: RSASSA-PKCS1-v1_5}, false, [sign\])] - expected: FAIL - - [Good parameters: 2048 bits (spki, buffer(294), {hash: SHA-384, name: RSASSA-PKCS1-v1_5}, true, [verify\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e), {hash: SHA-384, name: RSASSA-PKCS1-v1_5}, true, [verify\])] - expected: FAIL - - [Good parameters: 2048 bits (pkcs8, buffer(1218), {hash: SHA-384, name: RSASSA-PKCS1-v1_5}, true, [sign\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-384, name: RSASSA-PKCS1-v1_5}, true, [sign\])] - expected: FAIL - - [Good parameters: 2048 bits (spki, buffer(294), {hash: SHA-384, name: RSASSA-PKCS1-v1_5}, false, [verify\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e), {hash: SHA-384, name: RSASSA-PKCS1-v1_5}, false, [verify\])] - expected: FAIL - - [Good parameters: 2048 bits (pkcs8, buffer(1218), {hash: SHA-384, name: RSASSA-PKCS1-v1_5}, false, [sign\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-384, name: RSASSA-PKCS1-v1_5}, false, [sign\])] - expected: FAIL - - [Good parameters: 2048 bits (spki, buffer(294), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, true, [verify\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, true, [verify\])] - expected: FAIL - - [Good parameters: 2048 bits (pkcs8, buffer(1218), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, true, [sign\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, true, [sign\])] - expected: FAIL - - [Good parameters: 2048 bits (spki, buffer(294), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, false, [verify\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, false, [verify\])] - expected: FAIL - - [Good parameters: 2048 bits (pkcs8, buffer(1218), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, false, [sign\])] - expected: FAIL - - [Good parameters: 2048 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, false, [sign\])] - expected: FAIL - - [Good parameters: 4096 bits (spki, buffer(550), {hash: SHA-1, name: RSASSA-PKCS1-v1_5}, true, [verify\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e), {hash: SHA-1, name: RSASSA-PKCS1-v1_5}, true, [verify\])] - expected: FAIL - - [Good parameters: 4096 bits (pkcs8, buffer(2376), {hash: SHA-1, name: RSASSA-PKCS1-v1_5}, true, [sign\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-1, name: RSASSA-PKCS1-v1_5}, true, [sign\])] - expected: FAIL - - [Good parameters: 4096 bits (spki, buffer(550), {hash: SHA-1, name: RSASSA-PKCS1-v1_5}, false, [verify\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e), {hash: SHA-1, name: RSASSA-PKCS1-v1_5}, false, [verify\])] - expected: FAIL - - [Good parameters: 4096 bits (pkcs8, buffer(2376), {hash: SHA-1, name: RSASSA-PKCS1-v1_5}, false, [sign\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-1, name: RSASSA-PKCS1-v1_5}, false, [sign\])] - expected: FAIL - - [Good parameters: 4096 bits (spki, buffer(550), {hash: SHA-256, name: RSASSA-PKCS1-v1_5}, true, [verify\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e), {hash: SHA-256, name: RSASSA-PKCS1-v1_5}, true, [verify\])] - expected: FAIL - - [Good parameters: 4096 bits (pkcs8, buffer(2376), {hash: SHA-256, name: RSASSA-PKCS1-v1_5}, true, [sign\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-256, name: RSASSA-PKCS1-v1_5}, true, [sign\])] - expected: FAIL - - [Good parameters: 4096 bits (spki, buffer(550), {hash: SHA-256, name: RSASSA-PKCS1-v1_5}, false, [verify\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e), {hash: SHA-256, name: RSASSA-PKCS1-v1_5}, false, [verify\])] - expected: FAIL - - [Good parameters: 4096 bits (pkcs8, buffer(2376), {hash: SHA-256, name: RSASSA-PKCS1-v1_5}, false, [sign\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-256, name: RSASSA-PKCS1-v1_5}, false, [sign\])] - expected: FAIL - - [Good parameters: 4096 bits (spki, buffer(550), {hash: SHA-384, name: RSASSA-PKCS1-v1_5}, true, [verify\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e), {hash: SHA-384, name: RSASSA-PKCS1-v1_5}, true, [verify\])] - expected: FAIL - - [Good parameters: 4096 bits (pkcs8, buffer(2376), {hash: SHA-384, name: RSASSA-PKCS1-v1_5}, true, [sign\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-384, name: RSASSA-PKCS1-v1_5}, true, [sign\])] - expected: FAIL - - [Good parameters: 4096 bits (spki, buffer(550), {hash: SHA-384, name: RSASSA-PKCS1-v1_5}, false, [verify\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e), {hash: SHA-384, name: RSASSA-PKCS1-v1_5}, false, [verify\])] - expected: FAIL - - [Good parameters: 4096 bits (pkcs8, buffer(2376), {hash: SHA-384, name: RSASSA-PKCS1-v1_5}, false, [sign\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-384, name: RSASSA-PKCS1-v1_5}, false, [sign\])] - expected: FAIL - - [Good parameters: 4096 bits (spki, buffer(550), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, true, [verify\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, true, [verify\])] - expected: FAIL - - [Good parameters: 4096 bits (pkcs8, buffer(2376), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, true, [sign\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, true, [sign\])] - expected: FAIL - - [Good parameters: 4096 bits (spki, buffer(550), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, false, [verify\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, false, [verify\])] - expected: FAIL - - [Good parameters: 4096 bits (pkcs8, buffer(2376), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, false, [sign\])] - expected: FAIL - - [Good parameters: 4096 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, false, [sign\])] - expected: FAIL - diff --git a/tests/wpt/metadata/WebCryptoAPI/import_export/test_symmetric_importKey.html.ini b/tests/wpt/metadata/WebCryptoAPI/import_export/test_symmetric_importKey.html.ini deleted file mode 100644 index 10a978f037a..00000000000 --- a/tests/wpt/metadata/WebCryptoAPI/import_export/test_symmetric_importKey.html.ini +++ /dev/null @@ -1,704 +0,0 @@ -[test_symmetric_importKey.html] - type: testharness - [Good parameters: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CTR}, true, [encrypt\])] - expected: FAIL - - [Good parameters: 128 bits (jwk, {alg: A128CTR, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {name: AES-CTR}, true, [encrypt\])] - expected: FAIL - - [Good parameters: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CTR}, false, [encrypt\])] - expected: FAIL - - [Good parameters: 128 bits (jwk, {alg: A128CTR, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {name: AES-CTR}, false, [encrypt\])] - expected: FAIL - - [Good parameters: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CTR}, true, [decrypt, encrypt\])] - expected: FAIL - - [Good parameters: 128 bits (jwk, {alg: A128CTR, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {name: AES-CTR}, true, [decrypt, encrypt\])] - expected: FAIL - - [Good parameters: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CTR}, false, [decrypt, encrypt\])] - expected: FAIL - - [Good parameters: 128 bits (jwk, {alg: A128CTR, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {name: AES-CTR}, false, [decrypt, encrypt\])] - expected: FAIL - - [Good parameters: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CTR}, true, [decrypt\])] - expected: FAIL - - [Good parameters: 128 bits (jwk, {alg: A128CTR, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {name: AES-CTR}, true, [decrypt\])] - expected: FAIL - - [Good parameters: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CTR}, false, [decrypt\])] - expected: FAIL - - [Good parameters: 128 bits (jwk, {alg: A128CTR, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {name: AES-CTR}, false, [decrypt\])] - expected: FAIL - - [Good parameters: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CTR}, true, [encrypt\])] - expected: FAIL - - [Good parameters: 192 bits (jwk, {alg: A192CTR, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {name: AES-CTR}, true, [encrypt\])] - expected: FAIL - - [Good parameters: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CTR}, false, [encrypt\])] - expected: FAIL - - [Good parameters: 192 bits (jwk, {alg: A192CTR, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {name: AES-CTR}, false, [encrypt\])] - expected: FAIL - - [Good parameters: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CTR}, true, [decrypt, encrypt\])] - expected: FAIL - - [Good parameters: 192 bits (jwk, {alg: A192CTR, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {name: AES-CTR}, true, [decrypt, encrypt\])] - expected: FAIL - - [Good parameters: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CTR}, false, [decrypt, encrypt\])] - expected: FAIL - - [Good parameters: 192 bits (jwk, {alg: A192CTR, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {name: AES-CTR}, false, [decrypt, encrypt\])] - expected: FAIL - - [Good parameters: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CTR}, true, [decrypt\])] - expected: FAIL - - [Good parameters: 192 bits (jwk, {alg: A192CTR, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {name: AES-CTR}, true, [decrypt\])] - expected: FAIL - - [Good parameters: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CTR}, false, [decrypt\])] - expected: FAIL - - [Good parameters: 192 bits (jwk, {alg: A192CTR, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {name: AES-CTR}, false, [decrypt\])] - expected: FAIL - - [Good parameters: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CTR}, true, [encrypt\])] - expected: FAIL - - [Good parameters: 256 bits (jwk, {alg: A256CTR, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {name: AES-CTR}, true, [encrypt\])] - expected: FAIL - - [Good parameters: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CTR}, false, [encrypt\])] - expected: FAIL - - [Good parameters: 256 bits (jwk, {alg: A256CTR, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {name: AES-CTR}, false, [encrypt\])] - expected: FAIL - - [Good parameters: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CTR}, true, [decrypt, encrypt\])] - expected: FAIL - - [Good parameters: 256 bits (jwk, {alg: A256CTR, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {name: AES-CTR}, true, [decrypt, encrypt\])] - expected: FAIL - - [Good parameters: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CTR}, false, [decrypt, encrypt\])] - expected: FAIL - - [Good parameters: 256 bits (jwk, {alg: A256CTR, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {name: AES-CTR}, false, [decrypt, encrypt\])] - expected: FAIL - - [Good parameters: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CTR}, true, [decrypt\])] - expected: FAIL - - [Good parameters: 256 bits (jwk, {alg: A256CTR, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {name: AES-CTR}, true, [decrypt\])] - expected: FAIL - - [Good parameters: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CTR}, false, [decrypt\])] - expected: FAIL - - [Good parameters: 256 bits (jwk, {alg: A256CTR, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {name: AES-CTR}, false, [decrypt\])] - expected: FAIL - - [Good parameters: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CBC}, true, [encrypt\])] - expected: FAIL - - [Good parameters: 128 bits (jwk, {alg: A128CBC, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {name: AES-CBC}, true, [encrypt\])] - expected: FAIL - - [Good parameters: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CBC}, false, [encrypt\])] - expected: FAIL - - [Good parameters: 128 bits (jwk, {alg: A128CBC, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {name: AES-CBC}, false, [encrypt\])] - expected: FAIL - - [Good parameters: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CBC}, true, [decrypt, encrypt\])] - expected: FAIL - - [Good parameters: 128 bits (jwk, {alg: A128CBC, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {name: AES-CBC}, true, [decrypt, encrypt\])] - expected: FAIL - - [Good parameters: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CBC}, false, [decrypt, encrypt\])] - expected: FAIL - - [Good parameters: 128 bits (jwk, {alg: A128CBC, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {name: AES-CBC}, false, [decrypt, encrypt\])] - expected: FAIL - - [Good parameters: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CBC}, true, [decrypt\])] - expected: FAIL - - [Good parameters: 128 bits (jwk, {alg: A128CBC, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {name: AES-CBC}, true, [decrypt\])] - expected: FAIL - - [Good parameters: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CBC}, false, [decrypt\])] - expected: FAIL - - [Good parameters: 128 bits (jwk, {alg: A128CBC, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {name: AES-CBC}, false, [decrypt\])] - expected: FAIL - - [Good parameters: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CBC}, true, [encrypt\])] - expected: FAIL - - [Good parameters: 192 bits (jwk, {alg: A192CBC, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {name: AES-CBC}, true, [encrypt\])] - expected: FAIL - - [Good parameters: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CBC}, false, [encrypt\])] - expected: FAIL - - [Good parameters: 192 bits (jwk, {alg: A192CBC, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {name: AES-CBC}, false, [encrypt\])] - expected: FAIL - - [Good parameters: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CBC}, true, [decrypt, encrypt\])] - expected: FAIL - - [Good parameters: 192 bits (jwk, {alg: A192CBC, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {name: AES-CBC}, true, [decrypt, encrypt\])] - expected: FAIL - - [Good parameters: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CBC}, false, [decrypt, encrypt\])] - expected: FAIL - - [Good parameters: 192 bits (jwk, {alg: A192CBC, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {name: AES-CBC}, false, [decrypt, encrypt\])] - expected: FAIL - - [Good parameters: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CBC}, true, [decrypt\])] - expected: FAIL - - [Good parameters: 192 bits (jwk, {alg: A192CBC, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {name: AES-CBC}, true, [decrypt\])] - expected: FAIL - - [Good parameters: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CBC}, false, [decrypt\])] - expected: FAIL - - [Good parameters: 192 bits (jwk, {alg: A192CBC, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {name: AES-CBC}, false, [decrypt\])] - expected: FAIL - - [Good parameters: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CBC}, true, [encrypt\])] - expected: FAIL - - [Good parameters: 256 bits (jwk, {alg: A256CBC, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {name: AES-CBC}, true, [encrypt\])] - expected: FAIL - - [Good parameters: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CBC}, false, [encrypt\])] - expected: FAIL - - [Good parameters: 256 bits (jwk, {alg: A256CBC, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {name: AES-CBC}, false, [encrypt\])] - expected: FAIL - - [Good parameters: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CBC}, true, [decrypt, encrypt\])] - expected: FAIL - - [Good parameters: 256 bits (jwk, {alg: A256CBC, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {name: AES-CBC}, true, [decrypt, encrypt\])] - expected: FAIL - - [Good parameters: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CBC}, false, [decrypt, encrypt\])] - expected: FAIL - - [Good parameters: 256 bits (jwk, {alg: A256CBC, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {name: AES-CBC}, false, [decrypt, encrypt\])] - expected: FAIL - - [Good parameters: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CBC}, true, [decrypt\])] - expected: FAIL - - [Good parameters: 256 bits (jwk, {alg: A256CBC, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {name: AES-CBC}, true, [decrypt\])] - expected: FAIL - - [Good parameters: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CBC}, false, [decrypt\])] - expected: FAIL - - [Good parameters: 256 bits (jwk, {alg: A256CBC, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {name: AES-CBC}, false, [decrypt\])] - expected: FAIL - - [Good parameters: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-GCM}, true, [encrypt\])] - expected: FAIL - - [Good parameters: 128 bits (jwk, {alg: A128GCM, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {name: AES-GCM}, true, [encrypt\])] - expected: FAIL - - [Good parameters: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-GCM}, false, [encrypt\])] - expected: FAIL - - [Good parameters: 128 bits (jwk, {alg: A128GCM, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {name: AES-GCM}, false, [encrypt\])] - expected: FAIL - - [Good parameters: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-GCM}, true, [decrypt, encrypt\])] - expected: FAIL - - [Good parameters: 128 bits (jwk, {alg: A128GCM, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {name: AES-GCM}, true, [decrypt, encrypt\])] - expected: FAIL - - [Good parameters: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-GCM}, false, [decrypt, encrypt\])] - expected: FAIL - - [Good parameters: 128 bits (jwk, {alg: A128GCM, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {name: AES-GCM}, false, [decrypt, encrypt\])] - expected: FAIL - - [Good parameters: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-GCM}, true, [decrypt\])] - expected: FAIL - - [Good parameters: 128 bits (jwk, {alg: A128GCM, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {name: AES-GCM}, true, [decrypt\])] - expected: FAIL - - [Good parameters: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-GCM}, false, [decrypt\])] - expected: FAIL - - [Good parameters: 128 bits (jwk, {alg: A128GCM, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {name: AES-GCM}, false, [decrypt\])] - expected: FAIL - - [Good parameters: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-GCM}, true, [encrypt\])] - expected: FAIL - - [Good parameters: 192 bits (jwk, {alg: A192GCM, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {name: AES-GCM}, true, [encrypt\])] - expected: FAIL - - [Good parameters: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-GCM}, false, [encrypt\])] - expected: FAIL - - [Good parameters: 192 bits (jwk, {alg: A192GCM, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {name: AES-GCM}, false, [encrypt\])] - expected: FAIL - - [Good parameters: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-GCM}, true, [decrypt, encrypt\])] - expected: FAIL - - [Good parameters: 192 bits (jwk, {alg: A192GCM, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {name: AES-GCM}, true, [decrypt, encrypt\])] - expected: FAIL - - [Good parameters: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-GCM}, false, [decrypt, encrypt\])] - expected: FAIL - - [Good parameters: 192 bits (jwk, {alg: A192GCM, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {name: AES-GCM}, false, [decrypt, encrypt\])] - expected: FAIL - - [Good parameters: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-GCM}, true, [decrypt\])] - expected: FAIL - - [Good parameters: 192 bits (jwk, {alg: A192GCM, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {name: AES-GCM}, true, [decrypt\])] - expected: FAIL - - [Good parameters: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-GCM}, false, [decrypt\])] - expected: FAIL - - [Good parameters: 192 bits (jwk, {alg: A192GCM, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {name: AES-GCM}, false, [decrypt\])] - expected: FAIL - - [Good parameters: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-GCM}, true, [encrypt\])] - expected: FAIL - - [Good parameters: 256 bits (jwk, {alg: A256GCM, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {name: AES-GCM}, true, [encrypt\])] - expected: FAIL - - [Good parameters: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-GCM}, false, [encrypt\])] - expected: FAIL - - [Good parameters: 256 bits (jwk, {alg: A256GCM, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {name: AES-GCM}, false, [encrypt\])] - expected: FAIL - - [Good parameters: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-GCM}, true, [decrypt, encrypt\])] - expected: FAIL - - [Good parameters: 256 bits (jwk, {alg: A256GCM, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {name: AES-GCM}, true, [decrypt, encrypt\])] - expected: FAIL - - [Good parameters: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-GCM}, false, [decrypt, encrypt\])] - expected: FAIL - - [Good parameters: 256 bits (jwk, {alg: A256GCM, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {name: AES-GCM}, false, [decrypt, encrypt\])] - expected: FAIL - - [Good parameters: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-GCM}, true, [decrypt\])] - expected: FAIL - - [Good parameters: 256 bits (jwk, {alg: A256GCM, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {name: AES-GCM}, true, [decrypt\])] - expected: FAIL - - [Good parameters: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-GCM}, false, [decrypt\])] - expected: FAIL - - [Good parameters: 256 bits (jwk, {alg: A256GCM, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {name: AES-GCM}, false, [decrypt\])] - expected: FAIL - - [Good parameters: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-KW}, true, [wrapKey\])] - expected: FAIL - - [Good parameters: 128 bits (jwk, {alg: A128KW, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {name: AES-KW}, true, [wrapKey\])] - expected: FAIL - - [Good parameters: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-KW}, false, [wrapKey\])] - expected: FAIL - - [Good parameters: 128 bits (jwk, {alg: A128KW, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {name: AES-KW}, false, [wrapKey\])] - expected: FAIL - - [Good parameters: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-KW}, true, [unwrapKey, wrapKey\])] - expected: FAIL - - [Good parameters: 128 bits (jwk, {alg: A128KW, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {name: AES-KW}, true, [unwrapKey, wrapKey\])] - expected: FAIL - - [Good parameters: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-KW}, false, [unwrapKey, wrapKey\])] - expected: FAIL - - [Good parameters: 128 bits (jwk, {alg: A128KW, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {name: AES-KW}, false, [unwrapKey, wrapKey\])] - expected: FAIL - - [Good parameters: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-KW}, true, [unwrapKey\])] - expected: FAIL - - [Good parameters: 128 bits (jwk, {alg: A128KW, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {name: AES-KW}, true, [unwrapKey\])] - expected: FAIL - - [Good parameters: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-KW}, false, [unwrapKey\])] - expected: FAIL - - [Good parameters: 128 bits (jwk, {alg: A128KW, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {name: AES-KW}, false, [unwrapKey\])] - expected: FAIL - - [Good parameters: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-KW}, true, [wrapKey\])] - expected: FAIL - - [Good parameters: 192 bits (jwk, {alg: A192KW, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {name: AES-KW}, true, [wrapKey\])] - expected: FAIL - - [Good parameters: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-KW}, false, [wrapKey\])] - expected: FAIL - - [Good parameters: 192 bits (jwk, {alg: A192KW, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {name: AES-KW}, false, [wrapKey\])] - expected: FAIL - - [Good parameters: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-KW}, true, [unwrapKey, wrapKey\])] - expected: FAIL - - [Good parameters: 192 bits (jwk, {alg: A192KW, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {name: AES-KW}, true, [unwrapKey, wrapKey\])] - expected: FAIL - - [Good parameters: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-KW}, false, [unwrapKey, wrapKey\])] - expected: FAIL - - [Good parameters: 192 bits (jwk, {alg: A192KW, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {name: AES-KW}, false, [unwrapKey, wrapKey\])] - expected: FAIL - - [Good parameters: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-KW}, true, [unwrapKey\])] - expected: FAIL - - [Good parameters: 192 bits (jwk, {alg: A192KW, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {name: AES-KW}, true, [unwrapKey\])] - expected: FAIL - - [Good parameters: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-KW}, false, [unwrapKey\])] - expected: FAIL - - [Good parameters: 192 bits (jwk, {alg: A192KW, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {name: AES-KW}, false, [unwrapKey\])] - expected: FAIL - - [Good parameters: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-KW}, true, [wrapKey\])] - expected: FAIL - - [Good parameters: 256 bits (jwk, {alg: A256KW, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {name: AES-KW}, true, [wrapKey\])] - expected: FAIL - - [Good parameters: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-KW}, false, [wrapKey\])] - expected: FAIL - - [Good parameters: 256 bits (jwk, {alg: A256KW, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {name: AES-KW}, false, [wrapKey\])] - expected: FAIL - - [Good parameters: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-KW}, true, [unwrapKey, wrapKey\])] - expected: FAIL - - [Good parameters: 256 bits (jwk, {alg: A256KW, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {name: AES-KW}, true, [unwrapKey, wrapKey\])] - expected: FAIL - - [Good parameters: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-KW}, false, [unwrapKey, wrapKey\])] - expected: FAIL - - [Good parameters: 256 bits (jwk, {alg: A256KW, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {name: AES-KW}, false, [unwrapKey, wrapKey\])] - expected: FAIL - - [Good parameters: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-KW}, true, [unwrapKey\])] - expected: FAIL - - [Good parameters: 256 bits (jwk, {alg: A256KW, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {name: AES-KW}, true, [unwrapKey\])] - expected: FAIL - - [Good parameters: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-KW}, false, [unwrapKey\])] - expected: FAIL - - [Good parameters: 256 bits (jwk, {alg: A256KW, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {name: AES-KW}, false, [unwrapKey\])] - expected: FAIL - - [Good parameters: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-1, name: HMAC}, false, [sign\])] - expected: FAIL - - [Good parameters: 128 bits (jwk, {alg: HS1, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {hash: SHA-1, name: HMAC}, false, [sign\])] - expected: FAIL - - [Good parameters: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-1, name: HMAC}, false, [verify, sign\])] - expected: FAIL - - [Good parameters: 128 bits (jwk, {alg: HS1, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {hash: SHA-1, name: HMAC}, false, [verify, sign\])] - expected: FAIL - - [Good parameters: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-1, name: HMAC}, false, [verify\])] - expected: FAIL - - [Good parameters: 128 bits (jwk, {alg: HS1, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {hash: SHA-1, name: HMAC}, false, [verify\])] - expected: FAIL - - [Good parameters: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-1, name: HMAC}, false, [sign\])] - expected: FAIL - - [Good parameters: 192 bits (jwk, {alg: HS1, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {hash: SHA-1, name: HMAC}, false, [sign\])] - expected: FAIL - - [Good parameters: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-1, name: HMAC}, false, [verify, sign\])] - expected: FAIL - - [Good parameters: 192 bits (jwk, {alg: HS1, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {hash: SHA-1, name: HMAC}, false, [verify, sign\])] - expected: FAIL - - [Good parameters: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-1, name: HMAC}, false, [verify\])] - expected: FAIL - - [Good parameters: 192 bits (jwk, {alg: HS1, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {hash: SHA-1, name: HMAC}, false, [verify\])] - expected: FAIL - - [Good parameters: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-1, name: HMAC}, false, [sign\])] - expected: FAIL - - [Good parameters: 256 bits (jwk, {alg: HS1, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {hash: SHA-1, name: HMAC}, false, [sign\])] - expected: FAIL - - [Good parameters: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-1, name: HMAC}, false, [verify, sign\])] - expected: FAIL - - [Good parameters: 256 bits (jwk, {alg: HS1, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {hash: SHA-1, name: HMAC}, false, [verify, sign\])] - expected: FAIL - - [Good parameters: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-1, name: HMAC}, false, [verify\])] - expected: FAIL - - [Good parameters: 256 bits (jwk, {alg: HS1, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {hash: SHA-1, name: HMAC}, false, [verify\])] - expected: FAIL - - [Good parameters: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-256, name: HMAC}, false, [sign\])] - expected: FAIL - - [Good parameters: 128 bits (jwk, {alg: HS256, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {hash: SHA-256, name: HMAC}, false, [sign\])] - expected: FAIL - - [Good parameters: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-256, name: HMAC}, false, [verify, sign\])] - expected: FAIL - - [Good parameters: 128 bits (jwk, {alg: HS256, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {hash: SHA-256, name: HMAC}, false, [verify, sign\])] - expected: FAIL - - [Good parameters: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-256, name: HMAC}, false, [verify\])] - expected: FAIL - - [Good parameters: 128 bits (jwk, {alg: HS256, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {hash: SHA-256, name: HMAC}, false, [verify\])] - expected: FAIL - - [Good parameters: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-256, name: HMAC}, false, [sign\])] - expected: FAIL - - [Good parameters: 192 bits (jwk, {alg: HS256, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {hash: SHA-256, name: HMAC}, false, [sign\])] - expected: FAIL - - [Good parameters: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-256, name: HMAC}, false, [verify, sign\])] - expected: FAIL - - [Good parameters: 192 bits (jwk, {alg: HS256, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {hash: SHA-256, name: HMAC}, false, [verify, sign\])] - expected: FAIL - - [Good parameters: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-256, name: HMAC}, false, [verify\])] - expected: FAIL - - [Good parameters: 192 bits (jwk, {alg: HS256, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {hash: SHA-256, name: HMAC}, false, [verify\])] - expected: FAIL - - [Good parameters: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-256, name: HMAC}, false, [sign\])] - expected: FAIL - - [Good parameters: 256 bits (jwk, {alg: HS256, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {hash: SHA-256, name: HMAC}, false, [sign\])] - expected: FAIL - - [Good parameters: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-256, name: HMAC}, false, [verify, sign\])] - expected: FAIL - - [Good parameters: 256 bits (jwk, {alg: HS256, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {hash: SHA-256, name: HMAC}, false, [verify, sign\])] - expected: FAIL - - [Good parameters: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-256, name: HMAC}, false, [verify\])] - expected: FAIL - - [Good parameters: 256 bits (jwk, {alg: HS256, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {hash: SHA-256, name: HMAC}, false, [verify\])] - expected: FAIL - - [Good parameters: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-384, name: HMAC}, false, [sign\])] - expected: FAIL - - [Good parameters: 128 bits (jwk, {alg: HS384, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {hash: SHA-384, name: HMAC}, false, [sign\])] - expected: FAIL - - [Good parameters: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-384, name: HMAC}, false, [verify, sign\])] - expected: FAIL - - [Good parameters: 128 bits (jwk, {alg: HS384, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {hash: SHA-384, name: HMAC}, false, [verify, sign\])] - expected: FAIL - - [Good parameters: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-384, name: HMAC}, false, [verify\])] - expected: FAIL - - [Good parameters: 128 bits (jwk, {alg: HS384, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {hash: SHA-384, name: HMAC}, false, [verify\])] - expected: FAIL - - [Good parameters: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-384, name: HMAC}, false, [sign\])] - expected: FAIL - - [Good parameters: 192 bits (jwk, {alg: HS384, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {hash: SHA-384, name: HMAC}, false, [sign\])] - expected: FAIL - - [Good parameters: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-384, name: HMAC}, false, [verify, sign\])] - expected: FAIL - - [Good parameters: 192 bits (jwk, {alg: HS384, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {hash: SHA-384, name: HMAC}, false, [verify, sign\])] - expected: FAIL - - [Good parameters: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-384, name: HMAC}, false, [verify\])] - expected: FAIL - - [Good parameters: 192 bits (jwk, {alg: HS384, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {hash: SHA-384, name: HMAC}, false, [verify\])] - expected: FAIL - - [Good parameters: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-384, name: HMAC}, false, [sign\])] - expected: FAIL - - [Good parameters: 256 bits (jwk, {alg: HS384, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {hash: SHA-384, name: HMAC}, false, [sign\])] - expected: FAIL - - [Good parameters: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-384, name: HMAC}, false, [verify, sign\])] - expected: FAIL - - [Good parameters: 256 bits (jwk, {alg: HS384, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {hash: SHA-384, name: HMAC}, false, [verify, sign\])] - expected: FAIL - - [Good parameters: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-384, name: HMAC}, false, [verify\])] - expected: FAIL - - [Good parameters: 256 bits (jwk, {alg: HS384, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {hash: SHA-384, name: HMAC}, false, [verify\])] - expected: FAIL - - [Good parameters: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-512, name: HMAC}, false, [sign\])] - expected: FAIL - - [Good parameters: 128 bits (jwk, {alg: HS512, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {hash: SHA-512, name: HMAC}, false, [sign\])] - expected: FAIL - - [Good parameters: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-512, name: HMAC}, false, [verify, sign\])] - expected: FAIL - - [Good parameters: 128 bits (jwk, {alg: HS512, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {hash: SHA-512, name: HMAC}, false, [verify, sign\])] - expected: FAIL - - [Good parameters: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-512, name: HMAC}, false, [verify\])] - expected: FAIL - - [Good parameters: 128 bits (jwk, {alg: HS512, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {hash: SHA-512, name: HMAC}, false, [verify\])] - expected: FAIL - - [Good parameters: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-512, name: HMAC}, false, [sign\])] - expected: FAIL - - [Good parameters: 192 bits (jwk, {alg: HS512, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {hash: SHA-512, name: HMAC}, false, [sign\])] - expected: FAIL - - [Good parameters: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-512, name: HMAC}, false, [verify, sign\])] - expected: FAIL - - [Good parameters: 192 bits (jwk, {alg: HS512, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {hash: SHA-512, name: HMAC}, false, [verify, sign\])] - expected: FAIL - - [Good parameters: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-512, name: HMAC}, false, [verify\])] - expected: FAIL - - [Good parameters: 192 bits (jwk, {alg: HS512, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {hash: SHA-512, name: HMAC}, false, [verify\])] - expected: FAIL - - [Good parameters: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-512, name: HMAC}, false, [sign\])] - expected: FAIL - - [Good parameters: 256 bits (jwk, {alg: HS512, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {hash: SHA-512, name: HMAC}, false, [sign\])] - expected: FAIL - - [Good parameters: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-512, name: HMAC}, false, [verify, sign\])] - expected: FAIL - - [Good parameters: 256 bits (jwk, {alg: HS512, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {hash: SHA-512, name: HMAC}, false, [verify, sign\])] - expected: FAIL - - [Good parameters: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-512, name: HMAC}, false, [verify\])] - expected: FAIL - - [Good parameters: 256 bits (jwk, {alg: HS512, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {hash: SHA-512, name: HMAC}, false, [verify\])] - expected: FAIL - - [Good parameters: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: HKDF}, false, [deriveBits\])] - expected: FAIL - - [Good parameters: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: HKDF}, false, [deriveKey, deriveBits\])] - expected: FAIL - - [Good parameters: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: HKDF}, false, [deriveKey\])] - expected: FAIL - - [Good parameters: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: HKDF}, false, [deriveBits\])] - expected: FAIL - - [Good parameters: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: HKDF}, false, [deriveKey, deriveBits\])] - expected: FAIL - - [Good parameters: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: HKDF}, false, [deriveKey\])] - expected: FAIL - - [Good parameters: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: HKDF}, false, [deriveBits\])] - expected: FAIL - - [Good parameters: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: HKDF}, false, [deriveKey, deriveBits\])] - expected: FAIL - - [Good parameters: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: HKDF}, false, [deriveKey\])] - expected: FAIL - - [Good parameters: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: PBKDF2}, false, [deriveBits\])] - expected: FAIL - - [Good parameters: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: PBKDF2}, false, [deriveKey, deriveBits\])] - expected: FAIL - - [Good parameters: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: PBKDF2}, false, [deriveKey\])] - expected: FAIL - - [Good parameters: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: PBKDF2}, false, [deriveBits\])] - expected: FAIL - - [Good parameters: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: PBKDF2}, false, [deriveKey, deriveBits\])] - expected: FAIL - - [Good parameters: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: PBKDF2}, false, [deriveKey\])] - expected: FAIL - - [Good parameters: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: PBKDF2}, false, [deriveBits\])] - expected: FAIL - - [Good parameters: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: PBKDF2}, false, [deriveKey, deriveBits\])] - expected: FAIL - - [Good parameters: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: PBKDF2}, false, [deriveKey\])] - expected: FAIL - diff --git a/tests/wpt/metadata/WebCryptoAPI/sign_verify/test_ecdsa.html.ini b/tests/wpt/metadata/WebCryptoAPI/sign_verify/test_ecdsa.html.ini deleted file mode 100644 index bb126303c82..00000000000 --- a/tests/wpt/metadata/WebCryptoAPI/sign_verify/test_ecdsa.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[test_ecdsa.html] - type: testharness - [WebCryptoAPI: sign() and verify() Using ECDSA] - expected: FAIL - diff --git a/tests/wpt/metadata/WebCryptoAPI/sign_verify/test_hmac.html.ini b/tests/wpt/metadata/WebCryptoAPI/sign_verify/test_hmac.html.ini deleted file mode 100644 index b87586debc7..00000000000 --- a/tests/wpt/metadata/WebCryptoAPI/sign_verify/test_hmac.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[test_hmac.html] - type: testharness - [WebCryptoAPI: sign() and verify() Using HMAC] - expected: FAIL - diff --git a/tests/wpt/metadata/WebCryptoAPI/sign_verify/test_rsa_pkcs.html.ini b/tests/wpt/metadata/WebCryptoAPI/sign_verify/test_rsa_pkcs.html.ini deleted file mode 100644 index 4466a804d4f..00000000000 --- a/tests/wpt/metadata/WebCryptoAPI/sign_verify/test_rsa_pkcs.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[test_rsa_pkcs.html] - type: testharness - [WebCryptoAPI: sign() and verify() Using RSASSA-PKCS1-v1_5] - expected: FAIL - diff --git a/tests/wpt/metadata/WebCryptoAPI/sign_verify/test_rsa_pss.html.ini b/tests/wpt/metadata/WebCryptoAPI/sign_verify/test_rsa_pss.html.ini deleted file mode 100644 index d1f0383ae56..00000000000 --- a/tests/wpt/metadata/WebCryptoAPI/sign_verify/test_rsa_pss.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[test_rsa_pss.html] - type: testharness - [WebCryptoAPI: sign() and verify() Using RSA-PSS] - expected: FAIL - diff --git a/tests/wpt/metadata/WebCryptoAPI/wrapKey_unwrapKey/test_wrapKey_unwrapKey.html.ini b/tests/wpt/metadata/WebCryptoAPI/wrapKey_unwrapKey/test_wrapKey_unwrapKey.html.ini deleted file mode 100644 index fd1c320a2f1..00000000000 --- a/tests/wpt/metadata/WebCryptoAPI/wrapKey_unwrapKey/test_wrapKey_unwrapKey.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[test_wrapKey_unwrapKey.html] - type: testharness - [WebCryptoAPI: wrapKey() and unwrapKey()] - expected: FAIL - diff --git a/tests/wpt/metadata/encoding/legacy-mb-japanese/__dir__.ini b/tests/wpt/metadata/encoding/legacy-mb-japanese/__dir__.ini new file mode 100644 index 00000000000..709302c37b1 --- /dev/null +++ b/tests/wpt/metadata/encoding/legacy-mb-japanese/__dir__.ini @@ -0,0 +1 @@ +disabled: gigantic tests that all fail/timeout \ No newline at end of file diff --git a/tests/wpt/metadata/encoding/legacy-mb-korean/__dir__.ini b/tests/wpt/metadata/encoding/legacy-mb-korean/__dir__.ini new file mode 100644 index 00000000000..709302c37b1 --- /dev/null +++ b/tests/wpt/metadata/encoding/legacy-mb-korean/__dir__.ini @@ -0,0 +1 @@ +disabled: gigantic tests that all fail/timeout \ No newline at end of file diff --git a/tests/wpt/metadata/encoding/legacy-mb-tchinese/__dir__.ini b/tests/wpt/metadata/encoding/legacy-mb-tchinese/__dir__.ini new file mode 100644 index 00000000000..709302c37b1 --- /dev/null +++ b/tests/wpt/metadata/encoding/legacy-mb-tchinese/__dir__.ini @@ -0,0 +1 @@ +disabled: gigantic tests that all fail/timeout \ No newline at end of file diff --git a/tests/wpt/metadata/html/webappapis/scripting/events/event-handler-onauxclick.html.ini b/tests/wpt/metadata/html/webappapis/scripting/events/event-handler-onauxclick.html.ini deleted file mode 100644 index 6cd159e4c10..00000000000 --- a/tests/wpt/metadata/html/webappapis/scripting/events/event-handler-onauxclick.html.ini +++ /dev/null @@ -1,11 +0,0 @@ -[event-handler-onauxclick.html] - type: testharness - [onauxclick is on the appropriate locations for GlobalEventHandlers] - expected: FAIL - - [The default value of onauxclick is always null] - expected: FAIL - - [The onauxclick content attribute must be compiled into the onauxclick property] - expected: FAIL - diff --git a/tests/wpt/metadata/mozilla-sync b/tests/wpt/metadata/mozilla-sync index b2bcfb55315..8b81e6646c6 100644 --- a/tests/wpt/metadata/mozilla-sync +++ b/tests/wpt/metadata/mozilla-sync @@ -1,2 +1,2 @@ -local: 533853fdce029d7184a33f7d08bfce7cbd6248c8 -upstream: a6213478991012d8b1da71a49bb01f013ff71869 +local: 4ecddb0622dcb6fdb7a7bd5025dd12be293b30e1 +upstream: a46616a5b18e83587ddbbed756c7b96cbb4b015d diff --git a/tests/wpt/metadata/url/interfaces.html.ini b/tests/wpt/metadata/url/interfaces.html.ini deleted file mode 100644 index 5fef696b587..00000000000 --- a/tests/wpt/metadata/url/interfaces.html.ini +++ /dev/null @@ -1,11 +0,0 @@ -[interfaces.html] - type: testharness - [Testing Symbol.iterator property of iterable interface URLSearchParams] - expected: FAIL - - [URL interface: operation toJSON()] - expected: FAIL - - [URL interface: new URL("http://foo") must inherit property "toJSON" with the proper type (12)] - expected: FAIL - diff --git a/tests/wpt/web-platform-tests/.codecov.yml b/tests/wpt/web-platform-tests/.codecov.yml new file mode 100644 index 00000000000..904cf85a4fd --- /dev/null +++ b/tests/wpt/web-platform-tests/.codecov.yml @@ -0,0 +1,6 @@ +comment: + require_changes: yes + +ignore: + - "**" + - "!tools/.*" diff --git a/tests/wpt/web-platform-tests/.gitignore b/tests/wpt/web-platform-tests/.gitignore index 2ae64ff07d7..e92e0808d4f 100644 --- a/tests/wpt/web-platform-tests/.gitignore +++ b/tests/wpt/web-platform-tests/.gitignore @@ -14,3 +14,4 @@ webdriver/.idea .vscode/ .DS_Store *.rej +_venv diff --git a/tests/wpt/web-platform-tests/.gitmodules b/tests/wpt/web-platform-tests/.gitmodules index 5eb46bc6915..41d2a66089b 100644 --- a/tests/wpt/web-platform-tests/.gitmodules +++ b/tests/wpt/web-platform-tests/.gitmodules @@ -1,14 +1,12 @@ -[submodule "resources"] - path = resources - url = https://github.com/w3c/testharness.js.git - ignore = dirty -[submodule "tools"] - path = tools - url = https://github.com/w3c/wpt-tools.git - ignore = dirty [submodule "css/tools/apiclient"] path = css/tools/apiclient url = https://github.com/w3c/csswg-apiclient.git [submodule "css/tools/w3ctestlib"] path = css/tools/w3ctestlib url = https://github.com/w3c/csswg-w3ctestlib.git +[submodule "tools/html5lib/html5lib/tests/testdata"] + path = tools/html5lib/html5lib/tests/testdata + url = https://github.com/html5lib/html5lib-tests.git +[submodule "resources/webidl2/test/widlproc"] + path = resources/webidl2/test/widlproc + url = https://github.com/dontcallmedom/widlproc.git \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/.travis.yml b/tests/wpt/web-platform-tests/.travis.yml index a558820fd4e..05c97d9bccc 100644 --- a/tests/wpt/web-platform-tests/.travis.yml +++ b/tests/wpt/web-platform-tests/.travis.yml @@ -1,6 +1,9 @@ dist: trusty sudo: required language: python +branches: + only: + - master addons: hosts: - web-platform.test @@ -9,6 +12,8 @@ addons: - www2.web-platform.test - xn--n8j6ds53lwwkrqhv28a.web-platform.test - xn--lve-6lad.web-platform.test + jwt: + secure: N9lvgkqUPtFlz6Vpa6qTPFhymEsDCsbaCsT64/hj3vlHRxK94r5+ugVJ3zm99zC0q2j1ish8yJC7mN/W4wRfBE4sAwmdxrlowxF1DDGCkaLE9i/GWW92s0fBVGJmXLh8kwNkQ31hMOsaGfHIMpeLFS7Se741te7YqsHIzmBCdQs= before_install: - git submodule update --init --recursive - export DISPLAY=:99.0 @@ -17,7 +22,10 @@ install: - pip install -U setuptools - pip install -U requests env: # required at the top-level for allow_failures to work below + global: + - SAUCE_USERNAME=w3c-ttwf matrix: + fast_finish: true include: - os: linux python: "2.7" @@ -48,10 +56,34 @@ matrix: env: - secure: "YTSXPwI0DyCA1GhYrLT9KMEV6b7QQKuEeaQgeFDP38OTzJ1+cIj3CC4SRNqbnJ/6SJwPGcdqSxLuV8m4e5HFFnyCcQnJe6h8EMsTehZ7W3j/fP9UYrJqYqvGpe3Vj3xblO5pwBYmq7sg3jAmmuCgAgOW6VGf7cRMucrsmFeo7VM=" - SCRIPT=ci_stability.sh PRODUCT=chrome:unstable + - os: linux + python: "2.7" + env: + - secure: "YTSXPwI0DyCA1GhYrLT9KMEV6b7QQKuEeaQgeFDP38OTzJ1+cIj3CC4SRNqbnJ/6SJwPGcdqSxLuV8m4e5HFFnyCcQnJe6h8EMsTehZ7W3j/fP9UYrJqYqvGpe3Vj3xblO5pwBYmq7sg3jAmmuCgAgOW6VGf7cRMucrsmFeo7VM=" + - SCRIPT=ci_stability.sh PRODUCT=sauce:safari:10.0 PLATFORM='macOS 10.12' + - os: linux + python: "2.7" + env: + - secure: "YTSXPwI0DyCA1GhYrLT9KMEV6b7QQKuEeaQgeFDP38OTzJ1+cIj3CC4SRNqbnJ/6SJwPGcdqSxLuV8m4e5HFFnyCcQnJe6h8EMsTehZ7W3j/fP9UYrJqYqvGpe3Vj3xblO5pwBYmq7sg3jAmmuCgAgOW6VGf7cRMucrsmFeo7VM=" + - SCRIPT=ci_stability.sh PRODUCT=sauce:MicrosoftEdge:14.14393 PLATFORM='Windows 10' + - python: 2.7 + env: TOXENV=py27 HYPOTHESIS_PROFILE=ci SCRIPT=ci_unittest.sh + - python: 3.5 + env: TOXENV=py35 HYPOTHESIS_PROFILE=ci SCRIPT=ci_unittest.sh + - python: 3.6 + env: TOXENV=py36 HYPOTHESIS_PROFILE=ci SCRIPT=ci_unittest.sh + - python: pypy + env: TOXENV=pypy HYPOTHESIS_PROFILE=ci SCRIPT=ci_unittest.sh exclude: - env: # exclude empty env from the top-level above allow_failures: - env: SCRIPT=css/build-css-testsuites.sh + - env: + - secure: "YTSXPwI0DyCA1GhYrLT9KMEV6b7QQKuEeaQgeFDP38OTzJ1+cIj3CC4SRNqbnJ/6SJwPGcdqSxLuV8m4e5HFFnyCcQnJe6h8EMsTehZ7W3j/fP9UYrJqYqvGpe3Vj3xblO5pwBYmq7sg3jAmmuCgAgOW6VGf7cRMucrsmFeo7VM=" + - SCRIPT=ci_stability.sh PRODUCT=chrome:unstable + - env: + - secure: "YTSXPwI0DyCA1GhYrLT9KMEV6b7QQKuEeaQgeFDP38OTzJ1+cIj3CC4SRNqbnJ/6SJwPGcdqSxLuV8m4e5HFFnyCcQnJe6h8EMsTehZ7W3j/fP9UYrJqYqvGpe3Vj3xblO5pwBYmq7sg3jAmmuCgAgOW6VGf7cRMucrsmFeo7VM=" + - SCRIPT=ci_stability.sh PRODUCT=sauce:MicrosoftEdge:14.14393 PLATFORM='Windows 10' script: - bash $SCRIPT cache: diff --git a/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_1.html b/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_1.html index 6cd4834d7ab..b9de85a9774 100644 --- a/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_1.html +++ b/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_1.html @@ -1,5 +1,4 @@ - + + + + + + + + + + + + + + + + + +
x + !x + "x + #x + $x + %x + &x + (x + )x + *x + +x + ,x + -x + .x + /x + 0x + 1x +
2x + 3x + 4x + 5x + 6x + 7x + 8x + 9x + :x + ;x + <x + =x + >x + ?x + @x + Ax + Bx +
Cx + Dx + Ex + Fx + Gx + Hx + Ix + Jx + Kx + Lx + Mx + Nx + Ox + Px + Qx + Rx + Sx +
Tx + Ux + Vx + Wx + Xx + Yx + Zx + [x + \x + ]x + ^x + _x + `x + ax + bx + cx + dx +
ex + fx + gx + hx + ix + jx + kx + lx + mx + nx + ox + px + qx + rx + sx + tx + ux +
vx + wx + xx + yx + zx + {x + |x + }x + ~x +  x + ¡x + ¢x + £x + ¤x + ¥x + ¦x + §x +
¨x + ©x + ªx + «x + ¬x + ­x + ®x + ¯x + °x + ±x + ²x + ³x + ´x + µx + ¶x + ·x + ¸x +
¹x + ºx + »x + ¼x + ½x + ¾x + ¿x + Àx + Áx + Âx + Ãx + Äx + Åx + Æx + Çx + Èx + Éx +
Êx + Ëx + Ìx + Íx + Îx + Ïx + Ðx + Ñx + Òx + Óx + Ôx + Õx + Öx + ×x + Øx + Ùx + Úx +
Ûx + Üx + Ýx + Þx + ßx + àx + áx + âx + ãx + äx + åx + æx + çx + èx + éx + êx + ëx +
ìx + íx + îx + ïx + ðx + ñx + òx + óx + ôx + õx + öx + ÷x + øx + ùx + úx + ûx + üx +
ýx + þx + ÿx + ıx + Œx + œx + Ÿx + ƒx + ˆx + ˇx + ˉx + ˘x + ˙x + ˚x + ˛x + ˜x + ˝x +
Δx + Ωx + μx + πx +  x +  x +  x +  x +  x +  x +  x + ​x + ‌x + ‍x + ‐x + –x + —x +
‘x + ’x + ‚x + “x + ”x + „x + †x + ‡x + •x + …x + ‰x + ‹x + ›x + ⁄x + ™x + Ωx + ∂x +
∆x + ∏x + ∑x + −x + ∙x + √x + ∞x + ∫x + ≈x + ≠x + ≤x + ≥x + ⋲x + ◊x +  x + x + x +
x + x +
diff --git a/tests/wpt/web-platform-tests/assumptions/ahem.html b/tests/wpt/web-platform-tests/assumptions/ahem.html new file mode 100644 index 00000000000..dee1b75c590 --- /dev/null +++ b/tests/wpt/web-platform-tests/assumptions/ahem.html @@ -0,0 +1,297 @@ + + +Ahem checker + + + + + + + + + + + + + + + + + + + +
x + !x + "x + #x + $x + %x + &x + (x + )x + *x + +x + ,x + -x + .x + /x + 0x + 1x +
2x + 3x + 4x + 5x + 6x + 7x + 8x + 9x + :x + ;x + <x + =x + >x + ?x + @x + Ax + Bx +
Cx + Dx + Ex + Fx + Gx + Hx + Ix + Jx + Kx + Lx + Mx + Nx + Ox + Px + Qx + Rx + Sx +
Tx + Ux + Vx + Wx + Xx + Yx + Zx + [x + \x + ]x + ^x + _x + `x + ax + bx + cx + dx +
ex + fx + gx + hx + ix + jx + kx + lx + mx + nx + ox + px + qx + rx + sx + tx + ux +
vx + wx + xx + yx + zx + {x + |x + }x + ~x +  x + ¡x + ¢x + £x + ¤x + ¥x + ¦x + §x +
¨x + ©x + ªx + «x + ¬x + ­x + ®x + ¯x + °x + ±x + ²x + ³x + ´x + µx + ¶x + ·x + ¸x +
¹x + ºx + »x + ¼x + ½x + ¾x + ¿x + Àx + Áx + Âx + Ãx + Äx + Åx + Æx + Çx + Èx + Éx +
Êx + Ëx + Ìx + Íx + Îx + Ïx + Ðx + Ñx + Òx + Óx + Ôx + Õx + Öx + ×x + Øx + Ùx + Úx +
Ûx + Üx + Ýx + Þx + ßx + àx + áx + âx + ãx + äx + åx + æx + çx + èx + éx + êx + ëx +
ìx + íx + îx + ïx + ðx + ñx + òx + óx + ôx + õx + öx + ÷x + øx + ùx + úx + ûx + üx +
ýx + þx + ÿx + ıx + Œx + œx + Ÿx + ƒx + ˆx + ˇx + ˉx + ˘x + ˙x + ˚x + ˛x + ˜x + ˝x +
Δx + Ωx + μx + πx +  x +  x +  x +  x +  x +  x +  x + ​x + ‌x + ‍x + ‐x + –x + —x +
‘x + ’x + ‚x + “x + ”x + „x + †x + ‡x + •x + …x + ‰x + ‹x + ›x + ⁄x + ™x + Ωx + ∂x +
∆x + ∏x + ∑x + −x + ∙x + √x + ∞x + ∫x + ≈x + ≠x + ≤x + ≥x + ⋲x + ◊x +  x + x + x +
x + x +
diff --git a/tests/wpt/web-platform-tests/assumptions/tools/ahem-generate-table.py b/tests/wpt/web-platform-tests/assumptions/tools/ahem-generate-table.py new file mode 100644 index 00000000000..29b4f0eb1bc --- /dev/null +++ b/tests/wpt/web-platform-tests/assumptions/tools/ahem-generate-table.py @@ -0,0 +1,102 @@ +from __future__ import print_function, unicode_literals + +import itertools +import unicodedata + +from fontTools.ttLib import TTFont + +try: + chr(0x100) +except ValueError: + chr = unichr + +def grouper(n, iterable): + """ + >>> list(grouper(3, 'ABCDEFG')) + [['A', 'B', 'C'], ['D', 'E', 'F'], ['G']] + """ + iterable = iter(iterable) + return iter(lambda: list(itertools.islice(iterable, n)), []) + +ttf = TTFont("../../css/fonts/ahem/ahem.ttf") + +chars = {char for table in ttf['cmap'].tables for char in table.cmap.keys()} + +# exclude chars that can't be represented as HTML numeric character refs +chars = chars - (set(range(0x80, 0x9F+1)) | {0x00}) + +chars_sorted = sorted(chars) + +per_row = 17 + + +def build_header(is_test): + rv = [] + + rv.append(""" + +Ahem checker""") + + if is_test: + rv.append(""" +""") + + rv.append(""" + +""") + + return "".join(rv) + + +def build_table(): + rv = [] + + rv.append("\n") + for row in grouper(per_row, chars_sorted): + rv.append(" " * 4 + "\n") + for codepoint in row: + assert codepoint <= 0xFFFF + try: + name = unicodedata.name(chr(codepoint)) + except ValueError: + rv.append(" " * 8 + "
&#x%04X;x \n" % (codepoint, codepoint)) + else: + rv.append(" " * 8 + "&#x%04X;x \n" % (codepoint, codepoint, name)) + rv.append("
\n") + + return "".join(rv) + + +with open("../ahem.html", "w") as f1: + f1.write(build_header(True)) + f1.write(build_table()) + +with open("../ahem-ref.html", "w") as f1: + f1.write(build_header(False)) + f1.write(build_table()) diff --git a/tests/wpt/web-platform-tests/assumptions/tools/build.sh b/tests/wpt/web-platform-tests/assumptions/tools/build.sh new file mode 100755 index 00000000000..d40f63a7374 --- /dev/null +++ b/tests/wpt/web-platform-tests/assumptions/tools/build.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env sh +set -ex + +cd "${0%/*}" +virtualenv -p python .virtualenv +.virtualenv/bin/pip install fonttools==3.13.1 +.virtualenv/bin/python ahem-generate-table.py diff --git a/tests/wpt/web-platform-tests/battery-status/battery-charging-manual.html b/tests/wpt/web-platform-tests/battery-status/battery-charging-manual.https.html similarity index 92% rename from tests/wpt/web-platform-tests/battery-status/battery-charging-manual.html rename to tests/wpt/web-platform-tests/battery-status/battery-charging-manual.https.html index 8e80e30a274..9ff7421638a 100644 --- a/tests/wpt/web-platform-tests/battery-status/battery-charging-manual.html +++ b/tests/wpt/web-platform-tests/battery-status/battery-charging-manual.https.html @@ -1,6 +1,8 @@ Battery Test: battery neither empty or full, charger plugged in + + diff --git a/tests/wpt/web-platform-tests/battery-status/battery-discharging-manual.html b/tests/wpt/web-platform-tests/battery-status/battery-discharging-manual.https.html similarity index 92% rename from tests/wpt/web-platform-tests/battery-status/battery-discharging-manual.html rename to tests/wpt/web-platform-tests/battery-status/battery-discharging-manual.https.html index c4ccbe445d1..f321cf75481 100644 --- a/tests/wpt/web-platform-tests/battery-status/battery-discharging-manual.html +++ b/tests/wpt/web-platform-tests/battery-status/battery-discharging-manual.https.html @@ -1,6 +1,8 @@ Battery Test: battery neither empty or full, charger unplugged in + + diff --git a/tests/wpt/web-platform-tests/battery-status/battery-full-manual.html b/tests/wpt/web-platform-tests/battery-status/battery-full-manual.https.html similarity index 90% rename from tests/wpt/web-platform-tests/battery-status/battery-full-manual.html rename to tests/wpt/web-platform-tests/battery-status/battery-full-manual.https.html index 883d71f408d..0680b7d9332 100644 --- a/tests/wpt/web-platform-tests/battery-status/battery-full-manual.html +++ b/tests/wpt/web-platform-tests/battery-status/battery-full-manual.https.html @@ -1,6 +1,8 @@ Battery Test: battery full, charger plugged in + + diff --git a/tests/wpt/web-platform-tests/battery-status/battery-iframe.https.html b/tests/wpt/web-platform-tests/battery-status/battery-iframe.https.html new file mode 100644 index 00000000000..1f95b4ecb32 --- /dev/null +++ b/tests/wpt/web-platform-tests/battery-status/battery-iframe.https.html @@ -0,0 +1,27 @@ + + +Battery Test: navigator.getBattery() is not allowed in non top-level browsing context + + + + +
+ + diff --git a/tests/wpt/web-platform-tests/battery-status/battery-insecure-context.html b/tests/wpt/web-platform-tests/battery-status/battery-insecure-context.html new file mode 100644 index 00000000000..9d2c9fd1d41 --- /dev/null +++ b/tests/wpt/web-platform-tests/battery-status/battery-insecure-context.html @@ -0,0 +1,27 @@ + + +Battery Test: navigator.getBattery() shall throw "SecurityError" in an insecure context + + + + + +
+ Run test in an insecure context, e.g. http://example.com/. +
+ + diff --git a/tests/wpt/web-platform-tests/battery-status/battery-interface-idlharness.html b/tests/wpt/web-platform-tests/battery-status/battery-interface-idlharness.https.html similarity index 95% rename from tests/wpt/web-platform-tests/battery-status/battery-interface-idlharness.html rename to tests/wpt/web-platform-tests/battery-status/battery-interface-idlharness.https.html index 4e9b209d4d7..5abda1971f3 100644 --- a/tests/wpt/web-platform-tests/battery-status/battery-interface-idlharness.html +++ b/tests/wpt/web-platform-tests/battery-status/battery-interface-idlharness.https.html @@ -1,6 +1,8 @@ Battery test: IDL + + diff --git a/tests/wpt/web-platform-tests/battery-status/battery-plugging-in-manual.html b/tests/wpt/web-platform-tests/battery-status/battery-plugging-in-manual.https.html similarity index 96% rename from tests/wpt/web-platform-tests/battery-status/battery-plugging-in-manual.html rename to tests/wpt/web-platform-tests/battery-status/battery-plugging-in-manual.https.html index 4d16cf1875f..1445bd7e260 100644 --- a/tests/wpt/web-platform-tests/battery-status/battery-plugging-in-manual.html +++ b/tests/wpt/web-platform-tests/battery-status/battery-plugging-in-manual.https.html @@ -1,6 +1,8 @@ Battery Test: battery not full, charger plugging in + + diff --git a/tests/wpt/web-platform-tests/battery-status/battery-promise-iframe.html b/tests/wpt/web-platform-tests/battery-status/battery-promise-iframe.html deleted file mode 100644 index 6add86106f3..00000000000 --- a/tests/wpt/web-platform-tests/battery-status/battery-promise-iframe.html +++ /dev/null @@ -1,80 +0,0 @@ - - -Battery Test: iframe has a different Navigator object - - - -
- - - diff --git a/tests/wpt/web-platform-tests/battery-status/battery-promise-window.html b/tests/wpt/web-platform-tests/battery-status/battery-promise-window.https.html similarity index 86% rename from tests/wpt/web-platform-tests/battery-status/battery-promise-window.html rename to tests/wpt/web-platform-tests/battery-status/battery-promise-window.https.html index a7d708c05ce..37700aa5cb8 100644 --- a/tests/wpt/web-platform-tests/battery-status/battery-promise-window.html +++ b/tests/wpt/web-platform-tests/battery-status/battery-promise-window.https.html @@ -1,6 +1,8 @@ Battery Test: window.open() makes a different Navigator object + + + diff --git a/tests/wpt/web-platform-tests/content-security-policy/nonce-hiding/script-nonces-hidden.tentative.html b/tests/wpt/web-platform-tests/content-security-policy/nonce-hiding/script-nonces-hidden.tentative.html new file mode 100644 index 00000000000..763e48dddfb --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/nonce-hiding/script-nonces-hidden.tentative.html @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/content-security-policy/nonce-hiding/script-nonces-hidden.tentative.html.headers b/tests/wpt/web-platform-tests/content-security-policy/nonce-hiding/script-nonces-hidden.tentative.html.headers new file mode 100644 index 00000000000..ad8d0b54f31 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/nonce-hiding/script-nonces-hidden.tentative.html.headers @@ -0,0 +1 @@ +Content-Security-Policy: script-src 'nonce-abc'; img-src 'none' diff --git a/tests/wpt/web-platform-tests/content-security-policy/nonce-hiding/svgscript-nonces-hidden-meta.tentative.html b/tests/wpt/web-platform-tests/content-security-policy/nonce-hiding/svgscript-nonces-hidden-meta.tentative.html new file mode 100644 index 00000000000..a283869c18e --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/nonce-hiding/svgscript-nonces-hidden-meta.tentative.html @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/content-security-policy/nonce-hiding/svgscript-nonces-hidden.tentative.html b/tests/wpt/web-platform-tests/content-security-policy/nonce-hiding/svgscript-nonces-hidden.tentative.html new file mode 100644 index 00000000000..8c0e58b1d1d --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/nonce-hiding/svgscript-nonces-hidden.tentative.html @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/content-security-policy/nonce-hiding/svgscript-nonces-hidden.tentative.html.headers b/tests/wpt/web-platform-tests/content-security-policy/nonce-hiding/svgscript-nonces-hidden.tentative.html.headers new file mode 100644 index 00000000000..ad8d0b54f31 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/nonce-hiding/svgscript-nonces-hidden.tentative.html.headers @@ -0,0 +1 @@ +Content-Security-Policy: script-src 'nonce-abc'; img-src 'none' diff --git a/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/img-src-redirect-upgrade-reporting.https.html b/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/img-src-redirect-upgrade-reporting.https.html new file mode 100644 index 00000000000..27611273bab --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/img-src-redirect-upgrade-reporting.https.html @@ -0,0 +1,31 @@ + + + + + + + diff --git a/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/img-src-redirect-upgrade-reporting.https.html.headers b/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/img-src-redirect-upgrade-reporting.https.html.headers new file mode 100644 index 00000000000..57207bbd23c --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/img-src-redirect-upgrade-reporting.https.html.headers @@ -0,0 +1,2 @@ +Content-Security-Policy-Report-Only: img-src https: +Content-Security-Policy: upgrade-insecure-requests diff --git a/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/support/testharness-helper.sub.js b/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/support/testharness-helper.sub.js new file mode 100644 index 00000000000..816b88fc6e4 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/support/testharness-helper.sub.js @@ -0,0 +1,5 @@ +function generateCrossOriginRedirectImage() { + var target = "http://{{host}}:{{ports[https][0]}}/content-security-policy/support/pass.png"; + var url = "/common/redirect.py?location=" + encodeURIComponent(target); + return { url: url, target: target } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/upgrade-insecure-requests-reporting.https.html b/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/upgrade-insecure-requests-reporting.https.html new file mode 100644 index 00000000000..692db02b6fc --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/upgrade-insecure-requests-reporting.https.html @@ -0,0 +1,92 @@ + + + + + + + diff --git a/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/upgrade-insecure-requests-reporting.https.html.headers b/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/upgrade-insecure-requests-reporting.https.html.headers new file mode 100644 index 00000000000..b8bec0b95e3 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/upgrade-insecure-requests-reporting.https.html.headers @@ -0,0 +1,2 @@ +Content-Security-Policy-Report-Only: frame-src https:; img-src https: +Content-Security-Policy: upgrade-insecure-requests diff --git a/tests/wpt/web-platform-tests/cors/access-control-expose-headers-parsing.window.js b/tests/wpt/web-platform-tests/cors/access-control-expose-headers-parsing.window.js new file mode 100644 index 00000000000..58e7395cf83 --- /dev/null +++ b/tests/wpt/web-platform-tests/cors/access-control-expose-headers-parsing.window.js @@ -0,0 +1,13 @@ +function exposeTest(resource, desc) { + const url = new URL("resources/" + resource, location.href).href.replace("://", "://élève."); + + promise_test(() => { + return fetch(url).then(res => { + assert_equals(res.headers.get("content-language"), "sure") + assert_equals(res.headers.get("x-custom"), null); + }) + }, "Access-Control-Expose-Headers parsing: " + desc); +} + +exposeTest("access-control-expose-headers-parsing.asis", "#1"); +exposeTest("access-control-expose-headers-parsing-2.asis", "#2") diff --git a/tests/wpt/web-platform-tests/cors/preflight-failure.htm b/tests/wpt/web-platform-tests/cors/preflight-failure.htm index 25fe7dd3f8b..fd34d55b790 100644 --- a/tests/wpt/web-platform-tests/cors/preflight-failure.htm +++ b/tests/wpt/web-platform-tests/cors/preflight-failure.htm @@ -22,14 +22,14 @@ var CROSSDOMAIN_URL = get_host_info().HTTP_REMOTE_ORIGIN + '/cors/resources/cors * Redirection with preflights. */ function preflight_failure(code) { - var desc = 'Should throw error if preflight respond with ' + code; + var isCodeOK = code >= 200 && code <= 299, + descOK = isCodeOK ? 'succeed' : 'throw error', + desc = 'Should ' + descOK + ' if preflight has status ' + code; async_test(desc).step(function() { var client = new XMLHttpRequest(); var redirect = encodeURIComponent(CROSSDOMAIN_URL + 'headers=x-test&' + req_c++); - var isCodeOK = code >= 200 && code <= 299; - client.open('GET', CROSSDOMAIN_URL + 'headers=x-test&location=' + redirect + '&code=' + code + '&preflight=' + code @@ -51,11 +51,12 @@ function preflight_failure(code) { client.send(null); }); } -[100, 101, - 200, +[200, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, - 500, 501, 502, 503, 504, 505 + 500, 501, 502, 503, 504, 505, + 680, + 790 ].forEach(preflight_failure); diff --git a/tests/wpt/web-platform-tests/cors/resources/access-control-expose-headers-parsing-2.asis b/tests/wpt/web-platform-tests/cors/resources/access-control-expose-headers-parsing-2.asis new file mode 100644 index 00000000000..9628a67ff14 --- /dev/null +++ b/tests/wpt/web-platform-tests/cors/resources/access-control-expose-headers-parsing-2.asis @@ -0,0 +1,8 @@ +HTTP/1.1 200 OK +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: not valid +Access-Control-Expose-Headers: x-custom +X-Custom: test +Content-Language: sure + +TEST diff --git a/tests/wpt/web-platform-tests/cors/resources/access-control-expose-headers-parsing.asis b/tests/wpt/web-platform-tests/cors/resources/access-control-expose-headers-parsing.asis new file mode 100644 index 00000000000..7a4b2a12b60 --- /dev/null +++ b/tests/wpt/web-platform-tests/cors/resources/access-control-expose-headers-parsing.asis @@ -0,0 +1,7 @@ +HTTP/1.1 200 OK +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: not valid, x-custom +X-Custom: test +Content-Language: sure + +TEST diff --git a/tests/wpt/web-platform-tests/credential-management/credentialscontainer-create-basics.https.html b/tests/wpt/web-platform-tests/credential-management/credentialscontainer-create-basics.https.html new file mode 100644 index 00000000000..89ae784d7ec --- /dev/null +++ b/tests/wpt/web-platform-tests/credential-management/credentialscontainer-create-basics.https.html @@ -0,0 +1,105 @@ + +Credential Management API: create() basics. + + + diff --git a/tests/wpt/web-platform-tests/credential-management/idl.https.html b/tests/wpt/web-platform-tests/credential-management/idl.https.html new file mode 100644 index 00000000000..92f489ef571 --- /dev/null +++ b/tests/wpt/web-platform-tests/credential-management/idl.https.html @@ -0,0 +1,104 @@ + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/css-font-display/font-display-ref.html b/tests/wpt/web-platform-tests/css-font-display/font-display-ref.html new file mode 100644 index 00000000000..1d8410b4ed6 --- /dev/null +++ b/tests/wpt/web-platform-tests/css-font-display/font-display-ref.html @@ -0,0 +1,85 @@ + +Test for font-display @font-face descriptor + +

Tests how text with a font that takes delay seconds to load look like after T seconds from load start.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
T[sec]delay[sec]autoblockswapfallbackoptional
01a
10aaaaa
10.5aaaaa
13aaa
52aaaaa
54aaaaa
58aaaaa
diff --git a/tests/wpt/web-platform-tests/css-font-display/font-display.html b/tests/wpt/web-platform-tests/css-font-display/font-display.html new file mode 100644 index 00000000000..019a88a9b7c --- /dev/null +++ b/tests/wpt/web-platform-tests/css-font-display/font-display.html @@ -0,0 +1,72 @@ + + +Test for font-display @font-face descriptor + + +

Tests how text with a font that takes delay seconds to load look like after T seconds from load start.

+ + + + + + + + + + +
T[sec]delay[sec]autoblockswapfallbackoptional
+ + diff --git a/tests/wpt/web-platform-tests/css-font-display/resources/slow-ahem-loading.py b/tests/wpt/web-platform-tests/css-font-display/resources/slow-ahem-loading.py new file mode 100644 index 00000000000..45989505cee --- /dev/null +++ b/tests/wpt/web-platform-tests/css-font-display/resources/slow-ahem-loading.py @@ -0,0 +1,16 @@ +import os +import time + +def main(request, response): + body = open(os.path.join(os.path.dirname(__file__), "../../css/fonts/ahem/ahem.ttf"), "rb").read() + delay = float(request.GET.first("ms", 500)) + if delay > 0: + time.sleep(delay / 1E3); + + response.add_required_headers = False + response.writer.write_status(200) + response.writer.write_header("content-length", len(body)) + response.writer.write_header("content-type", "application/octet-stream") + response.writer.end_headers() + + response.writer.write(body) diff --git a/tests/wpt/web-platform-tests/css-font-loading/fontfacesetloadevent-constructor.html b/tests/wpt/web-platform-tests/css-font-loading/fontfacesetloadevent-constructor.html new file mode 100644 index 00000000000..d5038ce690c --- /dev/null +++ b/tests/wpt/web-platform-tests/css-font-loading/fontfacesetloadevent-constructor.html @@ -0,0 +1,20 @@ + +FontFaceSetLoadEvent constructor + + + + diff --git a/tests/wpt/web-platform-tests/css-paint-api/OWNERS b/tests/wpt/web-platform-tests/css-paint-api/OWNERS new file mode 100644 index 00000000000..bd72a2a78f7 --- /dev/null +++ b/tests/wpt/web-platform-tests/css-paint-api/OWNERS @@ -0,0 +1,3 @@ +@bfgeek +@grorg +@shans diff --git a/tests/wpt/web-platform-tests/css-paint-api/background-image-alpha-ref.html b/tests/wpt/web-platform-tests/css-paint-api/background-image-alpha-ref.html new file mode 100644 index 00000000000..519b3599e95 --- /dev/null +++ b/tests/wpt/web-platform-tests/css-paint-api/background-image-alpha-ref.html @@ -0,0 +1,41 @@ + + + + + + + +
+
+ +
+
+ +
+
+ + + + diff --git a/tests/wpt/web-platform-tests/css-paint-api/background-image-alpha.html b/tests/wpt/web-platform-tests/css-paint-api/background-image-alpha.html new file mode 100644 index 00000000000..ac69aa0749c --- /dev/null +++ b/tests/wpt/web-platform-tests/css-paint-api/background-image-alpha.html @@ -0,0 +1,55 @@ + + + + + + + +
+
+
+
+ + + + + + diff --git a/tests/wpt/web-platform-tests/css-paint-api/background-image-multiple-ref.html b/tests/wpt/web-platform-tests/css-paint-api/background-image-multiple-ref.html new file mode 100644 index 00000000000..536258be74c --- /dev/null +++ b/tests/wpt/web-platform-tests/css-paint-api/background-image-multiple-ref.html @@ -0,0 +1,16 @@ + + + + + + + diff --git a/tests/wpt/web-platform-tests/css-paint-api/background-image-multiple.html b/tests/wpt/web-platform-tests/css-paint-api/background-image-multiple.html new file mode 100644 index 00000000000..7fb575107d3 --- /dev/null +++ b/tests/wpt/web-platform-tests/css-paint-api/background-image-multiple.html @@ -0,0 +1,33 @@ + + + + + + + +
+ + + + + + diff --git a/tests/wpt/web-platform-tests/css-paint-api/background-image-tiled-ref.html b/tests/wpt/web-platform-tests/css-paint-api/background-image-tiled-ref.html new file mode 100644 index 00000000000..a0151d84cba --- /dev/null +++ b/tests/wpt/web-platform-tests/css-paint-api/background-image-tiled-ref.html @@ -0,0 +1,35 @@ + + + + + + + + diff --git a/tests/wpt/web-platform-tests/css-paint-api/background-image-tiled.html b/tests/wpt/web-platform-tests/css-paint-api/background-image-tiled.html new file mode 100644 index 00000000000..95d8c123007 --- /dev/null +++ b/tests/wpt/web-platform-tests/css-paint-api/background-image-tiled.html @@ -0,0 +1,47 @@ + + + + + + + +
+
+ + + + + + diff --git a/tests/wpt/web-platform-tests/css-paint-api/invalid-image-constructor-error-ref.html b/tests/wpt/web-platform-tests/css-paint-api/invalid-image-constructor-error-ref.html new file mode 100644 index 00000000000..b6a6dec6c60 --- /dev/null +++ b/tests/wpt/web-platform-tests/css-paint-api/invalid-image-constructor-error-ref.html @@ -0,0 +1,6 @@ + + + +
+ + diff --git a/tests/wpt/web-platform-tests/css-paint-api/invalid-image-constructor-error.html b/tests/wpt/web-platform-tests/css-paint-api/invalid-image-constructor-error.html new file mode 100644 index 00000000000..30a06eb5b26 --- /dev/null +++ b/tests/wpt/web-platform-tests/css-paint-api/invalid-image-constructor-error.html @@ -0,0 +1,32 @@ + + + + + + + +
+ + + + + + + diff --git a/tests/wpt/web-platform-tests/css-paint-api/invalid-image-paint-error-ref.html b/tests/wpt/web-platform-tests/css-paint-api/invalid-image-paint-error-ref.html new file mode 100644 index 00000000000..b6a6dec6c60 --- /dev/null +++ b/tests/wpt/web-platform-tests/css-paint-api/invalid-image-paint-error-ref.html @@ -0,0 +1,6 @@ + + + +
+ + diff --git a/tests/wpt/web-platform-tests/css-paint-api/invalid-image-paint-error.html b/tests/wpt/web-platform-tests/css-paint-api/invalid-image-paint-error.html new file mode 100644 index 00000000000..6e117f87df3 --- /dev/null +++ b/tests/wpt/web-platform-tests/css-paint-api/invalid-image-paint-error.html @@ -0,0 +1,31 @@ + + + + + + + +
+ + + + + + diff --git a/tests/wpt/web-platform-tests/css-paint-api/invalid-image-pending-script-ref.html b/tests/wpt/web-platform-tests/css-paint-api/invalid-image-pending-script-ref.html new file mode 100644 index 00000000000..b6a6dec6c60 --- /dev/null +++ b/tests/wpt/web-platform-tests/css-paint-api/invalid-image-pending-script-ref.html @@ -0,0 +1,6 @@ + + + +
+ + diff --git a/tests/wpt/web-platform-tests/css-paint-api/invalid-image-pending-script.html b/tests/wpt/web-platform-tests/css-paint-api/invalid-image-pending-script.html new file mode 100644 index 00000000000..c4cf755f9b5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css-paint-api/invalid-image-pending-script.html @@ -0,0 +1,20 @@ + + + + + + + +
+ + + diff --git a/tests/wpt/web-platform-tests/css-paint-api/overdraw-ref.html b/tests/wpt/web-platform-tests/css-paint-api/overdraw-ref.html new file mode 100644 index 00000000000..b6a6dec6c60 --- /dev/null +++ b/tests/wpt/web-platform-tests/css-paint-api/overdraw-ref.html @@ -0,0 +1,6 @@ + + + +
+ + diff --git a/tests/wpt/web-platform-tests/css-paint-api/overdraw.html b/tests/wpt/web-platform-tests/css-paint-api/overdraw.html new file mode 100644 index 00000000000..f95eeb5bb41 --- /dev/null +++ b/tests/wpt/web-platform-tests/css-paint-api/overdraw.html @@ -0,0 +1,30 @@ + + + + + + + +
+ + + + + + diff --git a/tests/wpt/web-platform-tests/css-paint-api/paint-arguments-ref.html b/tests/wpt/web-platform-tests/css-paint-api/paint-arguments-ref.html new file mode 100644 index 00000000000..3352acf6518 --- /dev/null +++ b/tests/wpt/web-platform-tests/css-paint-api/paint-arguments-ref.html @@ -0,0 +1,41 @@ + + + + + + + +
+
+ +
+
+ +
+
+ + + + diff --git a/tests/wpt/web-platform-tests/css-paint-api/paint-arguments.html b/tests/wpt/web-platform-tests/css-paint-api/paint-arguments.html new file mode 100644 index 00000000000..ce2eec3e3bf --- /dev/null +++ b/tests/wpt/web-platform-tests/css-paint-api/paint-arguments.html @@ -0,0 +1,49 @@ + + + + + + + + +
+
+
+
+ + + + + + diff --git a/tests/wpt/web-platform-tests/css-paint-api/paint-function-arguments-ref.html b/tests/wpt/web-platform-tests/css-paint-api/paint-function-arguments-ref.html new file mode 100644 index 00000000000..99adfd27121 --- /dev/null +++ b/tests/wpt/web-platform-tests/css-paint-api/paint-function-arguments-ref.html @@ -0,0 +1,41 @@ + + + + + + + +
+
+ +
+
+ +
+
+ + + + diff --git a/tests/wpt/web-platform-tests/css-paint-api/paint-function-arguments.html b/tests/wpt/web-platform-tests/css-paint-api/paint-function-arguments.html new file mode 100644 index 00000000000..6bae7ffe25b --- /dev/null +++ b/tests/wpt/web-platform-tests/css-paint-api/paint-function-arguments.html @@ -0,0 +1,49 @@ + + + + + + + + +
+
+
+
+ + + + + + diff --git a/tests/wpt/web-platform-tests/css-paint-api/paint2d-composite-ref.html b/tests/wpt/web-platform-tests/css-paint-api/paint2d-composite-ref.html new file mode 100644 index 00000000000..3b75d526980 --- /dev/null +++ b/tests/wpt/web-platform-tests/css-paint-api/paint2d-composite-ref.html @@ -0,0 +1,50 @@ + + + + + + + + + + +
+ + + + +
+ + + + + diff --git a/tests/wpt/web-platform-tests/css-paint-api/paint2d-composite.html b/tests/wpt/web-platform-tests/css-paint-api/paint2d-composite.html new file mode 100644 index 00000000000..ba88f92672e --- /dev/null +++ b/tests/wpt/web-platform-tests/css-paint-api/paint2d-composite.html @@ -0,0 +1,73 @@ + + + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + diff --git a/tests/wpt/web-platform-tests/css-paint-api/paint2d-filter-ref.html b/tests/wpt/web-platform-tests/css-paint-api/paint2d-filter-ref.html new file mode 100644 index 00000000000..4ca6383b141 --- /dev/null +++ b/tests/wpt/web-platform-tests/css-paint-api/paint2d-filter-ref.html @@ -0,0 +1,60 @@ + + + + + + + + + + + +
+ + + + + +
+ + + + + + + + + diff --git a/tests/wpt/web-platform-tests/css-paint-api/paint2d-filter.html b/tests/wpt/web-platform-tests/css-paint-api/paint2d-filter.html new file mode 100644 index 00000000000..560b1b281b8 --- /dev/null +++ b/tests/wpt/web-platform-tests/css-paint-api/paint2d-filter.html @@ -0,0 +1,106 @@ + + + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + diff --git a/tests/wpt/web-platform-tests/css-paint-api/paint2d-gradient-ref.html b/tests/wpt/web-platform-tests/css-paint-api/paint2d-gradient-ref.html new file mode 100644 index 00000000000..a8064f595ef --- /dev/null +++ b/tests/wpt/web-platform-tests/css-paint-api/paint2d-gradient-ref.html @@ -0,0 +1,24 @@ + + + + + + + diff --git a/tests/wpt/web-platform-tests/css-paint-api/paint2d-gradient.html b/tests/wpt/web-platform-tests/css-paint-api/paint2d-gradient.html new file mode 100644 index 00000000000..b93643017c1 --- /dev/null +++ b/tests/wpt/web-platform-tests/css-paint-api/paint2d-gradient.html @@ -0,0 +1,40 @@ + + + + + + + +
+ + + + + + diff --git a/tests/wpt/web-platform-tests/css-paint-api/paint2d-image-ref.html b/tests/wpt/web-platform-tests/css-paint-api/paint2d-image-ref.html new file mode 100644 index 00000000000..31c9f3f5f03 --- /dev/null +++ b/tests/wpt/web-platform-tests/css-paint-api/paint2d-image-ref.html @@ -0,0 +1,12 @@ + + + + diff --git a/tests/wpt/web-platform-tests/css-paint-api/paint2d-image.html b/tests/wpt/web-platform-tests/css-paint-api/paint2d-image.html new file mode 100644 index 00000000000..5dc7ebf8a8f --- /dev/null +++ b/tests/wpt/web-platform-tests/css-paint-api/paint2d-image.html @@ -0,0 +1,28 @@ + + + + + + +
+ + + + + diff --git a/tests/wpt/web-platform-tests/css-paint-api/paint2d-paths-ref.html b/tests/wpt/web-platform-tests/css-paint-api/paint2d-paths-ref.html new file mode 100644 index 00000000000..7557411b4a1 --- /dev/null +++ b/tests/wpt/web-platform-tests/css-paint-api/paint2d-paths-ref.html @@ -0,0 +1,32 @@ + + + + + + + diff --git a/tests/wpt/web-platform-tests/css-paint-api/paint2d-paths.html b/tests/wpt/web-platform-tests/css-paint-api/paint2d-paths.html new file mode 100644 index 00000000000..55a01b43f26 --- /dev/null +++ b/tests/wpt/web-platform-tests/css-paint-api/paint2d-paths.html @@ -0,0 +1,48 @@ + + + + + + + +
+ + + + + + diff --git a/tests/wpt/web-platform-tests/css-paint-api/paint2d-rects-ref.html b/tests/wpt/web-platform-tests/css-paint-api/paint2d-rects-ref.html new file mode 100644 index 00000000000..fae2de7b7a2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css-paint-api/paint2d-rects-ref.html @@ -0,0 +1,19 @@ + + + + + + + diff --git a/tests/wpt/web-platform-tests/css-paint-api/paint2d-rects.html b/tests/wpt/web-platform-tests/css-paint-api/paint2d-rects.html new file mode 100644 index 00000000000..24247da2bb6 --- /dev/null +++ b/tests/wpt/web-platform-tests/css-paint-api/paint2d-rects.html @@ -0,0 +1,36 @@ + + + + + + + +
+ + + + + + diff --git a/tests/wpt/web-platform-tests/css-paint-api/paint2d-shadows-ref.html b/tests/wpt/web-platform-tests/css-paint-api/paint2d-shadows-ref.html new file mode 100644 index 00000000000..268db495ee5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css-paint-api/paint2d-shadows-ref.html @@ -0,0 +1,23 @@ + + + + + + + diff --git a/tests/wpt/web-platform-tests/css-paint-api/paint2d-shadows.html b/tests/wpt/web-platform-tests/css-paint-api/paint2d-shadows.html new file mode 100644 index 00000000000..ad0a1aacc05 --- /dev/null +++ b/tests/wpt/web-platform-tests/css-paint-api/paint2d-shadows.html @@ -0,0 +1,39 @@ + + + + + + + +
+ + + + + + diff --git a/tests/wpt/web-platform-tests/css-paint-api/paint2d-transform-ref.html b/tests/wpt/web-platform-tests/css-paint-api/paint2d-transform-ref.html new file mode 100644 index 00000000000..e863f363f79 --- /dev/null +++ b/tests/wpt/web-platform-tests/css-paint-api/paint2d-transform-ref.html @@ -0,0 +1,22 @@ + + + + + + + diff --git a/tests/wpt/web-platform-tests/css-paint-api/paint2d-transform.html b/tests/wpt/web-platform-tests/css-paint-api/paint2d-transform.html new file mode 100644 index 00000000000..f5b6aa8405c --- /dev/null +++ b/tests/wpt/web-platform-tests/css-paint-api/paint2d-transform.html @@ -0,0 +1,38 @@ + + + + + + + +
+ + + + + + diff --git a/tests/wpt/web-platform-tests/css-paint-api/valid-image-after-load-ref.html b/tests/wpt/web-platform-tests/css-paint-api/valid-image-after-load-ref.html new file mode 100644 index 00000000000..b6a6dec6c60 --- /dev/null +++ b/tests/wpt/web-platform-tests/css-paint-api/valid-image-after-load-ref.html @@ -0,0 +1,6 @@ + + + +
+ + diff --git a/tests/wpt/web-platform-tests/css-paint-api/valid-image-after-load.html b/tests/wpt/web-platform-tests/css-paint-api/valid-image-after-load.html new file mode 100644 index 00000000000..b1ad0d2d73a --- /dev/null +++ b/tests/wpt/web-platform-tests/css-paint-api/valid-image-after-load.html @@ -0,0 +1,42 @@ + + + + + + + +
+ + + + + + diff --git a/tests/wpt/web-platform-tests/css-paint-api/valid-image-before-load-ref.html b/tests/wpt/web-platform-tests/css-paint-api/valid-image-before-load-ref.html new file mode 100644 index 00000000000..b6a6dec6c60 --- /dev/null +++ b/tests/wpt/web-platform-tests/css-paint-api/valid-image-before-load-ref.html @@ -0,0 +1,6 @@ + + + +
+ + diff --git a/tests/wpt/web-platform-tests/css-paint-api/valid-image-before-load.html b/tests/wpt/web-platform-tests/css-paint-api/valid-image-before-load.html new file mode 100644 index 00000000000..b4e6b0e1720 --- /dev/null +++ b/tests/wpt/web-platform-tests/css-paint-api/valid-image-before-load.html @@ -0,0 +1,43 @@ + + + + + + + +
+ + + + + + diff --git a/tests/wpt/web-platform-tests/css-timing-1/OWNERS b/tests/wpt/web-platform-tests/css-timing/OWNERS similarity index 100% rename from tests/wpt/web-platform-tests/css-timing-1/OWNERS rename to tests/wpt/web-platform-tests/css-timing/OWNERS diff --git a/tests/wpt/web-platform-tests/css-timing-1/cubic-bezier-timing-functions-output.html b/tests/wpt/web-platform-tests/css-timing/cubic-bezier-timing-functions-output.html similarity index 100% rename from tests/wpt/web-platform-tests/css-timing-1/cubic-bezier-timing-functions-output.html rename to tests/wpt/web-platform-tests/css-timing/cubic-bezier-timing-functions-output.html diff --git a/tests/wpt/web-platform-tests/css-timing-1/frames-timing-functions-output.html b/tests/wpt/web-platform-tests/css-timing/frames-timing-functions-output.html similarity index 100% rename from tests/wpt/web-platform-tests/css-timing-1/frames-timing-functions-output.html rename to tests/wpt/web-platform-tests/css-timing/frames-timing-functions-output.html diff --git a/tests/wpt/web-platform-tests/css-timing-1/frames-timing-functions-syntax.html b/tests/wpt/web-platform-tests/css-timing/frames-timing-functions-syntax.html similarity index 100% rename from tests/wpt/web-platform-tests/css-timing-1/frames-timing-functions-syntax.html rename to tests/wpt/web-platform-tests/css-timing/frames-timing-functions-syntax.html diff --git a/tests/wpt/web-platform-tests/css-timing-1/step-timing-functions-output.html b/tests/wpt/web-platform-tests/css-timing/step-timing-functions-output.html similarity index 100% rename from tests/wpt/web-platform-tests/css-timing-1/step-timing-functions-output.html rename to tests/wpt/web-platform-tests/css-timing/step-timing-functions-output.html diff --git a/tests/wpt/web-platform-tests/css-timing-1/testcommon.js b/tests/wpt/web-platform-tests/css-timing/testcommon.js similarity index 100% rename from tests/wpt/web-platform-tests/css-timing-1/testcommon.js rename to tests/wpt/web-platform-tests/css-timing/testcommon.js diff --git a/tests/wpt/web-platform-tests/css-typed-om/declared-styleMap-accepts-inherit.html b/tests/wpt/web-platform-tests/css-typed-om/declared-styleMap-accepts-inherit.html index afb4cef46ea..f550326de5a 100644 --- a/tests/wpt/web-platform-tests/css-typed-om/declared-styleMap-accepts-inherit.html +++ b/tests/wpt/web-platform-tests/css-typed-om/declared-styleMap-accepts-inherit.html @@ -10,6 +10,6 @@ diff --git a/tests/wpt/web-platform-tests/css-typed-om/styleMap-update-function.html b/tests/wpt/web-platform-tests/css-typed-om/styleMap-update-function.html index 4ca5e0ee914..5af1b2c2770 100644 --- a/tests/wpt/web-platform-tests/css-typed-om/styleMap-update-function.html +++ b/tests/wpt/web-platform-tests/css-typed-om/styleMap-update-function.html @@ -9,7 +9,7 @@
diff --git a/tests/wpt/web-platform-tests/css/css-flexbox-1/Flexible-order.html b/tests/wpt/web-platform-tests/css/css-flexbox-1/Flexible-order.html index 38a5fd46bd6..9b61e1e8a8f 100644 --- a/tests/wpt/web-platform-tests/css/css-flexbox-1/Flexible-order.html +++ b/tests/wpt/web-platform-tests/css/css-flexbox-1/Flexible-order.html @@ -6,7 +6,7 @@ - + + + +

Test passes if there is no red visible on the page.

+
+
+
+
+
XXXX
+
+ + diff --git a/tests/wpt/web-platform-tests/css/css-flexbox-1/align-self-001.html b/tests/wpt/web-platform-tests/css/css-flexbox-1/align-self-001.html index a46b431ca69..d8241253962 100644 --- a/tests/wpt/web-platform-tests/css/css-flexbox-1/align-self-001.html +++ b/tests/wpt/web-platform-tests/css/css-flexbox-1/align-self-001.html @@ -4,7 +4,7 @@ - + diff --git a/tests/wpt/web-platform-tests/css/css-flexbox-1/align-self-002.html b/tests/wpt/web-platform-tests/css/css-flexbox-1/align-self-002.html index 7a6540d0af6..f3e951332d9 100644 --- a/tests/wpt/web-platform-tests/css/css-flexbox-1/align-self-002.html +++ b/tests/wpt/web-platform-tests/css/css-flexbox-1/align-self-002.html @@ -4,7 +4,7 @@ - + diff --git a/tests/wpt/web-platform-tests/css/css-flexbox-1/align-self-003.html b/tests/wpt/web-platform-tests/css/css-flexbox-1/align-self-003.html index 6be7906d485..d9c92940060 100644 --- a/tests/wpt/web-platform-tests/css/css-flexbox-1/align-self-003.html +++ b/tests/wpt/web-platform-tests/css/css-flexbox-1/align-self-003.html @@ -4,7 +4,7 @@ - + diff --git a/tests/wpt/web-platform-tests/css/css-flexbox-1/align-self-004.html b/tests/wpt/web-platform-tests/css/css-flexbox-1/align-self-004.html index bb568a555bc..7feeb099ad0 100644 --- a/tests/wpt/web-platform-tests/css/css-flexbox-1/align-self-004.html +++ b/tests/wpt/web-platform-tests/css/css-flexbox-1/align-self-004.html @@ -4,7 +4,7 @@ - + - + diff --git a/tests/wpt/web-platform-tests/css/css-flexbox-1/align-self-006.html b/tests/wpt/web-platform-tests/css/css-flexbox-1/align-self-006.html index bb6237c9a11..dbc637bd7e4 100644 --- a/tests/wpt/web-platform-tests/css/css-flexbox-1/align-self-006.html +++ b/tests/wpt/web-platform-tests/css/css-flexbox-1/align-self-006.html @@ -4,7 +4,7 @@ - + + + +

Test passes if there is a green square, and no red.

+
+ +
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-kerning-01.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-kerning-01.html new file mode 100644 index 00000000000..6755500fd24 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-kerning-01.html @@ -0,0 +1,25 @@ + + + +CSS Test: font-kerning basic syntax support + + + + + + + +

Test passes if there is a green square, and no red.

+
+ +
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-kerning-02-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-kerning-02-ref.html new file mode 100644 index 00000000000..b461f15905c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-kerning-02-ref.html @@ -0,0 +1,24 @@ + + + +CSS Test: font-kerning: normal; low-level equivalence test + + + + +

Test passes if the three lines of text below are identical, with one check mark (✓) followed by one cross (✗).

+
+

AB

+

AB

+

AB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-kerning-02.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-kerning-02.html new file mode 100644 index 00000000000..1990cfc2dd6 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-kerning-02.html @@ -0,0 +1,35 @@ + + + +CSS Test: font-kerning: normal; low-level equivalence test + + + + + + + + +

Test passes if the three lines of text below are identical, with one check mark (✓) followed by one cross (✗).

+
+

¿À

+

¿À

+

AB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-kerning-03-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-kerning-03-ref.html new file mode 100644 index 00000000000..96040a57eef --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-kerning-03-ref.html @@ -0,0 +1,26 @@ + + + +CSS Test: font-kerning: normal; low-level equivalence test + + + + +

Test passes if the three lines of vertical text below are identical, with one cross (✗) followed by one check mark (✓).

+
+

BA

+

BA

+

BA

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-kerning-03.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-kerning-03.html new file mode 100644 index 00000000000..550f26ebc73 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-kerning-03.html @@ -0,0 +1,37 @@ + + + +CSS Test: font-kerning: normal; low-level equivalence test + + + + + + + + +

Test passes if the three lines of vertical text below are identical, with one cross (✗) followed by one check mark (✓).

+
+

¿À

+

¿À

+

BA

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-kerning-04-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-kerning-04-ref.html new file mode 100644 index 00000000000..6e1110a1739 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-kerning-04-ref.html @@ -0,0 +1,24 @@ + + + +CSS Test: font-kerning: none; low-level equivalence test + + + + +

Test passes if the three lines of text below are identical, with two crosses (✗).

+
+

BB

+

BB

+

BB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-kerning-04.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-kerning-04.html new file mode 100644 index 00000000000..e4e8e09ff51 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-kerning-04.html @@ -0,0 +1,35 @@ + + + +CSS Test: font-kerning: none; low-level equivalence test + + + + + + + + +

Test passes if the three lines of text below are identical, with two crosses (✗).

+
+

¿À

+

¿À

+

BB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-kerning-05-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-kerning-05-ref.html new file mode 100644 index 00000000000..0b3d0d5524b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-kerning-05-ref.html @@ -0,0 +1,26 @@ + + + +CSS Test: font-kerning: none; low-level equivalence test + + + + +

Test passes if the three lines of vertical text below are identical, with two crosses (✗).

+
+

BB

+

BB

+

BB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-kerning-05.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-kerning-05.html new file mode 100644 index 00000000000..4faf67de221 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-kerning-05.html @@ -0,0 +1,37 @@ + + + +CSS Test: font-kerning: none; low-level equivalence test + + + + + + + + +

Test passes if the three lines of vertical text below are identical, with two crosses (✗).

+
+

¿À

+

¿À

+

BB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-01-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-01-ref.html new file mode 100644 index 00000000000..abd1dc17476 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-01-ref.html @@ -0,0 +1,28 @@ + + + +CSS Test: font-variant: normal; low level equivalence + + + + +

Test passes if the two lines below are identical, with (in purple) eight check marks (✓), +and then (in green) three check marks (✓) followed by five crosses (✗).

+
+

AAAAAAAAAAABBBBB

+

AAAAAAAAAAABBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-01.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-01.html new file mode 100644 index 00000000000..e73b1d517da --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-01.html @@ -0,0 +1,41 @@ + + + +CSS Test: font-variant: normal; low level equivalence + + + + + + + + +

Test passes if the two lines below are identical, with (in purple) eight check marks (✓), +and then (in green) three check marks (✓) followed by five crosses (✗).

+
+

CDGFEJHaCDGFEJHa

+

AAAAAAAAAAABBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-02-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-02-ref.html new file mode 100644 index 00000000000..137d6e5dc91 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-02-ref.html @@ -0,0 +1,28 @@ + + + +CSS Test: font-variant: none; low level equivalence + + + + +

Test passes if the two lines below are identical, with (in purple) eight check marks (✓), +and then (in green) eight crosses (✗).

+
+

AAAAAAAABBBBBBBB

+

AAAAAAAABBBBBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-02.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-02.html new file mode 100644 index 00000000000..6e1aecc61a7 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-02.html @@ -0,0 +1,41 @@ + + + +CSS Test: font-variant: none; low level equivalence + + + + + + + + +

Test passes if the two lines below are identical, with (in purple) eight check marks (✓), +and then (in green) eight crosses (✗).

+
+

CDGFEJHaCDGFEJHa

+

AAAAAAAABBBBBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-03-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-03-ref.html new file mode 100644 index 00000000000..8b566168da5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-03-ref.html @@ -0,0 +1,28 @@ + + + +CSS Test: font-variant: normal; low level equivalence + + + + +

Test passes if the two lines below are identical, with (in purple) eight check marks (✓), +and then (in green) eight check marks (✓).

+
+

AAAAAAAAAAAAAAAA

+

AAAAAAAAAAAAAAAA

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-03.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-03.html new file mode 100644 index 00000000000..3da212a542b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-03.html @@ -0,0 +1,38 @@ + + + +CSS Test: font-variant: normal; low level equivalence + + + + + + + + +

Test passes if the two lines below are identical, with (in purple) eight check marks (✓), +and then (in green) eight check marks (✓).

+
+

CDGFEJHaCDGFEJHa

+

AAAAAAAAAAAAAAAA

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-04-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-04-ref.html new file mode 100644 index 00000000000..12810edc472 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-04-ref.html @@ -0,0 +1,28 @@ + + + +CSS Test: font-variant: none; low level equivalence + + + + +

Test passes if the two lines below are identical, with (in purple) eight check marks (✓), +and then (in green) eight check marks (✓).

+
+

AAAAAAAAAAAAAAAA

+

AAAAAAAAAAAAAAAA

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-04.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-04.html new file mode 100644 index 00000000000..12aeaf56c45 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-04.html @@ -0,0 +1,38 @@ + + + +CSS Test: font-variant: none; low level equivalence + + + + + + + + +

Test passes if the two lines below are identical, with (in purple) eight check marks (✓), +and then (in green) eight check marks (✓).

+
+

CDGFEJHaCDGFEJHa

+

AAAAAAAAAAAAAAAA

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-01-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-01-ref.html new file mode 100644 index 00000000000..4bde365dcf2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-01-ref.html @@ -0,0 +1,26 @@ + + + +CSS Test: font-variant-alternates: normal; low level equivalence + + + + + + +

Test passes if the three lines below are identical, with one cross (✗)

+
+

B

+

B

+

B

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-01.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-01.html new file mode 100644 index 00000000000..89cfe2ba447 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-01.html @@ -0,0 +1,37 @@ + + + +CSS Test: font-variant-alternates: normal; low level equivalence + + + + + + + + +

Test passes if the three lines below are identical, with twenty crosses (✗) +.

+
+

Xnophijklmqrstuvwxyz

+

Xnophijklmqrstuvwxyz

+

BBBBBBBBBBBBBBBBBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-02-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-02-ref.html new file mode 100644 index 00000000000..d27ffa25b76 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-02-ref.html @@ -0,0 +1,26 @@ + + + +CSS Test: font-variant-alternates: historical-forms; low level equivalence + + + + + + +

Test passes if the three lines below are identical, with onecheck mark (✓).

+
+

A

+

A

+

A

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-02.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-02.html new file mode 100644 index 00000000000..b9f777ea3f0 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-02.html @@ -0,0 +1,35 @@ + + + +CSS Test: font-variant-alternates: historical-forms; low level equivalence + + + + + + + + +

Test passes if the three lines below are identical, with one check mark (✓) followed by nineteen crosses (✗).

+
+

Xnophijklmqrstuvwxyz

+

Xnophijklmqrstuvwxyz

+

ABBBBBBBBBBBBBBBBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-03-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-03-ref.html new file mode 100644 index 00000000000..5285d025b8b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-03-ref.html @@ -0,0 +1,31 @@ + + + +CSS Test: font-variant-alternates: stylistic(); low level equivalence + + + + +

Test passes if the three lines below are identical, with one cross (✗), one check mark (✓) followed by eighteen crosses (✗).

+
+

BABBBBBBBBBBBBBBBBBB

+

BABBBBBBBBBBBBBBBBBB

+

BABBBBBBBBBBBBBBBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-03.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-03.html new file mode 100644 index 00000000000..6b2eba9b838 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-03.html @@ -0,0 +1,43 @@ + + + +CSS Test: font-variant-alternates: stylistic(); low level equivalence + + + + + + + + + +

Test passes if the three lines below are identical, with one cross (✗), one check mark (✓) followed by eighteen crosses (✗).

+
+

Xnophijklmqrstuvwxyz

+

Xnophijklmqrstuvwxyz

+

BABBBBBBBBBBBBBBBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-04-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-04-ref.html new file mode 100644 index 00000000000..1beb9b07328 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-04-ref.html @@ -0,0 +1,24 @@ + + + +CSS Test: font-variant-alternates: stylistic(); low level equivalence + + + + +

Test passes if the three lines below are identical, with two crosses (✗), one check mark (✓) followed by seventeen crosses (✗).

+
+

BBABBBBBBBBBBBBBBBBB

+

BBABBBBBBBBBBBBBBBBB

+

BBABBBBBBBBBBBBBBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-04.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-04.html new file mode 100644 index 00000000000..35b9940fb8c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-04.html @@ -0,0 +1,43 @@ + + + +CSS Test: font-variant-alternates: stylistic(); low level equivalence + + + + + + + + + +

Test passes if the three lines below are identical, with two crosses (✗), one check mark (✓) followed by seventeen crosses (✗).

+
+

Xnophijklmqrstuvwxyz

+

Xnophijklmqrstuvwxyz

+

BBABBBBBBBBBBBBBBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-05-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-05-ref.html new file mode 100644 index 00000000000..7cb557e20c0 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-05-ref.html @@ -0,0 +1,24 @@ + + + +CSS Test: font-variant-alternates: stylistic(); low level equivalence + + + + +

Test passes if the three lines below are identical, with two crosses (✗), one check mark (✓) followed by seventeen crosses (✗).

+
+

BBBABBBBBBBBBBBBBBBB

+

BBBABBBBBBBBBBBBBBBB

+

BBBABBBBBBBBBBBBBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-05.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-05.html new file mode 100644 index 00000000000..4f900ccca53 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-05.html @@ -0,0 +1,43 @@ + + + +CSS Test: font-variant-alternates: stylistic(); low level equivalence + + + + + + + + + +

Test passes if the three lines below are identical, with two crosses (✗), one check mark (✓) followed by seventeen crosses (✗).

+
+

Xnophijklmqrstuvwxyz

+

Xnophijklmqrstuvwxyz

+

BBBABBBBBBBBBBBBBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-06-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-06-ref.html new file mode 100644 index 00000000000..b2fc91762eb --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-06-ref.html @@ -0,0 +1,24 @@ + + + +CSS Test: font-variant-alternates: styleset(); low level equivalence + + + + +

Test passes if the three lines below are identical, with four crosses (✗), one check mark (✓) followed by fifteen crosses (✗).

+
+

BBBBABBBBBBBBBBBBBBB

+

BBBBABBBBBBBBBBBBBBB

+

BBBBABBBBBBBBBBBBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-06.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-06.html new file mode 100644 index 00000000000..fe15c21e298 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-06.html @@ -0,0 +1,43 @@ + + + +CSS Test: font-variant-alternates: styleset(); low level equivalence + + + + + + + + + +

Test passes if the three lines below are identical, with four crosses (✗), one check mark (✓) followed by fifteen crosses (✗).

+
+

Xnophijklmqrstuvwxyz

+

Xnophijklmqrstuvwxyz

+

BBBBABBBBBBBBBBBBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-07-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-07-ref.html new file mode 100644 index 00000000000..6c2694b0e65 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-07-ref.html @@ -0,0 +1,24 @@ + + + +CSS Test: font-variant-alternates: styleset(); low level equivalence + + + + +

Test passes if the three lines below are identical, with five crosses (✗), one check mark (✓) followed by fourteen crosses (✗).

+
+

BBBBBABBBBBBBBBBBBBB

+

BBBBBABBBBBBBBBBBBBB

+

BBBBBABBBBBBBBBBBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-07.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-07.html new file mode 100644 index 00000000000..70c11383589 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-07.html @@ -0,0 +1,43 @@ + + + +CSS Test: font-variant-alternates: styleset(); low level equivalence + + + + + + + + + +

Test passes if the three lines below are identical, with five crosses (✗), one check mark (✓) followed by fourteen crosses (✗).

+
+

Xnophijklmqrstuvwxyz

+

Xnophijklmqrstuvwxyz

+

BBBBBABBBBBBBBBBBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-08-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-08-ref.html new file mode 100644 index 00000000000..f757daa2c88 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-08-ref.html @@ -0,0 +1,24 @@ + + + +CSS Test: font-variant-alternates: styleset(); low level equivalence + + + + +

Test passes if the three lines below are identical, with six crosses (✗), one check mark (✓) followed by thirteen crosses (✗).

+
+

BBBBBBABBBBBBBBBBBBB

+

BBBBBBABBBBBBBBBBBBB

+

BBBBBBABBBBBBBBBBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-08.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-08.html new file mode 100644 index 00000000000..3228adbd9ea --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-08.html @@ -0,0 +1,43 @@ + + + +CSS Test: font-variant-alternates: styleset(); low level equivalence + + + + + + + + + +

Test passes if the three lines below are identical, with six crosses (✗), one check mark (✓) followed by thirteen crosses (✗).

+
+

Xnophijklmqrstuvwxyz

+

Xnophijklmqrstuvwxyz

+

BBBBBBABBBBBBBBBBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-09-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-09-ref.html new file mode 100644 index 00000000000..e1f1b3a4c20 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-09-ref.html @@ -0,0 +1,24 @@ + + + +CSS Test: font-variant-alternates: character-variant(); low level equivalence + + + + +

Test passes if the three lines below are identical, with seven crosses (✗), one check mark (✓) followed by twelve crosses (✗).

+
+

BBBBBBBABBBBBBBBBBBB

+

BBBBBBBABBBBBBBBBBBB

+

BBBBBBBABBBBBBBBBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-09.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-09.html new file mode 100644 index 00000000000..71fda689bc8 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-09.html @@ -0,0 +1,43 @@ + + + +CSS Test: font-variant-alternates: character-variant(); low level equivalence + + + + + + + + + +

Test passes if the three lines below are identical, with seven crosses (✗), one check mark (✓) followed by twelve crosses (✗).

+
+

Xnophijklmqrstuvwxyz

+

Xnophijklmqrstuvwxyz

+

BBBBBBBABBBBBBBBBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-10-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-10-ref.html new file mode 100644 index 00000000000..2319128d2bb --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-10-ref.html @@ -0,0 +1,24 @@ + + + +CSS Test: font-variant-alternates: character-variant(); low level equivalence + + + + +

Test passes if the three lines below are identical, with eight crosses (✗), one check mark (✓) followed by eleven crosses (✗).

+
+

BBBBBBBBABBBBBBBBBBB

+

BBBBBBBBABBBBBBBBBBB

+

BBBBBBBBABBBBBBBBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-10.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-10.html new file mode 100644 index 00000000000..d4054ac8f6d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-10.html @@ -0,0 +1,43 @@ + + + +CSS Test: font-variant-alternates: character-variant(); low level equivalence + + + + + + + + + +

Test passes if the three lines below are identical, with eight crosses (✗), one check mark (✓) followed by eleven crosses (✗).

+
+

Xnophijklmqrstuvwxyz

+

Xnophijklmqrstuvwxyz

+

BBBBBBBBABBBBBBBBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-11-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-11-ref.html new file mode 100644 index 00000000000..f3f5fa652b0 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-11-ref.html @@ -0,0 +1,24 @@ + + + +CSS Test: font-variant-alternates: character-variant(); low level equivalence + + + + +

Test passes if the three lines below are identical, with nine crosses (✗), one check mark (✓) followed by ten crosses (✗).

+
+

BBBBBBBBBABBBBBBBBBB

+

BBBBBBBBBABBBBBBBBBB

+

BBBBBBBBBABBBBBBBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-11.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-11.html new file mode 100644 index 00000000000..19e38ed616e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-11.html @@ -0,0 +1,43 @@ + + + +CSS Test: font-variant-alternates: character-variant(); low level equivalence + + + + + + + + + +

Test passes if the three lines below are identical, with nine crosses (✗), one check mark (✓) followed by ten crosses (✗).

+
+

Xnophijklmqrstuvwxyz

+

Xnophijklmqrstuvwxyz

+

BBBBBBBBBABBBBBBBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-12-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-12-ref.html new file mode 100644 index 00000000000..6080f70b0e8 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-12-ref.html @@ -0,0 +1,24 @@ + + + +CSS Test: font-variant-alternates: swash(); low level equivalence + + + + +

Test passes if the three lines below are identical, with ten crosses (✗), one check mark (✓), two crosses (✗), one check mark (✓) followed by six crosses (✗).

+
+

BBBBBBBBBBABBABBBBBB

+

BBBBBBBBBBABBABBBBBB

+

BBBBBBBBBBABBABBBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-12.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-12.html new file mode 100644 index 00000000000..a0061a408e7 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-12.html @@ -0,0 +1,43 @@ + + + +CSS Test: font-variant-alternates: swash(); low level equivalence + + + + + + + + + +

Test passes if the three lines below are identical, with ten crosses (✗), one check mark (✓), two crosses (✗), one check mark (✓) followed by six crosses (✗).

+
+

Xnophijklmqrstuvwxyz

+

Xnophijklmqrstuvwxyz

+

BBBBBBBBBBABBABBBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-13-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-13-ref.html new file mode 100644 index 00000000000..9e52824dd11 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-13-ref.html @@ -0,0 +1,24 @@ + + + +CSS Test: font-variant-alternates: swash(); low level equivalence + + + + +

Test passes if the three lines below are identical, with eleven crosses (✗), one check mark (✓), two crosses (✗), one check mark (✓) followed by five crosses (✗).

+
+

BBBBBBBBBBBABBABBBBB

+

BBBBBBBBBBBABBABBBBB

+

BBBBBBBBBBBABBABBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-13.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-13.html new file mode 100644 index 00000000000..b9fdd496d6b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-13.html @@ -0,0 +1,43 @@ + + + +CSS Test: font-variant-alternates: swash(); low level equivalence + + + + + + + + + +

Test passes if the three lines below are identical, with eleven crosses (✗), one check mark (✓), two crosses (✗), one check mark (✓) followed by five crosses (✗).

+
+

Xnophijklmqrstuvwxyz

+

Xnophijklmqrstuvwxyz

+

BBBBBBBBBBBABBABBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-14-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-14-ref.html new file mode 100644 index 00000000000..f18a7fabed4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-14-ref.html @@ -0,0 +1,24 @@ + + + +CSS Test: font-variant-alternates: swash(); low level equivalence + + + + +

Test passes if the three lines below are identical, with twelve crosses (✗), one check mark (✓), two crosses (✗), one check mark (✓) followed by four crosses (✗).

+
+

BBBBBBBBBBBBABBABBBB

+

BBBBBBBBBBBBABBABBBB

+

BBBBBBBBBBBBABBABBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-14.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-14.html new file mode 100644 index 00000000000..1d57c2c3f92 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-14.html @@ -0,0 +1,43 @@ + + + +CSS Test: font-variant-alternates: swash(); low level equivalence + + + + + + + + + +

Test passes if the three lines below are identical, with twelve crosses (✗), one check mark (✓), two crosses (✗), one check mark (✓) followed by four crosses (✗).

+
+

Xnophijklmqrstuvwxyz

+

Xnophijklmqrstuvwxyz

+

BBBBBBBBBBBBABBABBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-15-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-15-ref.html new file mode 100644 index 00000000000..d62930c9a98 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-15-ref.html @@ -0,0 +1,24 @@ + + + +CSS Test: font-variant-alternates: ornaments(); low level equivalence + + + + +

Test passes if the three lines below are identical, with sixteen crosses (✗), one check mark (✓) followed by three crosses (✗).

+
+

BBBBBBBBBBBBBBBBABBB

+

BBBBBBBBBBBBBBBBABBB

+

BBBBBBBBBBBBBBBBABBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-15.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-15.html new file mode 100644 index 00000000000..95ec0fa041d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-15.html @@ -0,0 +1,43 @@ + + + +CSS Test: font-variant-alternates: ornaments(); low level equivalence + + + + + + + + + +

Test passes if the three lines below are identical, with sixteen crosses (✗), one check mark (✓) followed by three crosses (✗).

+
+

Xnophijklmqrstuvwxyz

+

Xnophijklmqrstuvwxyz

+

BBBBBBBBBBBBBBBBABBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-16-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-16-ref.html new file mode 100644 index 00000000000..a588897b4c0 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-16-ref.html @@ -0,0 +1,24 @@ + + + +CSS Test: font-variant-alternates: ornaments(); low level equivalence + + + + +

Test passes if the three lines below are identical, with seventeen crosses (✗), one check mark (✓) followed by two crosses (✗).

+
+

BBBBBBBBBBBBBBBBBABB

+

BBBBBBBBBBBBBBBBBABB

+

BBBBBBBBBBBBBBBBBABB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-16.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-16.html new file mode 100644 index 00000000000..21215ddf401 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-16.html @@ -0,0 +1,43 @@ + + + +CSS Test: font-variant-alternates: ornaments(); low level equivalence + + + + + + + + + +

Test passes if the three lines below are identical, with seventeen crosses (✗), one check mark (✓) followed by two crosses (✗).

+
+

Xnophijklmqrstuvwxyz

+

Xnophijklmqrstuvwxyz

+

BBBBBBBBBBBBBBBBBABB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-17-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-17-ref.html new file mode 100644 index 00000000000..332d1a19d9c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-17-ref.html @@ -0,0 +1,24 @@ + + + +CSS Test: font-variant-alternates: ornaments(); low level equivalence + + + + +

Test passes if the three lines below are identical, with eighteen crosses (✗), one check mark (✓) followed by one cross (✗).

+
+

BBBBBBBBBBBBBBBBBBAB

+

BBBBBBBBBBBBBBBBBBAB

+

BBBBBBBBBBBBBBBBBBAB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-17.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-17.html new file mode 100644 index 00000000000..abbe8738fe5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-17.html @@ -0,0 +1,43 @@ + + + +CSS Test: font-variant-alternates: ornaments(); low level equivalence + + + + + + + + + +

Test passes if the three lines below are identical, with eighteen crosses (✗), one check mark (✓) followed by one cross (✗).

+
+

Xnophijklmqrstuvwxyz

+

Xnophijklmqrstuvwxyz

+

BBBBBBBBBBBBBBBBBBAB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-18-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-18-ref.html new file mode 100644 index 00000000000..cd54bef9a8c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-18-ref.html @@ -0,0 +1,24 @@ + + + +CSS Test: font-variant-alternates: ornaments(); low level equivalence + + + + +

Test passes if the three lines below are identical, with nineteen crosses (✗), then one check mark (✓).

+
+

BBBBBBBBBBBBBBBBBBBA

+

BBBBBBBBBBBBBBBBBBBA

+

BBBBBBBBBBBBBBBBBBBA

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-18.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-18.html new file mode 100644 index 00000000000..f58ab12fd1e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-alternates-18.html @@ -0,0 +1,43 @@ + + + +CSS Test: font-variant-alternates: ornaments(); low level equivalence + + + + + + + + + +

Test passes if the three lines below are identical, with nineteen crosses (✗), then one check mark (✓).

+
+

Xnophijklmqrstuvwxyz

+

Xnophijklmqrstuvwxyz

+

BBBBBBBBBBBBBBBBBBBA

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-01-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-01-ref.html new file mode 100644 index 00000000000..68f9ef0c002 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-01-ref.html @@ -0,0 +1,23 @@ + + + +CSS Test: font-variant-caps: normal; low level equivalence + + + +

Test passes if the three lines below are identical, with six crosses (✗).

+
+

BBBBBB

+

BBBBBB

+

BBBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-01.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-01.html new file mode 100644 index 00000000000..9e96486e33f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-01.html @@ -0,0 +1,33 @@ + + + +CSS Test: font-variant-caps: normal; low level equivalence + + + + + + + +

Test passes if the three lines below are identical, with six crosses (✗).

+
+

JKLMNO

+

JKLMNO

+

BBBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-02-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-02-ref.html new file mode 100644 index 00000000000..4bdb94fa1ff --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-02-ref.html @@ -0,0 +1,23 @@ + + + +CSS Test: font-variant-caps: small-caps; low level equivalence + + + +

Test passes if the three lines below are identical, with one check mark (✓) followed by five crosses (✗).

+
+

ABBBBB

+

ABBBBB

+

ABBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-02.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-02.html new file mode 100644 index 00000000000..1e73873f6bb --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-02.html @@ -0,0 +1,36 @@ + + + +CSS Test: font-variant-caps: small-caps; low level equivalence + + + + + + + +

Test passes if the three lines below are identical, with one check mark (✓) followed by five crosses (✗).

+
+

JKLMNO

+

JKLMNO

+

ABBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-03-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-03-ref.html new file mode 100644 index 00000000000..b1e9c6c57ad --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-03-ref.html @@ -0,0 +1,23 @@ + + + +CSS Test: font-variant-caps: all-small-caps; low level equivalence + + + +

Test passes if the three lines below are identical, with two check marks (✓) followed by four crosses (✗).

+
+

AABBBB

+

AABBBB

+

AABBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-03.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-03.html new file mode 100644 index 00000000000..3aaabc71113 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-03.html @@ -0,0 +1,33 @@ + + + +CSS Test: font-variant-caps: all-small-caps; low level equivalence + + + + + + + +

Test passes if the three lines below are identical, with two check marks (✓) followed by four crosses (✗).

+
+

JKLMNO

+

JKLMNO

+

AABBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-04-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-04-ref.html new file mode 100644 index 00000000000..bba3bea407b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-04-ref.html @@ -0,0 +1,23 @@ + + + +CSS Test: font-variant-caps: petite-caps; low level equivalence + + + +

Test passes if the three lines below are identical, with two crosses (✗), one check mark (✓) and three more crosses (✗).

+
+

BBABBB

+

BBABBB

+

BBABBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-04.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-04.html new file mode 100644 index 00000000000..69390e3602f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-04.html @@ -0,0 +1,36 @@ + + + +CSS Test: font-variant-caps: petite-caps; low level equivalence + + + + + + + +

Test passes if the three lines below are identical, with two crosses (✗), one check mark (✓) and three more crosses (✗).

+
+

JKLMNO

+

JKLMNO

+

BBABBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-05-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-05-ref.html new file mode 100644 index 00000000000..fa7cad719cc --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-05-ref.html @@ -0,0 +1,23 @@ + + + +CSS Test: font-variant-caps: all-petite-caps; low level equivalence + + + +

Test passes if the three lines below are identical, with two crosses (✗), two check marks (✓) and two more crosses (✗).

+
+

BBAABB

+

BBAABB

+

BBAABB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-05.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-05.html new file mode 100644 index 00000000000..640ab4d8c16 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-05.html @@ -0,0 +1,36 @@ + + + +CSS Test: font-variant-caps: all-petite-caps; low level equivalence + + + + + + + +

Test passes if the three lines below are identical, with two crosses (✗), two check marks (✓) and two more crosses (✗).

+
+

JKLMNO

+

JKLMNO

+

BBAABB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-06-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-06-ref.html new file mode 100644 index 00000000000..8a092e3d112 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-06-ref.html @@ -0,0 +1,23 @@ + + + +CSS Test: font-variant-caps: unicase; low level equivalence + + + +

Test passes if the three lines below are identical, with four crosses (✗), one check mark (✓) and one more cross (✗).

+
+

BBBBAB

+

BBBBAB

+

BBBBAB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-06.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-06.html new file mode 100644 index 00000000000..e7793381e74 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-06.html @@ -0,0 +1,36 @@ + + + +CSS Test: font-variant-caps: unicase; low level equivalence + + + + + + + +

Test passes if the three lines below are identical, with four crosses (✗), one check mark (✓) and one more cross (✗).

+
+

JKLMNO

+

JKLMNO

+

BBBBAB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-07-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-07-ref.html new file mode 100644 index 00000000000..2dbc43904fd --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-07-ref.html @@ -0,0 +1,23 @@ + + + +CSS Test: font-variant-caps: titling-caps; low level equivalence + + + +

Test passes if the three lines below are identical, with five crosses (✗), followed by one check mark (✓).

+
+

BBBBBA

+

BBBBBA

+

BBBBBA

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-07.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-07.html new file mode 100644 index 00000000000..b631f9638e2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-caps-07.html @@ -0,0 +1,36 @@ + + + +CSS Test: font-variant-caps: titling-caps; low level equivalence + + + + + + + +

Test passes if the three lines below are identical, with five crosses (✗), followed by one check mark (✓).

+
+

JKLMNO

+

JKLMNO

+

BBBBBA

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-01-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-01-ref.html new file mode 100644 index 00000000000..b314318979f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-01-ref.html @@ -0,0 +1,23 @@ + + + +CSS Test: font-variant-east-asian: normal; low level equivalence + + + +

Test passes if the three lines below are identical, with nine crosses (✗).

+
+

BBBBBBBBB

+

BBBBBBBBB

+

BBBBBBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-01.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-01.html new file mode 100644 index 00000000000..ce9917c76e4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-01.html @@ -0,0 +1,33 @@ + + + +CSS Test: font-variant-east-asian: normal; low level equivalence + + + + + + + +

Test passes if the three lines below are identical, with nine crosses (✗).

+
+

YZabcdefg

+

YZabcdefg

+

BBBBBBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-02-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-02-ref.html new file mode 100644 index 00000000000..ec1e2ea8f43 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-02-ref.html @@ -0,0 +1,23 @@ + + + +CSS Test: font-variant-east-asian: jis78; low level equivalence + + + +

Test passes if the three lines below are identical, with one check mark (✓), then eight crosses (✗).

+
+

ABBBBBBBB

+

ABBBBBBBB

+

ABBBBBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-02.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-02.html new file mode 100644 index 00000000000..392aee4ba76 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-02.html @@ -0,0 +1,33 @@ + + + +CSS Test: font-variant-east-asian: jis78; low level equivalence + + + + + + + +

Test passes if the three lines below are identical, with one check mark (✓), then eight crosses (✗).

+
+

YZabcdefg

+

YZabcdefg

+

ABBBBBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-03-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-03-ref.html new file mode 100644 index 00000000000..85f9e8f9081 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-03-ref.html @@ -0,0 +1,23 @@ + + + +CSS Test: font-variant-east-asian: jis83; low level equivalence + + + +

Test passes if the three lines below are identical, with one cross (✗), one check mark (✓), then seven crosses (✗).

+
+

BABBBBBBB

+

BABBBBBBB

+

BABBBBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-03.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-03.html new file mode 100644 index 00000000000..fbee1ba4882 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-03.html @@ -0,0 +1,33 @@ + + + +CSS Test: font-variant-east-asian: jis83; low level equivalence + + + + + + + +

Test passes if the three lines below are identical, with one cross (✗), one check mark (✓), then seven crosses (✗).

+
+

YZabcdefg

+

YZabcdefg

+

BABBBBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-04-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-04-ref.html new file mode 100644 index 00000000000..663985c7541 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-04-ref.html @@ -0,0 +1,23 @@ + + + +CSS Test: font-variant-east-asian: jis90; low level equivalence + + + +

Test passes if the three lines below are identical, with two crosses (✗), one check mark (✓), then six crosses (✗).

+
+

BBABBBBBB

+

BBABBBBBB

+

BBABBBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-04.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-04.html new file mode 100644 index 00000000000..7194fe47f4a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-04.html @@ -0,0 +1,33 @@ + + + +CSS Test: font-variant-east-asian: jis90; low level equivalence + + + + + + + +

Test passes if the three lines below are identical, with two crosses (✗), one check mark (✓), then six crosses (✗).

+
+

YZabcdefg

+

YZabcdefg

+

BBABBBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-05-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-05-ref.html new file mode 100644 index 00000000000..193648206f7 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-05-ref.html @@ -0,0 +1,23 @@ + + + +CSS Test: font-variant-east-asian: jis04; low level equivalence + + + +

Test passes if the three lines below are identical, with three crosses (✗), one check mark (✓), then five crosses (✗).

+
+

BBBABBBBB

+

BBBABBBBB

+

BBBABBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-05.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-05.html new file mode 100644 index 00000000000..e41730b6fd7 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-05.html @@ -0,0 +1,33 @@ + + + +CSS Test: font-variant-east-asian: jis04; low level equivalence + + + + + + + +

Test passes if the three lines below are identical, with three crosses (✗), one check mark (✓), then five crosses (✗).

+
+

YZabcdefg

+

YZabcdefg

+

BBBABBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-06-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-06-ref.html new file mode 100644 index 00000000000..1854a14956e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-06-ref.html @@ -0,0 +1,23 @@ + + + +CSS Test: font-variant-east-asian: simplified; low level equivalence + + + +

Test passes if the three lines below are identical, with four crosses (✗), one check mark (✓), then four crosses (✗).

+
+

BBBBABBBB

+

BBBBABBBB

+

BBBBABBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-06.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-06.html new file mode 100644 index 00000000000..df18dac0090 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-06.html @@ -0,0 +1,33 @@ + + + +CSS Test: font-variant-east-asian: simplified; low level equivalence + + + + + + + +

Test passes if the three lines below are identical, with four crosses (✗), one check mark (✓), then four crosses (✗).

+
+

YZabcdefg

+

YZabcdefg

+

BBBBABBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-07-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-07-ref.html new file mode 100644 index 00000000000..2ba004471f7 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-07-ref.html @@ -0,0 +1,23 @@ + + + +CSS Test: font-variant-east-asian: traditional; low level equivalence + + + +

Test passes if the three lines below are identical, with five crosses (✗), one check mark (✓), then three crosses (✗).

+
+

BBBBBABBB

+

BBBBBABBB

+

BBBBBABBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-07.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-07.html new file mode 100644 index 00000000000..c1825175288 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-07.html @@ -0,0 +1,33 @@ + + + +CSS Test: font-variant-east-asian: traditional; low level equivalence + + + + + + + +

Test passes if the three lines below are identical, with five crosses (✗), one check mark (✓), then three crosses (✗).

+
+

YZabcdefg

+

YZabcdefg

+

BBBBBABBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-08-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-08-ref.html new file mode 100644 index 00000000000..6f46b9881e9 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-08-ref.html @@ -0,0 +1,23 @@ + + + +CSS Test: font-variant-east-asian: full-width; low level equivalence + + + +

Test passes if the three lines below are identical, with six crosses (✗), one check mark (✓), then two crosses (✗).

+
+

BBBBBBABB

+

BBBBBBABB

+

BBBBBBABB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-08.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-08.html new file mode 100644 index 00000000000..ef957317e39 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-08.html @@ -0,0 +1,33 @@ + + + +CSS Test: font-variant-east-asian: full-width; low level equivalence + + + + + + + +

Test passes if the three lines below are identical, with six crosses (✗), one check mark (✓), then two crosses (✗).

+
+

YZabcdefg

+

YZabcdefg

+

BBBBBBABB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-09-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-09-ref.html new file mode 100644 index 00000000000..a97660648ac --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-09-ref.html @@ -0,0 +1,23 @@ + + + +CSS Test: font-variant-east-asian: proportional-width; low level equivalence + + + +

Test passes if the three lines below are identical, with seven crosses (✗), one check mark (✓), then one cross (✗).

+
+

BBBBBBBAB

+

BBBBBBBAB

+

BBBBBBBAB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-09.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-09.html new file mode 100644 index 00000000000..5498eb445a9 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-09.html @@ -0,0 +1,33 @@ + + + +CSS Test: font-variant-east-asian: proportional-width; low level equivalence + + + + + + + +

Test passes if the three lines below are identical, with seven crosses (✗), one check mark (✓), then one cross (✗).

+
+

YZabcdefg

+

YZabcdefg

+

BBBBBBBAB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-10-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-10-ref.html new file mode 100644 index 00000000000..c0a27e5fa80 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-10-ref.html @@ -0,0 +1,23 @@ + + + +CSS Test: font-variant-east-asian: ruby; low level equivalence + + + +

Test passes if the three lines below are identical, with eight crosses (✗), then one check mark (✓).

+
+

BBBBBBBBA

+

BBBBBBBBA

+

BBBBBBBBA

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-10.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-10.html new file mode 100644 index 00000000000..867fd216430 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-east-asian-10.html @@ -0,0 +1,33 @@ + + + +CSS Test: font-variant-east-asian: ruby; low level equivalence + + + + + + + +

Test passes if the three lines below are identical, with eight crosses (✗), then one check mark (✓).

+
+

YZabcdefg

+

YZabcdefg

+

BBBBBBBBA

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-01-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-01-ref.html new file mode 100644 index 00000000000..68d5561e7f9 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-01-ref.html @@ -0,0 +1,23 @@ + + + +CSS Test: font-variant-ligatures: normal; low level equivalence + + + +

Test passes if the three lines below are identical, with three check marks (✓) followed by two crosses (✗)

+
+

AAABB

+

AAABB

+

AAABB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-01.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-01.html new file mode 100644 index 00000000000..519bfd4bf43 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-01.html @@ -0,0 +1,33 @@ + + + +CSS Test: font-variant-ligatures: normal; low level equivalence + + + + + + + +

Test passes if the three lines below are identical, with three check marks (✓) followed by two crosses (✗)

+
+

CDGFE

+

CDGFE

+

AAABB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-02-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-02-ref.html new file mode 100644 index 00000000000..08a291fd0c3 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-02-ref.html @@ -0,0 +1,23 @@ + + + +CSS Test: font-variant-ligatures: none; low level equivalence + + + +

Test passes if the three lines below are identical, with five crosses (✗)

+
+

BBBBB

+

BBBBB

+

BBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-02.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-02.html new file mode 100644 index 00000000000..46a20216b42 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-02.html @@ -0,0 +1,33 @@ + + + +CSS Test: font-variant-ligatures: none; low level equivalence + + + + + + + +

Test passes if the three lines below are identical, with five crosses (✗)

+
+

CDGFE

+

CDGFE

+

BBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-03-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-03-ref.html new file mode 100644 index 00000000000..303e64e1472 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-03-ref.html @@ -0,0 +1,23 @@ + + + +CSS Test: font-variant-ligatures: common-ligatures; low level equivalence + + + +

Test passes if the three lines below are identical, with two check marks (✓).

+
+

AA

+

AA

+

AA

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-03.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-03.html new file mode 100644 index 00000000000..c783cde23d1 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-03.html @@ -0,0 +1,33 @@ + + + +CSS Test: font-variant-ligatures: common-ligatures; low level equivalence + + + + + + + +

Test passes if the three lines below are identical, with two check marks (✓).

+
+

CD

+

CD

+

AA

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-04-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-04-ref.html new file mode 100644 index 00000000000..fa8cfde7a69 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-04-ref.html @@ -0,0 +1,23 @@ + + + +CSS Test: font-variant-ligatures: no-common-ligatures; low level equivalence + + + +

Test passes if the three lines below are identical, with two crosses (✗).

+
+

BB

+

BB

+

BB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-04.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-04.html new file mode 100644 index 00000000000..818454825da --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-04.html @@ -0,0 +1,33 @@ + + + +CSS Test: font-variant-ligatures: no-common-ligatures; low level equivalence + + + + + + + +

Test passes if the three lines below are identical, with two crosses (✗).

+
+

CD

+

CD

+

BB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-05-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-05-ref.html new file mode 100644 index 00000000000..cce551393ad --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-05-ref.html @@ -0,0 +1,23 @@ + + + +CSS Test: font-variant-ligatures: discretionary-ligatures; low level equivalence + + + +

Test passes if the three lines below are identical, with one check mark (✓).

+
+

A

+

A

+

A

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-05.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-05.html new file mode 100644 index 00000000000..fc1d9ca782c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-05.html @@ -0,0 +1,33 @@ + + + +CSS Test: font-variant-ligatures: discretionary-ligatures; low level equivalence + + + + + + + +

Test passes if the three lines below are identical, with one check mark (✓).

+
+

E

+

E

+

A

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-06-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-06-ref.html new file mode 100644 index 00000000000..121a64e37e1 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-06-ref.html @@ -0,0 +1,23 @@ + + + +CSS Test: font-variant-ligatures: no-discretionary-ligatures; low level equivalence + + + +

Test passes if the three lines below are identical, with one cross (✗).

+
+

B

+

B

+

B

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-06.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-06.html new file mode 100644 index 00000000000..749eb454625 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-06.html @@ -0,0 +1,33 @@ + + + +CSS Test: font-variant-ligatures: no-discretionary-ligatures; low level equivalence + + + + + + + +

Test passes if the three lines below are identical, with one cross (✗).

+
+

E

+

E

+

B

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-07-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-07-ref.html new file mode 100644 index 00000000000..f549f26f2b1 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-07-ref.html @@ -0,0 +1,23 @@ + + + +CSS Test: font-variant-ligatures: historical-ligatures; low level equivalence + + + +

Test passes if the three lines below are identical, with one check mark (✓).

+
+

A

+

A

+

A

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-07.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-07.html new file mode 100644 index 00000000000..0c617a7014e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-07.html @@ -0,0 +1,33 @@ + + + +CSS Test: font-variant-ligatures: historical-ligatures; low level equivalence + + + + + + + +

Test passes if the three lines below are identical, with one check mark (✓).

+
+

F

+

F

+

A

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-08-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-08-ref.html new file mode 100644 index 00000000000..2147544abe6 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-08-ref.html @@ -0,0 +1,23 @@ + + + +CSS Test: font-variant-ligatures: no-historical-ligatures; low level equivalence + + + +

Test passes if the three lines below are identical, with one cross (✗).

+
+

B

+

B

+

B

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-08.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-08.html new file mode 100644 index 00000000000..a1e21aab851 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-08.html @@ -0,0 +1,33 @@ + + + +CSS Test: font-variant-ligatures: no-historical-ligatures; low level equivalence + + + + + + + +

Test passes if the three lines below are identical, with one cross (✗).

+
+

F

+

F

+

B

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-09-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-09-ref.html new file mode 100644 index 00000000000..d4293bdfd6c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-09-ref.html @@ -0,0 +1,23 @@ + + + +CSS Test: font-variant-ligatures: contextual; low level equivalence + + + +

Test passes if the three lines below are identical, with one check mark (✓).

+
+

A

+

A

+

A

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-09.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-09.html new file mode 100644 index 00000000000..8fce03c4f0f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-09.html @@ -0,0 +1,33 @@ + + + +CSS Test: font-variant-ligatures: contextual; low level equivalence + + + + + + + +

Test passes if the three lines below are identical, with one check mark (✓).

+
+

G

+

G

+

A

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-10-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-10-ref.html new file mode 100644 index 00000000000..bf224d71221 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-10-ref.html @@ -0,0 +1,23 @@ + + + +CSS Test: font-variant-ligatures: no-contextual; low level equivalence + + + +

Test passes if the three lines below are identical, with one cross (✗).

+
+

B

+

B

+

B

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-10.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-10.html new file mode 100644 index 00000000000..b39cb5b775d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-10.html @@ -0,0 +1,33 @@ + + + +CSS Test: font-variant-ligatures: no-contextual; low level equivalence + + + + + + + +

Test passes if the three lines below are identical, with one cross (✗).

+
+

G

+

G

+

B

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-11-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-11-ref.html new file mode 100644 index 00000000000..e7dff8008c8 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-11-ref.html @@ -0,0 +1,21 @@ + + + +CSS Test: font-variant-ligatures: none is not equivalent to rlig off. + + + +

Test passes if the first line shows a lam-alef ligature (لا) +and the second shows an initial lam, final alef (ﻟ‌ﺎ) +which is normally incorrect.

+ +
+

لا

+

ﻟ‌ﺎ

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-11.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-11.html new file mode 100644 index 00000000000..8fce1612c91 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-ligatures-11.html @@ -0,0 +1,37 @@ + + + +CSS Test: font-variant-ligatures: none is not equivalent to rlig off. + + + + + + + +

Test passes if the first line shows a lam-alef ligature (لا) +and the second shows an initial lam, final alef (ﻟ‌ﺎ) +which is normally incorrect.

+ +
+

لا

+

لا

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-01-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-01-ref.html new file mode 100644 index 00000000000..5fa6ec5856c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-01-ref.html @@ -0,0 +1,24 @@ + + + +CSS Test: font-variant-numeric: normal; low level equivalence + + + +

Test passes if the three lines below are identical, with eight crosses (✗) +.

+
+

BBBBBBBB

+

BBBBBBBB

+

BBBBBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-01.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-01.html new file mode 100644 index 00000000000..9a45c446ff2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-01.html @@ -0,0 +1,37 @@ + + + +CSS Test: font-variant-numeric: normal; low level equivalence + + + + + + + +

Test passes if the three lines below are identical, with eight crosses (✗) +.

+
+

PQRSTUVW

+

PQRSTUVW

+

BBBBBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-02-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-02-ref.html new file mode 100644 index 00000000000..7293a9052d1 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-02-ref.html @@ -0,0 +1,23 @@ + + + +CSS Test: font-variant-numeric: lining-nums; low level equivalence + + + +

Test passes if the three lines below are identical, with one check mark (✓) followed by seven crosses (✗).

+
+

ABBBBBBB

+

ABBBBBBB

+

ABBBBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-02.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-02.html new file mode 100644 index 00000000000..254d8140de3 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-02.html @@ -0,0 +1,33 @@ + + + +CSS Test: font-variant-numeric: lining-nums; low level equivalence + + + + + + + +

Test passes if the three lines below are identical, with one check mark (✓) followed by seven crosses (✗).

+
+

PQRSTUVW

+

PQRSTUVW

+

ABBBBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-03-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-03-ref.html new file mode 100644 index 00000000000..17ef95cccd5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-03-ref.html @@ -0,0 +1,23 @@ + + + +CSS Test: font-variant-numeric: oldstyle-nums; low level equivalence + + + +

Test passes if the three lines below are identical, with one cross (✗), then one check mark (✓) followed by six crosses (✗).

+
+

BABBBBBB

+

BABBBBBB

+

BABBBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-03.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-03.html new file mode 100644 index 00000000000..f2f0f5d105a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-03.html @@ -0,0 +1,35 @@ + + + +CSS Test: font-variant-numeric: oldstyle-nums; low level equivalence + + + + + + + +

Test passes if the three lines below are identical, with one cross (✗), then one check mark (✓) followed by six crosses (✗).

+
+

PQRSTUVW

+

PQRSTUVW

+

BABBBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-04-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-04-ref.html new file mode 100644 index 00000000000..7254e845d1c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-04-ref.html @@ -0,0 +1,23 @@ + + + +CSS Test: font-variant-numeric: proportional-nums; low level equivalence + + + +

Test passes if the three lines below are identical, with two crosses (✗), then one check mark (✓) followed by five crosses (✗).

+
+

BBABBBBB

+

BBABBBBB

+

BBABBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-04.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-04.html new file mode 100644 index 00000000000..e322b63e20f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-04.html @@ -0,0 +1,33 @@ + + + +CSS Test: font-variant-numeric: proportional-nums; low level equivalence + + + + + + + +

Test passes if the three lines below are identical, with two crosses (✗), then one check mark (✓) followed by five crosses (✗).

+
+

PQRSTUVW

+

PQRSTUVW

+

BBABBBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-05-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-05-ref.html new file mode 100644 index 00000000000..d6f5481101e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-05-ref.html @@ -0,0 +1,23 @@ + + + +CSS Test: font-variant-numeric: tabular-nums; low level equivalence + + + +

Test passes if the three lines below are identical, with three crosses (✗), then one check mark (✓) followed by four crosses (✗).

+
+

BBBABBBB

+

BBBABBBB

+

BBBABBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-05.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-05.html new file mode 100644 index 00000000000..a9eabe6a75a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-05.html @@ -0,0 +1,33 @@ + + + +CSS Test: font-variant-numeric: tabular-nums; low level equivalence + + + + + + + +

Test passes if the three lines below are identical, with three crosses (✗), then one check mark (✓) followed by four crosses (✗).

+
+

PQRSTUVW

+

PQRSTUVW

+

BBBABBBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-06-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-06-ref.html new file mode 100644 index 00000000000..0058dbfea79 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-06-ref.html @@ -0,0 +1,23 @@ + + + +CSS Test: font-variant-numeric: diagonal-fractions; low level equivalence + + + +

Test passes if the three lines below are identical, with four crosses (✗), then one check mark (✓) followed by three crosses (✗).

+
+

BBBBABBB

+

BBBBABBB

+

BBBBABBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-06.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-06.html new file mode 100644 index 00000000000..d3777d8a17f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-06.html @@ -0,0 +1,33 @@ + + + +CSS Test: font-variant-numeric: diagonal-fractions; low level equivalence + + + + + + + +

Test passes if the three lines below are identical, with four crosses (✗), then one check mark (✓) followed by three crosses (✗).

+
+

PQRSTUVW

+

PQRSTUVW

+

BBBBABBB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-07-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-07-ref.html new file mode 100644 index 00000000000..d5b1214a64e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-07-ref.html @@ -0,0 +1,23 @@ + + + +CSS Test: font-variant-numeric: stacked-fractions; low level equivalence + + + +

Test passes if the three lines below are identical, with five crosses (✗), then one check mark (✓) followed by two crosses (✗).

+
+

BBBBBABB

+

BBBBBABB

+

BBBBBABB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-07.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-07.html new file mode 100644 index 00000000000..ed0c23eeca6 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-07.html @@ -0,0 +1,33 @@ + + + +CSS Test: font-variant-numeric: stacked-fractions; low level equivalence + + + + + + + +

Test passes if the three lines below are identical, with five crosses (✗), then one check mark (✓) followed by two crosses (✗).

+
+

PQRSTUVW

+

PQRSTUVW

+

BBBBBABB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-08-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-08-ref.html new file mode 100644 index 00000000000..002c5870771 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-08-ref.html @@ -0,0 +1,23 @@ + + + +CSS Test: font-variant-numeric: ordinal; low level equivalence + + + +

Test passes if the three lines below are identical, with six crosses (✗), then one check mark (✓) followed by one cross (✗).

+
+

BBBBBBAB

+

BBBBBBAB

+

BBBBBBAB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-08.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-08.html new file mode 100644 index 00000000000..5ff0985fce8 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-08.html @@ -0,0 +1,33 @@ + + + +CSS Test: font-variant-numeric: ordinal; low level equivalence + + + + + + + +

Test passes if the three lines below are identical, with six crosses (✗), then one check mark (✓) followed by one cross (✗).

+
+

PQRSTUVW

+

PQRSTUVW

+

BBBBBBAB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-09-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-09-ref.html new file mode 100644 index 00000000000..04a70a055e1 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-09-ref.html @@ -0,0 +1,23 @@ + + + +CSS Test: font-variant-numeric: slashed-zero; low level equivalence + + + +

Test passes if the three lines below are identical, with seven crosses (✗), then one check mark (✓).

+
+

BBBBBBBA

+

BBBBBBBA

+

BBBBBBBA

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-09.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-09.html new file mode 100644 index 00000000000..48926a78a1c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-numeric-09.html @@ -0,0 +1,33 @@ + + + +CSS Test: font-variant-numeric: slashed-zero; low level equivalence + + + + + + + +

Test passes if the three lines below are identical, with seven crosses (✗), then one check mark (✓).

+
+

PQRSTUVW

+

PQRSTUVW

+

BBBBBBBA

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-position-01-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-position-01-ref.html new file mode 100644 index 00000000000..5b679d51b73 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-position-01-ref.html @@ -0,0 +1,23 @@ + + + +CSS Test: font-variant-position: normal; low level equivalence + + + +

Test passes if the three lines below are identical, with two crosses (✗)

+
+

BB

+

BB

+

BB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-position-01.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-position-01.html new file mode 100644 index 00000000000..b3cba15b4e7 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-position-01.html @@ -0,0 +1,40 @@ + + + +CSS Test: font-variant-position: normal; low level equivalence + + + + + + + +

Test passes if the three lines below are identical, with two crosses (✗)

+ +
+

HI

+

HI

+

BB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-position-02-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-position-02-ref.html new file mode 100644 index 00000000000..07539e58a7b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-position-02-ref.html @@ -0,0 +1,23 @@ + + + +CSS Test: font-variant-position: sub; low level equivalence + + + +

Test passes if the three lines below are identical, with one checkmark (✓) followed by one cross (✗)

+
+

AB

+

AB

+

AB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-position-02.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-position-02.html new file mode 100644 index 00000000000..9301023ccfc --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-position-02.html @@ -0,0 +1,40 @@ + + + +CSS Test: font-variant-position: sub; low level equivalence + + + + + + + +

Test passes if the three lines below are identical, with one checkmark (✓) followed by one cross (✗)

+ +
+

HI

+

HI

+

AB

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-position-03-ref.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-position-03-ref.html new file mode 100644 index 00000000000..8b34fcb24f7 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-position-03-ref.html @@ -0,0 +1,25 @@ + + + +CSS Test: font-variant-position: super; low level equivalence + + + +

Test passes if the three lines below are identical, with one cross (✗) followed by one checkmark (✓)

+ + +
+

BA

+

BA

+

BA

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-position-03.html b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-position-03.html new file mode 100644 index 00000000000..02ea0875e74 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/font-variant-position-03.html @@ -0,0 +1,41 @@ + + + +CSS Test: font-variant-position: super; low level equivalence + + + + + + + +

Test passes if the three lines below are identical, with one cross (✗) followed by one checkmark (✓)

+ + +
+

HI

+

HI

+

BA

+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/language-specific-01.html b/tests/wpt/web-platform-tests/css/css-fonts-3/language-specific-01.html new file mode 100644 index 00000000000..04380460831 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts-3/language-specific-01.html @@ -0,0 +1,34 @@ + + + +CSS Test: language-specific display + + + + + + + +

Test is passed if:

+
    +
  1. The word fijord on the first line uses an fi ligature
  2. +
  3. It is clear that the second line has a letter f followed by a Turkish dotless-i while the third line has a letter f followed by a (dotted) i. If an fi ligature is used on either the second or third line, it must still be possible to distinguish the two.

    + +

    fijord

    +
    +

    fıstık

    +

    fikir

    +
    diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/support/fonts/FontWithFancyFeatures.otf b/tests/wpt/web-platform-tests/css/css-fonts-3/support/fonts/FontWithFancyFeatures.otf new file mode 100644 index 0000000000000000000000000000000000000000..8c884829da41dc1a7261d9df7318b2b46ad340e7 GIT binary patch literal 40432 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 QM)C10bLlQ)^iTTy50fhhMF0Q* literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/css/css-fonts-3/support/fonts/Lato-Medium.ttf b/tests/wpt/web-platform-tests/css/css-fonts-3/support/fonts/Lato-Medium.ttf new file mode 100644 index 0000000000000000000000000000000000000000..2c612da2ae589dc264deb683f90baf75c8e18e03 GIT binary patch literal 637068 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 z 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

    5w3xwVP}q)~ARSEO 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%0DAf*evpgHE{_HX=cTW0zWo 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%0AswPr3k*bMQ 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 IS?-Ab529nHX#fBK literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/OWNERS b/tests/wpt/web-platform-tests/css/css-grid-1/OWNERS index 8a23f1d3e57..f4adc0ec9ca 100644 --- a/tests/wpt/web-platform-tests/css/css-grid-1/OWNERS +++ b/tests/wpt/web-platform-tests/css/css-grid-1/OWNERS @@ -5,3 +5,5 @@ @tabatkins @fantasai @atanassov +@javifernandez +@svillar diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-001-ref.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-001-ref.html new file mode 100644 index 00000000000..71baf6d14e0 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-001-ref.html @@ -0,0 +1,47 @@ + + +CSS Grid Layout Test: Orthogonal positioned grid items reference file + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    + diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-001.html new file mode 100644 index 00000000000..54f937defd2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-001.html @@ -0,0 +1,58 @@ + + +CSS Grid Layout Test: Orthogonal positioned grid items + + + + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-002.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-002.html new file mode 100644 index 00000000000..50aea165021 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-002.html @@ -0,0 +1,59 @@ + + +CSS Grid Layout Test: Orthogonal positioned grid items + + + + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-003.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-003.html new file mode 100644 index 00000000000..4e118624b8a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-003.html @@ -0,0 +1,59 @@ + + +CSS Grid Layout Test: Orthogonal positioned grid items + + + + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-004.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-004.html new file mode 100644 index 00000000000..7a724092a2b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-004.html @@ -0,0 +1,60 @@ + + +CSS Grid Layout Test: Orthogonal positioned grid items + + + + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-005-ref.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-005-ref.html new file mode 100644 index 00000000000..0a19a463a6b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-005-ref.html @@ -0,0 +1,48 @@ + + +CSS Grid Layout Test: Orthogonal positioned grid items reference file + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    + diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-005.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-005.html new file mode 100644 index 00000000000..dacbc852899 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-005.html @@ -0,0 +1,59 @@ + + +CSS Grid Layout Test: Orthogonal positioned grid items + + + + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-006-ref.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-006-ref.html new file mode 100644 index 00000000000..5de990f3e5a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-006-ref.html @@ -0,0 +1,48 @@ + + +CSS Grid Layout Test: Orthogonal positioned grid items reference file + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    + diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-006.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-006.html new file mode 100644 index 00000000000..00930da2980 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-006.html @@ -0,0 +1,59 @@ + + +CSS Grid Layout Test: Orthogonal positioned grid items + + + + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-007-ref.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-007-ref.html new file mode 100644 index 00000000000..ddbf86e277d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-007-ref.html @@ -0,0 +1,47 @@ + + +CSS Grid Layout Test: Orthogonal positioned grid items reference file + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    + diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-007.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-007.html new file mode 100644 index 00000000000..a663f0fdb7c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-007.html @@ -0,0 +1,60 @@ + + +CSS Grid Layout Test: Orthogonal positioned grid items + + + + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-008-ref.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-008-ref.html new file mode 100644 index 00000000000..231e3ed95f8 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-008-ref.html @@ -0,0 +1,47 @@ + + +CSS Grid Layout Test: Orthogonal positioned grid items reference file + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    + diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-008.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-008.html new file mode 100644 index 00000000000..fab723d1885 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-008.html @@ -0,0 +1,60 @@ + + +CSS Grid Layout Test: Orthogonal positioned grid items + + + + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-009-ref.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-009-ref.html new file mode 100644 index 00000000000..b7b881a609e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-009-ref.html @@ -0,0 +1,46 @@ + + +CSS Grid Layout Test: Orthogonal positioned grid items reference file + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    + diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-009.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-009.html new file mode 100644 index 00000000000..dd1849e988c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-009.html @@ -0,0 +1,62 @@ + + +CSS Grid Layout Test: Orthogonal positioned grid items + + + + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-010.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-010.html new file mode 100644 index 00000000000..b1d5353770e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-010.html @@ -0,0 +1,60 @@ + + +CSS Grid Layout Test: Orthogonal positioned grid items + + + + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-011-ref.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-011-ref.html new file mode 100644 index 00000000000..7b7ce4848a2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-011-ref.html @@ -0,0 +1,48 @@ + + +CSS Grid Layout Test: Orthogonal positioned grid items reference file + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    + diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-011.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-011.html new file mode 100644 index 00000000000..c0772d46abd --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-011.html @@ -0,0 +1,59 @@ + + +CSS Grid Layout Test: Orthogonal positioned grid items + + + + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-012-ref.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-012-ref.html new file mode 100644 index 00000000000..7f2828d4ab4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-012-ref.html @@ -0,0 +1,49 @@ + + +CSS Grid Layout Test: Orthogonal positioned grid items reference file + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    + diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-012.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-012.html new file mode 100644 index 00000000000..8e29b822ab9 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-012.html @@ -0,0 +1,59 @@ + + +CSS Grid Layout Test: Orthogonal positioned grid items + + + + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-013-ref.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-013-ref.html new file mode 100644 index 00000000000..b822730f320 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-013-ref.html @@ -0,0 +1,49 @@ + + +CSS Grid Layout Test: Orthogonal positioned grid items reference file + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    + diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-013.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-013.html new file mode 100644 index 00000000000..b78f706fd83 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-013.html @@ -0,0 +1,60 @@ + + +CSS Grid Layout Test: Orthogonal positioned grid items + + + + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-014-ref.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-014-ref.html new file mode 100644 index 00000000000..b5062f0db11 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-014-ref.html @@ -0,0 +1,47 @@ + + +CSS Grid Layout Test: Orthogonal positioned grid items reference file + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-014.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-014.html new file mode 100644 index 00000000000..37d643b9e84 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-014.html @@ -0,0 +1,59 @@ + + +CSS Grid Layout Test: Orthogonal positioned grid items + + + + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-015-ref.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-015-ref.html new file mode 100644 index 00000000000..000fd63c222 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-015-ref.html @@ -0,0 +1,48 @@ + + +CSS Grid Layout Test: Orthogonal positioned grid items reference file + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-015.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-015.html new file mode 100644 index 00000000000..a1da3f6f3fa --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-015.html @@ -0,0 +1,59 @@ + + +CSS Grid Layout Test: Orthogonal positioned grid items + + + + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-016-ref.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-016-ref.html new file mode 100644 index 00000000000..dc1d9583321 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-016-ref.html @@ -0,0 +1,48 @@ + + +CSS Grid Layout Test: Orthogonal positioned grid items reference file + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-016.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-016.html new file mode 100644 index 00000000000..06aedf3d2da --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-016.html @@ -0,0 +1,60 @@ + + +CSS Grid Layout Test: Orthogonal positioned grid items + + + + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-017-ref.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-017-ref.html new file mode 100644 index 00000000000..66c57511b08 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-017-ref.html @@ -0,0 +1,49 @@ + + +CSS Grid Layout Test: Orthogonal positioned grid items reference file + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-017.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-017.html new file mode 100644 index 00000000000..f0f91ec321d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-017.html @@ -0,0 +1,62 @@ + + +CSS Grid Layout Test: Orthogonal positioned grid items + + + + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-001-ref.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-001-ref.html new file mode 100644 index 00000000000..5c01d89aebd --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-001-ref.html @@ -0,0 +1,43 @@ + + +CSS Grid Layout Test: Positioned grid items reference file + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    + diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-001.html new file mode 100644 index 00000000000..48dee4bfc09 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-001.html @@ -0,0 +1,57 @@ + + +CSS Grid Layout Test: Positioned grid items + + + + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-002.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-002.html new file mode 100644 index 00000000000..54c40b69e55 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-002.html @@ -0,0 +1,58 @@ + + +CSS Grid Layout Test: Positioned grid items + + + + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-003.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-003.html new file mode 100644 index 00000000000..09583f4903d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-003.html @@ -0,0 +1,58 @@ + + +CSS Grid Layout Test: Positioned grid items + + + + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-004.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-004.html new file mode 100644 index 00000000000..525fe057164 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-004.html @@ -0,0 +1,59 @@ + + +CSS Grid Layout Test: Positioned grid items + + + + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-005-ref.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-005-ref.html new file mode 100644 index 00000000000..31960123f00 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-005-ref.html @@ -0,0 +1,44 @@ + + +CSS Grid Layout Test: Positioned grid items reference file + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    + diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-005.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-005.html new file mode 100644 index 00000000000..9767714c045 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-005.html @@ -0,0 +1,58 @@ + + +CSS Grid Layout Test: Positioned grid items + + + + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-006-ref.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-006-ref.html new file mode 100644 index 00000000000..a3f12bbf114 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-006-ref.html @@ -0,0 +1,44 @@ + + +CSS Grid Layout Test: Positioned grid items reference file + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    + diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-006.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-006.html new file mode 100644 index 00000000000..5ae2f2cd36d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-006.html @@ -0,0 +1,58 @@ + + +CSS Grid Layout Test: Positioned grid items + + + + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-007-ref.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-007-ref.html new file mode 100644 index 00000000000..7c7307cb9a1 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-007-ref.html @@ -0,0 +1,43 @@ + + +CSS Grid Layout Test: Positioned grid items reference file + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    + diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-007.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-007.html new file mode 100644 index 00000000000..cf17b29746d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-007.html @@ -0,0 +1,59 @@ + + +CSS Grid Layout Test: Positioned grid items + + + + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-008-ref.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-008-ref.html new file mode 100644 index 00000000000..c7447aa30c0 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-008-ref.html @@ -0,0 +1,43 @@ + + +CSS Grid Layout Test: Positioned grid items reference file + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    + diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-008.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-008.html new file mode 100644 index 00000000000..88d9572ed7d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-008.html @@ -0,0 +1,59 @@ + + +CSS Grid Layout Test: Positioned grid items + + + + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-009-ref.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-009-ref.html new file mode 100644 index 00000000000..5a2bc415064 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-009-ref.html @@ -0,0 +1,42 @@ + + +CSS Grid Layout Test: Positioned grid items reference file + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    + diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-009.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-009.html new file mode 100644 index 00000000000..bdfd41d8b29 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-009.html @@ -0,0 +1,61 @@ + + +CSS Grid Layout Test: Positioned grid items + + + + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-010.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-010.html new file mode 100644 index 00000000000..676deceb40f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-010.html @@ -0,0 +1,59 @@ + + +CSS Grid Layout Test: Positioned grid items + + + + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-011-ref.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-011-ref.html new file mode 100644 index 00000000000..f98381f4344 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-011-ref.html @@ -0,0 +1,47 @@ + + +CSS Grid Layout Test: Positioned grid items reference file + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    + diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-011.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-011.html new file mode 100644 index 00000000000..e13c39837e4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-011.html @@ -0,0 +1,58 @@ + + +CSS Grid Layout Test: Positioned grid items + + + + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-012-ref.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-012-ref.html new file mode 100644 index 00000000000..eee7b3516d5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-012-ref.html @@ -0,0 +1,48 @@ + + +CSS Grid Layout Test: Positioned grid items reference file + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    + diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-012.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-012.html new file mode 100644 index 00000000000..c9ff5716535 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-012.html @@ -0,0 +1,58 @@ + + +CSS Grid Layout Test: Positioned grid items + + + + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-013-ref.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-013-ref.html new file mode 100644 index 00000000000..d616e3d27a2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-013-ref.html @@ -0,0 +1,48 @@ + + +CSS Grid Layout Test: Positioned grid items reference file + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    + diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-013.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-013.html new file mode 100644 index 00000000000..2bad6861b24 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-013.html @@ -0,0 +1,59 @@ + + +CSS Grid Layout Test: Positioned grid items + + + + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-014-ref.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-014-ref.html new file mode 100644 index 00000000000..c950fcbfb0e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-014-ref.html @@ -0,0 +1,46 @@ + + +CSS Grid Layout Test: Positioned grid items reference file + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-014.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-014.html new file mode 100644 index 00000000000..aef497d541b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-014.html @@ -0,0 +1,58 @@ + + +CSS Grid Layout Test: Positioned grid items + + + + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-015-ref.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-015-ref.html new file mode 100644 index 00000000000..5c6583bfa46 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-015-ref.html @@ -0,0 +1,47 @@ + + +CSS Grid Layout Test: Positioned grid items reference file + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-015.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-015.html new file mode 100644 index 00000000000..4de8be1a86a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-015.html @@ -0,0 +1,58 @@ + + +CSS Grid Layout Test: Positioned grid items + + + + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-016-ref.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-016-ref.html new file mode 100644 index 00000000000..05e708f4927 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-016-ref.html @@ -0,0 +1,47 @@ + + +CSS Grid Layout Test: Positioned grid items reference file + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-016.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-016.html new file mode 100644 index 00000000000..bc3ac50d2b7 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-016.html @@ -0,0 +1,59 @@ + + +CSS Grid Layout Test: Positioned grid items + + + + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-017-ref.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-017-ref.html new file mode 100644 index 00000000000..2633ac41aa3 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-017-ref.html @@ -0,0 +1,48 @@ + + +CSS Grid Layout Test: Positioned grid items reference file + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-017.html b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-017.html new file mode 100644 index 00000000000..115abf49710 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/abspos/positioned-grid-items-017.html @@ -0,0 +1,61 @@ + + +CSS Grid Layout Test: Positioned grid items + + + + + + +

    The test passes if it has the same output than the reference.

    + +
    +
    First item
    +
    Second item
    +
    Third item
    +
    Fourth item
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-001.html new file mode 100644 index 00000000000..f8aa1c9b727 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-001.html @@ -0,0 +1,43 @@ + + +CSS Grid Layout Test: Content Distribution 'space-evenly' on 2x2 grid + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-002.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-002.html new file mode 100644 index 00000000000..d273c7bd076 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-002.html @@ -0,0 +1,43 @@ + + +CSS Grid Layout Test: Content Distribution 'space-between' on 2x2 grid + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-003.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-003.html new file mode 100644 index 00000000000..b5cf8c0964b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-003.html @@ -0,0 +1,43 @@ + + +CSS Grid Layout Test: Content Distribution 'space-around' on 2x2 grid + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-004.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-004.html new file mode 100644 index 00000000000..a2e4930c109 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-004.html @@ -0,0 +1,43 @@ + + +CSS Grid Layout Test: Content Distribution 'stretch' on 2x2 grid + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-005.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-005.html new file mode 100644 index 00000000000..0b544ff15f2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-005.html @@ -0,0 +1,41 @@ + + +CSS Grid Layout Test: Content Distribution default value + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-006.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-006.html new file mode 100644 index 00000000000..7cb2bc1b94b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-006.html @@ -0,0 +1,45 @@ + + +CSS Grid Layout Test: Content Distribution 'space-evenly' and gaps on 2x2 grid + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-007.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-007.html new file mode 100644 index 00000000000..34faa7470ba --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-007.html @@ -0,0 +1,47 @@ + + +CSS Grid Layout Test: Content Distribution 'space-evenly' on 3x3 grid + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-008.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-008.html new file mode 100644 index 00000000000..f2a3f5d33d9 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-008.html @@ -0,0 +1,49 @@ + + +CSS Grid Layout Test: Content Distribution 'space-evenly' and gaps on 3x3 grid + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-009.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-009.html new file mode 100644 index 00000000000..2acad9d4a7a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-009.html @@ -0,0 +1,51 @@ + + +CSS Grid Layout Test: Content Distribution 'space-evenly' on 4x4 grid + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-010.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-010.html new file mode 100644 index 00000000000..cc80076d332 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-010.html @@ -0,0 +1,53 @@ + + +CSS Grid Layout Test: Content Distribution 'space-evenly' and gaps on 4x4 grid + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-011.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-011.html new file mode 100644 index 00000000000..c5ef6d74436 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-011.html @@ -0,0 +1,45 @@ + + +CSS Grid Layout Test: Content Distribution 'space-between' and gaps on 2x2 grid + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-012.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-012.html new file mode 100644 index 00000000000..2b41ea26365 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-012.html @@ -0,0 +1,47 @@ + + +CSS Grid Layout Test: Content Distribution 'space-between' on 3x3 grid + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-013.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-013.html new file mode 100644 index 00000000000..1160cb7a5cc --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-013.html @@ -0,0 +1,49 @@ + + +CSS Grid Layout Test: Content Distribution 'space-between' and gaps on 3x3 grid + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-014.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-014.html new file mode 100644 index 00000000000..2d8d24abdb4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-014.html @@ -0,0 +1,51 @@ + + +CSS Grid Layout Test: Content Distribution 'space-between' on 4x4 grid + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-015.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-015.html new file mode 100644 index 00000000000..f754528c0d1 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-015.html @@ -0,0 +1,53 @@ + + +CSS Grid Layout Test: Content Distribution 'space-between' and gaps on 4x4 grid + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-016.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-016.html new file mode 100644 index 00000000000..b372aaecb9c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-016.html @@ -0,0 +1,45 @@ + + +CSS Grid Layout Test: Content Distribution 'space-around' and gaps on 2x2 grid + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-017.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-017.html new file mode 100644 index 00000000000..6155df77b5b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-017.html @@ -0,0 +1,47 @@ + + +CSS Grid Layout Test: Content Distribution 'space-around' on 3x3 grid + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-018.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-018.html new file mode 100644 index 00000000000..1ba4f54aa46 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-018.html @@ -0,0 +1,49 @@ + + +CSS Grid Layout Test: Content Distribution 'space-around' and gaps on 3x3 grid + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-019.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-019.html new file mode 100644 index 00000000000..2941b752459 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-019.html @@ -0,0 +1,51 @@ + + +CSS Grid Layout Test: Content Distribution 'space-around' on 4x4 grid + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-020.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-020.html new file mode 100644 index 00000000000..da5773b08c1 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-020.html @@ -0,0 +1,53 @@ + + +CSS Grid Layout Test: Content Distribution 'space-around' and gaps on 4x4 grid + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-021.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-021.html new file mode 100644 index 00000000000..0f3bb845e19 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-021.html @@ -0,0 +1,45 @@ + + +CSS Grid Layout Test: Content Distribution 'stretch' and gaps on 2x2 grid + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-022.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-022.html new file mode 100644 index 00000000000..e660c2fe561 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-022.html @@ -0,0 +1,47 @@ + + +CSS Grid Layout Test: Content Distribution 'stretch' on 3x3 grid + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-023.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-023.html new file mode 100644 index 00000000000..011e4436948 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-023.html @@ -0,0 +1,49 @@ + + +CSS Grid Layout Test: Content Distribution 'stretch' and gaps on 3x3 grid + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-024.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-024.html new file mode 100644 index 00000000000..73ae83f53da --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-024.html @@ -0,0 +1,51 @@ + + +CSS Grid Layout Test: Content Distribution 'stretch' on 4x4 grid + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-025.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-025.html new file mode 100644 index 00000000000..1909192a2b2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-025.html @@ -0,0 +1,53 @@ + + +CSS Grid Layout Test: Content Distribution 'stretch' and gaps on 4x4 grid + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-001.html new file mode 100644 index 00000000000..72571da66c9 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-001.html @@ -0,0 +1,44 @@ + + +CSS Grid Layout Test: Content Distribution 'space-evenly' with collapsed tracks on 2x2 grid + + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-002.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-002.html new file mode 100644 index 00000000000..7fd26610b93 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-002.html @@ -0,0 +1,43 @@ + + +CSS Grid Layout Test: Content Distribution 'space-between' with collapsed tracks on 2x2 grid + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-003.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-003.html new file mode 100644 index 00000000000..f0100c02de0 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-003.html @@ -0,0 +1,43 @@ + + +CSS Grid Layout Test: Content Distribution 'space-around' with collapsed tracks on 2x2 grid + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-004.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-004.html new file mode 100644 index 00000000000..d8b43b64c1d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-004.html @@ -0,0 +1,43 @@ + + +CSS Grid Layout Test: Content Distribution 'stretch' with collapsed tracks on 2x2 grid + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-005.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-005.html new file mode 100644 index 00000000000..d2a323e10be --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-005.html @@ -0,0 +1,45 @@ + + +CSS Grid Layout Test: Content Distribution 'space-evenly' and gaps on 2x2 grid with collapsed tracks + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-006.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-006.html new file mode 100644 index 00000000000..ce3cbafbd55 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-006.html @@ -0,0 +1,47 @@ + + +CSS Grid Layout Test: Content Distribution 'space-evenly' on 3x3 grid with collapsed tracks + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-007.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-007.html new file mode 100644 index 00000000000..2e6a4af8edf --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-007.html @@ -0,0 +1,49 @@ + + +CSS Grid Layout Test: Content Distribution 'space-evenly' and gaps on 3x3 grid with collapsed tracks + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-008.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-008.html new file mode 100644 index 00000000000..b2995521716 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-008.html @@ -0,0 +1,51 @@ + + +CSS Grid Layout Test: Content Distribution 'space-evenly' on 4x4 grid with collapsed tracks + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-009.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-009.html new file mode 100644 index 00000000000..0eb19a3b7ad --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-009.html @@ -0,0 +1,53 @@ + + +CSS Grid Layout Test: Content Distribution 'space-evenly' and gaps on 4x4 grid with collapsed tracks + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-010.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-010.html new file mode 100644 index 00000000000..16783fd8482 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-010.html @@ -0,0 +1,45 @@ + + +CSS Grid Layout Test: Content Distribution 'space-between' and gaps on 2x2 grid with collapsed tracks + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-011.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-011.html new file mode 100644 index 00000000000..7ba130a601e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-011.html @@ -0,0 +1,47 @@ + + +CSS Grid Layout Test: Content Distribution 'space-between' on 3x3 grid with collapsed tracks + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-012.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-012.html new file mode 100644 index 00000000000..0eb6c84057e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-012.html @@ -0,0 +1,49 @@ + + +CSS Grid Layout Test: Content Distribution 'space-between' and gaps on 3x3 grid with collapsed tracks + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-013.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-013.html new file mode 100644 index 00000000000..1f70083e720 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-013.html @@ -0,0 +1,51 @@ + + +CSS Grid Layout Test: Content Distribution 'space-between' on 4x4 grid with collapsed tracks + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-014.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-014.html new file mode 100644 index 00000000000..86543695ae8 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-014.html @@ -0,0 +1,53 @@ + + +CSS Grid Layout Test: Content Distribution 'space-between' and gaps on 4x4 grid with collapsed tracks + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-015.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-015.html new file mode 100644 index 00000000000..9d7be68411c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-015.html @@ -0,0 +1,45 @@ + + +CSS Grid Layout Test: Content Distribution 'space-around' and gaps on 2x2 grid with collapsed tracks + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-016.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-016.html new file mode 100644 index 00000000000..bbaad008872 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-016.html @@ -0,0 +1,47 @@ + + +CSS Grid Layout Test: Content Distribution 'space-around' on 3x3 grid with collapsed tracks + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-017.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-017.html new file mode 100644 index 00000000000..ec2ea308f5b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-017.html @@ -0,0 +1,49 @@ + + +CSS Grid Layout Test: Content Distribution 'space-around' and gaps on 3x3 grid with collapsed tracks + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-018.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-018.html new file mode 100644 index 00000000000..93ba652bca8 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-018.html @@ -0,0 +1,51 @@ + + +CSS Grid Layout Test: Content Distribution 'space-around' on 4x4 grid with collapsed tracks + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-019.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-019.html new file mode 100644 index 00000000000..484ca20c1fa --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-019.html @@ -0,0 +1,53 @@ + + +CSS Grid Layout Test: Content Distribution 'space-around' and gaps on 4x4 grid with collapsed tracks + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-020.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-020.html new file mode 100644 index 00000000000..7e9988c6ef0 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-020.html @@ -0,0 +1,45 @@ + + +CSS Grid Layout Test: Content Distribution 'stretch' with collapsed tracks on 2x2 grid + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-021.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-021.html new file mode 100644 index 00000000000..1c8cf66f3aa --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-021.html @@ -0,0 +1,47 @@ + + +CSS Grid Layout Test: Content Distribution 'stretch' with collapsed tracks on 3x3 grid + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-022.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-022.html new file mode 100644 index 00000000000..3b9a2082c4e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-022.html @@ -0,0 +1,49 @@ + + +CSS Grid Layout Test: Content Distribution 'stretch' and gaps with collapsed tracks on 3x3 grid + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-023.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-023.html new file mode 100644 index 00000000000..b39ea2cb6e4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-023.html @@ -0,0 +1,51 @@ + + +CSS Grid Layout Test: Content Distribution 'stretch' with collapsed tracks on 4x4 grid + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-024.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-024.html new file mode 100644 index 00000000000..97d95403884 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-024.html @@ -0,0 +1,53 @@ + + +CSS Grid Layout Test: Content Distribution 'stretch' and gaps with collapsed tracks on 4x4 grid + + + + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-001.html new file mode 100644 index 00000000000..b25b47134f4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-001.html @@ -0,0 +1,57 @@ + + +CSS Grid Layout Test: Self-Alignment and stretch on fixed-sized tracks + + + + + + + + + + + +
    +
    X XX X
    +
    XX X
    X XXX
    X
    XX XXX
    +
    X XX X
    +
    XX X
    X XXX
    X
    XX XXX
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-002.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-002.html new file mode 100644 index 00000000000..b9a354e04e2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-002.html @@ -0,0 +1,61 @@ + + +CSS Grid Layout Test: Self-Alignment and stretch on fixed-sized tracks + + + + + + + + + + + +
    +
    X XX X
    +
    XX X
    X XXX
    X
    XX XXX
    +
    X XX X
    +
    XX X
    X XXX
    X
    XX XXX
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-003.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-003.html new file mode 100644 index 00000000000..0af408115e7 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-003.html @@ -0,0 +1,62 @@ + + +CSS Grid Layout Test: Self-Alignment and stretch on fixed-sized tracks + + + + + + + + + + + +
    +
    X XX X
    +
    XX X
    X XXX
    X
    XX XXX
    +
    X XX X
    +
    XX X
    X XXX
    X
    XX XXX
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-004.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-004.html new file mode 100644 index 00000000000..ad76f526fc8 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-004.html @@ -0,0 +1,61 @@ + + +CSS Grid Layout Test: Self-Alignment and stretch on fixed-sized tracks + + + + + + + + + + + +
    +
    X XX X
    +
    XX X
    X XXX
    X
    XX XXX
    +
    X XX X
    +
    XX X
    X XXX
    X
    XX XXX
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-005.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-005.html new file mode 100644 index 00000000000..68e794bdaa6 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-005.html @@ -0,0 +1,58 @@ + + +CSS Grid Layout Test: Self-Alignment and stretch on fixed-sized tracks + + + + + + + + + + + +
    +
    X XX X
    +
    XX X
    X XXX
    X
    XX XXX
    +
    X XX X
    +
    XX X
    X XXX
    X
    XX XXX
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-006.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-006.html new file mode 100644 index 00000000000..94c65d0b1df --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-006.html @@ -0,0 +1,62 @@ + + +CSS Grid Layout Test: Self-Alignment and stretch on fixed-sized tracks + + + + + + + + + + + +
    +
    X XX X
    +
    XX X
    X XXX
    X
    XX XXX
    +
    X XX X
    +
    XX X
    X XXX
    X
    XX XXX
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-007.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-007.html new file mode 100644 index 00000000000..8cb459ed9d5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-007.html @@ -0,0 +1,63 @@ + + +CSS Grid Layout Test: Self-Alignment and stretch on fixed-sized tracks + + + + + + + + + + + +
    +
    X XX X
    +
    XX X
    X XXX
    X
    XX XXX
    +
    X XX X
    +
    XX X
    X XXX
    X
    XX XXX
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-008.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-008.html new file mode 100644 index 00000000000..52337ee21d8 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-008.html @@ -0,0 +1,62 @@ + + +CSS Grid Layout Test: Self-Alignment and stretch on fixed-sized tracks + + + + + + + + + + + +
    +
    X XX X
    +
    XX X
    X XXX
    X
    XX XXX
    +
    X XX X
    +
    XX X
    X XXX
    X
    XX XXX
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-009.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-009.html new file mode 100644 index 00000000000..22bcc707e84 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-009.html @@ -0,0 +1,57 @@ + + +CSS Grid Layout Test: Self-Alignment and stretch on auto-sized tracks + + + + + + + + + + + +
    +
    XX X
    +
    XX X
    +
    XX X
    +
    XX X
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-010.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-010.html new file mode 100644 index 00000000000..02e138e8b0b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-010.html @@ -0,0 +1,61 @@ + + +CSS Grid Layout Test: Self-Alignment and stretch on auto-sized tracks + + + + + + + + + + + +
    +
    XX X
    +
    XX X
    +
    XX X
    +
    XX X
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-011.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-011.html new file mode 100644 index 00000000000..060e0251b05 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-011.html @@ -0,0 +1,62 @@ + + +CSS Grid Layout Test: Self-Alignment and stretch on auto-sized tracks + + + + + + + + + + + +
    +
    XX X
    +
    XX X
    +
    XX X
    +
    XX X
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-012.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-012.html new file mode 100644 index 00000000000..422d2eb0aaf --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-012.html @@ -0,0 +1,61 @@ + + +CSS Grid Layout Test: Self-Alignment and stretch on auto-sized tracks + + + + + + + + + + + +
    +
    XX X
    +
    XX X
    +
    XX X
    +
    XX X
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-013.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-013.html new file mode 100644 index 00000000000..ba88de03d1d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-013.html @@ -0,0 +1,58 @@ + + +CSS Grid Layout Test: Self-Alignment and stretch on auto-sized tracks + + + + + + + + + + + +
    +
    XX X
    +
    XX X
    +
    XX X
    +
    XX X
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-014.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-014.html new file mode 100644 index 00000000000..9b3d64d7591 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-014.html @@ -0,0 +1,62 @@ + + +CSS Grid Layout Test: Self-Alignment and stretch on auto-sized tracks + + + + + + + + + + + +
    +
    XX X
    +
    XX X
    +
    XX X
    +
    XX X
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-015.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-015.html new file mode 100644 index 00000000000..c7290f7ced6 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-015.html @@ -0,0 +1,63 @@ + + +CSS Grid Layout Test: Self-Alignment and stretch on auto-sized tracks + + + + + + + + + + + +
    +
    XX X
    +
    XX X
    +
    XX X
    +
    XX X
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-016.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-016.html new file mode 100644 index 00000000000..1365b709b3b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-016.html @@ -0,0 +1,61 @@ + + +CSS Grid Layout Test: Self-Alignment and stretch on auto-sized tracks + + + + + + + + + + +
    +
    XX X
    +
    XX X
    +
    XX X
    +
    XX X
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-001.html new file mode 100644 index 00000000000..ac300a5ee62 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-001.html @@ -0,0 +1,58 @@ + + +CSS Grid Layout Test: Self-Alignment and stretch on fixed-sized tracks + + + + + + + + + + + +
    +
    X XX X
    +
    XX X
    X XXX
    X
    XX XXX
    +
    X XX X
    +
    XX X
    X XXX
    X
    XX XXX
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-002.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-002.html new file mode 100644 index 00000000000..00e4ca70c3c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-002.html @@ -0,0 +1,62 @@ + + +CSS Grid Layout Test: Self-Alignment and stretch on fixed-sized tracks + + + + + + + + + + + +
    +
    X XX X
    +
    XX X
    X XXX
    X
    XX XXX
    +
    X XX X
    +
    XX X
    X XXX
    X
    XX XXX
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-003.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-003.html new file mode 100644 index 00000000000..dd961948ff3 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-003.html @@ -0,0 +1,63 @@ + + +CSS Grid Layout Test: Self-Alignment and stretch on fixed-sized tracks + + + + + + + + + + + +
    +
    X XX X
    +
    XX X
    X XXX
    X
    XX XXX
    +
    X XX X
    +
    XX X
    X XXX
    X
    XX XXX
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-004.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-004.html new file mode 100644 index 00000000000..8b5882ced71 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-004.html @@ -0,0 +1,62 @@ + + +CSS Grid Layout Test: Self-Alignment and stretch on fixed-sized tracks + + + + + + + + + + + +
    +
    X XX X
    +
    XX X
    X XXX
    X
    XX XXX
    +
    X XX X
    +
    XX X
    X XXX
    X
    XX XXX
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-005.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-005.html new file mode 100644 index 00000000000..4b29aa7c3b9 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-005.html @@ -0,0 +1,59 @@ + + +CSS Grid Layout Test: Self-Alignment and stretch on fixed-sized tracks + + + + + + + + + + + +
    +
    X XX X
    +
    XX X
    X XXX
    X
    XX XXX
    +
    X XX X
    +
    XX X
    X XXX
    X
    XX XXX
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-006.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-006.html new file mode 100644 index 00000000000..a72fbd13826 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-006.html @@ -0,0 +1,63 @@ + + +CSS Grid Layout Test: Self-Alignment and stretch on fixed-sized tracks + + + + + + + + + + + +
    +
    X XX X
    +
    XX X
    X XXX
    X
    XX XXX
    +
    X XX X
    +
    XX X
    X XXX
    X
    XX XXX
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-007.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-007.html new file mode 100644 index 00000000000..ab190d39a31 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-007.html @@ -0,0 +1,64 @@ + + +CSS Grid Layout Test: Self-Alignment and stretch on fixed-sized tracks + + + + + + + + + + + +
    +
    X XX X
    +
    XX X
    X XXX
    X
    XX XXX
    +
    X XX X
    +
    XX X
    X XXX
    X
    XX XXX
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-008.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-008.html new file mode 100644 index 00000000000..5be86531a6c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-008.html @@ -0,0 +1,63 @@ + + +CSS Grid Layout Test: Self-Alignment and stretch on fixed-sized tracks + + + + + + + + + + + +
    +
    X XX X
    +
    XX X
    X XXX
    X
    XX XXX
    +
    X XX X
    +
    XX X
    X XXX
    X
    XX XXX
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-009.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-009.html new file mode 100644 index 00000000000..f38ceb6af33 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-009.html @@ -0,0 +1,58 @@ + + +CSS Grid Layout Test: Self-Alignment and stretch on auto-sized tracks + + + + + + + + + + + +
    +
    XX X
    +
    XX X
    +
    XX X
    +
    XX X
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-010.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-010.html new file mode 100644 index 00000000000..6744c0573ec --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-010.html @@ -0,0 +1,62 @@ + + +CSS Grid Layout Test: Self-Alignment and stretch on auto-sized tracks + + + + + + + + + + + +
    +
    XX X
    +
    XX X
    +
    XX X
    +
    XX X
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-011.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-011.html new file mode 100644 index 00000000000..fa50dff5aa3 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-011.html @@ -0,0 +1,63 @@ + + +CSS Grid Layout Test: Self-Alignment and stretch on auto-sized tracks + + + + + + + + + + + +
    +
    XX X
    +
    XX X
    +
    XX X
    +
    XX X
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-012.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-012.html new file mode 100644 index 00000000000..94773382679 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-012.html @@ -0,0 +1,62 @@ + + +CSS Grid Layout Test: Self-Alignment and stretch on auto-sized tracks + + + + + + + + + + + +
    +
    XX X
    +
    XX X
    +
    XX X
    +
    XX X
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-013.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-013.html new file mode 100644 index 00000000000..25baada5b96 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-013.html @@ -0,0 +1,59 @@ + + +CSS Grid Layout Test: Self-Alignment and stretch on auto-sized tracks + + + + + + + + + + + +
    +
    XX X
    +
    XX X
    +
    XX X
    +
    XX X
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-014.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-014.html new file mode 100644 index 00000000000..19a8ede86f7 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-014.html @@ -0,0 +1,63 @@ + + +CSS Grid Layout Test: Self-Alignment and stretch on auto-sized tracks + + + + + + + + + + + +
    +
    XX X
    +
    XX X
    +
    XX X
    +
    XX X
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-015.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-015.html new file mode 100644 index 00000000000..45c8b757c9d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-015.html @@ -0,0 +1,64 @@ + + +CSS Grid Layout Test: Self-Alignment and stretch on auto-sized tracks + + + + + + + + + + + +
    +
    XX X
    +
    XX X
    +
    XX X
    +
    XX X
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-016.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-016.html new file mode 100644 index 00000000000..2a47e02d503 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-016.html @@ -0,0 +1,62 @@ + + +CSS Grid Layout Test: Self-Alignment and stretch on auto-sized tracks + + + + + + + + + + +
    +
    XX X
    +
    XX X
    +
    XX X
    +
    XX X
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-001.html new file mode 100644 index 00000000000..1afde93aa86 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-001.html @@ -0,0 +1,58 @@ + + +CSS Grid Layout Test: Self-Alignment and stretch on fixed-sized tracks + + + + + + + + + + + +
    +
    X XX X
    +
    XX X
    X XXX
    X
    XX XXX
    +
    X XX X
    +
    XX X
    X XXX
    X
    XX XXX
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-002.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-002.html new file mode 100644 index 00000000000..a7a1c97d224 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-002.html @@ -0,0 +1,62 @@ + + +CSS Grid Layout Test: Self-Alignment and stretch on fixed-sized tracks + + + + + + + + + + + +
    +
    X XX X
    +
    XX X
    X XXX
    X
    XX XXX
    +
    X XX X
    +
    XX X
    X XXX
    X
    XX XXX
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-003.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-003.html new file mode 100644 index 00000000000..96cbad39826 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-003.html @@ -0,0 +1,63 @@ + + +CSS Grid Layout Test: Self-Alignment and stretch on fixed-sized tracks + + + + + + + + + + + +
    +
    X XX X
    +
    XX X
    X XXX
    X
    XX XXX
    +
    X XX X
    +
    XX X
    X XXX
    X
    XX XXX
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-004.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-004.html new file mode 100644 index 00000000000..c93b7b6ebab --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-004.html @@ -0,0 +1,62 @@ + + +CSS Grid Layout Test: Self-Alignment and stretch on fixed-sized tracks + + + + + + + + + + + +
    +
    X XX X
    +
    XX X
    X XXX
    X
    XX XXX
    +
    X XX X
    +
    XX X
    X XXX
    X
    XX XXX
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-005.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-005.html new file mode 100644 index 00000000000..73f7a6fb9d6 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-005.html @@ -0,0 +1,59 @@ + + +CSS Grid Layout Test: Self-Alignment and stretch on fixed-sized tracks + + + + + + + + + + + +
    +
    X XX X
    +
    XX X
    X XXX
    X
    XX XXX
    +
    X XX X
    +
    XX X
    X XXX
    X
    XX XXX
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-006.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-006.html new file mode 100644 index 00000000000..0a6d003ff03 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-006.html @@ -0,0 +1,63 @@ + + +CSS Grid Layout Test: Self-Alignment and stretch on fixed-sized tracks + + + + + + + + + + + +
    +
    X XX X
    +
    XX X
    X XXX
    X
    XX XXX
    +
    X XX X
    +
    XX X
    X XXX
    X
    XX XXX
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-007.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-007.html new file mode 100644 index 00000000000..ac9231412f4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-007.html @@ -0,0 +1,64 @@ + + +CSS Grid Layout Test: Self-Alignment and stretch on fixed-sized tracks + + + + + + + + + + + +
    +
    X XX X
    +
    XX X
    X XXX
    X
    XX XXX
    +
    X XX X
    +
    XX X
    X XXX
    X
    XX XXX
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-008.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-008.html new file mode 100644 index 00000000000..4756ebad6db --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-008.html @@ -0,0 +1,63 @@ + + +CSS Grid Layout Test: Self-Alignment and stretch on fixed-sized tracks + + + + + + + + + + + +
    +
    X XX X
    +
    XX X
    X XXX
    X
    XX XXX
    +
    X XX X
    +
    XX X
    X XXX
    X
    XX XXX
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-009.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-009.html new file mode 100644 index 00000000000..4d05c9f5e0f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-009.html @@ -0,0 +1,58 @@ + + +CSS Grid Layout Test: Self-Alignment and stretch on auto-sized tracks + + + + + + + + + + + +
    +
    XX X
    +
    XX X
    +
    XX X
    +
    XX X
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-010.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-010.html new file mode 100644 index 00000000000..1cb5b8dc7c2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-010.html @@ -0,0 +1,62 @@ + + +CSS Grid Layout Test: Self-Alignment and stretch on auto-sized tracks + + + + + + + + + + + +
    +
    XX X
    +
    XX X
    +
    XX X
    +
    XX X
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-011.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-011.html new file mode 100644 index 00000000000..535d57c3a01 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-011.html @@ -0,0 +1,63 @@ + + +CSS Grid Layout Test: Self-Alignment and stretch on auto-sized tracks + + + + + + + + + + + +
    +
    XX X
    +
    XX X
    +
    XX X
    +
    XX X
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-012.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-012.html new file mode 100644 index 00000000000..8ed59c7fd74 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-012.html @@ -0,0 +1,62 @@ + + +CSS Grid Layout Test: Self-Alignment and stretch on auto-sized tracks + + + + + + + + + + + +
    +
    XX X
    +
    XX X
    +
    XX X
    +
    XX X
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-013.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-013.html new file mode 100644 index 00000000000..4070c2ec011 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-013.html @@ -0,0 +1,59 @@ + + +CSS Grid Layout Test: Self-Alignment and stretch on auto-sized tracks + + + + + + + + + + + +
    +
    XX X
    +
    XX X
    +
    XX X
    +
    XX X
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-014.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-014.html new file mode 100644 index 00000000000..d6a6b30d6e5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-014.html @@ -0,0 +1,63 @@ + + +CSS Grid Layout Test: Self-Alignment and stretch on auto-sized tracks + + + + + + + + + + + +
    +
    XX X
    +
    XX X
    +
    XX X
    +
    XX X
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-015.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-015.html new file mode 100644 index 00000000000..e6ef67df8f6 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-015.html @@ -0,0 +1,64 @@ + + +CSS Grid Layout Test: Self-Alignment and stretch on auto-sized tracks + + + + + + + + + + + +
    +
    XX X
    +
    XX X
    +
    XX X
    +
    XX X
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-016.html b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-016.html new file mode 100644 index 00000000000..5e26d1407ab --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-rl-016.html @@ -0,0 +1,62 @@ + + +CSS Grid Layout Test: Self-Alignment and stretch on auto-sized tracks + + + + + + + + + + +
    +
    XX X
    +
    XX X
    +
    XX X
    +
    XX X
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-inline-support-flexible-lengths-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-inline-support-flexible-lengths-001.html new file mode 100644 index 00000000000..65ddb8abd5e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-inline-support-flexible-lengths-001.html @@ -0,0 +1,100 @@ + + +CSS Grid Layout Test: Support flexible lengths for 'grid-template-columns' and 'grid-template-rows' properties within an inline grid + + + + + + + + +
    + +
    +
    +
    GRID ITEM
    +
    + + diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-inline-support-flexible-lengths-001.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-inline-support-flexible-lengths-001.xht deleted file mode 100644 index 5251e2ab55c..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-inline-support-flexible-lengths-001.xht +++ /dev/null @@ -1,105 +0,0 @@ - - - - CSS Grid Layout Test: Support flexible lengths for 'grid-template-columns' and 'grid-template-rows' properties within an inline grid - - - - - - - - - - -
    - -
    -
    -
    GRID ITEM
    -
    - - - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-inline-support-grid-template-areas-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-inline-support-grid-template-areas-001.html new file mode 100644 index 00000000000..d647c2613af --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-inline-support-grid-template-areas-001.html @@ -0,0 +1,72 @@ + + +CSS Grid Layout Test: Support for 'grid-template-ares' property within an inline grid + + + + + + + + +
    + +
    + + diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-inline-support-grid-template-areas-001.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-inline-support-grid-template-areas-001.xht deleted file mode 100644 index 0e119db47c5..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-inline-support-grid-template-areas-001.xht +++ /dev/null @@ -1,77 +0,0 @@ - - - - CSS Grid Layout Test: Support for 'grid-template-ares' property within an inline grid - - - - - - - - - - -
    - -
    - - - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-inline-support-grid-template-columns-rows-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-inline-support-grid-template-columns-rows-001.html new file mode 100644 index 00000000000..5a20c01c21b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-inline-support-grid-template-columns-rows-001.html @@ -0,0 +1,84 @@ + + +CSS Grid Layout Test: Support for 'grid-template-columns' and 'grid-template-rows' properties within an inline grid + + + + + + + + +
    + +
    +
    +
    GRID ITEM
    +
    + + diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-inline-support-grid-template-columns-rows-001.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-inline-support-grid-template-columns-rows-001.xht deleted file mode 100644 index 8f1f153dde7..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-inline-support-grid-template-columns-rows-001.xht +++ /dev/null @@ -1,89 +0,0 @@ - - - - CSS Grid Layout Test: Support for 'grid-template-columns' and 'grid-template-rows' properties within an inline grid - - - - - - - - - - -
    - -
    -
    -
    GRID ITEM
    -
    - - - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-inline-support-named-grid-lines-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-inline-support-named-grid-lines-001.html new file mode 100644 index 00000000000..3763315508f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-inline-support-named-grid-lines-001.html @@ -0,0 +1,118 @@ + + +CSS Grid Layout Test: Support for named grid lines in 'grid-template-columns' and 'grid-template-rows' properties within an inline grid + + + + + + + + +
    + +
    +
    +
    GRID ITEM
    +
    + + diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-inline-support-named-grid-lines-001.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-inline-support-named-grid-lines-001.xht deleted file mode 100644 index e1b273de142..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-inline-support-named-grid-lines-001.xht +++ /dev/null @@ -1,123 +0,0 @@ - - - - CSS Grid Layout Test: Support for named grid lines in 'grid-template-columns' and 'grid-template-rows' properties within an inline grid - - - - - - - - - - -
    - -
    -
    -
    GRID ITEM
    -
    - - - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-inline-support-repeat-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-inline-support-repeat-001.html new file mode 100644 index 00000000000..77afdf4636d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-inline-support-repeat-001.html @@ -0,0 +1,78 @@ + + +CSS Grid Layout Test: Support 'repeat()' notation for 'grid-template-columns' and 'grid-template-rows' properties within an inline grid + + + + + + + + +
    + +
    +
    +
    GRID ITEM
    +
    + + diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-inline-support-repeat-001.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-inline-support-repeat-001.xht deleted file mode 100644 index c0ae0dea62f..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-inline-support-repeat-001.xht +++ /dev/null @@ -1,83 +0,0 @@ - - - - CSS Grid Layout Test: Support 'repeat()' notation for 'grid-template-columns' and 'grid-template-rows' properties within an inline grid - - - - - - - - - - -
    - -
    -
    -
    GRID ITEM
    -
    - - - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-inline-template-columns-rows-resolved-values-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-inline-template-columns-rows-resolved-values-001.html new file mode 100644 index 00000000000..60badb47740 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-inline-template-columns-rows-resolved-values-001.html @@ -0,0 +1,102 @@ + + +CSS Grid Layout Test: 'grid-template-columns' and 'grid-template-rows' properties resolved values for implicit tracks in an inline grid + + + + + + + + +
    + +
    +
    FIRST ITEM
    +
    SECOND ITEM
    +
    THIRD
    ITEM
    +
    + +
    +
    FIRST ITEM
    +
    SECOND ITEM
    +
    THIRD
    ITEM
    +
    + +
    +
    FIRST ITEM
    +
    SECOND ITEM
    +
    THIRD
    ITEM
    +
    + +
    +
    FIRST ITEM
    +
    SECOND ITEM
    +
    THIRD
    ITEM
    +
    + + diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-inline-template-columns-rows-resolved-values-001.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-inline-template-columns-rows-resolved-values-001.xht deleted file mode 100644 index 39ab983e23c..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-inline-template-columns-rows-resolved-values-001.xht +++ /dev/null @@ -1,107 +0,0 @@ - - - - CSS Grid Layout Test: 'grid-template-columns' and 'grid-template-rows' properties resolved values for implicit tracks in an inline grid - - - - - - - - - - -
    - -
    -
    FIRST ITEM
    -
    SECOND ITEM
    -
    THIRD
    ITEM
    -
    - -
    -
    FIRST ITEM
    -
    SECOND ITEM
    -
    THIRD
    ITEM
    -
    - -
    -
    FIRST ITEM
    -
    SECOND ITEM
    -
    THIRD
    ITEM
    -
    - -
    -
    FIRST ITEM
    -
    SECOND ITEM
    -
    THIRD
    ITEM
    -
    - - - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-support-flexible-lengths-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-support-flexible-lengths-001.html new file mode 100644 index 00000000000..7c4e1c6c41e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-support-flexible-lengths-001.html @@ -0,0 +1,100 @@ + + +CSS Grid Layout Test: Support flexible lengths for 'grid-template-columns' and 'grid-template-rows' properties + + + + + + + + +
    + +
    +
    +
    GRID ITEM
    +
    + + diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-support-flexible-lengths-001.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-support-flexible-lengths-001.xht deleted file mode 100644 index dff2511569a..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-support-flexible-lengths-001.xht +++ /dev/null @@ -1,105 +0,0 @@ - - - - CSS Grid Layout Test: Support flexible lengths for 'grid-template-columns' and 'grid-template-rows' properties - - - - - - - - - - -
    - -
    -
    -
    GRID ITEM
    -
    - - - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-support-grid-template-areas-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-support-grid-template-areas-001.html new file mode 100644 index 00000000000..da29040b31b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-support-grid-template-areas-001.html @@ -0,0 +1,72 @@ + + +CSS Grid Layout Test: Support for 'grid-template-ares' property + + + + + + + + +
    + +
    + + diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-support-grid-template-areas-001.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-support-grid-template-areas-001.xht deleted file mode 100644 index 2f88e747f9d..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-support-grid-template-areas-001.xht +++ /dev/null @@ -1,77 +0,0 @@ - - - - CSS Grid Layout Test: Support for 'grid-template-ares' property - - - - - - - - - - -
    - -
    - - - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-support-grid-template-columns-rows-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-support-grid-template-columns-rows-001.html new file mode 100644 index 00000000000..a1c21a7b722 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-support-grid-template-columns-rows-001.html @@ -0,0 +1,84 @@ + + +CSS Grid Layout Test: Support for 'grid-template-columns' and 'grid-template-rows' properties + + + + + + + + +
    + +
    +
    +
    GRID ITEM
    +
    + + diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-support-grid-template-columns-rows-001.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-support-grid-template-columns-rows-001.xht deleted file mode 100644 index f10c42da17d..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-support-grid-template-columns-rows-001.xht +++ /dev/null @@ -1,89 +0,0 @@ - - - - CSS Grid Layout Test: Support for 'grid-template-columns' and 'grid-template-rows' properties - - - - - - - - - - -
    - -
    -
    -
    GRID ITEM
    -
    - - - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-support-named-grid-lines-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-support-named-grid-lines-001.html new file mode 100644 index 00000000000..f51b924c895 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-support-named-grid-lines-001.html @@ -0,0 +1,118 @@ + + +CSS Grid Layout Test: Support for named grid lines in 'grid-template-columns' and 'grid-template-rows' properties + + + + + + + + +
    + +
    +
    +
    GRID ITEM
    +
    + + diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-support-named-grid-lines-001.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-support-named-grid-lines-001.xht deleted file mode 100644 index fe998271fac..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-support-named-grid-lines-001.xht +++ /dev/null @@ -1,123 +0,0 @@ - - - - CSS Grid Layout Test: Support for named grid lines in 'grid-template-columns' and 'grid-template-rows' properties - - - - - - - - - - -
    - -
    -
    -
    GRID ITEM
    -
    - - - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-support-repeat-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-support-repeat-001.html new file mode 100644 index 00000000000..28415ab35c1 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-support-repeat-001.html @@ -0,0 +1,78 @@ + + +CSS Grid Layout Test: Support 'repeat()' notation for 'grid-template-columns' and 'grid-template-rows' properties + + + + + + + + +
    + +
    +
    +
    GRID ITEM
    +
    + + diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-support-repeat-001.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-support-repeat-001.xht deleted file mode 100644 index 1ab2fa46807..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-support-repeat-001.xht +++ /dev/null @@ -1,83 +0,0 @@ - - - - CSS Grid Layout Test: Support 'repeat()' notation for 'grid-template-columns' and 'grid-template-rows' properties - - - - - - - - - - -
    - -
    -
    -
    GRID ITEM
    -
    - - - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-template-columns-rows-resolved-values-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-template-columns-rows-resolved-values-001.html new file mode 100644 index 00000000000..89bdce4538e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-template-columns-rows-resolved-values-001.html @@ -0,0 +1,102 @@ + + +CSS Grid Layout Test: 'grid-template-columns' and 'grid-template-rows' properties resolved values for implicit tracks + + + + + + + + +
    + +
    +
    FIRST ITEM
    +
    SECOND ITEM
    +
    THIRD
    ITEM
    +
    + +
    +
    FIRST ITEM
    +
    SECOND ITEM
    +
    THIRD
    ITEM
    +
    + +
    +
    FIRST ITEM
    +
    SECOND ITEM
    +
    THIRD
    ITEM
    +
    + +
    +
    FIRST ITEM
    +
    SECOND ITEM
    +
    THIRD
    ITEM
    +
    + + diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-template-columns-rows-resolved-values-001.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-template-columns-rows-resolved-values-001.xht deleted file mode 100644 index 176e93ab7b7..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-definition/grid-template-columns-rows-resolved-values-001.xht +++ /dev/null @@ -1,107 +0,0 @@ - - - - CSS Grid Layout Test: 'grid-template-columns' and 'grid-template-rows' properties resolved values for implicit tracks - - - - - - - - - - -
    - -
    -
    FIRST ITEM
    -
    SECOND ITEM
    -
    THIRD
    ITEM
    -
    - -
    -
    FIRST ITEM
    -
    SECOND ITEM
    -
    THIRD
    ITEM
    -
    - -
    -
    FIRST ITEM
    -
    SECOND ITEM
    -
    THIRD
    ITEM
    -
    - -
    -
    FIRST ITEM
    -
    SECOND ITEM
    -
    THIRD
    ITEM
    -
    - - - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-items-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-items-001.html new file mode 100644 index 00000000000..4be8783f8e8 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-items-001.html @@ -0,0 +1,38 @@ + + +CSS Grid Layout Test: Regular and anonymous grid items within an inline grid + + + + + + +

    Test passes if there is a filled green square and no red.

    + +
    +
    +
    it
    + em +
    it
    + em +
    + it + em + it + em +
    + diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-items-001.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-items-001.xht deleted file mode 100644 index c6f165f79db..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-items-001.xht +++ /dev/null @@ -1,43 +0,0 @@ - - - - CSS Grid Layout Test: Regular and anonymous grid items within an inline grid - - - - - - - - -

    Test passes if there is a filled green square and no red.

    - -
    -
    -
    it
    - em -
    it
    - em -
    - it - em - it - em -
    - - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-items-002.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-items-002.html new file mode 100644 index 00000000000..0971433d724 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-items-002.html @@ -0,0 +1,50 @@ + + +CSS Grid Layout Test: Children of grid items do not create new items within an inline grid + + + + + + +

    Test passes if there is a filled green square and no red.

    + +
    +
    +
    +
    it
    + em +
    +
    + it +
    em
    +
    +
    + + it + + + em + + + it + + + em + +
    + diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-items-002.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-items-002.xht deleted file mode 100644 index 44034068dbf..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-items-002.xht +++ /dev/null @@ -1,55 +0,0 @@ - - - - CSS Grid Layout Test: Children of grid items do not create new items within an inline grid - - - - - - - - -

    Test passes if there is a filled green square and no red.

    - -
    -
    -
    -
    it
    - em -
    -
    - it -
    em
    -
    -
    - - it - - - em - - - it - - - em - -
    - - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-items-003.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-items-003.html new file mode 100644 index 00000000000..ddbec625d0b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-items-003.html @@ -0,0 +1,36 @@ + + +CSS Grid Layout Test: Grid items with 'display:none' are not rendered within an inline grid + + + + + +

    Test passes if there is a filled green square and no red.

    + +
    +
    + it + hidden + em +
    + diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-items-003.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-items-003.xht deleted file mode 100644 index 87eea104c0f..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-items-003.xht +++ /dev/null @@ -1,41 +0,0 @@ - - - - CSS Grid Layout Test: Grid items with 'display:none' are not rendered within an inline grid - - - - - - - -

    Test passes if there is a filled green square and no red.

    - -
    -
    - it - hidden - em -
    - - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-items-inline-blocks-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-items-inline-blocks-001.html new file mode 100644 index 00000000000..5eef1ff69b8 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-items-inline-blocks-001.html @@ -0,0 +1,33 @@ + + +CSS Grid Layout Test: Paint order of grid items within an inline grid is the same as inline blocks + + + + + +

    Test passes if there is a filled green square and no red.

    + +
    +
    R
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-items-inline-blocks-001.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-items-inline-blocks-001.xht deleted file mode 100644 index c65115eb14d..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-items-inline-blocks-001.xht +++ /dev/null @@ -1,38 +0,0 @@ - - - - CSS Grid Layout Test: Paint order of grid items within an inline grid is the same as inline blocks - - - - - - - -

    Test passes if there is a filled green square and no red.

    - -
    -
    R
    -
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-001.html new file mode 100644 index 00000000000..86ec8c2f9b8 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-001.html @@ -0,0 +1,52 @@ + + +CSS Grid Layout Test: 'order' property affects grid items auto-placement position within an inline grid + + + + + + +

    Test passes if there are four filled squares with the same size and no red.

    +

    Blue and yellow squares in the first line; lime and magenta squares in the second line (exactly in this order).

    + +
    +
    +
    M
    +
    L
    +
    Y
    +
    B
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-001.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-001.xht deleted file mode 100644 index a6b48444870..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-001.xht +++ /dev/null @@ -1,57 +0,0 @@ - - - - CSS Grid Layout Test: 'order' property affects grid items auto-placement position within an inline grid - - - - - - - - -

    Test passes if there are four filled squares with the same size and no red.

    -

    Blue and yellow squares in the first line; lime and magenta squares in the second line (exactly in this order).

    - -
    -
    -
    M
    -
    L
    -
    Y
    -
    B
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-002.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-002.html new file mode 100644 index 00000000000..cd5fb6a1a74 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-002.html @@ -0,0 +1,52 @@ + + +CSS Grid Layout Test: 'order' property affects grid items auto-placement position within an inline grid + + + + + + +

    Test passes if there are four filled squares with the same size and no red.

    +

    Blue and yellow squares in the first line; lime and magenta squares in the second line (exactly in this order).

    + +
    +
    +
    M
    +
    L
    +
    Y
    +
    B
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-002.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-002.xht deleted file mode 100644 index eaec647f085..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-002.xht +++ /dev/null @@ -1,57 +0,0 @@ - - - - CSS Grid Layout Test: 'order' property affects grid items auto-placement position within an inline grid - - - - - - - - -

    Test passes if there are four filled squares with the same size and no red.

    -

    Blue and yellow squares in the first line; lime and magenta squares in the second line (exactly in this order).

    - -
    -
    -
    M
    -
    L
    -
    Y
    -
    B
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-003.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-003.html new file mode 100644 index 00000000000..e2f38098e52 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-003.html @@ -0,0 +1,52 @@ + + +CSS Grid Layout Test: 'order' property affects grid items auto-placement position within an inline grid + + + + + + +

    Test passes if there are four filled squares with the same size and no red.

    +

    Blue and yellow squares in the first line; lime and magenta squares in the second line (exactly in this order).

    + +
    +
    +
    L
    +
    M
    +
    B
    +
    Y
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-003.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-003.xht deleted file mode 100644 index ae85ee0d778..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-003.xht +++ /dev/null @@ -1,57 +0,0 @@ - - - - CSS Grid Layout Test: 'order' property affects grid items auto-placement position within an inline grid - - - - - - - - -

    Test passes if there are four filled squares with the same size and no red.

    -

    Blue and yellow squares in the first line; lime and magenta squares in the second line (exactly in this order).

    - -
    -
    -
    L
    -
    M
    -
    B
    -
    Y
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-004.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-004.html new file mode 100644 index 00000000000..cb3e907e6fa --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-004.html @@ -0,0 +1,53 @@ + + +CSS Grid Layout Test: 'order' property affects grid items auto-placement position within an inline grid + + + + + + +

    Test passes if there are four filled squares with the same size and no red.

    +

    Blue and yellow squares in the first line; lime and magenta squares in the second line (exactly in this order).

    + +
    +
    +
    B
    +
    L
    +
    M
    +
    Y
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-004.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-004.xht deleted file mode 100644 index f7469f568f5..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-004.xht +++ /dev/null @@ -1,58 +0,0 @@ - - - - CSS Grid Layout Test: 'order' property affects grid items auto-placement position within an inline grid - - - - - - - - -

    Test passes if there are four filled squares with the same size and no red.

    -

    Blue and yellow squares in the first line; lime and magenta squares in the second line (exactly in this order).

    - -
    -
    -
    B
    -
    L
    -
    M
    -
    Y
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-005.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-005.html new file mode 100644 index 00000000000..56c931453ba --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-005.html @@ -0,0 +1,53 @@ + + +CSS Grid Layout Test: 'order' property affects grid items auto-placement position within an inline grid + + + + + + +

    Test passes if there are four filled squares with the same size and no red.

    +

    Blue and yellow squares in the first line; lime and magenta squares in the second line (exactly in this order).

    + +
    +
    +
    Y
    +
    M
    +
    B
    +
    L
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-005.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-005.xht deleted file mode 100644 index ef19449f92e..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-auto-placement-005.xht +++ /dev/null @@ -1,58 +0,0 @@ - - - - CSS Grid Layout Test: 'order' property affects grid items auto-placement position within an inline grid - - - - - - - - -

    Test passes if there are four filled squares with the same size and no red.

    -

    Blue and yellow squares in the first line; lime and magenta squares in the second line (exactly in this order).

    - -
    -
    -
    Y
    -
    M
    -
    B
    -
    L
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-painting-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-painting-001.html new file mode 100644 index 00000000000..a15a41897c5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-painting-001.html @@ -0,0 +1,33 @@ + + +CSS Grid Layout Test: 'order' property affects grid items painting order within an inline grid + + + + + + +

    Test passes if there is a filled green square and no red.

    + +
    +
    G
    +
    R
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-painting-001.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-painting-001.xht deleted file mode 100644 index c6e4996356d..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-painting-001.xht +++ /dev/null @@ -1,38 +0,0 @@ - - - - CSS Grid Layout Test: 'order' property affects grid items painting order within an inline grid - - - - - - - - -

    Test passes if there is a filled green square and no red.

    - -
    -
    G
    -
    R
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-painting-002.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-painting-002.html new file mode 100644 index 00000000000..1e9845d9971 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-painting-002.html @@ -0,0 +1,33 @@ + + +CSS Grid Layout Test: 'order' property affects grid items painting order within an inline grid + + + + + + +

    Test passes if there is a filled green square and no red.

    + +
    +
    G
    +
    R
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-painting-002.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-painting-002.xht deleted file mode 100644 index 1a03fb60744..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-painting-002.xht +++ /dev/null @@ -1,38 +0,0 @@ - - - - CSS Grid Layout Test: 'order' property affects grid items painting order within an inline grid - - - - - - - - -

    Test passes if there is a filled green square and no red.

    - -
    -
    G
    -
    R
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-painting-003.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-painting-003.html new file mode 100644 index 00000000000..5e10ba149cd --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-painting-003.html @@ -0,0 +1,34 @@ + + +CSS Grid Layout Test: 'order' property affects grid items painting order within an inline grid + + + + + + +

    Test passes if there is a filled green square and no red.

    + +
    +
    G
    +
    R
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-painting-003.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-painting-003.xht deleted file mode 100644 index b336e219e5e..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-painting-003.xht +++ /dev/null @@ -1,39 +0,0 @@ - - - - CSS Grid Layout Test: 'order' property affects grid items painting order within an inline grid - - - - - - - - -

    Test passes if there is a filled green square and no red.

    - -
    -
    G
    -
    R
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-painting-004.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-painting-004.html new file mode 100644 index 00000000000..57777cc9b91 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-painting-004.html @@ -0,0 +1,34 @@ + + +CSS Grid Layout Test: 'order' property affects grid items painting order within an inline grid + + + + + + +

    Test passes if there is a filled green square and no red.

    + +
    +
    G
    +
    R
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-painting-004.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-painting-004.xht deleted file mode 100644 index 187e1501246..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-painting-004.xht +++ /dev/null @@ -1,39 +0,0 @@ - - - - CSS Grid Layout Test: 'order' property affects grid items painting order within an inline grid - - - - - - - - -

    Test passes if there is a filled green square and no red.

    - -
    -
    G
    -
    R
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-painting-005.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-painting-005.html new file mode 100644 index 00000000000..7819115d4d6 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-painting-005.html @@ -0,0 +1,34 @@ + + +CSS Grid Layout Test: 'order' property affects grid items painting order within an inline grid + + + + + + +

    Test passes if there is a filled green square and no red.

    + +
    +
    G
    +
    R
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-painting-005.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-painting-005.xht deleted file mode 100644 index c49e388256f..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-order-property-painting-005.xht +++ /dev/null @@ -1,39 +0,0 @@ - - - - CSS Grid Layout Test: 'order' property affects grid items painting order within an inline grid - - - - - - - - -

    Test passes if there is a filled green square and no red.

    - -
    -
    G
    -
    R
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-001.html new file mode 100644 index 00000000000..96c416635eb --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-001.html @@ -0,0 +1,32 @@ + + +CSS Grid Layout Test: 'z-index' property controls the z-axis order of grid items within an inline grid + + + + + +

    Test passes if there is a filled green square and no red.

    + +
    +
    G
    +
    R
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-001.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-001.xht deleted file mode 100644 index 03c343bb73a..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-001.xht +++ /dev/null @@ -1,37 +0,0 @@ - - - - CSS Grid Layout Test: 'z-index' property controls the z-axis order of grid items within an inline grid - - - - - - - -

    Test passes if there is a filled green square and no red.

    - -
    -
    G
    -
    R
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-002.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-002.html new file mode 100644 index 00000000000..c2d3a359206 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-002.html @@ -0,0 +1,32 @@ + + +CSS Grid Layout Test: 'z-index' property controls the z-axis order of grid items within an inline grid + + + + + +

    Test passes if there is a filled green square and no red.

    + +
    +
    G
    +
    R
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-002.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-002.xht deleted file mode 100644 index cadc1a13eec..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-002.xht +++ /dev/null @@ -1,37 +0,0 @@ - - - - CSS Grid Layout Test: 'z-index' property controls the z-axis order of grid items within an inline grid - - - - - - - -

    Test passes if there is a filled green square and no red.

    - -
    -
    G
    -
    R
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-003.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-003.html new file mode 100644 index 00000000000..8c3ef546b42 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-003.html @@ -0,0 +1,33 @@ + + +CSS Grid Layout Test: 'z-index' property controls the z-axis order of grid items within an inline grid + + + + + +

    Test passes if there is a filled green square and no red.

    + +
    +
    G
    +
    R
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-003.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-003.xht deleted file mode 100644 index 84339d7ba55..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-003.xht +++ /dev/null @@ -1,38 +0,0 @@ - - - - CSS Grid Layout Test: 'z-index' property controls the z-axis order of grid items within an inline grid - - - - - - - -

    Test passes if there is a filled green square and no red.

    - -
    -
    G
    -
    R
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-004.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-004.html new file mode 100644 index 00000000000..977133512e0 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-004.html @@ -0,0 +1,33 @@ + + +CSS Grid Layout Test: 'z-index' property controls the z-axis order of grid items within an inline grid + + + + + +

    Test passes if there is a filled green square and no red.

    + +
    +
    G
    +
    R
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-004.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-004.xht deleted file mode 100644 index a61bd8d566f..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-004.xht +++ /dev/null @@ -1,38 +0,0 @@ - - - - CSS Grid Layout Test: 'z-index' property controls the z-axis order of grid items within an inline grid - - - - - - - -

    Test passes if there is a filled green square and no red.

    - -
    -
    G
    -
    R
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-005.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-005.html new file mode 100644 index 00000000000..2aaf6ced23b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-005.html @@ -0,0 +1,33 @@ + + +CSS Grid Layout Test: 'z-index' property controls the z-axis order of grid items within an inline grid + + + + + +

    Test passes if there is a filled green square and no red.

    + +
    +
    G
    +
    R
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-005.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-005.xht deleted file mode 100644 index a859b791509..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-005.xht +++ /dev/null @@ -1,38 +0,0 @@ - - - - CSS Grid Layout Test: 'z-index' property controls the z-axis order of grid items within an inline grid - - - - - - - -

    Test passes if there is a filled green square and no red.

    - -
    -
    G
    -
    R
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-001.html new file mode 100644 index 00000000000..eecdccdfd5a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-001.html @@ -0,0 +1,42 @@ + + +CSS Grid Layout Test: 'z-index' property controls the grid items stacking order within an inline grid + + + + + +

    Test passes if there are 3 filled squares with the same size, and green is overlapping yellow which is overlapping blue.

    + +
    +
    G
    +
    Y
    +
    B
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-001.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-001.xht deleted file mode 100644 index 2b49808f780..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-001.xht +++ /dev/null @@ -1,47 +0,0 @@ - - - - CSS Grid Layout Test: 'z-index' property controls the grid items stacking order within an inline grid - - - - - - - -

    Test passes if there are 3 filled squares with the same size, and green is overlapping yellow which is overlapping blue.

    - -
    -
    G
    -
    Y
    -
    B
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-002.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-002.html new file mode 100644 index 00000000000..7d17b6d86e3 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-002.html @@ -0,0 +1,43 @@ + + +CSS Grid Layout Test: 'z-index' property controls the grid items stacking order within an inline grid + + + + + +

    Test passes if there are 3 filled squares with the same size, and green is overlapping yellow which is overlapping blue.

    + +
    +
    G
    +
    Y
    +
    B
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-002.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-002.xht deleted file mode 100644 index d71ca194604..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-002.xht +++ /dev/null @@ -1,48 +0,0 @@ - - - - CSS Grid Layout Test: 'z-index' property controls the grid items stacking order within an inline grid - - - - - - - -

    Test passes if there are 3 filled squares with the same size, and green is overlapping yellow which is overlapping blue.

    - -
    -
    G
    -
    Y
    -
    B
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-003.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-003.html new file mode 100644 index 00000000000..ff3379b5009 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-003.html @@ -0,0 +1,43 @@ + + +CSS Grid Layout Test: 'z-index' property controls the grid items stacking order within an inline grid + + + + + +

    Test passes if there are 3 filled squares with the same size, and green is overlapping yellow which is overlapping blue.

    + +
    +
    G
    +
    Y
    +
    B
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-003.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-003.xht deleted file mode 100644 index 0847114b380..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-003.xht +++ /dev/null @@ -1,48 +0,0 @@ - - - - CSS Grid Layout Test: 'z-index' property controls the grid items stacking order within an inline grid - - - - - - - -

    Test passes if there are 3 filled squares with the same size, and green is overlapping yellow which is overlapping blue.

    - -
    -
    G
    -
    Y
    -
    B
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-004.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-004.html new file mode 100644 index 00000000000..72ef1688ef6 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-004.html @@ -0,0 +1,42 @@ + + +CSS Grid Layout Test: 'z-index' property controls the grid items stacking order within an inline grid + + + + + +

    Test passes if there are 3 filled squares with the same size, and green is overlapping yellow which is overlapping blue.

    + +
    +
    G
    +
    Y
    +
    B
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-004.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-004.xht deleted file mode 100644 index 56d5c18af44..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-004.xht +++ /dev/null @@ -1,47 +0,0 @@ - - - - CSS Grid Layout Test: 'z-index' property controls the grid items stacking order within an inline grid - - - - - - - -

    Test passes if there are 3 filled squares with the same size, and green is overlapping yellow which is overlapping blue.

    - -
    -
    G
    -
    Y
    -
    B
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-005.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-005.html new file mode 100644 index 00000000000..3fd60ad1efd --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-005.html @@ -0,0 +1,42 @@ + + +CSS Grid Layout Test: 'z-index' property controls the grid items stacking order within an inline grid + + + + + +

    Test passes if there are 3 filled squares with the same size, and green is overlapping yellow which is overlapping blue.

    + +
    +
    G
    +
    Y
    +
    B
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-005.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-005.xht deleted file mode 100644 index 724b7381a4b..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-005.xht +++ /dev/null @@ -1,47 +0,0 @@ - - - - CSS Grid Layout Test: 'z-index' property controls the grid items stacking order within an inline grid - - - - - - - -

    Test passes if there are 3 filled squares with the same size, and green is overlapping yellow which is overlapping blue.

    - -
    -
    G
    -
    Y
    -
    B
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-006.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-006.html new file mode 100644 index 00000000000..17a2e4eb3b1 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-006.html @@ -0,0 +1,48 @@ + + +CSS Grid Layout Test: 'z-index' property controls the grid items stacking order within an inline grid + + + + + +

    Test passes if there are 3 filled squares with the same size, and green is overlapping yellow which is overlapping blue.

    + +
    +
    G
    +
    Y
    +
    B
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-006.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-006.xht deleted file mode 100644 index 3d340dd64e2..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-inline-z-axis-ordering-overlapped-items-006.xht +++ /dev/null @@ -1,53 +0,0 @@ - - - - CSS Grid Layout Test: 'z-index' property controls the grid items stacking order within an inline grid - - - - - - - -

    Test passes if there are 3 filled squares with the same size, and green is overlapping yellow which is overlapping blue.

    - -
    -
    G
    -
    Y
    -
    B
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-items-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-items-001.html new file mode 100644 index 00000000000..99701de8a36 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-items-001.html @@ -0,0 +1,42 @@ + + +CSS Grid Layout Test: Regular and anonymous grid items + + + + + + +

    Test passes if there is a filled green square and no red.

    + +
    +
    +
    it
    + em +
    it
    + em +
    +
    + it + em + it + em +
    + diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-items-001.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-items-001.xht deleted file mode 100644 index 7cacd220b6b..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-items-001.xht +++ /dev/null @@ -1,47 +0,0 @@ - - - - CSS Grid Layout Test: Regular and anonymous grid items - - - - - - - - -

    Test passes if there is a filled green square and no red.

    - -
    -
    -
    it
    - em -
    it
    - em -
    -
    - it - em - it - em -
    - - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-items-002.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-items-002.html new file mode 100644 index 00000000000..23f5eff78fb --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-items-002.html @@ -0,0 +1,51 @@ + + +CSS Grid Layout Test: Children of grid items do not create new items + + + + + + +

    Test passes if there is a filled green square and no red.

    + +
    +
    +
    +
    it
    + em +
    +
    + it +
    em
    +
    +
    +
    + + item + + + item + +
    + diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-items-002.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-items-002.xht deleted file mode 100644 index 19e86b64e03..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-items-002.xht +++ /dev/null @@ -1,56 +0,0 @@ - - - - CSS Grid Layout Test: Children of grid items do not create new items - - - - - - - - -

    Test passes if there is a filled green square and no red.

    - -
    -
    -
    -
    it
    - em -
    -
    - it -
    em
    -
    -
    -
    - - item - - - item - -
    - - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-items-003.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-items-003.html new file mode 100644 index 00000000000..247e2d9a43d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-items-003.html @@ -0,0 +1,36 @@ + + +CSS Grid Layout Test: Grid items with 'display:none' are not rendered + + + + + +

    Test passes if there is a filled green square and no red.

    + +
    +
    + it + hidden + em +
    + diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-items-003.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-items-003.xht deleted file mode 100644 index a9bdff252dc..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-items-003.xht +++ /dev/null @@ -1,41 +0,0 @@ - - - - CSS Grid Layout Test: Grid items with 'display:none' are not rendered - - - - - - - -

    Test passes if there is a filled green square and no red.

    - -
    -
    - it - hidden - em -
    - - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-items-inline-blocks-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-items-inline-blocks-001.html new file mode 100644 index 00000000000..4b15d0b8952 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-items-inline-blocks-001.html @@ -0,0 +1,33 @@ + + +CSS Grid Layout Test: Paint order of grid items is the same as inline blocks + + + + + +

    Test passes if there is a filled green square and no red.

    + +
    +
    R
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-items-inline-blocks-001.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-items-inline-blocks-001.xht deleted file mode 100644 index 90c75206163..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-items-inline-blocks-001.xht +++ /dev/null @@ -1,38 +0,0 @@ - - - - CSS Grid Layout Test: Paint order of grid items is the same as inline blocks - - - - - - - -

    Test passes if there is a filled green square and no red.

    - -
    -
    R
    -
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-001.html new file mode 100644 index 00000000000..46abffd960a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-001.html @@ -0,0 +1,36 @@ + + +CSS Grid Layout Test: Minimum size of grid items + + + + + + +

    Test passes if there is a filled green square and no red.

    + +
    +
    +
    IT E
    +
    + diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-001.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-001.xht deleted file mode 100644 index b625c9f78d9..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-001.xht +++ /dev/null @@ -1,41 +0,0 @@ - - - - CSS Grid Layout Test: Minimum size of grid items - - - - - - - - -

    Test passes if there is a filled green square and no red.

    - -
    -
    -
    IT E
    -
    - - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-002.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-002.html new file mode 100644 index 00000000000..39b9d033a4b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-002.html @@ -0,0 +1,40 @@ + + +CSS Grid Layout Test: Minimum size of grid items + + + + + +

    Test passes if there is a filled green square and no red.

    + +
    +
    +
    +
    +
    +
    + diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-002.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-002.xht deleted file mode 100644 index 1adb1a60b98..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-002.xht +++ /dev/null @@ -1,45 +0,0 @@ - - - - CSS Grid Layout Test: Minimum size of grid items - - - - - - - -

    Test passes if there is a filled green square and no red.

    - -
    -
    -
    -
    -
    -
    - - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-003.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-003.html new file mode 100644 index 00000000000..19ea84c549e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-003.html @@ -0,0 +1,42 @@ + + +CSS Grid Layout Test: Minimum size of grid items + + + + + +

    Test passes if there is a filled green square and no red.

    + +
    +
    +
    +
    +
    +
    + diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-003.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-003.xht deleted file mode 100644 index 0e198e0e283..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-003.xht +++ /dev/null @@ -1,47 +0,0 @@ - - - - CSS Grid Layout Test: Minimum size of grid items - - - - - - - -

    Test passes if there is a filled green square and no red.

    - -
    -
    -
    -
    -
    -
    - - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-004.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-004.html new file mode 100644 index 00000000000..34764652a7a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-004.html @@ -0,0 +1,42 @@ + + +CSS Grid Layout Test: Minimum size of grid items + + + + + +

    Test passes if there is a filled green square and no red.

    + +
    +
    +
    +
    +
    +
    + diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-004.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-004.xht deleted file mode 100644 index 683dd643fe3..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-004.xht +++ /dev/null @@ -1,47 +0,0 @@ - - - - CSS Grid Layout Test: Minimum size of grid items - - - - - - - -

    Test passes if there is a filled green square and no red.

    - -
    -
    -
    -
    -
    -
    - - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-005.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-005.html new file mode 100644 index 00000000000..d7ac67af4d1 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-005.html @@ -0,0 +1,30 @@ + + +CSS Grid Layout Test: Minimum size of grid items + + + + + + +

    Test passes if there is a filled green square and no red.

    + +
    +
    + Image download support must be enabled +
    + diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-005.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-005.xht deleted file mode 100644 index d9b0bf8f2f1..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-005.xht +++ /dev/null @@ -1,35 +0,0 @@ - - - - CSS Grid Layout Test: Minimum size of grid items - - - - - - - - -

    Test passes if there is a filled green square and no red.

    - -
    -
    - Image download support must be enabled -
    - - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-006.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-006.html new file mode 100644 index 00000000000..1f0086eac76 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-006.html @@ -0,0 +1,34 @@ + + +CSS Grid Layout Test: Minimum size of grid items + + + + + + +

    Test passes if there is a filled green square and no red.

    + +
    +
    + Image download support must be enabled +
    + diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-006.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-006.xht deleted file mode 100644 index 2aa8582edaa..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-006.xht +++ /dev/null @@ -1,39 +0,0 @@ - - - - CSS Grid Layout Test: Minimum size of grid items - - - - - - - - -

    Test passes if there is a filled green square and no red.

    - -
    -
    - Image download support must be enabled -
    - - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-007.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-007.html new file mode 100644 index 00000000000..6f13d8b0835 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-007.html @@ -0,0 +1,36 @@ + + +CSS Grid Layout Test: Minimum size of grid items + + + + + + +

    Test passes if there is a filled green square and no red.

    + +
    +
    + Image download support must be enabled +
    + diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-007.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-007.xht deleted file mode 100644 index e5376d5258c..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-007.xht +++ /dev/null @@ -1,41 +0,0 @@ - - - - CSS Grid Layout Test: Minimum size of grid items - - - - - - - - -

    Test passes if there is a filled green square and no red.

    - -
    -
    - Image download support must be enabled -
    - - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-008.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-008.html new file mode 100644 index 00000000000..b69070c4c16 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-008.html @@ -0,0 +1,34 @@ + + +CSS Grid Layout Test: Minimum size of grid items + + + + + + +

    Test passes if there is a filled green square and no red.

    + +
    +
    + Image download support must be enabled +
    + diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-008.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-008.xht deleted file mode 100644 index 304ba2eeef3..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-008.xht +++ /dev/null @@ -1,39 +0,0 @@ - - - - CSS Grid Layout Test: Minimum size of grid items - - - - - - - - -

    Test passes if there is a filled green square and no red.

    - -
    -
    - Image download support must be enabled -
    - - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-009.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-009.html new file mode 100644 index 00000000000..e0239cf37a5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-009.html @@ -0,0 +1,36 @@ + + +CSS Grid Layout Test: Minimum size of grid items + + + + + + +

    Test passes if there is a filled green square and no red.

    + +
    +
    + Image download support must be enabled +
    + diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-009.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-009.xht deleted file mode 100644 index 2e203044969..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-009.xht +++ /dev/null @@ -1,41 +0,0 @@ - - - - CSS Grid Layout Test: Minimum size of grid items - - - - - - - - -

    Test passes if there is a filled green square and no red.

    - -
    -
    - Image download support must be enabled -
    - - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-021.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-021.html new file mode 100644 index 00000000000..d05e3e5e2b9 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-minimum-size-grid-items-021.html @@ -0,0 +1,214 @@ + + +CSS Grid Layout Test: Minimum size of grid items + + + + + + + + + + +
    + + + +
    + +
    + +
    + +
    + +
    + +
    + +
    + +
    + +
    + +
    + +
    + +
    + + + +
    + +
    ITEM
    +
    + +
    + +
    ITEM
    +
    + +
    + +
    ITEM
    +
    + +
    + +
    ITEM
    +
    + +
    + +
    ITEM
    +
    + +
    + +
    ITEM
    +
    + + + +
    + +
    + +
    + +
    + +
    + +
    + +
    + +
    + +
    + +
    + +
    + +
    + + + +
    + +
    ITEM
    +
    + +
    + +
    ITEM
    +
    + +
    + +
    ITEM
    +
    + +
    + +
    ITEM
    +
    + +
    + +
    ITEM
    +
    + +
    + +
    ITEM
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-auto-placement-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-auto-placement-001.html new file mode 100644 index 00000000000..8928fa1a420 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-auto-placement-001.html @@ -0,0 +1,54 @@ + + +CSS Grid Layout Test: 'order' property affects grid items auto-placement position + + + + + + +

    Test passes if there are four filled squares with the same size and no red.

    +

    Blue and yellow squares in the first line; lime and magenta squares in the second line (exactly in this order).

    + +
    +
    +
    M
    +
    L
    +
    Y
    +
    B
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-auto-placement-001.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-auto-placement-001.xht deleted file mode 100644 index 138668f7dc8..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-auto-placement-001.xht +++ /dev/null @@ -1,59 +0,0 @@ - - - - CSS Grid Layout Test: 'order' property affects grid items auto-placement position - - - - - - - - -

    Test passes if there are four filled squares with the same size and no red.

    -

    Blue and yellow squares in the first line; lime and magenta squares in the second line (exactly in this order).

    - -
    -
    -
    M
    -
    L
    -
    Y
    -
    B
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-auto-placement-002.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-auto-placement-002.html new file mode 100644 index 00000000000..3482592b5b8 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-auto-placement-002.html @@ -0,0 +1,54 @@ + + +CSS Grid Layout Test: 'order' property affects grid items auto-placement position + + + + + + +

    Test passes if there are four filled squares with the same size and no red.

    +

    Blue and yellow squares in the first line; lime and magenta squares in the second line (exactly in this order).

    + +
    +
    +
    M
    +
    L
    +
    Y
    +
    B
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-auto-placement-002.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-auto-placement-002.xht deleted file mode 100644 index a3948fab182..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-auto-placement-002.xht +++ /dev/null @@ -1,59 +0,0 @@ - - - - CSS Grid Layout Test: 'order' property affects grid items auto-placement position - - - - - - - - -

    Test passes if there are four filled squares with the same size and no red.

    -

    Blue and yellow squares in the first line; lime and magenta squares in the second line (exactly in this order).

    - -
    -
    -
    M
    -
    L
    -
    Y
    -
    B
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-auto-placement-003.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-auto-placement-003.html new file mode 100644 index 00000000000..811b1d90d0a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-auto-placement-003.html @@ -0,0 +1,54 @@ + + +CSS Grid Layout Test: 'order' property affects grid items auto-placement position + + + + + + +

    Test passes if there are four filled squares with the same size and no red.

    +

    Blue and yellow squares in the first line; lime and magenta squares in the second line (exactly in this order).

    + +
    +
    +
    L
    +
    M
    +
    B
    +
    Y
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-auto-placement-003.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-auto-placement-003.xht deleted file mode 100644 index 20adcdab146..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-auto-placement-003.xht +++ /dev/null @@ -1,59 +0,0 @@ - - - - CSS Grid Layout Test: 'order' property affects grid items auto-placement position - - - - - - - - -

    Test passes if there are four filled squares with the same size and no red.

    -

    Blue and yellow squares in the first line; lime and magenta squares in the second line (exactly in this order).

    - -
    -
    -
    L
    -
    M
    -
    B
    -
    Y
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-auto-placement-004.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-auto-placement-004.html new file mode 100644 index 00000000000..83e62fdf162 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-auto-placement-004.html @@ -0,0 +1,55 @@ + + +CSS Grid Layout Test: 'order' property affects grid items auto-placement position + + + + + + +

    Test passes if there are four filled squares with the same size and no red.

    +

    Blue and yellow squares in the first line; lime and magenta squares in the second line (exactly in this order).

    + +
    +
    +
    B
    +
    L
    +
    M
    +
    Y
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-auto-placement-004.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-auto-placement-004.xht deleted file mode 100644 index 283e5d7218d..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-auto-placement-004.xht +++ /dev/null @@ -1,60 +0,0 @@ - - - - CSS Grid Layout Test: 'order' property affects grid items auto-placement position - - - - - - - - -

    Test passes if there are four filled squares with the same size and no red.

    -

    Blue and yellow squares in the first line; lime and magenta squares in the second line (exactly in this order).

    - -
    -
    -
    B
    -
    L
    -
    M
    -
    Y
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-auto-placement-005.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-auto-placement-005.html new file mode 100644 index 00000000000..cf994128d35 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-auto-placement-005.html @@ -0,0 +1,55 @@ + + +CSS Grid Layout Test: 'order' property affects grid items auto-placement position + + + + + + +

    Test passes if there are four filled squares with the same size and no red.

    +

    Blue and yellow squares in the first line; lime and magenta squares in the second line (exactly in this order).

    + +
    +
    +
    Y
    +
    M
    +
    B
    +
    L
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-auto-placement-005.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-auto-placement-005.xht deleted file mode 100644 index 9b624b3ec3c..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-auto-placement-005.xht +++ /dev/null @@ -1,60 +0,0 @@ - - - - CSS Grid Layout Test: 'order' property affects grid items auto-placement position - - - - - - - - -

    Test passes if there are four filled squares with the same size and no red.

    -

    Blue and yellow squares in the first line; lime and magenta squares in the second line (exactly in this order).

    - -
    -
    -
    Y
    -
    M
    -
    B
    -
    L
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-painting-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-painting-001.html new file mode 100644 index 00000000000..df6a0f5c868 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-painting-001.html @@ -0,0 +1,33 @@ + + +CSS Grid Layout Test: 'order' property affects grid items painting order + + + + + + +

    Test passes if there is a filled green square and no red.

    + +
    +
    G
    +
    R
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-painting-001.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-painting-001.xht deleted file mode 100644 index 0764753b3ef..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-painting-001.xht +++ /dev/null @@ -1,38 +0,0 @@ - - - - CSS Grid Layout Test: 'order' property affects grid items painting order - - - - - - - - -

    Test passes if there is a filled green square and no red.

    - -
    -
    G
    -
    R
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-painting-002.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-painting-002.html new file mode 100644 index 00000000000..0429c6fe4b5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-painting-002.html @@ -0,0 +1,33 @@ + + +CSS Grid Layout Test: 'order' property affects grid items painting order + + + + + + +

    Test passes if there is a filled green square and no red.

    + +
    +
    G
    +
    R
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-painting-002.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-painting-002.xht deleted file mode 100644 index 634274ace5b..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-painting-002.xht +++ /dev/null @@ -1,38 +0,0 @@ - - - - CSS Grid Layout Test: 'order' property affects grid items painting order - - - - - - - - -

    Test passes if there is a filled green square and no red.

    - -
    -
    G
    -
    R
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-painting-003.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-painting-003.html new file mode 100644 index 00000000000..8dc22cfb13f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-painting-003.html @@ -0,0 +1,34 @@ + + +CSS Grid Layout Test: 'order' property affects grid items painting order + + + + + + +

    Test passes if there is a filled green square and no red.

    + +
    +
    G
    +
    R
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-painting-003.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-painting-003.xht deleted file mode 100644 index 36558494a51..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-painting-003.xht +++ /dev/null @@ -1,39 +0,0 @@ - - - - CSS Grid Layout Test: 'order' property affects grid items painting order - - - - - - - - -

    Test passes if there is a filled green square and no red.

    - -
    -
    G
    -
    R
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-painting-004.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-painting-004.html new file mode 100644 index 00000000000..209b8fbc4c8 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-painting-004.html @@ -0,0 +1,34 @@ + + +CSS Grid Layout Test: 'order' property affects grid items painting order + + + + + + +

    Test passes if there is a filled green square and no red.

    + +
    +
    G
    +
    R
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-painting-004.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-painting-004.xht deleted file mode 100644 index 0831f1fc015..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-painting-004.xht +++ /dev/null @@ -1,39 +0,0 @@ - - - - CSS Grid Layout Test: 'order' property affects grid items painting order - - - - - - - - -

    Test passes if there is a filled green square and no red.

    - -
    -
    G
    -
    R
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-painting-005.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-painting-005.html new file mode 100644 index 00000000000..3262ce13fab --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-painting-005.html @@ -0,0 +1,34 @@ + + +CSS Grid Layout Test: 'order' property affects grid items painting order + + + + + + +

    Test passes if there is a filled green square and no red.

    + +
    +
    G
    +
    R
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-painting-005.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-painting-005.xht deleted file mode 100644 index 75941e68c6d..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-order-property-painting-005.xht +++ /dev/null @@ -1,39 +0,0 @@ - - - - CSS Grid Layout Test: 'order' property affects grid items painting order - - - - - - - - -

    Test passes if there is a filled green square and no red.

    - -
    -
    G
    -
    R
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-001.html new file mode 100644 index 00000000000..767b9e1b67d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-001.html @@ -0,0 +1,32 @@ + + +CSS Grid Layout Test: 'z-index' property controls the z-axis order of grid items + + + + + +

    Test passes if there is a filled green square and no red.

    + +
    +
    G
    +
    R
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-001.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-001.xht deleted file mode 100644 index cbabf8ef3ca..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-001.xht +++ /dev/null @@ -1,37 +0,0 @@ - - - - CSS Grid Layout Test: 'z-index' property controls the z-axis order of grid items - - - - - - - -

    Test passes if there is a filled green square and no red.

    - -
    -
    G
    -
    R
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-002.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-002.html new file mode 100644 index 00000000000..95fa7442919 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-002.html @@ -0,0 +1,32 @@ + + +CSS Grid Layout Test: 'z-index' property controls the z-axis order of grid items + + + + + +

    Test passes if there is a filled green square and no red.

    + +
    +
    G
    +
    R
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-002.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-002.xht deleted file mode 100644 index 00d3c02f93f..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-002.xht +++ /dev/null @@ -1,37 +0,0 @@ - - - - CSS Grid Layout Test: 'z-index' property controls the z-axis order of grid items - - - - - - - -

    Test passes if there is a filled green square and no red.

    - -
    -
    G
    -
    R
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-003.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-003.html new file mode 100644 index 00000000000..853b5f57e73 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-003.html @@ -0,0 +1,33 @@ + + +CSS Grid Layout Test: 'z-index' property controls the z-axis order of grid items + + + + + +

    Test passes if there is a filled green square and no red.

    + +
    +
    G
    +
    R
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-003.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-003.xht deleted file mode 100644 index 12eae1352d5..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-003.xht +++ /dev/null @@ -1,38 +0,0 @@ - - - - CSS Grid Layout Test: 'z-index' property controls the z-axis order of grid items - - - - - - - -

    Test passes if there is a filled green square and no red.

    - -
    -
    G
    -
    R
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-004.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-004.html new file mode 100644 index 00000000000..25447a42fe8 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-004.html @@ -0,0 +1,33 @@ + + +CSS Grid Layout Test: 'z-index' property controls the z-axis order of grid items + + + + + +

    Test passes if there is a filled green square and no red.

    + +
    +
    G
    +
    R
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-004.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-004.xht deleted file mode 100644 index 04e3f06dfda..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-004.xht +++ /dev/null @@ -1,38 +0,0 @@ - - - - CSS Grid Layout Test: 'z-index' property controls the z-axis order of grid items - - - - - - - -

    Test passes if there is a filled green square and no red.

    - -
    -
    G
    -
    R
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-005.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-005.html new file mode 100644 index 00000000000..2a08020ffe3 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-005.html @@ -0,0 +1,33 @@ + + +CSS Grid Layout Test: 'z-index' property controls the z-axis order of grid items + + + + + +

    Test passes if there is a filled green square and no red.

    + +
    +
    G
    +
    R
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-005.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-005.xht deleted file mode 100644 index 31c67564262..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-005.xht +++ /dev/null @@ -1,38 +0,0 @@ - - - - CSS Grid Layout Test: 'z-index' property controls the z-axis order of grid items - - - - - - - -

    Test passes if there is a filled green square and no red.

    - -
    -
    G
    -
    R
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-001.html new file mode 100644 index 00000000000..54a0854b491 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-001.html @@ -0,0 +1,42 @@ + + +CSS Grid Layout Test: 'z-index' property controls the grid items stacking order + + + + + +

    Test passes if there are 3 filled squares with the same size, and green is overlapping yellow which is overlapping blue.

    + +
    +
    G
    +
    Y
    +
    B
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-001.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-001.xht deleted file mode 100644 index c44dda44064..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-001.xht +++ /dev/null @@ -1,47 +0,0 @@ - - - - CSS Grid Layout Test: 'z-index' property controls the grid items stacking order - - - - - - - -

    Test passes if there are 3 filled squares with the same size, and green is overlapping yellow which is overlapping blue.

    - -
    -
    G
    -
    Y
    -
    B
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-002.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-002.html new file mode 100644 index 00000000000..c1120880aa3 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-002.html @@ -0,0 +1,43 @@ + + +CSS Grid Layout Test: 'z-index' property controls the grid items stacking order + + + + + +

    Test passes if there are 3 filled squares with the same size, and green is overlapping yellow which is overlapping blue.

    + +
    +
    G
    +
    Y
    +
    B
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-002.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-002.xht deleted file mode 100644 index f630f7fb2f3..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-002.xht +++ /dev/null @@ -1,48 +0,0 @@ - - - - CSS Grid Layout Test: 'z-index' property controls the grid items stacking order - - - - - - - -

    Test passes if there are 3 filled squares with the same size, and green is overlapping yellow which is overlapping blue.

    - -
    -
    G
    -
    Y
    -
    B
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-003.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-003.html new file mode 100644 index 00000000000..c604b2babb3 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-003.html @@ -0,0 +1,43 @@ + + +CSS Grid Layout Test: 'z-index' property controls the grid items stacking order + + + + + +

    Test passes if there are 3 filled squares with the same size, and green is overlapping yellow which is overlapping blue.

    + +
    +
    G
    +
    Y
    +
    B
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-003.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-003.xht deleted file mode 100644 index 357945af261..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-003.xht +++ /dev/null @@ -1,48 +0,0 @@ - - - - CSS Grid Layout Test: 'z-index' property controls the grid items stacking order - - - - - - - -

    Test passes if there are 3 filled squares with the same size, and green is overlapping yellow which is overlapping blue.

    - -
    -
    G
    -
    Y
    -
    B
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-004.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-004.html new file mode 100644 index 00000000000..1abf2ca0bea --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-004.html @@ -0,0 +1,42 @@ + + +CSS Grid Layout Test: 'z-index' property controls the grid items stacking order + + + + + +

    Test passes if there are 3 filled squares with the same size, and green is overlapping yellow which is overlapping blue.

    + +
    +
    G
    +
    Y
    +
    B
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-004.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-004.xht deleted file mode 100644 index 1186d26d73c..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-004.xht +++ /dev/null @@ -1,47 +0,0 @@ - - - - CSS Grid Layout Test: 'z-index' property controls the grid items stacking order - - - - - - - -

    Test passes if there are 3 filled squares with the same size, and green is overlapping yellow which is overlapping blue.

    - -
    -
    G
    -
    Y
    -
    B
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-005.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-005.html new file mode 100644 index 00000000000..359831dc6be --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-005.html @@ -0,0 +1,42 @@ + + +CSS Grid Layout Test: 'z-index' property controls the grid items stacking order + + + + + +

    Test passes if there are 3 filled squares with the same size, and green is overlapping yellow which is overlapping blue.

    + +
    +
    G
    +
    Y
    +
    B
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-005.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-005.xht deleted file mode 100644 index 4873c05d213..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-005.xht +++ /dev/null @@ -1,47 +0,0 @@ - - - - CSS Grid Layout Test: 'z-index' property controls the grid items stacking order - - - - - - - -

    Test passes if there are 3 filled squares with the same size, and green is overlapping yellow which is overlapping blue.

    - -
    -
    G
    -
    Y
    -
    B
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-006.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-006.html new file mode 100644 index 00000000000..1a7afa8fd64 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-006.html @@ -0,0 +1,48 @@ + + +CSS Grid Layout Test: 'z-index' property controls the grid items stacking order + + + + + +

    Test passes if there are 3 filled squares with the same size, and green is overlapping yellow which is overlapping blue.

    + +
    +
    G
    +
    Y
    +
    B
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-006.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-006.xht deleted file mode 100644 index 6f69f102e62..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/grid-z-axis-ordering-overlapped-items-006.xht +++ /dev/null @@ -1,53 +0,0 @@ - - - - CSS Grid Layout Test: 'z-index' property controls the grid items stacking order - - - - - - - -

    Test passes if there are 3 filled squares with the same size, and green is overlapping yellow which is overlapping blue.

    - -
    -
    G
    -
    Y
    -
    B
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/support/500x500-green.png b/tests/wpt/web-platform-tests/css/css-grid-1/grid-items/support/500x500-green.png new file mode 100644 index 0000000000000000000000000000000000000000..cdd928e6be84d0bf60a25790619bab99ae144d9f GIT binary patch literal 1520 zcmeAS@N?(olHy`uVBq!ia0y~yVEh8Y985qFmn|N5ffQ$fM`SSr1Gg{;GcwGYBLNg- zFY)wsWq-)R!Y!{>p<_M?C?uO15>euupPQSSR|4cRFgO>bCYGe8D3oWGWGJ|M`Ua%v zrLr?Hu%>ysIEGZ*dV9rDkb!~Y@P@{sC5suDW0V&5hp92xToz)OVa@Q2uVE*1!aE=n zMni;9q<}(TC2-XUU07738U)mcq8inpQETDhKN`r;gh((+&DhO?FHNB&H(+8!Ny?*% n6A{XzSrJt3VM%VJWW^Y<;{q%hfiaF7Kt-{qtDnm{r-UW|qT)p_ literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-computed-value-display-floated-items-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-computed-value-display-floated-items-001.html new file mode 100644 index 00000000000..17c0fbd1b18 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-computed-value-display-floated-items-001.html @@ -0,0 +1,82 @@ + + +CSS Grid Layout Test: 'float' affects to the computed value of 'display' on grid items + + + + + + + +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-computed-value-display-floated-items-001.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-computed-value-display-floated-items-001.xht deleted file mode 100644 index 861a15f73b4..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-computed-value-display-floated-items-001.xht +++ /dev/null @@ -1,87 +0,0 @@ - - - - CSS Grid Layout Test: 'float' affects to the computed value of 'display' on grid items - - - - - - - - - -
    - -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    - - - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-display-grid-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-display-grid-001.html new file mode 100644 index 00000000000..732d67c8ec1 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-display-grid-001.html @@ -0,0 +1,35 @@ + + +CSS Grid Layout Test: 'grid' value for 'display' property + + + + + + + +

    Test passes if there is a filled green square and no red.

    + +
    +
    + firs + seco +
    +
    + firs + seco +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-display-grid-001.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-display-grid-001.xht deleted file mode 100644 index 761b0ef5394..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-display-grid-001.xht +++ /dev/null @@ -1,40 +0,0 @@ - - - - CSS Grid Layout Test: 'grid' value for 'display' property - - - - - - - - - -

    Test passes if there is a filled green square and no red.

    - -
    -
    - firs - seco -
    -
    - firs - seco -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-display-inline-grid-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-display-inline-grid-001.html new file mode 100644 index 00000000000..30104e4220b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-display-inline-grid-001.html @@ -0,0 +1,28 @@ + + +CSS Grid Layout Test: 'inline-grid' value for 'display' property + + + + + + +

    Test passes if there is a filled green square and no red.

    + +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-display-inline-grid-001.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-display-inline-grid-001.xht deleted file mode 100644 index ea708fe128d..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-display-inline-grid-001.xht +++ /dev/null @@ -1,33 +0,0 @@ - - - - CSS Grid Layout Test: 'inline-grid' value for 'display' property - - - - - - - - -

    Test passes if there is a filled green square and no red.

    - -
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-first-letter-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-first-letter-001.html new file mode 100644 index 00000000000..66eb427cfb9 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-first-letter-001.html @@ -0,0 +1,23 @@ + + +CSS Grid Layout Test: '::first-letter' from grid container does not apply to grid items + + + + + + +
    +
    +

    This text should be green and body and paragraph margins should not collapse.

    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-first-letter-001.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-first-letter-001.xht deleted file mode 100644 index 06c8293d34f..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-first-letter-001.xht +++ /dev/null @@ -1,28 +0,0 @@ - - - - CSS Grid Layout Test: '::first-letter' from grid container does not apply to grid items - - - - - - - - -
    -
    -

    This text should be green and body and paragraph margins should not collapse.

    -
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-first-letter-002.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-first-letter-002.html new file mode 100644 index 00000000000..27aa0256dac --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-first-letter-002.html @@ -0,0 +1,23 @@ + + +CSS Grid Layout Test: '::first-letter' from grid container ancestors does not apply to grid items + + + + + + +
    +
    +

    This text should be green and body and paragraph margins should not collapse.

    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-first-letter-002.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-first-letter-002.xht deleted file mode 100644 index 078f3ef2c9d..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-first-letter-002.xht +++ /dev/null @@ -1,28 +0,0 @@ - - - - CSS Grid Layout Test: '::first-letter' from grid container ancestors does not apply to grid items - - - - - - - - -
    -
    -

    This text should be green and body and paragraph margins should not collapse.

    -
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-first-letter-003.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-first-letter-003.html new file mode 100644 index 00000000000..9d9a0c7589d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-first-letter-003.html @@ -0,0 +1,25 @@ + + +CSS Grid Layout Test: '::first-letter' works on grid items + + + + + + +
    +
    +

    + The first letter of this paragraph, and only that one, should be green. + In addition, body and paragraph margins should not collapse. +

    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-first-letter-003.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-first-letter-003.xht deleted file mode 100644 index 01f9a29f742..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-first-letter-003.xht +++ /dev/null @@ -1,30 +0,0 @@ - - - - CSS Grid Layout Test: '::first-letter' works on grid items - - - - - - - - -
    -
    -

    - The first letter of this paragraph, and only that one, should be green. - In addition, body and paragraph margins should not collapse. -

    -
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-first-line-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-first-line-001.html new file mode 100644 index 00000000000..9f154eee271 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-first-line-001.html @@ -0,0 +1,23 @@ + + +CSS Grid Layout Test: '::first-line' from grid container does not apply to grid items + + + + + + +
    +
    +

    This text should be green and body and paragraph margins should not collapse.

    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-first-line-001.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-first-line-001.xht deleted file mode 100644 index ea8f9915fe2..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-first-line-001.xht +++ /dev/null @@ -1,28 +0,0 @@ - - - - CSS Grid Layout Test: '::first-line' from grid container does not apply to grid items - - - - - - - - -
    -
    -

    This text should be green and body and paragraph margins should not collapse.

    -
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-first-line-002.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-first-line-002.html new file mode 100644 index 00000000000..ea87c875fa1 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-first-line-002.html @@ -0,0 +1,23 @@ + + +CSS Grid Layout Test: '::first-line' from grid container ancestors does not apply to grid items + + + + + + +
    +
    +

    This text should be green and body and paragraph margins should not collapse.

    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-first-line-002.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-first-line-002.xht deleted file mode 100644 index 09f3cf86a3b..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-first-line-002.xht +++ /dev/null @@ -1,28 +0,0 @@ - - - - CSS Grid Layout Test: '::first-line' from grid container ancestors does not apply to grid items - - - - - - - - -
    -
    -

    This text should be green and body and paragraph margins should not collapse.

    -
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-first-line-003.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-first-line-003.html new file mode 100644 index 00000000000..ede9901e8c9 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-first-line-003.html @@ -0,0 +1,23 @@ + + +CSS Grid Layout Test: '::first-line' works on grid items + + + + + + +
    +
    +

    This text should be green and body and paragraph margins should not collapse.

    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-first-line-003.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-first-line-003.xht deleted file mode 100644 index b97aeb6a67c..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-first-line-003.xht +++ /dev/null @@ -1,28 +0,0 @@ - - - - CSS Grid Layout Test: '::first-line' works on grid items - - - - - - - - -
    -
    -

    This text should be green and body and paragraph margins should not collapse.

    -
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-float-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-float-001.html new file mode 100644 index 00000000000..521a3bd6cd7 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-float-001.html @@ -0,0 +1,39 @@ + + +CSS Grid Layout Test: 'float' has no effect on grid items + + + + + + +

    Test passes if there is a filled green square and no red.

    + +
    + +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-float-001.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-float-001.xht deleted file mode 100644 index e56fda915be..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-float-001.xht +++ /dev/null @@ -1,44 +0,0 @@ - - - - CSS Grid Layout Test: 'float' has no effect on grid items - - - - - - - - -

    Test passes if there is a filled green square and no red.

    - -
    - -
    -
    -
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-floats-no-intrude-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-floats-no-intrude-001.html new file mode 100644 index 00000000000..31eab4ba698 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-floats-no-intrude-001.html @@ -0,0 +1,35 @@ + + +CSS Grid Layout Test: floats do not intrude into a grid + + + + +

    Test passes if there is a filled green square and no red.

    + +
    + +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-floats-no-intrude-001.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-floats-no-intrude-001.xht deleted file mode 100644 index 6f61edf4c5e..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-floats-no-intrude-001.xht +++ /dev/null @@ -1,40 +0,0 @@ - - - - CSS Grid Layout Test: floats do not intrude into a grid - - - - - - -

    Test passes if there is a filled green square and no red.

    - -
    - -
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-first-letter-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-first-letter-001.html new file mode 100644 index 00000000000..bc62c1770d2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-first-letter-001.html @@ -0,0 +1,23 @@ + + +CSS Grid Layout Test: '::first-letter' from inline grid container does not apply to grid items + + + + + + +
    +
    +

    This text should be green and body and paragraph margins should not collapse.

    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-first-letter-001.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-first-letter-001.xht deleted file mode 100644 index 7b84207bb06..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-first-letter-001.xht +++ /dev/null @@ -1,28 +0,0 @@ - - - - CSS Grid Layout Test: '::first-letter' from inline grid container does not apply to grid items - - - - - - - - -
    -
    -

    This text should be green and body and paragraph margins should not collapse.

    -
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-first-letter-002.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-first-letter-002.html new file mode 100644 index 00000000000..afdc0de9a44 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-first-letter-002.html @@ -0,0 +1,23 @@ + + +CSS Grid Layout Test: '::first-letter' from inline grid container ancestors does not apply to grid items + + + + + + +
    +
    +

    This text should be green and body and paragraph margins should not collapse.

    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-first-letter-002.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-first-letter-002.xht deleted file mode 100644 index e360d90d982..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-first-letter-002.xht +++ /dev/null @@ -1,28 +0,0 @@ - - - - CSS Grid Layout Test: '::first-letter' from inline grid container ancestors does not apply to grid items - - - - - - - - -
    -
    -

    This text should be green and body and paragraph margins should not collapse.

    -
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-first-letter-003.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-first-letter-003.html new file mode 100644 index 00000000000..e3efd51007a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-first-letter-003.html @@ -0,0 +1,25 @@ + + +CSS Grid Layout Test: '::first-letter' works on grid items within an inline grid + + + + + + +
    +
    +

    + The first letter of this paragraph, and only that one, should be green. + In addition, body and paragraph margins should not collapse. +

    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-first-letter-003.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-first-letter-003.xht deleted file mode 100644 index 069489c8ab7..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-first-letter-003.xht +++ /dev/null @@ -1,30 +0,0 @@ - - - - CSS Grid Layout Test: '::first-letter' works on grid items within an inline grid - - - - - - - - -
    -
    -

    - The first letter of this paragraph, and only that one, should be green. - In addition, body and paragraph margins should not collapse. -

    -
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-first-line-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-first-line-001.html new file mode 100644 index 00000000000..2df3d559c97 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-first-line-001.html @@ -0,0 +1,23 @@ + + +CSS Grid Layout Test: '::first-line' from inline grid container does not apply to grid items + + + + + + +
    +
    +

    This text should be green and body and paragraph margins should not collapse.

    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-first-line-001.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-first-line-001.xht deleted file mode 100644 index dfadc2d5fff..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-first-line-001.xht +++ /dev/null @@ -1,28 +0,0 @@ - - - - CSS Grid Layout Test: '::first-line' from inline grid container does not apply to grid items - - - - - - - - -
    -
    -

    This text should be green and body and paragraph margins should not collapse.

    -
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-first-line-002.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-first-line-002.html new file mode 100644 index 00000000000..efdee52d3c9 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-first-line-002.html @@ -0,0 +1,23 @@ + + +CSS Grid Layout Test: '::first-line' from inline grid container ancestors does not apply to grid items + + + + + + +
    +
    +

    This text should be green and body and paragraph margins should not collapse.

    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-first-line-002.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-first-line-002.xht deleted file mode 100644 index ba176bc9927..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-first-line-002.xht +++ /dev/null @@ -1,28 +0,0 @@ - - - - CSS Grid Layout Test: '::first-line' from inline grid container ancestors does not apply to grid items - - - - - - - - -
    -
    -

    This text should be green and body and paragraph margins should not collapse.

    -
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-first-line-003.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-first-line-003.html new file mode 100644 index 00000000000..2b9c3ca0f63 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-first-line-003.html @@ -0,0 +1,23 @@ + + +CSS Grid Layout Test: '::first-line' works on grid items within an inline grid + + + + + + +
    +
    +

    This text should be green and body and paragraph margins should not collapse.

    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-first-line-003.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-first-line-003.xht deleted file mode 100644 index 13a29cbb1b7..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-first-line-003.xht +++ /dev/null @@ -1,28 +0,0 @@ - - - - CSS Grid Layout Test: '::first-line' works on grid items within an inline grid - - - - - - - - -
    -
    -

    This text should be green and body and paragraph margins should not collapse.

    -
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-float-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-float-001.html new file mode 100644 index 00000000000..8222897e4f1 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-float-001.html @@ -0,0 +1,39 @@ + + +CSS Grid Layout Test: 'float' has no effect on grid items within an inline grid + + + + + + +

    Test passes if there is a filled green square and no red.

    + +
    + +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-float-001.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-float-001.xht deleted file mode 100644 index 04a530fe723..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-float-001.xht +++ /dev/null @@ -1,44 +0,0 @@ - - - - CSS Grid Layout Test: 'float' has no effect on grid items within an inline grid - - - - - - - - -

    Test passes if there is a filled green square and no red.

    - -
    - -
    -
    -
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-floats-no-intrude-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-floats-no-intrude-001.html new file mode 100644 index 00000000000..b15aabab06a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-floats-no-intrude-001.html @@ -0,0 +1,35 @@ + + +CSS Grid Layout Test: floats do not intrude into an inline grid + + + + +

    Test passes if there is a filled green square and no red.

    + +
    + +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-floats-no-intrude-001.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-floats-no-intrude-001.xht deleted file mode 100644 index 7520c941694..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-floats-no-intrude-001.xht +++ /dev/null @@ -1,40 +0,0 @@ - - - - CSS Grid Layout Test: floats do not intrude into an inline grid - - - - - - -

    Test passes if there is a filled green square and no red.

    - -
    - -
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-margins-no-collapse-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-margins-no-collapse-001.html new file mode 100644 index 00000000000..4260fe89f9a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-margins-no-collapse-001.html @@ -0,0 +1,17 @@ + + +CSS Grid Layout Test: inline grid's margins do not collapse + + + + + +

    This text should be green and body and paragraph margins should not collapse.

    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-margins-no-collapse-001.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-margins-no-collapse-001.xht deleted file mode 100644 index cbfeee0fc3c..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-margins-no-collapse-001.xht +++ /dev/null @@ -1,22 +0,0 @@ - - - - CSS Grid Layout Test: inline grid's margins do not collapse - - - - - - - -

    This text should be green and body and paragraph margins should not collapse.

    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-multicol-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-multicol-001.html new file mode 100644 index 00000000000..3e51b16f5cb --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-multicol-001.html @@ -0,0 +1,36 @@ + + +CSS Grid Layout Test: 'column-*' properties from inline grid container does not apply to grid items + + + + + + +

    Test passes if there is a filled green square and no red.

    + +
    + +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-multicol-001.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-multicol-001.xht deleted file mode 100644 index be27a53b74a..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-multicol-001.xht +++ /dev/null @@ -1,41 +0,0 @@ - - - - CSS Grid Layout Test: 'column-*' properties from inline grid container does not apply to grid items - - - - - - - - -

    Test passes if there is a filled green square and no red.

    - -
    - -
    -
    -
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-vertical-align-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-vertical-align-001.html new file mode 100644 index 00000000000..d37b8775028 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-vertical-align-001.html @@ -0,0 +1,36 @@ + + +CSS Grid Layout Test: 'vertical-align' has no effect on grid items within an inline grid + + + + + + + +

    Test passes if there is a filled green square and no red.

    + +
    + +
    + 1s + 2n +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-vertical-align-001.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-vertical-align-001.xht deleted file mode 100644 index e7d0dfc01a6..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-inline-vertical-align-001.xht +++ /dev/null @@ -1,41 +0,0 @@ - - - - CSS Grid Layout Test: 'vertical-align' has no effect on grid items within an inline grid - - - - - - - - - -

    Test passes if there is a filled green square and no red.

    - -
    - -
    - 1s - 2n -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-margins-no-collapse-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-margins-no-collapse-001.html new file mode 100644 index 00000000000..764cca9ced0 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-margins-no-collapse-001.html @@ -0,0 +1,17 @@ + + +CSS Grid Layout Test: grid's margins do not collapse + + + + + +

    This text should be green and body and paragraph margins should not collapse.

    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-margins-no-collapse-001.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-margins-no-collapse-001.xht deleted file mode 100644 index cbfe32bd14e..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-margins-no-collapse-001.xht +++ /dev/null @@ -1,22 +0,0 @@ - - - - CSS Grid Layout Test: grid's margins do not collapse - - - - - - - -

    This text should be green and body and paragraph margins should not collapse.

    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-multicol-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-multicol-001.html new file mode 100644 index 00000000000..553a33e6a34 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-multicol-001.html @@ -0,0 +1,36 @@ + + +CSS Grid Layout Test: 'column-*' properties from grid container does not apply to grid items + + + + + + +

    Test passes if there is a filled green square and no red.

    + +
    + +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-multicol-001.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-multicol-001.xht deleted file mode 100644 index 466033c54c9..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-multicol-001.xht +++ /dev/null @@ -1,41 +0,0 @@ - - - - CSS Grid Layout Test: 'column-*' properties from grid container does not apply to grid items - - - - - - - - -

    Test passes if there is a filled green square and no red.

    - -
    - -
    -
    -
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-support-display-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-support-display-001.html new file mode 100644 index 00000000000..c69d0e31b04 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-support-display-001.html @@ -0,0 +1,75 @@ + + +CSS Grid Layout Test: DOM support for 'grid' and 'inline-grid' 'display' values + + + + + + + + +
    + +
    +
    + +
    +
    + +
    +
    + + diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-support-display-001.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-support-display-001.xht deleted file mode 100644 index eb318d14b89..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-support-display-001.xht +++ /dev/null @@ -1,80 +0,0 @@ - - - - CSS Grid Layout Test: DOM support for 'grid' and 'inline-grid' 'display' values - - - - - - - - - - -
    - -
    -
    - -
    -
    - -
    -
    - - - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-vertical-align-001.html b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-vertical-align-001.html new file mode 100644 index 00000000000..209b6b263a0 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-vertical-align-001.html @@ -0,0 +1,36 @@ + + +CSS Grid Layout Test: 'vertical-align' has no effect on grid items + + + + + + + +

    Test passes if there is a filled green square and no red.

    + +
    + +
    + 1s + 2n +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-vertical-align-001.xht b/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-vertical-align-001.xht deleted file mode 100644 index 36c39cd3928..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/grid-model/grid-vertical-align-001.xht +++ /dev/null @@ -1,41 +0,0 @@ - - - - CSS Grid Layout Test: 'vertical-align' has no effect on grid items - - - - - - - - - -

    Test passes if there is a filled green square and no red.

    - -
    - -
    - 1s - 2n -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/reference/grid-2x2-blue-yellow-lime-magenta.html b/tests/wpt/web-platform-tests/css/css-grid-1/reference/grid-2x2-blue-yellow-lime-magenta.html new file mode 100644 index 00000000000..1f325f37a2c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/reference/grid-2x2-blue-yellow-lime-magenta.html @@ -0,0 +1,33 @@ + + +CSS Grid Layout Test: Reference file 2x2 grid and cells with the following colors: blue, yellow, lime and magenta + + +

    Test passes if there are four filled squares with the same size and no red.

    +

    Blue and yellow squares in the first line; lime and magenta squares in the second line (exactly in this order).

    + +
    + BY +
    + LM +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/reference/grid-2x2-blue-yellow-lime-magenta.xht b/tests/wpt/web-platform-tests/css/css-grid-1/reference/grid-2x2-blue-yellow-lime-magenta.xht deleted file mode 100644 index a541654cb67..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/reference/grid-2x2-blue-yellow-lime-magenta.xht +++ /dev/null @@ -1,38 +0,0 @@ - - - - CSS Grid Layout Test: Reference file 2x2 grid and cells with the following colors: blue, yellow, lime and magenta - - - - -

    Test passes if there are four filled squares with the same size and no red.

    -

    Blue and yellow squares in the first line; lime and magenta squares in the second line (exactly in this order).

    - -
    - BY -
    - LM -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/reference/grid-filled-blue-yellow-green-overlapped-100px-squares.html b/tests/wpt/web-platform-tests/css/css-grid-1/reference/grid-filled-blue-yellow-green-overlapped-100px-squares.html new file mode 100644 index 00000000000..e3b19211d45 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/reference/grid-filled-blue-yellow-green-overlapped-100px-squares.html @@ -0,0 +1,42 @@ + + +CSS Grid Layout Test: Reference file 3 overlapped squares the following colors: blue, yellow and green + + +

    Test passes if there are 3 filled squares with the same size, and green is overlapping yellow which is overlapping blue.

    + +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/reference/grid-filled-blue-yellow-green-overlapped-100px-squares.xht b/tests/wpt/web-platform-tests/css/css-grid-1/reference/grid-filled-blue-yellow-green-overlapped-100px-squares.xht deleted file mode 100644 index 990cfb4d971..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/reference/grid-filled-blue-yellow-green-overlapped-100px-squares.xht +++ /dev/null @@ -1,47 +0,0 @@ - - - - CSS Grid Layout Test: Reference file 3 overlapped squares the following colors: blue, yellow and green - - - - -

    Test passes if there are 3 filled squares with the same size, and green is overlapping yellow which is overlapping blue.

    - -
    -
    -
    -
    -
    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/reference/grid-first-letter-green-margin-no-collapse-ref.html b/tests/wpt/web-platform-tests/css/css-grid-1/reference/grid-first-letter-green-margin-no-collapse-ref.html new file mode 100644 index 00000000000..cf3c6f28b7c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/reference/grid-first-letter-green-margin-no-collapse-ref.html @@ -0,0 +1,18 @@ + + +CSS Grid Layout Test: Reference file text first letter should be green and margins do not collapse + + +

    + The first letter of this paragraph, and only that one, should be green. + In addition, body and paragraph margins should not collapse. +

    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/reference/grid-first-letter-green-margin-no-collapse-ref.xht b/tests/wpt/web-platform-tests/css/css-grid-1/reference/grid-first-letter-green-margin-no-collapse-ref.xht deleted file mode 100644 index ba4abacba4c..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/reference/grid-first-letter-green-margin-no-collapse-ref.xht +++ /dev/null @@ -1,23 +0,0 @@ - - - - CSS Grid Layout Test: Reference file text first letter should be green and margins do not collapse - - - - -

    - The first letter of this paragraph, and only that one, should be green. - In addition, body and paragraph margins should not collapse. -

    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/reference/grid-text-green-margin-no-collapse-ref.html b/tests/wpt/web-platform-tests/css/css-grid-1/reference/grid-text-green-margin-no-collapse-ref.html new file mode 100644 index 00000000000..9dcba3f28fa --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/reference/grid-text-green-margin-no-collapse-ref.html @@ -0,0 +1,12 @@ + + +CSS Grid Layout Test: Reference file text should be green and margins do not collapse + + +

    This text should be green and body and paragraph margins should not collapse.

    diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/reference/grid-text-green-margin-no-collapse-ref.xht b/tests/wpt/web-platform-tests/css/css-grid-1/reference/grid-text-green-margin-no-collapse-ref.xht deleted file mode 100644 index 5feb9630ab2..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid-1/reference/grid-text-green-margin-no-collapse-ref.xht +++ /dev/null @@ -1,17 +0,0 @@ - - - - CSS Grid Layout Test: Reference file text should be green and margins do not collapse - - - - -

    This text should be green and body and paragraph margins should not collapse.

    - - diff --git a/tests/wpt/web-platform-tests/css/css-grid-1/support/check-layout-th.js b/tests/wpt/web-platform-tests/css/css-grid-1/support/check-layout-th.js new file mode 100644 index 00000000000..07f7d5ded82 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid-1/support/check-layout-th.js @@ -0,0 +1,190 @@ +(function() { +// Test is initiated from body.onload, so explicit done() call is required. +setup({ explicit_done: true }); + +function checkSubtreeExpectedValues(t, parent, prefix) +{ + var checkedLayout = checkExpectedValues(t, parent, prefix); + Array.prototype.forEach.call(parent.childNodes, function(node) { + checkedLayout |= checkSubtreeExpectedValues(t, node, prefix); + }); + return checkedLayout; +} + +function checkAttribute(output, node, attribute) +{ + var result = node.getAttribute && node.getAttribute(attribute); + output.checked |= !!result; + return result; +} + +function assert_tolerance(actual, expected, message) +{ + if (isNaN(expected) || Math.abs(actual - expected) >= 1) { + assert_equals(actual, Number(expected), message); + } +} + +function checkExpectedValues(t, node, prefix) +{ + var output = { checked: false }; + + var expectedWidth = checkAttribute(output, node, "data-expected-width"); + if (expectedWidth) { + assert_tolerance(node.offsetWidth, expectedWidth, prefix + "width"); + } + + var expectedHeight = checkAttribute(output, node, "data-expected-height"); + if (expectedHeight) { + assert_tolerance(node.offsetHeight, expectedHeight, prefix + "height"); + } + + var expectedOffset = checkAttribute(output, node, "data-offset-x"); + if (expectedOffset) { + assert_tolerance(node.offsetLeft, expectedOffset, prefix + "offsetLeft"); + } + + var expectedOffset = checkAttribute(output, node, "data-offset-y"); + if (expectedOffset) { + assert_tolerance(node.offsetTop, expectedOffset, prefix + "offsetTop"); + } + + var expectedWidth = checkAttribute(output, node, "data-expected-client-width"); + if (expectedWidth) { + assert_tolerance(node.clientWidth, expectedWidth, prefix + "clientWidth"); + } + + var expectedHeight = checkAttribute(output, node, "data-expected-client-height"); + if (expectedHeight) { + assert_tolerance(node.clientHeight, expectedHeight, prefix + "clientHeight"); + } + + var expectedWidth = checkAttribute(output, node, "data-expected-scroll-width"); + if (expectedWidth) { + assert_tolerance(node.scrollWidth, expectedWidth, prefix + "scrollWidth"); + } + + var expectedHeight = checkAttribute(output, node, "data-expected-scroll-height"); + if (expectedHeight) { + assert_tolerance(node.scrollHeight, expectedHeight, prefix + "scrollHeight"); + } + + var expectedOffset = checkAttribute(output, node, "data-total-x"); + if (expectedOffset) { + var totalLeft = node.clientLeft + node.offsetLeft; + assert_tolerance(totalLeft, expectedOffset, prefix + + "clientLeft+offsetLeft (" + node.clientLeft + " + " + node.offsetLeft + ")"); + } + + var expectedOffset = checkAttribute(output, node, "data-total-y"); + if (expectedOffset) { + var totalTop = node.clientTop + node.offsetTop; + assert_tolerance(totalTop, expectedOffset, prefix + + "clientTop+offsetTop (" + node.clientTop + " + " + node.offsetTop + ")"); + } + + var expectedDisplay = checkAttribute(output, node, "data-expected-display"); + if (expectedDisplay) { + var actualDisplay = getComputedStyle(node).display; + assert_equals(actualDisplay, expectedDisplay, prefix + "display"); + } + + var expectedPaddingTop = checkAttribute(output, node, "data-expected-padding-top"); + if (expectedPaddingTop) { + var actualPaddingTop = getComputedStyle(node).paddingTop; + // Trim the unit "px" from the output. + actualPaddingTop = actualPaddingTop.slice(0, -2); + assert_equals(actualPaddingTop, expectedPaddingTop, prefix + "padding-top"); + } + + var expectedPaddingBottom = checkAttribute(output, node, "data-expected-padding-bottom"); + if (expectedPaddingBottom) { + var actualPaddingBottom = getComputedStyle(node).paddingBottom; + // Trim the unit "px" from the output. + actualPaddingBottom = actualPaddingBottom.slice(0, -2); + assert_equals(actualPaddingBottom, expectedPaddingBottom, prefix + "padding-bottom"); + } + + var expectedPaddingLeft = checkAttribute(output, node, "data-expected-padding-left"); + if (expectedPaddingLeft) { + var actualPaddingLeft = getComputedStyle(node).paddingLeft; + // Trim the unit "px" from the output. + actualPaddingLeft = actualPaddingLeft.slice(0, -2); + assert_equals(actualPaddingLeft, expectedPaddingLeft, prefix + "padding-left"); + } + + var expectedPaddingRight = checkAttribute(output, node, "data-expected-padding-right"); + if (expectedPaddingRight) { + var actualPaddingRight = getComputedStyle(node).paddingRight; + // Trim the unit "px" from the output. + actualPaddingRight = actualPaddingRight.slice(0, -2); + assert_equals(actualPaddingRight, expectedPaddingRight, prefix + "padding-right"); + } + + var expectedMarginTop = checkAttribute(output, node, "data-expected-margin-top"); + if (expectedMarginTop) { + var actualMarginTop = getComputedStyle(node).marginTop; + // Trim the unit "px" from the output. + actualMarginTop = actualMarginTop.slice(0, -2); + assert_equals(actualMarginTop, expectedMarginTop, prefix + "margin-top"); + } + + var expectedMarginBottom = checkAttribute(output, node, "data-expected-margin-bottom"); + if (expectedMarginBottom) { + var actualMarginBottom = getComputedStyle(node).marginBottom; + // Trim the unit "px" from the output. + actualMarginBottom = actualMarginBottom.slice(0, -2); + assert_equals(actualMarginBottom, expectedMarginBottom, prefix + "margin-bottom"); + } + + var expectedMarginLeft = checkAttribute(output, node, "data-expected-margin-left"); + if (expectedMarginLeft) { + var actualMarginLeft = getComputedStyle(node).marginLeft; + // Trim the unit "px" from the output. + actualMarginLeft = actualMarginLeft.slice(0, -2); + assert_equals(actualMarginLeft, expectedMarginLeft, prefix + "margin-left"); + } + + var expectedMarginRight = checkAttribute(output, node, "data-expected-margin-right"); + if (expectedMarginRight) { + var actualMarginRight = getComputedStyle(node).marginRight; + // Trim the unit "px" from the output. + actualMarginRight = actualMarginRight.slice(0, -2); + assert_equals(actualMarginRight, expectedMarginRight, prefix + "margin-right"); + } + + return output.checked; +} + +window.checkLayout = function(selectorList, outputContainer) +{ + if (!selectorList) { + console.error("You must provide a CSS selector of nodes to check."); + return; + } + var nodes = document.querySelectorAll(selectorList); + var testNumber = 0; + nodes = Array.prototype.slice.call(nodes); + nodes.reverse(); + var checkedLayout = false; + Array.prototype.forEach.call(nodes, function(node) { + test(function(t) { + var container = node.parentNode.className == 'container' ? node.parentNode : node; + var prefix = "\n" + container.outerHTML + "\n"; + var passed = false; + try { + checkedLayout |= checkExpectedValues(t, node.parentNode, prefix); + checkedLayout |= checkSubtreeExpectedValues(t, node, prefix); + passed = true; + } finally { + checkedLayout |= !passed; + } + }, selectorList + ' ' + String(++testNumber)); + }); + if (!checkedLayout) { + console.error("No valid data-* attributes found in selector list : " + selectorList); + } + done(); +}; + +})(); diff --git a/tests/wpt/web-platform-tests/css/css-images-3/gradients-with-border-ref.html b/tests/wpt/web-platform-tests/css/css-images-3/gradients-with-border-ref.html new file mode 100644 index 00000000000..32a2527af54 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-images-3/gradients-with-border-ref.html @@ -0,0 +1,50 @@ + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-images-3/gradients-with-border.html b/tests/wpt/web-platform-tests/css/css-images-3/gradients-with-border.html new file mode 100644 index 00000000000..ab964aeb909 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-images-3/gradients-with-border.html @@ -0,0 +1,40 @@ + + + + + + Gradients with borders + + + + + + + +
    +
    +
    + + + diff --git a/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-bottom-ref.html b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-bottom-ref.html new file mode 100644 index 00000000000..7d4953d7797 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-bottom-ref.html @@ -0,0 +1,69 @@ + +Reference for position:sticky elements should respect the top constraint + + + + + +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    + +
    You should see three green boxes above. No red should be visible.
    diff --git a/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-bottom.html b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-bottom.html new file mode 100644 index 00000000000..18c5cc415c5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-bottom.html @@ -0,0 +1,104 @@ + +position:sticky elements should respect the bottom constraint + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    You should see three green boxes above. No red should be visible.
    diff --git a/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-get-bounding-client-rect.html b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-get-bounding-client-rect.html new file mode 100644 index 00000000000..a664ab3d181 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-get-bounding-client-rect.html @@ -0,0 +1,54 @@ + +Sticky positioned element should be observable by getBoundingClientRect. + + + + + + + + +
    +
    +
    +
    + + + diff --git a/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-left-ref.html b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-left-ref.html new file mode 100644 index 00000000000..e0de6fbb812 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-left-ref.html @@ -0,0 +1,68 @@ + +Reference for position:sticky elements should respect the left constraint + + + + + +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    + +
    You should see three green boxes above. No red should be visible.
    diff --git a/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-left.html b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-left.html new file mode 100644 index 00000000000..40a4d7282db --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-left.html @@ -0,0 +1,103 @@ + +position:sticky elements should respect the left constraint + + + + + + + + +
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    +
    + +
    You should see three green boxes above. No red should be visible.
    diff --git a/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-parsing.html b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-parsing.html new file mode 100644 index 00000000000..f6f587e615f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-parsing.html @@ -0,0 +1,73 @@ + +Position value 'sticky' should be a valid value + + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-right-ref.html b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-right-ref.html new file mode 100644 index 00000000000..14ed476834b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-right-ref.html @@ -0,0 +1,68 @@ + +Reference for position:sticky elements should respect the right constraint + + + + + +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    + +
    You should see three green boxes above. No red should be visible.
    diff --git a/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-right.html b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-right.html new file mode 100644 index 00000000000..6c4e696de8d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-right.html @@ -0,0 +1,102 @@ + +position:sticky elements should respect the right constraint + + + + + + + + +
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    +
    + +
    You should see three green boxes above. No red should be visible.
    diff --git a/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-tfoot-bottom-ref.html b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-tfoot-bottom-ref.html new file mode 100644 index 00000000000..a89dd6a485e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-tfoot-bottom-ref.html @@ -0,0 +1,62 @@ + +Reference for position:sticky bottom constraint should behave correctly for <tfoot> elements + + + + + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    You should see three green boxes above. No red should be visible.
    diff --git a/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-tfoot-bottom.html b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-tfoot-bottom.html new file mode 100644 index 00000000000..17fe359948c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-tfoot-bottom.html @@ -0,0 +1,121 @@ + +position:sticky bottom constraint should behave correctly for <tfoot> elements + + + + + + + + +
    +
    +
    +
    + + + + + + + + + +
    +
    +
    +
    + +
    +
    +
    +
    + + + + + + + + + +
    +
    +
    +
    + +
    +
    +
    +
    + + + + + + + + + +
    +
    +
    +
    + +
    You should see three green boxes above. No red should be visible.
    diff --git a/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-th-bottom-ref.html b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-th-bottom-ref.html new file mode 100644 index 00000000000..2aa5c08a55d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-th-bottom-ref.html @@ -0,0 +1,62 @@ + +Reference for position:sticky bottom constraint should behave correctly for <th> elements + + + + + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    You should see three green boxes above. No red should be visible.
    diff --git a/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-th-bottom.html b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-th-bottom.html new file mode 100644 index 00000000000..878732fd5bc --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-th-bottom.html @@ -0,0 +1,127 @@ + +position:sticky bottom constraint should behave correctly for <th> elements + + + + + + + + +
    +
    +
    +
    + + + + + + + + + + + +
    +
    +
    +
    + +
    +
    +
    +
    + + + + + + + + + + + +
    +
    +
    +
    + +
    +
    +
    +
    + + + + + + + + + + + +
    +
    +
    +
    + +
    You should see three green boxes above. No red should be visible.
    diff --git a/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-th-left-ref.html b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-th-left-ref.html new file mode 100644 index 00000000000..cef7539c16c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-th-left-ref.html @@ -0,0 +1,62 @@ + +Reference for position:sticky left constraint should behave correctly for <th> elements + + + + + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    You should see three green boxes above. No red should be visible.
    diff --git a/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-th-left.html b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-th-left.html new file mode 100644 index 00000000000..45643506dc9 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-th-left.html @@ -0,0 +1,115 @@ + +position:sticky left constraint should behave correctly for <th> elements + + + + + + + + +
    +
    +
    + + + + + + + + + +
    +
    +
    +
    + +
    +
    +
    + + + + + + + + + +
    +
    +
    +
    + +
    +
    +
    + + + + + + + + + +
    +
    +
    +
    + +
    You should see three green boxes above. No red should be visible.
    diff --git a/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-th-right-ref.html b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-th-right-ref.html new file mode 100644 index 00000000000..5d778d1bfc1 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-th-right-ref.html @@ -0,0 +1,62 @@ + +Reference for position:sticky right constraint should behave correctly for <th> elements + + + + + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    You should see three green boxes above. No red should be visible.
    diff --git a/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-th-right.html b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-th-right.html new file mode 100644 index 00000000000..204b6e5d043 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-th-right.html @@ -0,0 +1,115 @@ + +position:sticky right constraint should behave correctly for <th> elements + + + + + + + + +
    +
    +
    + + + + + + + + + +
    +
    +
    +
    + +
    +
    +
    + + + + + + + + + +
    +
    +
    +
    + +
    +
    +
    + + + + + + + + + +
    +
    +
    +
    + +
    You should see three green boxes above. No red should be visible.
    diff --git a/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-th-top-ref.html b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-th-top-ref.html new file mode 100644 index 00000000000..692dbcfdffd --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-th-top-ref.html @@ -0,0 +1,62 @@ + +Reference for position:sticky top constraint should behave correctly for <th> elements + + + + + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    You should see three green boxes above. No red should be visible.
    diff --git a/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-th-top.html b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-th-top.html new file mode 100644 index 00000000000..0bad3469cbb --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-th-top.html @@ -0,0 +1,127 @@ + +position:sticky top constraint should behave correctly for <th> elements + + + + + + + + +
    +
    +
    +
    + + + + + + + + + + + +
    +
    +
    +
    + +
    +
    +
    +
    + + + + + + + + + + + +
    +
    +
    +
    + +
    +
    +
    +
    + + + + + + + + + + + +
    +
    +
    +
    + +
    You should see three green boxes above. No red should be visible.
    diff --git a/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-thead-top-ref.html b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-thead-top-ref.html new file mode 100644 index 00000000000..f313d60859c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-thead-top-ref.html @@ -0,0 +1,62 @@ + +Reference for position:sticky top constraint should behave correctly for <thead> elements + + + + + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    You should see three green boxes above. No red should be visible.
    diff --git a/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-thead-top.html b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-thead-top.html new file mode 100644 index 00000000000..560a45efeb1 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-thead-top.html @@ -0,0 +1,121 @@ + +position:sticky top constraint should behave correctly for <thead> elements + + + + + + + + +
    +
    +
    +
    + + + + + + + + + +
    +
    +
    +
    + +
    +
    +
    +
    + + + + + + + + + +
    +
    +
    +
    + +
    +
    +
    +
    + + + + + + + + + +
    +
    +
    +
    + +
    You should see three green boxes above. No red should be visible.
    diff --git a/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-tr-bottom-ref.html b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-tr-bottom-ref.html new file mode 100644 index 00000000000..7f9ef074962 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-tr-bottom-ref.html @@ -0,0 +1,62 @@ + +Reference for position:sticky bottom constraint should behave correctly for <tr> elements + + + + + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    You should see three green boxes above. No red should be visible.
    diff --git a/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-tr-bottom.html b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-tr-bottom.html new file mode 100644 index 00000000000..e306d9654a2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-tr-bottom.html @@ -0,0 +1,118 @@ + +position:sticky bottom constraint should behave correctly for <tr> elements + + + + + + + + + +
    +
    +
    +
    + + + + + + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + + + + + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + + + + + + +
    +
    +
    +
    + +
    You should see three green boxes above. No red should be visible.
    diff --git a/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-tr-top-ref.html b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-tr-top-ref.html new file mode 100644 index 00000000000..9aa9242d9ce --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-tr-top-ref.html @@ -0,0 +1,62 @@ + +Reference for position:sticky top constraint should behave correctly for <tr> elements + + + + + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    You should see three green boxes above. No red should be visible.
    diff --git a/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-tr-top.html b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-tr-top.html new file mode 100644 index 00000000000..361535c99c2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-table-tr-top.html @@ -0,0 +1,119 @@ + +position:sticky top constraint should behave correctly for <tr> elements + + + + + + + + + +
    +
    +
    +
    + + + + + + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + + + + + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + + + + + + +
    +
    +
    +
    + +
    You should see three green boxes above. No red should be visible.
    + diff --git a/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-top-ref.html b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-top-ref.html new file mode 100644 index 00000000000..3003b94e5db --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-top-ref.html @@ -0,0 +1,68 @@ + +Reference for position:sticky elements should respect the top constraint + + + + + +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    + +
    You should see three green boxes above. No red should be visible.
    diff --git a/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-top.html b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-top.html new file mode 100644 index 00000000000..fc07313a20d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position-3/position-sticky-top.html @@ -0,0 +1,104 @@ + +position:sticky elements should respect the top constraint + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    You should see three green boxes above. No red should be visible.
    diff --git a/tests/wpt/web-platform-tests/css/css-scoping-1/css-scoping-shadow-host-namespace.html b/tests/wpt/web-platform-tests/css/css-scoping-1/css-scoping-shadow-host-namespace.html new file mode 100644 index 00000000000..46dffc8de38 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-scoping-1/css-scoping-shadow-host-namespace.html @@ -0,0 +1,82 @@ + + + + CSS Scoping Module Level 1 - :host, :host-context, and default @namespace + + + + + + + + +

    Test passes if you see a single 100px by 100px green box below.

    +
    FAIL
    +
    FAIL
    +
    FAIL
    +
    FAIL
    +
    FAIL
    +
    FAIL
    +
    FAIL
    +
    FAIL
    +
    FAIL
    +
    FAIL
    + + + diff --git a/tests/wpt/web-platform-tests/css/css-shapes-1/shape-outside/values/support/parsing-utils.js b/tests/wpt/web-platform-tests/css/css-shapes-1/shape-outside/values/support/parsing-utils.js index fd647936e3c..11a8dc833f3 100644 --- a/tests/wpt/web-platform-tests/css/css-shapes-1/shape-outside/values/support/parsing-utils.js +++ b/tests/wpt/web-platform-tests/css/css-shapes-1/shape-outside/values/support/parsing-utils.js @@ -19,7 +19,7 @@ function testComputedStyle(value, expected) { // so this check allows for testing that at least one of them passes. // Description of the 2 expecteds is below near calcTestValues. if(Object.prototype.toString.call( expected ) === '[object Array]' && expected.length == 2) { - assert_true(expected[0] == actual || expected[1] == actual) + assert_in_array(actual, expected); } else { assert_equals(actual, typeof expected !== 'undefined' ? expected : value); } @@ -55,7 +55,7 @@ function testShapeMarginComputedStyle(value, expected) { // See comment above about multiple expected results if(Object.prototype.toString.call( expected ) === '[object Array]' && expected.length == 2) { - assert_true(expected[0] == actual || expected[1] == actual) + assert_in_array(actual, expected); } else { assert_equals(actual, !expected ? '0px' : expected); } @@ -86,7 +86,7 @@ function testShapeThresholdComputedStyle(value, expected) { // See comment above about multiple expected results if(Object.prototype.toString.call( expected ) === '[object Array]' && expected.length == 2) { - assert_true(expected[0] == actual || expected[1] == actual) + assert_in_array(actual, expected); } else { assert_equals(actual, !expected ? '0' : expected); } diff --git a/tests/wpt/web-platform-tests/css/css-tables-3/floats/floats-wrap-bfc-006b-ref.xht b/tests/wpt/web-platform-tests/css/css-tables-3/floats/floats-wrap-bfc-006b-ref.xht index 8eebcb4afb7..93cdd3e51ca 100644 --- a/tests/wpt/web-platform-tests/css/css-tables-3/floats/floats-wrap-bfc-006b-ref.xht +++ b/tests/wpt/web-platform-tests/css/css-tables-3/floats/floats-wrap-bfc-006b-ref.xht @@ -1,20 +1,20 @@ - CSS Test: Test for flow around floats (reference) - - - - - + @@ -56,4 +56,4 @@ - \ No newline at end of file + diff --git a/tests/wpt/web-platform-tests/css/css-tables-3/floats/floats-wrap-bfc-006b.xht b/tests/wpt/web-platform-tests/css/css-tables-3/floats/floats-wrap-bfc-006b.xht index 2891cdd96be..78ec3dc4289 100644 --- a/tests/wpt/web-platform-tests/css/css-tables-3/floats/floats-wrap-bfc-006b.xht +++ b/tests/wpt/web-platform-tests/css/css-tables-3/floats/floats-wrap-bfc-006b.xht @@ -1,24 +1,24 @@ - CSS Test: Test for flow around floats - - - - - - - - - + @@ -61,4 +61,4 @@ - \ No newline at end of file + diff --git a/tests/wpt/web-platform-tests/css/css-tables-3/floats/floats-wrap-bfc-006c-ref.xht b/tests/wpt/web-platform-tests/css/css-tables-3/floats/floats-wrap-bfc-006c-ref.xht index f82783db1e4..7482203845f 100644 --- a/tests/wpt/web-platform-tests/css/css-tables-3/floats/floats-wrap-bfc-006c-ref.xht +++ b/tests/wpt/web-platform-tests/css/css-tables-3/floats/floats-wrap-bfc-006c-ref.xht @@ -1,20 +1,20 @@ - CSS Test: Test for flow around floats (reference) - - - - - + @@ -56,4 +56,4 @@ - \ No newline at end of file + diff --git a/tests/wpt/web-platform-tests/css/css-tables-3/floats/floats-wrap-bfc-006c.xht b/tests/wpt/web-platform-tests/css/css-tables-3/floats/floats-wrap-bfc-006c.xht index 3abe0337bb5..618931c0762 100644 --- a/tests/wpt/web-platform-tests/css/css-tables-3/floats/floats-wrap-bfc-006c.xht +++ b/tests/wpt/web-platform-tests/css/css-tables-3/floats/floats-wrap-bfc-006c.xht @@ -1,24 +1,24 @@ - CSS Test: Test for flow around floats - - - - - - - - - + @@ -61,4 +61,4 @@ - \ No newline at end of file + diff --git a/tests/wpt/web-platform-tests/css/css-text-3/i18n/css3-text-line-break-baspglwj-001.html b/tests/wpt/web-platform-tests/css/css-text-3/i18n/css3-text-line-break-baspglwj-001.html index 4bbb01cfecd..2d927eae085 100644 --- a/tests/wpt/web-platform-tests/css/css-text-3/i18n/css3-text-line-break-baspglwj-001.html +++ b/tests/wpt/web-platform-tests/css/css-text-3/i18n/css3-text-line-break-baspglwj-001.html @@ -7,7 +7,7 @@ - + + + +
    + + diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-backface-visibility-001.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-backface-visibility-001.html similarity index 92% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-backface-visibility-001.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-backface-visibility-001.html index 2d8d0e3157a..e0b1788a351 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-backface-visibility-001.html +++ b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-backface-visibility-001.html @@ -3,7 +3,7 @@ CSS Test (Transforms): Simple Backface-Visibility, rotatex(180deg) - + diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-backface-visibility-002.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-backface-visibility-002.html similarity index 93% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-backface-visibility-002.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-backface-visibility-002.html index 1f1367417df..fbc08444409 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-backface-visibility-002.html +++ b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-backface-visibility-002.html @@ -4,7 +4,7 @@ CSS Test (Transforms): Backface-Visibility With Transformed Parent and Child in Different Rendering Contexts - + - + CSS Test (Transforms): Backface-Visibility With Transformed Parent in Same Rendering Context - + - + - + diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-image-scale-001.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-image-scale-001.html similarity index 84% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-image-scale-001.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-image-scale-001.html index 3a4e370dfb4..b7f8f0acc4d 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-image-scale-001.html +++ b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-image-scale-001.html @@ -3,8 +3,8 @@ CSS Test (Transforms): scale3d() on a Bitmap - - + + diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-image-scale-002.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-image-scale-002.html similarity index 82% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-image-scale-002.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-image-scale-002.html index 8b1af22e39b..fa26e4311e8 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-image-scale-002.html +++ b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-image-scale-002.html @@ -3,8 +3,8 @@ CSS Test (Transforms): scale3d() on an SVG - - + + diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-matrix3d-001-ref.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-matrix3d-001-ref.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-matrix3d-001-ref.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-matrix3d-001-ref.html diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-matrix3d-001.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-matrix3d-001.html similarity index 85% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-matrix3d-001.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-matrix3d-001.html index ca2d371ec06..aa32234b154 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-matrix3d-001.html +++ b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-matrix3d-001.html @@ -4,8 +4,8 @@ CSS Test (Transforms): matrix3d(1,2,0,0, 3,4,0,0, 0,0,1,0, 5,6,0,1) - - + + diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-matrix3d-002-ref.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-matrix3d-002-ref.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-matrix3d-002-ref.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-matrix3d-002-ref.html diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-matrix3d-002.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-matrix3d-002.html similarity index 85% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-matrix3d-002.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-matrix3d-002.html index 8d7034b2998..f9bed47290c 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-matrix3d-002.html +++ b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-matrix3d-002.html @@ -4,8 +4,8 @@ CSS Test (Transforms): matrix3d(1,0,0,0, 0,2,0,0, 0,0,3,0, 4,5,6,1) - - + + diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-matrix3d-003-ref.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-matrix3d-003-ref.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-matrix3d-003-ref.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-matrix3d-003-ref.html diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-matrix3d-003.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-matrix3d-003.html similarity index 85% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-matrix3d-003.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-matrix3d-003.html index 51046665e9a..eb1ee4d23d7 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-matrix3d-003.html +++ b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-matrix3d-003.html @@ -3,8 +3,8 @@ CSS Test (Transforms): matrix3d(1,0,0,-0.005, 0,1,0,0, 0,0,1,0, 0,0,0,1) - - + + diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-matrix3d-004-ref.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-matrix3d-004-ref.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-matrix3d-004-ref.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-matrix3d-004-ref.html diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-matrix3d-004.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-matrix3d-004.html similarity index 85% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-matrix3d-004.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-matrix3d-004.html index 3dc433f6b4a..5a860e1fbb4 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-matrix3d-004.html +++ b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-matrix3d-004.html @@ -3,8 +3,8 @@ CSS Test (Transforms): matrix3d(1,0,0,0, 0,1,0,-0.005, 0,0,1,0, 0,0,0,1) - - + + diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-matrix3d-005-ref.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-matrix3d-005-ref.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-matrix3d-005-ref.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-matrix3d-005-ref.html diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-matrix3d-005.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-matrix3d-005.html similarity index 83% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-matrix3d-005.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-matrix3d-005.html index 63442ad5693..3b7dac4ae30 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-matrix3d-005.html +++ b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-matrix3d-005.html @@ -3,8 +3,8 @@ CSS Test (Transforms): matrix3d(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,2) - - + + diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-perspective-001-ref.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-perspective-001-ref.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-perspective-001-ref.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-perspective-001-ref.html diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-perspective-001.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-perspective-001.html similarity index 91% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-perspective-001.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-perspective-001.html index dc428244860..c97003e6451 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-perspective-001.html +++ b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-perspective-001.html @@ -3,7 +3,7 @@ CSS Test (Transforms): perspective() - + diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-perspective-002.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-perspective-002.html similarity index 92% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-perspective-002.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-perspective-002.html index 564cda0a8d0..4405e7aa761 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-perspective-002.html +++ b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-perspective-002.html @@ -3,7 +3,7 @@ CSS Test (Transforms): Inherited Perspective - + diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-perspective-003.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-perspective-003.html similarity index 91% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-perspective-003.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-perspective-003.html index beb7dda7013..3be861b4174 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-perspective-003.html +++ b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-perspective-003.html @@ -3,7 +3,7 @@ CSS Test (Transforms): Perspective on Grandparent - + diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-perspective-004.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-perspective-004.html similarity index 92% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-perspective-004.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-perspective-004.html index 40b24e1a806..52b3e87c344 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-perspective-004.html +++ b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-perspective-004.html @@ -4,7 +4,7 @@ CSS Test (Transforms): 'perspective: 1000px' on Grandparent and 'perspective: none' on Parent - + diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-perspective-005.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-perspective-005.html similarity index 92% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-perspective-005.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-perspective-005.html index 1495379079f..92b2efaadc5 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-perspective-005.html +++ b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-perspective-005.html @@ -4,7 +4,7 @@ CSS Test (Transforms): 'perspective: 1000px' on Grandparent and 'perspective: 0px' on Parent - + diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-perspective-006.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-perspective-006.html similarity index 90% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-perspective-006.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-perspective-006.html index 5b438f6001c..90d436729d7 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-perspective-006.html +++ b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-perspective-006.html @@ -3,7 +3,7 @@ CSS Test (Transforms): Simple Perspective - + diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-perspective-007.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-perspective-007.html similarity index 93% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-perspective-007.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-perspective-007.html index a74655737b7..7b63265d1d0 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-perspective-007.html +++ b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-perspective-007.html @@ -3,7 +3,7 @@ CSS Test (Transforms): Perspective on Table Parent - + diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-perspective-008.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-perspective-008.html similarity index 91% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-perspective-008.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-perspective-008.html index 57e441dda7c..cdc70373a20 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-perspective-008.html +++ b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-perspective-008.html @@ -3,7 +3,7 @@ CSS Test (Transforms): Perspective on Table - + diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-perspective-009-ref.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-perspective-009-ref.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-perspective-009-ref.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-perspective-009-ref.html diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-perspective-009.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-perspective-009.html similarity index 94% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-perspective-009.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-perspective-009.html index 740ab1922c4..8e783b66c58 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-perspective-009.html +++ b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-perspective-009.html @@ -3,7 +3,7 @@ CSS Test (Transforms): 'perspective-origin' and translate() - + - + diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-perspective-origin-ref.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-perspective-origin-ref.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-perspective-origin-ref.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-perspective-origin-ref.html diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-preserve3d-001-ref.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-preserve3d-001-ref.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-preserve3d-001-ref.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-preserve3d-001-ref.html diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-preserve3d-001.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-preserve3d-001.html similarity index 93% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-preserve3d-001.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-preserve3d-001.html index f0da3a196b6..dbebc64139a 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-preserve3d-001.html +++ b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-preserve3d-001.html @@ -4,7 +4,7 @@ CSS Test (Transforms): Simple Preserve-3D - + diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-preserve3d-002.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-preserve3d-002.html similarity index 93% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-preserve3d-002.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-preserve3d-002.html index 2e362b5d0c9..2be42e9886b 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-preserve3d-002.html +++ b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-preserve3d-002.html @@ -4,7 +4,7 @@ CSS Test (Transforms): Preserve-3D With Margins 1 - + - + - + - + - + - + diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-preserve3d-008.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-preserve3d-008.html similarity index 93% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-preserve3d-008.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-preserve3d-008.html index adb1c6b1373..8f6e1f89c8a 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-preserve3d-008.html +++ b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-preserve3d-008.html @@ -3,7 +3,7 @@ CSS Test (Transforms): Preserve-3D with 'overflow: hidden' - + - + diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-preserve3d-010.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-preserve3d-010.html similarity index 92% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-preserve3d-010.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-preserve3d-010.html index 40a5275a361..89a881924d2 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-preserve3d-010.html +++ b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-preserve3d-010.html @@ -3,7 +3,7 @@ CSS Test (Transforms): rotatex() With Preserve-3D - + - + - + - + - - + + diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-rotate3d-002.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-rotate3d-002.html similarity index 84% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-rotate3d-002.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-rotate3d-002.html index ae83743e8ea..49d75487c97 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-rotate3d-002.html +++ b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-rotate3d-002.html @@ -4,8 +4,8 @@ CSS Test (Transforms): rotate3d(0, 1, 0, 45deg) - - + + diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-rotatex-001.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-rotatex-001.html similarity index 85% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-rotatex-001.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-rotatex-001.html index acf7e8f3fee..47ad10b388c 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-rotatex-001.html +++ b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-rotatex-001.html @@ -5,8 +5,8 @@ rotatex(360deg) - - + + diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-rotatex-perspective-001.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-rotatex-perspective-001.html similarity index 79% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-rotatex-perspective-001.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-rotatex-perspective-001.html index 2f4b49a553c..6d35cae6326 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-rotatex-perspective-001.html +++ b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-rotatex-perspective-001.html @@ -4,9 +4,9 @@ CSS Test (Transforms): perspective(1000px) rotatex(45deg) - - - + + + diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-rotatex-perspective-002.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-rotatex-perspective-002.html similarity index 81% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-rotatex-perspective-002.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-rotatex-perspective-002.html index 45941fbd716..472d0aa854b 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-rotatex-perspective-002.html +++ b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-rotatex-perspective-002.html @@ -4,9 +4,9 @@ CSS Test (Transforms): rotatex() and 'perspective' - - - + + + diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-rotatex-perspective-003.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-rotatex-perspective-003.html similarity index 94% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-rotatex-perspective-003.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-rotatex-perspective-003.html index 879be2000c6..620f3b9556a 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-rotatex-perspective-003.html +++ b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-rotatex-perspective-003.html @@ -4,7 +4,7 @@ CSS Test (Transforms): 'perspective' and 'opacity' - + - - + + - - + + diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-rotatey-ref.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-rotatey-ref.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-rotatey-ref.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-rotatey-ref.html diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-scale-001-notref.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-scale-001-notref.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-scale-001-notref.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-scale-001-notref.html diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-scale-001-ref.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-scale-001-ref.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-scale-001-ref.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-scale-001-ref.html diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-scale-001.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-scale-001.html similarity index 85% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-scale-001.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-scale-001.html index 2225abe25c4..36fe800feed 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-scale-001.html +++ b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-scale-001.html @@ -4,8 +4,8 @@ CSS Test (Transforms): scale3d(2, 2, 2) - - + + diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-scale-002.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-scale-002.html similarity index 87% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-scale-002.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-scale-002.html index 93d30da3195..723dfc8a949 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-scale-002.html +++ b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-scale-002.html @@ -5,8 +5,8 @@ rotatex(-90deg) - - + + diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-scale-003.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-scale-003.html similarity index 85% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-scale-003.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-scale-003.html index 510203ef4ca..0bb647b8056 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-scale-003.html +++ b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-scale-003.html @@ -4,8 +4,8 @@ CSS Test (Transforms): scaleX(2) scaleY(2) scaleZ(2) - - + + diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-scale-004.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-scale-004.html similarity index 77% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-scale-004.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-scale-004.html index 0f92147a7e8..f5a161c06f0 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-scale-004.html +++ b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-scale-004.html @@ -3,9 +3,9 @@ CSS Test (Transforms): scale3d(2, 2, 0) - - - + + + diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-scale-005-ref.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-scale-005-ref.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-scale-005-ref.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-scale-005-ref.html diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-scale-005.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-scale-005.html similarity index 86% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-scale-005.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-scale-005.html index b808af31c4f..fda6f7f5ca1 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-scale-005.html +++ b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-scale-005.html @@ -5,8 +5,8 @@ rotateX(-90deg) - - + + diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-scale-006.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-scale-006.html similarity index 84% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-scale-006.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-scale-006.html index 074f4e8ed72..b821776ee49 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-scale-006.html +++ b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-scale-006.html @@ -5,8 +5,8 @@ rotateX(-90deg) - - + + diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-scale-007-ref.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-scale-007-ref.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-scale-007-ref.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-scale-007-ref.html diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-scale-007.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-scale-007.html similarity index 91% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-scale-007.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-scale-007.html index c13a82d976b..e9c199700a8 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-scale-007.html +++ b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-scale-007.html @@ -4,7 +4,7 @@ CSS Test (Transforms): rotateX(180deg) scaleZ(-1) - + diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-sorting-001.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-sorting-001.html similarity index 87% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-sorting-001.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-sorting-001.html index 3e2db53a3d2..82c062b18a9 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-sorting-001.html +++ b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-sorting-001.html @@ -4,8 +4,8 @@ CSS Test (Transforms): Simple Sorting - - + + diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-sorting-002.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-sorting-002.html similarity index 89% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-sorting-002.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-sorting-002.html index bea80e772e3..ba850c83753 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-sorting-002.html +++ b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-sorting-002.html @@ -4,8 +4,8 @@ CSS Test (Transforms): Simple Sorting With Rotation - - + + - - + + diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-sorting-004.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-sorting-004.html similarity index 88% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-sorting-004.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-sorting-004.html index fc51faf9e3e..37416aa35cc 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-sorting-004.html +++ b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-sorting-004.html @@ -4,8 +4,8 @@ CSS Test (Transforms): Simple Sorting With Preserve-3D on Grandparent - - + + - - + + - - + + diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-translate3d-001.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-translate3d-001.html similarity index 88% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-translate3d-001.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-translate3d-001.html index 39e0d8e3ced..ca3bf337ec9 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-translate3d-001.html +++ b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-translate3d-001.html @@ -5,8 +5,8 @@ - - + + diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-translate3d-ref.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-translate3d-ref.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-translate3d-ref.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-translate3d-ref.html diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-translatez-001.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-translatez-001.html similarity index 87% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-translatez-001.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-translatez-001.html index bb6afb18ea1..b000275e699 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-translatez-001.html +++ b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-translatez-001.html @@ -5,8 +5,8 @@ - - + + diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-translatez-notref.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-translatez-notref.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-translatez-notref.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-translatez-notref.html diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-translatez-ref.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-translatez-ref.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transform3d-translatez-ref.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transform3d-translatez-ref.html diff --git a/tests/wpt/web-platform-tests/css/css-transforms-1/transforms-rotateY-degree-60.html b/tests/wpt/web-platform-tests/css/css-transforms-2/transforms-rotateY-degree-60.html similarity index 94% rename from tests/wpt/web-platform-tests/css/css-transforms-1/transforms-rotateY-degree-60.html rename to tests/wpt/web-platform-tests/css/css-transforms-2/transforms-rotateY-degree-60.html index 9f9aea35d7a..8bf73a60d45 100755 --- a/tests/wpt/web-platform-tests/css/css-transforms-1/transforms-rotateY-degree-60.html +++ b/tests/wpt/web-platform-tests/css/css-transforms-2/transforms-rotateY-degree-60.html @@ -5,7 +5,7 @@ - + diff --git a/tests/wpt/web-platform-tests/css/css-variables-1/resources/variable-reference-refresh-iframe.css b/tests/wpt/web-platform-tests/css/css-variables-1/resources/variable-reference-refresh-iframe.css new file mode 100644 index 00000000000..7a10918d001 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-variables-1/resources/variable-reference-refresh-iframe.css @@ -0,0 +1,5 @@ +#testElement +{ + --color: green; + color: var(--color); +} diff --git a/tests/wpt/web-platform-tests/css/css-variables-1/resources/variable-reference-refresh-iframe.html b/tests/wpt/web-platform-tests/css/css-variables-1/resources/variable-reference-refresh-iframe.html new file mode 100644 index 00000000000..b3a4819a294 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-variables-1/resources/variable-reference-refresh-iframe.html @@ -0,0 +1,16 @@ + + + + Content used for within variable-reference-refresh + + + + + + + + + +
    This text should be green.
    + + diff --git a/tests/wpt/web-platform-tests/css/css-variables-1/variable-animation-from-to.html b/tests/wpt/web-platform-tests/css/css-variables-1/variable-animation-from-to.html new file mode 100644 index 00000000000..bcb42566fae --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-variables-1/variable-animation-from-to.html @@ -0,0 +1,64 @@ + + + + CSS Variables - Animation - From and To Values + + + + + + + + + + + +
    This text should animate from blue to green over a period of 1 second.
    + + + + + diff --git a/tests/wpt/web-platform-tests/css/css-variables-1/variable-animation-over-transition.html b/tests/wpt/web-platform-tests/css/css-variables-1/variable-animation-over-transition.html new file mode 100644 index 00000000000..f0ade7c7110 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-variables-1/variable-animation-over-transition.html @@ -0,0 +1,72 @@ + + + + CSS Variables - Animation - Overriding Transition + + + + + + + + + + + + +
    This text should animate from blue to green over a period of 1 second. The transition is not visible because the animation overrides it.
    + + + + + diff --git a/tests/wpt/web-platform-tests/css/css-variables-1/variable-animation-substitute-into-keyframe-shorthand.html b/tests/wpt/web-platform-tests/css/css-variables-1/variable-animation-substitute-into-keyframe-shorthand.html new file mode 100644 index 00000000000..2054d351782 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-variables-1/variable-animation-substitute-into-keyframe-shorthand.html @@ -0,0 +1,69 @@ + + + + CSS Variables - Animation - Substitute Into Keyframe with Shorthand + + + + + + + + + + + + +
    The border around this text should animate from blue to green over a period of 1 second.
    + + + + + diff --git a/tests/wpt/web-platform-tests/css/css-variables-1/variable-animation-substitute-into-keyframe-transform.html b/tests/wpt/web-platform-tests/css/css-variables-1/variable-animation-substitute-into-keyframe-transform.html new file mode 100644 index 00000000000..20e04e872c9 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-variables-1/variable-animation-substitute-into-keyframe-transform.html @@ -0,0 +1,65 @@ + + + + CSS Variables - Animation - Substitute Into Keyframe - transform property + + + + + + + + + + + + +
    This text should scale from half size to double size over a period of 1 second.
    + + + + + diff --git a/tests/wpt/web-platform-tests/css/css-variables-1/variable-animation-substitute-into-keyframe.html b/tests/wpt/web-platform-tests/css/css-variables-1/variable-animation-substitute-into-keyframe.html new file mode 100644 index 00000000000..b6ad0a24775 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-variables-1/variable-animation-substitute-into-keyframe.html @@ -0,0 +1,69 @@ + + + + CSS Variables - Animation - Substitute Into Keyframe + + + + + + + + + + + + +
    This text should animate from blue to green over a period of 1 second.
    + + + + + diff --git a/tests/wpt/web-platform-tests/css/css-variables-1/variable-animation-substitute-within-keyframe-fallback.html b/tests/wpt/web-platform-tests/css/css-variables-1/variable-animation-substitute-within-keyframe-fallback.html new file mode 100644 index 00000000000..e1b3a94dc93 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-variables-1/variable-animation-substitute-within-keyframe-fallback.html @@ -0,0 +1,71 @@ + + + + CSS Variables - Animation - Substitute Within Keyframe - Fallback + + + + + + + + + + + + + + +
    This text should animate from blue to green over a period of 1 second.
    + + + + + diff --git a/tests/wpt/web-platform-tests/css/css-variables-1/variable-animation-substitute-within-keyframe-multiple.html b/tests/wpt/web-platform-tests/css/css-variables-1/variable-animation-substitute-within-keyframe-multiple.html new file mode 100644 index 00000000000..263aaf38aec --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-variables-1/variable-animation-substitute-within-keyframe-multiple.html @@ -0,0 +1,70 @@ + + + + CSS Variables - Animation - Substitute Within Keyframe - Multiple Substitution + + + + + + + + + + + + +
    This text should animate from blue to green over a period of 1 second.
    + + + + + diff --git a/tests/wpt/web-platform-tests/css/css-variables-1/variable-animation-substitute-within-keyframe.html b/tests/wpt/web-platform-tests/css/css-variables-1/variable-animation-substitute-within-keyframe.html new file mode 100644 index 00000000000..a01d018d141 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-variables-1/variable-animation-substitute-within-keyframe.html @@ -0,0 +1,69 @@ + + + + CSS Variables - Animation - Substitute Within Keyframe + + + + + + + + + + + + +
    This text should animate from blue to green over a period of 1 second.
    + + + + + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-variables-1/variable-animation-to-only.html b/tests/wpt/web-platform-tests/css/css-variables-1/variable-animation-to-only.html new file mode 100644 index 00000000000..6f5ffd17ead --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-variables-1/variable-animation-to-only.html @@ -0,0 +1,66 @@ + + + + CSS Variables - Animation - From and To Values + + + + + + + + + + + + +
    This text should animate from blue to green over a period of 1 second.
    + + + + + diff --git a/tests/wpt/web-platform-tests/css/css-variables-1/variable-created-document.html b/tests/wpt/web-platform-tests/css/css-variables-1/variable-created-document.html new file mode 100644 index 00000000000..8e7040d398f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-variables-1/variable-created-document.html @@ -0,0 +1,35 @@ + + + + Variable added to created document + + + + + + + + + + + +
    This text should be green.
    + + + + diff --git a/tests/wpt/web-platform-tests/css/css-variables-1/variable-created-element.html b/tests/wpt/web-platform-tests/css/css-variables-1/variable-created-element.html new file mode 100644 index 00000000000..84bc1b6e46a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-variables-1/variable-created-element.html @@ -0,0 +1,40 @@ + + + + Variable on created element + + + + + + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/css/css-variables-1/variable-cssText.html b/tests/wpt/web-platform-tests/css/css-variables-1/variable-cssText.html new file mode 100644 index 00000000000..fd70ce9ea0f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-variables-1/variable-cssText.html @@ -0,0 +1,53 @@ + + + + Parse, store, and serialize CSS variable (thorugh css Text) + + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + + + + diff --git a/tests/wpt/web-platform-tests/css/css-variables-1/variable-definition-border-shorthand-serialize.html b/tests/wpt/web-platform-tests/css/css-variables-1/variable-definition-border-shorthand-serialize.html new file mode 100644 index 00000000000..c3f8e58fa53 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-variables-1/variable-definition-border-shorthand-serialize.html @@ -0,0 +1,27 @@ + + + + Variables - border shorthand set, serialize border-color + + + + + + + + + + +
    + + + + + diff --git a/tests/wpt/web-platform-tests/css/css-variables-1/variable-definition-cascading.html b/tests/wpt/web-platform-tests/css/css-variables-1/variable-definition-cascading.html new file mode 100644 index 00000000000..97c7e26d4f0 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-variables-1/variable-definition-cascading.html @@ -0,0 +1,74 @@ + + + + variable definition cascading tests + + + + + + + + + + + + +
    + + +
    +
    +
    +
    +
    +
    + + +
    +
    +
    +
    +
    +
    + + + + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-variables-1/variable-definition-keywords.html b/tests/wpt/web-platform-tests/css/css-variables-1/variable-definition-keywords.html new file mode 100644 index 00000000000..6cba261b09f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-variables-1/variable-definition-keywords.html @@ -0,0 +1,68 @@ + + + + CSS Variable definitions and keywords + + + + + + + + + + + + +
    +
    +
    + +
    +
    +
    + +
    +
    +
    + + + + diff --git a/tests/wpt/web-platform-tests/css/css-variables-1/variable-definition.html b/tests/wpt/web-platform-tests/css/css-variables-1/variable-definition.html new file mode 100644 index 00000000000..037aa314dab --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-variables-1/variable-definition.html @@ -0,0 +1,104 @@ + + + + variable-definition: get variable value using getPropertyValue + + + + + + + + + + +
    + + + + + diff --git a/tests/wpt/web-platform-tests/css/css-variables-1/variable-first-letter.html b/tests/wpt/web-platform-tests/css/css-variables-1/variable-first-letter.html new file mode 100644 index 00000000000..da6daba42f6 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-variables-1/variable-first-letter.html @@ -0,0 +1,77 @@ + + + + CSS Variables with ::first-letter pseudo-element. + + + + + + + + + + + + +
    CSS variable defining 'color' property should be applied to ::first-letter and its color should be blue.
    +
    CSS variable defining 'font-size' property should be applied to ::first-letter and its font-size should be 25px.
    +
    CSS variable defining 'font-weight' property should be applied to ::first-letter and its font-weight should be 900.
    +
    CSS variable defining 'position' property should not be applied to ::first-letter and its position should be static.
    +
    CSS variable referencing another CSS variable that defines 'color' property should be applied to ::first-letter and its color should be blue.
    +
    CSS variable referencing another CSS variable that defines 'position' property should not be applied to ::first-letter and its position should be static.
    + + + + + diff --git a/tests/wpt/web-platform-tests/css/css-variables-1/variable-first-line.html b/tests/wpt/web-platform-tests/css/css-variables-1/variable-first-line.html new file mode 100644 index 00000000000..d439a51bf9a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-variables-1/variable-first-line.html @@ -0,0 +1,87 @@ + + + + CSS Variables with ::first-line pseudo-element. + + + + + + + + + + + + +
    CSS variable defining 'color' property should be applied to ::first-line and its color should be blue.
    +
    +
    CSS variable defining 'font-size' property should be applied to ::first-line and its font-size should be 25px.
    +
    +
    CSS variable defining 'font-weight' property should be applied to ::first-line and its font-weight should be 900.
    +
    +
    CSS variable defining 'position' property should not be applied to ::first-line and its position should be static.
    +
    +
    CSS variable referencing another CSS variable that defines 'color' property should be applied to ::first-line and its color should be blue.
    +
    +
    CSS variable referencing another CSS variable that defines 'position' property should not be applied to ::first-line and its position should be static.
    + + + + + diff --git a/tests/wpt/web-platform-tests/css/css-variables-1/variable-invalidation.html b/tests/wpt/web-platform-tests/css/css-variables-1/variable-invalidation.html new file mode 100644 index 00000000000..677f217c880 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-variables-1/variable-invalidation.html @@ -0,0 +1,106 @@ + + + + Tests css variable invalidation + + + + + + + + + + + + +
    +
    +
    +
    + + + + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-variables-1/variable-presentation-attribute.html b/tests/wpt/web-platform-tests/css/css-variables-1/variable-presentation-attribute.html new file mode 100644 index 00000000000..24df5aae171 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-variables-1/variable-presentation-attribute.html @@ -0,0 +1,125 @@ + + + + CSS Variables and SVG presentation attributes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/css/css-variables-1/variable-pseudo-element.html b/tests/wpt/web-platform-tests/css/css-variables-1/variable-pseudo-element.html new file mode 100644 index 00000000000..1c5413bd542 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-variables-1/variable-pseudo-element.html @@ -0,0 +1,108 @@ + + + + Parse, store, and serialize CSS variable references + + + + + + + + + + + + + + +
    div1
    +
    div2
    +
    div3
    +
    div4
    + + + + + diff --git a/tests/wpt/web-platform-tests/css/css-variables-1/variable-reference-cssom.html b/tests/wpt/web-platform-tests/css/css-variables-1/variable-reference-cssom.html new file mode 100644 index 00000000000..00354beaf83 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-variables-1/variable-reference-cssom.html @@ -0,0 +1,54 @@ + + + + CSS variable references - via CSSOM + + + + + + + + + + + + +
    +
    + + + + + diff --git a/tests/wpt/web-platform-tests/css/css-variables-1/variable-reference-refresh.html b/tests/wpt/web-platform-tests/css/css-variables-1/variable-reference-refresh.html new file mode 100644 index 00000000000..f2b7f0ca2c5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-variables-1/variable-reference-refresh.html @@ -0,0 +1,56 @@ + + + + Variable reference across document refresh + + + + + + + + + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/css/css-variables-1/variable-reference-shorthands-cssom.html b/tests/wpt/web-platform-tests/css/css-variables-1/variable-reference-shorthands-cssom.html new file mode 100644 index 00000000000..a0185c4f2a6 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-variables-1/variable-reference-shorthands-cssom.html @@ -0,0 +1,37 @@ + + + + CSS variable references - shorthand properties - via CSSOM + + + + + + + + + + + +
    + + + + + diff --git a/tests/wpt/web-platform-tests/css/css-variables-1/variable-reference-shorthands.html b/tests/wpt/web-platform-tests/css/css-variables-1/variable-reference-shorthands.html new file mode 100644 index 00000000000..8da0e798c95 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-variables-1/variable-reference-shorthands.html @@ -0,0 +1,56 @@ + + + + Parse, store, and serialize CSS variable references - shorthand properties + + + + + + + + + + + +
    +
    +
    +
    + + + + + diff --git a/tests/wpt/web-platform-tests/css/css-variables-1/variable-reference-variable.html b/tests/wpt/web-platform-tests/css/css-variables-1/variable-reference-variable.html new file mode 100644 index 00000000000..866d6e649d3 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-variables-1/variable-reference-variable.html @@ -0,0 +1,36 @@ + + + + Parse, store, and serialize CSS variable referencing another CSS variable + + + + + + + + + + +
    +
    + + + + + diff --git a/tests/wpt/web-platform-tests/css/css-variables-1/variable-reference.html b/tests/wpt/web-platform-tests/css/css-variables-1/variable-reference.html new file mode 100644 index 00000000000..dc4ce73f3ad --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-variables-1/variable-reference.html @@ -0,0 +1,67 @@ + + + + Parse, store, and serialize CSS variable references + + + + + + + + + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/css/css-variables-1/variable-substitution-background-properties.html b/tests/wpt/web-platform-tests/css/css-variables-1/variable-substitution-background-properties.html new file mode 100644 index 00000000000..1f19bc5f4c0 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-variables-1/variable-substitution-background-properties.html @@ -0,0 +1,108 @@ + + + + test background property variable substitution + + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + + diff --git a/tests/wpt/web-platform-tests/css/css-variables-1/variable-substitution-basic.html b/tests/wpt/web-platform-tests/css/css-variables-1/variable-substitution-basic.html new file mode 100644 index 00000000000..c2b29229d73 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-variables-1/variable-substitution-basic.html @@ -0,0 +1,118 @@ + + + + test basic variable substitution + + + + + + + + + + + +
    +
    + + + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-variables-1/variable-substitution-filters.html b/tests/wpt/web-platform-tests/css/css-variables-1/variable-substitution-filters.html new file mode 100644 index 00000000000..5dc10e1d82f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-variables-1/variable-substitution-filters.html @@ -0,0 +1,77 @@ + + + + test filter function variable substitution + + + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    + + + diff --git a/tests/wpt/web-platform-tests/css/css-variables-1/variable-substitution-plus-box-shadow.html b/tests/wpt/web-platform-tests/css/css-variables-1/variable-substitution-plus-box-shadow.html new file mode 100644 index 00000000000..06dfd362810 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-variables-1/variable-substitution-plus-box-shadow.html @@ -0,0 +1,52 @@ + + + + box-shadow + variable substitution on same element + + + + + + + + + + + +
    This div should have green text and a green shadow.
    + + + + + diff --git a/tests/wpt/web-platform-tests/css/css-variables-1/variable-substitution-replaced-size.html b/tests/wpt/web-platform-tests/css/css-variables-1/variable-substitution-replaced-size.html new file mode 100644 index 00000000000..581ea6b8f20 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-variables-1/variable-substitution-replaced-size.html @@ -0,0 +1,48 @@ + + + + variable substitution into size properties on certain replaced elements + + + + + + + + + + + + +
    + + + +
    + + + + + diff --git a/tests/wpt/web-platform-tests/css/css-variables-1/variable-substitution-shadow-properties.html b/tests/wpt/web-platform-tests/css/css-variables-1/variable-substitution-shadow-properties.html new file mode 100644 index 00000000000..58a858ecf58 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-variables-1/variable-substitution-shadow-properties.html @@ -0,0 +1,50 @@ + + + + test shadow property variable substitution + + + + + + + + + + + + +
    +
    box-shadow
    +
    text-shadow
    + + + diff --git a/tests/wpt/web-platform-tests/css/css-variables-1/variable-substitution-shorthands.html b/tests/wpt/web-platform-tests/css/css-variables-1/variable-substitution-shorthands.html new file mode 100644 index 00000000000..c501d56abdb --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-variables-1/variable-substitution-shorthands.html @@ -0,0 +1,117 @@ + + + + Test shorthand variable substitution + + + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + + + + + diff --git a/tests/wpt/web-platform-tests/css/css-variables-1/variable-substitution-variable-declaration.html b/tests/wpt/web-platform-tests/css/css-variables-1/variable-substitution-variable-declaration.html new file mode 100644 index 00000000000..0b0ab1f0f0f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-variables-1/variable-substitution-variable-declaration.html @@ -0,0 +1,155 @@ + + + + + Testing substituting variable references inside of variable declerations + + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + + + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-variables-1/variable-transitions-from-no-value.html b/tests/wpt/web-platform-tests/css/css-variables-1/variable-transitions-from-no-value.html new file mode 100644 index 00000000000..eb9be3126a6 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-variables-1/variable-transitions-from-no-value.html @@ -0,0 +1,66 @@ + + + + CSS Variables - Transitions - From no value to value + + + + + + + + + + + + +
    This text should transition from black to green over a period of 1 second.
    + + + + + diff --git a/tests/wpt/web-platform-tests/css/css-variables-1/variable-transitions-to-no-value.html b/tests/wpt/web-platform-tests/css/css-variables-1/variable-transitions-to-no-value.html new file mode 100644 index 00000000000..1251e0bf5be --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-variables-1/variable-transitions-to-no-value.html @@ -0,0 +1,66 @@ + + + + CSS Variables - Transitions - From value to no value + + + + + + + + + + + + +
    This text should transition from green to black over a period of 1 second.
    + + + + + diff --git a/tests/wpt/web-platform-tests/css/css-variables-1/variable-transitions-transition-property-all-before-value.html b/tests/wpt/web-platform-tests/css/css-variables-1/variable-transitions-transition-property-all-before-value.html new file mode 100644 index 00000000000..5e54cd930f9 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-variables-1/variable-transitions-transition-property-all-before-value.html @@ -0,0 +1,72 @@ + + + + CSS Variables - Transitions - Variable value specified before transition; 'all' keyword used + + + + + + + + + + + + + +
    This text should transition from blue to green over a period of 1 second.
    + + + + + diff --git a/tests/wpt/web-platform-tests/css/css-variables-1/variable-transitions-transition-property-variable-before-value.html b/tests/wpt/web-platform-tests/css/css-variables-1/variable-transitions-transition-property-variable-before-value.html new file mode 100644 index 00000000000..c2548c854c8 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-variables-1/variable-transitions-transition-property-variable-before-value.html @@ -0,0 +1,71 @@ + + + + CSS Variables - Transitions - Variable value specified before transition; variable specified by name + + + + + + + + + + + + +
    This text should transition from blue to green over a period of 1 second.
    + + + + + diff --git a/tests/wpt/web-platform-tests/css/css-variables-1/variable-transitions-value-before-transition-property-all.html b/tests/wpt/web-platform-tests/css/css-variables-1/variable-transitions-value-before-transition-property-all.html new file mode 100644 index 00000000000..49642e0fa71 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-variables-1/variable-transitions-value-before-transition-property-all.html @@ -0,0 +1,71 @@ + + + + CSS Variables - Transitions - Variable value specified before transition; 'all' keyword used + + + + + + + + + + + + +
    This text should transition from blue to green over a period of 1 second.
    + + + + + diff --git a/tests/wpt/web-platform-tests/css/css-variables-1/variable-transitions-value-before-transition-property-variable.html b/tests/wpt/web-platform-tests/css/css-variables-1/variable-transitions-value-before-transition-property-variable.html new file mode 100644 index 00000000000..a8b5ae4ca0c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-variables-1/variable-transitions-value-before-transition-property-variable.html @@ -0,0 +1,66 @@ + + + + CSS Variables - Transitions - Variable value specified before transition; variable specified by name + + + + + + + + + + + + +
    This text should transition from blue to green over a period of 1 second.
    + + + + + diff --git a/tests/wpt/web-platform-tests/css/css-variables-1/vars-font-shorthand-001.html b/tests/wpt/web-platform-tests/css/css-variables-1/vars-font-shorthand-001.html index a6077e84c5d..89886d9dd90 100644 --- a/tests/wpt/web-platform-tests/css/css-variables-1/vars-font-shorthand-001.html +++ b/tests/wpt/web-platform-tests/css/css-variables-1/vars-font-shorthand-001.html @@ -5,7 +5,7 @@ + + +
    + + diff --git a/tests/wpt/web-platform-tests/css/motion-1/offset-path-ray.html b/tests/wpt/web-platform-tests/css/motion-1/offset-path-ray.html new file mode 100644 index 00000000000..6c39e7b8f4c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/motion-1/offset-path-ray.html @@ -0,0 +1,26 @@ + + + + CSS Motion Path: ray paths + + + + + + + +
    + + diff --git a/tests/wpt/web-platform-tests/css/motion-1/offset-path-string-ref.html b/tests/wpt/web-platform-tests/css/motion-1/offset-path-string-ref.html new file mode 100644 index 00000000000..5c5ff5f6f2d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/motion-1/offset-path-string-ref.html @@ -0,0 +1,22 @@ + + + + CSS Motion Path: path(string) paths + + + + +
    + + diff --git a/tests/wpt/web-platform-tests/css/motion-1/offset-path-string.html b/tests/wpt/web-platform-tests/css/motion-1/offset-path-string.html new file mode 100644 index 00000000000..79d957d82b8 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/motion-1/offset-path-string.html @@ -0,0 +1,26 @@ + + + + CSS Motion Path: path(string) paths + + + + + + + +
    + + diff --git a/tests/wpt/web-platform-tests/css/motion-1/offset-rotate-001.html b/tests/wpt/web-platform-tests/css/motion-1/offset-rotate-001.html new file mode 100644 index 00000000000..55147698a7f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/motion-1/offset-rotate-001.html @@ -0,0 +1,26 @@ + + + + CSS Motion Path: offset-rotate + + + + + + + +
    + + diff --git a/tests/wpt/web-platform-tests/css/motion-1/offset-rotate-002.html b/tests/wpt/web-platform-tests/css/motion-1/offset-rotate-002.html new file mode 100644 index 00000000000..fb301be24ef --- /dev/null +++ b/tests/wpt/web-platform-tests/css/motion-1/offset-rotate-002.html @@ -0,0 +1,26 @@ + + + + CSS Motion Path: offset-rotate + + + + + + + +
    + + diff --git a/tests/wpt/web-platform-tests/css/motion-1/offset-rotate-ref.html b/tests/wpt/web-platform-tests/css/motion-1/offset-rotate-ref.html new file mode 100644 index 00000000000..ec22768e96a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/motion-1/offset-rotate-ref.html @@ -0,0 +1,22 @@ + + + + CSS Motion Path: offset-rotate + + + + +
    + + diff --git a/tests/wpt/web-platform-tests/css/motion-1/parsing/offset-anchor-parsing-invalid.html b/tests/wpt/web-platform-tests/css/motion-1/parsing/offset-anchor-parsing-invalid.html new file mode 100644 index 00000000000..39c3eb1e6b5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/motion-1/parsing/offset-anchor-parsing-invalid.html @@ -0,0 +1,20 @@ + + + + +Motion Path Module Level 1: parsing offset-anchor with invalid values + + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/css/motion-1/parsing/offset-anchor-parsing-valid.html b/tests/wpt/web-platform-tests/css/motion-1/parsing/offset-anchor-parsing-valid.html new file mode 100644 index 00000000000..5bb10bb8361 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/motion-1/parsing/offset-anchor-parsing-valid.html @@ -0,0 +1,29 @@ + + + + +Motion Path Module Level 1: parsing offset-anchor with valid values + + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/css/motion-1/parsing/offset-distance-parsing-invalid.html b/tests/wpt/web-platform-tests/css/motion-1/parsing/offset-distance-parsing-invalid.html new file mode 100644 index 00000000000..5fbbe8ebe04 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/motion-1/parsing/offset-distance-parsing-invalid.html @@ -0,0 +1,19 @@ + + + + +Motion Path Module Level 1: parsing offset-distance with invalid values + + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/css/motion-1/parsing/offset-distance-parsing-valid.html b/tests/wpt/web-platform-tests/css/motion-1/parsing/offset-distance-parsing-valid.html new file mode 100644 index 00000000000..4fe67558283 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/motion-1/parsing/offset-distance-parsing-valid.html @@ -0,0 +1,21 @@ + + + + +Motion Path Module Level 1: parsing offset-distance with valid values + + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/css/motion-1/parsing/offset-parsing-invalid.html b/tests/wpt/web-platform-tests/css/motion-1/parsing/offset-parsing-invalid.html new file mode 100644 index 00000000000..54298acb8dd --- /dev/null +++ b/tests/wpt/web-platform-tests/css/motion-1/parsing/offset-parsing-invalid.html @@ -0,0 +1,30 @@ + + + + +Motion Path Module Level 1: parsing offset with invalid values + + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/css/motion-1/parsing/offset-parsing-valid.html b/tests/wpt/web-platform-tests/css/motion-1/parsing/offset-parsing-valid.html new file mode 100644 index 00000000000..c7a4e645991 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/motion-1/parsing/offset-parsing-valid.html @@ -0,0 +1,43 @@ + + + + +Motion Path Module Level 1: parsing offset with valid values + + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/css/motion-1/parsing/offset-path-parsing-invalid.html b/tests/wpt/web-platform-tests/css/motion-1/parsing/offset-path-parsing-invalid.html new file mode 100644 index 00000000000..95bce0620d4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/motion-1/parsing/offset-path-parsing-invalid.html @@ -0,0 +1,28 @@ + + + + +Motion Path Module Level 1: parsing offset-path with invalid values + + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/css/motion-1/parsing/offset-path-parsing-valid.html b/tests/wpt/web-platform-tests/css/motion-1/parsing/offset-path-parsing-valid.html new file mode 100644 index 00000000000..429abb9c60a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/motion-1/parsing/offset-path-parsing-valid.html @@ -0,0 +1,35 @@ + + + + +Motion Path Module Level 1: parsing offset-path with valid values + + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/css/motion-1/parsing/offset-position-parsing-invalid.html b/tests/wpt/web-platform-tests/css/motion-1/parsing/offset-position-parsing-invalid.html new file mode 100644 index 00000000000..c008eff0945 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/motion-1/parsing/offset-position-parsing-invalid.html @@ -0,0 +1,20 @@ + + + + +Motion Path Module Level 1: parsing offset-position with invalid values + + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/css/motion-1/parsing/offset-position-parsing-valid.html b/tests/wpt/web-platform-tests/css/motion-1/parsing/offset-position-parsing-valid.html new file mode 100644 index 00000000000..984e79c87a9 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/motion-1/parsing/offset-position-parsing-valid.html @@ -0,0 +1,29 @@ + + + + +Motion Path Module Level 1: parsing offset-position with valid values + + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/css/motion-1/parsing/offset-rotate-parsing-invalid.html b/tests/wpt/web-platform-tests/css/motion-1/parsing/offset-rotate-parsing-invalid.html new file mode 100644 index 00000000000..f69ccfc3ca7 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/motion-1/parsing/offset-rotate-parsing-invalid.html @@ -0,0 +1,21 @@ + + + + +Motion Path Module Level 1: parsing offset-rotate with invalid values + + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/css/motion-1/parsing/offset-rotate-parsing-valid.html b/tests/wpt/web-platform-tests/css/motion-1/parsing/offset-rotate-parsing-valid.html new file mode 100644 index 00000000000..18eb8203ec7 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/motion-1/parsing/offset-rotate-parsing-valid.html @@ -0,0 +1,24 @@ + + + + +Motion Path Module Level 1: parsing offset-rotate with valid values + + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/css/motion-1/parsing/resources/parsing-testcommon.js b/tests/wpt/web-platform-tests/css/motion-1/parsing/resources/parsing-testcommon.js new file mode 100644 index 00000000000..688356bd0f9 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/motion-1/parsing/resources/parsing-testcommon.js @@ -0,0 +1,33 @@ +'use strict'; + +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[property], ""); + }, "e.style['" + property + "'] = " + stringifiedValue + " should set the property value"); + + test(function(){ + var div = document.createElement('div'); + div.style[property] = value; + var readValue = div.style[property]; + assert_equals(readValue, serializedValue); + div.style[property] = readValue; + assert_equals(div.style[property], readValue); + }, "Serialization should round-trip after setting e.style['" + property + "'] = " + stringifiedValue); +} + +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[property], ""); + }, "e.style['" + property + "'] = " + stringifiedValue + " should not set the property value"); +} diff --git a/tests/wpt/web-platform-tests/css/reference/ref-filled-green-200px-square.html b/tests/wpt/web-platform-tests/css/reference/ref-filled-green-200px-square.html new file mode 100644 index 00000000000..d8d71f86201 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/reference/ref-filled-green-200px-square.html @@ -0,0 +1,13 @@ + + +CSS Reftest Reference + + +

    Test passes if there is a filled green square and no red.

    +
    diff --git a/tests/wpt/web-platform-tests/css/reference/ref-filled-green-300px-square.html b/tests/wpt/web-platform-tests/css/reference/ref-filled-green-300px-square.html new file mode 100644 index 00000000000..05c223561c9 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/reference/ref-filled-green-300px-square.html @@ -0,0 +1,13 @@ + + +CSS Reftest Reference + + +

    Test passes if there is a filled green square and no red.

    +
    diff --git a/tests/wpt/web-platform-tests/css/selectors4/focus-display-none-001.html b/tests/wpt/web-platform-tests/css/selectors4/focus-display-none-001.html new file mode 100644 index 00000000000..fe5716cc41c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/selectors4/focus-display-none-001.html @@ -0,0 +1,50 @@ + + +Selectors Level 4: focus + + + + + + +
    + +
    + diff --git a/tests/wpt/web-platform-tests/css/selectors4/focus-within-006-ref.html b/tests/wpt/web-platform-tests/css/selectors4/focus-within-006-ref.html new file mode 100644 index 00000000000..b93c156876a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/selectors4/focus-within-006-ref.html @@ -0,0 +1,32 @@ + + + +Selectors Level 4: focus-within Reference File + + +

    Test passes if, when the element below is focused, +it is surrounded by a thick green border. +There must be no red or blue once it is focused.

    +
    + +
    + + diff --git a/tests/wpt/web-platform-tests/css/selectors4/focus-within-006.html b/tests/wpt/web-platform-tests/css/selectors4/focus-within-006.html index 4a515d7ac48..ff63cceb6e7 100644 --- a/tests/wpt/web-platform-tests/css/selectors4/focus-within-006.html +++ b/tests/wpt/web-platform-tests/css/selectors4/focus-within-006.html @@ -5,12 +5,10 @@ - + +

    Test passes if there is a green rectangle below.

    +
    +
    +
    + + diff --git a/tests/wpt/web-platform-tests/css/selectors4/focus-within-display-none-001.html b/tests/wpt/web-platform-tests/css/selectors4/focus-within-display-none-001.html new file mode 100644 index 00000000000..a15f031fa2c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/selectors4/focus-within-display-none-001.html @@ -0,0 +1,58 @@ + + +Selectors Level 4: focus-within + + + + + + +
    + +
    + diff --git a/tests/wpt/web-platform-tests/css/selectors4/focus-within-shadow-001.html b/tests/wpt/web-platform-tests/css/selectors4/focus-within-shadow-001.html index df94e36b343..012a7741292 100644 --- a/tests/wpt/web-platform-tests/css/selectors4/focus-within-shadow-001.html +++ b/tests/wpt/web-platform-tests/css/selectors4/focus-within-shadow-001.html @@ -31,11 +31,9 @@ var shadow = document.getElementById('shadow-host').attachShadow({mode: 'open'}) var template = document.getElementById('shadow-template'); var instance = document.importNode(template.content, true); shadow.appendChild(instance); -window.setTimeout(function() { - var focusme = shadow.getElementById('focusme'); - focusme.focus(); - document.documentElement.classList.remove('reftest-wait'); -}, 0); +var focusme = shadow.getElementById('focusme'); +focusme.focus(); +document.documentElement.classList.remove('reftest-wait'); diff --git a/tests/wpt/web-platform-tests/css/selectors4/focus-within-shadow-002.html b/tests/wpt/web-platform-tests/css/selectors4/focus-within-shadow-002.html index fcea010ba23..50b30df424e 100644 --- a/tests/wpt/web-platform-tests/css/selectors4/focus-within-shadow-002.html +++ b/tests/wpt/web-platform-tests/css/selectors4/focus-within-shadow-002.html @@ -32,11 +32,9 @@ var shadow = document.getElementById('shadow-host').attachShadow({mode: 'open'}) var template = document.getElementById('shadow-template'); var instance = document.importNode(template.content, true); shadow.appendChild(instance); -window.setTimeout(function() { - var focusme = shadow.getElementById('focusme'); - focusme.focus(); - document.documentElement.classList.remove('reftest-wait'); -}, 0); +var focusme = shadow.getElementById('focusme'); +focusme.focus(); +document.documentElement.classList.remove('reftest-wait'); diff --git a/tests/wpt/web-platform-tests/css/selectors4/focus-within-shadow-003.html b/tests/wpt/web-platform-tests/css/selectors4/focus-within-shadow-003.html index 330d1a197cc..48901b215b5 100644 --- a/tests/wpt/web-platform-tests/css/selectors4/focus-within-shadow-003.html +++ b/tests/wpt/web-platform-tests/css/selectors4/focus-within-shadow-003.html @@ -34,11 +34,9 @@ var shadow = document.getElementById('shadow-host').attachShadow({mode: 'open'}) var template = document.getElementById('shadow-template'); var instance = document.importNode(template.content, true); shadow.appendChild(instance); -window.setTimeout(function() { - var focusme = shadow.getElementById('focusme'); - focusme.focus(); - document.documentElement.classList.remove('reftest-wait'); -}, 0); +var focusme = shadow.getElementById('focusme'); +focusme.focus(); +document.documentElement.classList.remove('reftest-wait'); diff --git a/tests/wpt/web-platform-tests/css/selectors4/focus-within-shadow-004.html b/tests/wpt/web-platform-tests/css/selectors4/focus-within-shadow-004.html index 49cf14832a1..6beed1fc131 100644 --- a/tests/wpt/web-platform-tests/css/selectors4/focus-within-shadow-004.html +++ b/tests/wpt/web-platform-tests/css/selectors4/focus-within-shadow-004.html @@ -40,11 +40,9 @@ var shadow = document.getElementById('shadow-host').attachShadow({mode: 'open'}) var template = document.getElementById('shadow-template'); var instance = document.importNode(template.content, true); shadow.appendChild(instance); -window.setTimeout(function() { - var focusme = shadow.getElementById('focusme'); - focusme.focus(); - document.documentElement.classList.remove('reftest-wait'); -}, 0); +var focusme = shadow.getElementById('focusme'); +focusme.focus(); +document.documentElement.classList.remove('reftest-wait'); diff --git a/tests/wpt/web-platform-tests/css/selectors4/focus-within-shadow-005.html b/tests/wpt/web-platform-tests/css/selectors4/focus-within-shadow-005.html index 500cdd3811c..c645d62f760 100644 --- a/tests/wpt/web-platform-tests/css/selectors4/focus-within-shadow-005.html +++ b/tests/wpt/web-platform-tests/css/selectors4/focus-within-shadow-005.html @@ -44,18 +44,14 @@ var template = document.getElementById('shadow-template'); var instance = document.importNode(template.content, true); shadow.appendChild(instance); -window.setTimeout(function() { shadow = shadow.getElementById('nested-shadow-host').attachShadow({mode: 'open'}); template = document.getElementById('nested-shadow-template'); instance = document.importNode(template.content, true); shadow.appendChild(instance); -}, 0); -window.setTimeout(function() { - var focusme = shadow.getElementById('focusme'); - focusme.focus(); - document.documentElement.classList.remove('reftest-wait'); -}, 0); +var focusme = shadow.getElementById('focusme'); +focusme.focus(); +document.documentElement.classList.remove('reftest-wait'); diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/masking/mask-composite-1d.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/masking/mask-composite-1d.html new file mode 100644 index 00000000000..efd26ecb3d1 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/masking/mask-composite-1d.html @@ -0,0 +1,61 @@ + + + + + CSS Masking: mask-composite: compose vector image + + + + + + + + +
    +
    +
    +
    + + diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/masking/mask-mode-d.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/masking/mask-mode-d.html new file mode 100644 index 00000000000..f36f032f52c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/masking/mask-mode-d.html @@ -0,0 +1,60 @@ + + + + + CSS Masking: mask-mode with raster image + + + + + + + + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/masking/reftest.list b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/masking/reftest.list index b7e33c93018..0c24b6a310b 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/masking/reftest.list +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/masking/reftest.list @@ -4,6 +4,7 @@ == mask-composite-1a.html mask-composite-1-ref.html == mask-composite-1b.html mask-composite-1-ref.html == mask-composite-1c.html mask-composite-1-ref.html +== mask-composite-1d.html mask-composite-1-ref.html == mask-composite-2a.html mask-composite-2-ref.html == mask-composite-2b.html mask-composite-2-ref.html == mask-composite-2c.html mask-composite-2-ref.html @@ -12,6 +13,7 @@ == mask-mode-a.html mask-mode-ref.html == mask-mode-b.html mask-mode-ref.html == mask-mode-c.html mask-mode-ref.html +== mask-mode-d.html mask-mode-ref.html == mask-mode-to-mask-type.html mask-mode-to-mask-type-ref.html # mask-image test cases diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/selectors4/class-id-attr-selector-invalidation-01-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/selectors4/class-id-attr-selector-invalidation-01-ref.html new file mode 100644 index 00000000000..a3cc6d3d8f5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/selectors4/class-id-attr-selector-invalidation-01-ref.html @@ -0,0 +1,9 @@ + + +CSS test reference + + +
    This should be green
    +
    And this too
    diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/selectors4/class-id-attr-selector-invalidation-01.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/selectors4/class-id-attr-selector-invalidation-01.html new file mode 100644 index 00000000000..1a22ad4fdcc --- /dev/null +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/selectors4/class-id-attr-selector-invalidation-01.html @@ -0,0 +1,24 @@ + + +CSS Test: [id] and [class] attribute selectors are invalidated correctly. + + + + +
    This should be green
    +
    And this too
    + diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/selectors4/reftest.list b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/selectors4/reftest.list index 2f881e0abae..4e0cf10d5ae 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/selectors4/reftest.list +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/selectors4/reftest.list @@ -9,3 +9,4 @@ == dir-style-03b.html dir-style-03-ref.html == dir-style-04.html dir-style-04-ref.html == child-index-no-parent-01.html child-index-no-parent-01-ref.html +== class-id-attr-selector-invalidation-01.html class-id-attr-selector-invalidation-01-ref.html diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/transforms/perspective-containing-block-dynamic-1a.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/transforms/perspective-containing-block-dynamic-1a.html index dcf7f2f4a8d..51e76745b5a 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/transforms/perspective-containing-block-dynamic-1a.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/transforms/perspective-containing-block-dynamic-1a.html @@ -3,7 +3,7 @@ CSS transforms: Creating containing block for fixed positioned elements - + diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/transforms/perspective-containing-block-dynamic-1b.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/transforms/perspective-containing-block-dynamic-1b.html index 12f8299fd84..a417bd482eb 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/transforms/perspective-containing-block-dynamic-1b.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/transforms/perspective-containing-block-dynamic-1b.html @@ -3,7 +3,7 @@ CSS transforms: Creating containing block for fixed positioned elements - + diff --git a/tests/wpt/web-platform-tests/css/work-in-progress/hixie/comments-010.xht b/tests/wpt/web-platform-tests/css/work-in-progress/hixie/comments-010.xht deleted file mode 100644 index 82c5c541f7b..00000000000 --- a/tests/wpt/web-platform-tests/css/work-in-progress/hixie/comments-010.xht +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - -

    This line should be green.

    - - \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/base.css b/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/base.css index 19f8edb08a3..2a86fb7c3f8 100644 --- a/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/base.css +++ b/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/base.css @@ -11,7 +11,7 @@ x-caption { display: table-caption; } /* layout of the page */ - + hr + p { font-weight: bold; margin-bottom: 0; } p + p { margin-top: 0; } diff --git a/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/bounding-box-computation-1.html b/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/bounding-box-computation-1.html index 862af05e450..c2819c51fce 100644 --- a/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/bounding-box-computation-1.html +++ b/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/bounding-box-computation-1.html @@ -1,8 +1,8 @@ - +

    Bounding box computation

    @@ -19,7 +19,7 @@ - +
    \ No newline at end of file + + diff --git a/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/bounding-box-computation-2.html b/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/bounding-box-computation-2.html index 09e3d521739..45f6cbc5e50 100644 --- a/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/bounding-box-computation-2.html +++ b/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/bounding-box-computation-2.html @@ -1,8 +1,8 @@ - +

    Bounding box computation

    @@ -19,7 +19,7 @@ - +
    \ No newline at end of file + + diff --git a/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/bounding-box-computation-3.html b/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/bounding-box-computation-3.html index a5bf7f1c2be..fc9c399e153 100644 --- a/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/bounding-box-computation-3.html +++ b/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/bounding-box-computation-3.html @@ -1,8 +1,8 @@ - +

    Bounding box computation

    @@ -19,7 +19,7 @@ - +
    \ No newline at end of file + + diff --git a/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/caption-side-1.html b/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/caption-side-1.html index cd4c08b36b5..3754ce4d2dc 100644 --- a/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/caption-side-1.html +++ b/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/caption-side-1.html @@ -1,8 +1,8 @@ - +

    Caption-side

    @@ -20,23 +20,23 @@
    - +
    \ No newline at end of file + + diff --git a/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/fixed-layout-1.html b/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/fixed-layout-1.html index 379e8a7c74d..046f94d6d0e 100644 --- a/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/fixed-layout-1.html +++ b/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/fixed-layout-1.html @@ -1,8 +1,8 @@ - +

    Fixed Layout

    @@ -25,7 +25,7 @@ - +

    This should be a 100px-wide blue square:

    Widths defined on cells that are not the first row are ignored

    @@ -33,7 +33,7 @@ - +

    This should be a 100px-wide blue square:

    The table has to grow to contain the widths defined for its columns

    @@ -41,7 +41,7 @@ - +

    This should be a 100px-wide blue square:

    The first row is based on the visual order, not the dom order

    @@ -49,7 +49,7 @@ - +
    \ No newline at end of file + + diff --git a/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/fixed-layout-2.html b/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/fixed-layout-2.html index 4c865cc67e6..35a6e4b8a98 100644 --- a/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/fixed-layout-2.html +++ b/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/fixed-layout-2.html @@ -1,8 +1,8 @@ - +

    Fixed Layout

    @@ -17,7 +17,7 @@ - +

    This should be a 100px-wide blue square:

    Table-layout:fixed does not apply to width:max-content tables

    @@ -27,7 +27,7 @@ - +

    This should be a 100px-wide blue square:

    Table-layout:fixed does not apply to width:min-content/fit-content tables

    @@ -43,7 +43,7 @@ - +
    \ No newline at end of file + + diff --git a/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/height-distribution/computing-row-measure-0.html b/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/height-distribution/computing-row-measure-0.html index 3b2e3a3e310..3dda06c64d5 100644 --- a/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/height-distribution/computing-row-measure-0.html +++ b/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/height-distribution/computing-row-measure-0.html @@ -1,7 +1,6 @@ - @@ -69,4 +68,4 @@ ] ]); - \ No newline at end of file + diff --git a/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/height-distribution/computing-row-measure-1.html b/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/height-distribution/computing-row-measure-1.html index bdf68ca622b..8e50e95d4b2 100644 --- a/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/height-distribution/computing-row-measure-1.html +++ b/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/height-distribution/computing-row-measure-1.html @@ -1,7 +1,6 @@ - @@ -92,4 +91,4 @@ ] ]); - \ No newline at end of file + diff --git a/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/height-distribution/percentage-sizing-of-table-cell-children.html b/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/height-distribution/percentage-sizing-of-table-cell-children.html index 2641398b3d7..d0e63ff5100 100644 --- a/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/height-distribution/percentage-sizing-of-table-cell-children.html +++ b/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/height-distribution/percentage-sizing-of-table-cell-children.html @@ -2,7 +2,6 @@ - - - + +

    There should be a 100px blue square below:

    Percentages resolve based on the row height

    @@ -63,11 +62,11 @@ - +

    There should be a 100px blue square below:

    Percentages resolve based on the final column width

    @@ -78,12 +77,12 @@ - - + +

    There should be a 100px blue square below:

    Percentages resolve based on the final row height

    @@ -96,12 +95,12 @@ - - + +

    There should be a blue and cyan rectangles of the same width:

    Unresolvable percentage widths are resolved as auto in first pass (replaced elements)

    @@ -112,12 +111,12 @@ - - + +

    There should be a blue and cyan rectangles below of the same height:

    Unresolvable percentage heights are resolved as auto in first pass (replaced elements)

    @@ -128,12 +127,12 @@ - - + +

    There should be a 100px blue square below:

    Unresolvable percentage widths are resolved as auto in first pass (unscrollable overflow)

    @@ -143,12 +142,12 @@ - - + +

    There should be a 100px blue square below:

    Unresolvable percentage heights are resolved as auto in first pass (unscrollable overflow)

    @@ -160,12 +159,12 @@ - - + +

    There should be a 100px blue square below:

    Unresolvable percentage widths are resolved as auto in first pass (scrollable overflow)

    @@ -175,12 +174,12 @@ - - + +

    There should be a 100px blue square below:

    Unresolvable percentage heights are resolved as 0px in first pass (scrollable overflow)

    @@ -191,9 +190,9 @@ - - \ No newline at end of file + + diff --git a/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/html-to-css-mapping-1.html b/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/html-to-css-mapping-1.html index ad9f3488bc3..7995ece78c5 100644 --- a/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/html-to-css-mapping-1.html +++ b/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/html-to-css-mapping-1.html @@ -1,8 +1,9 @@ - + +

    HTML-2-CSS Mapping

    @@ -12,51 +13,51 @@

    You should see a 5 2px blue square here, separated by 2px each:

    Because of the lack of the table element, border-spacing is 0; padding on each td should be 1px on each side. 1px*2*5=10px.

    - +

    You should see a 10px blue square here:

    Because of the lack of the table element, border-spacing is 0; padding on each td should be 1px on each side. 1px*2*5=10px.

    - +

    You should see a 12px blue square here:

    The table has the background; x-td elements have no padding, only the border-spacing remains. 6*2px=12px.

    - +

    You shouldn't see anything here:

    The table has the background but is empty; it does not apply border-spacing in this case.

    - + - +
    \ No newline at end of file + + diff --git a/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/html-to-css-mapping-2.html b/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/html-to-css-mapping-2.html index 8372b16e456..e2b111525aa 100644 --- a/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/html-to-css-mapping-2.html +++ b/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/html-to-css-mapping-2.html @@ -1,8 +1,8 @@ - +

    HTML-2-CSS Mapping

    @@ -49,7 +49,7 @@ border-color:gray comes from table[border=$w] > ...td

    - +

    4a: The border of the table element should be 1px outset gray:

    @@ -65,7 +65,7 @@ border-color:gray comes from table[rules=all] > ... td

    - +

    5a: The left border of the table element should be ? hidden ?:

    @@ -84,143 +84,143 @@


    - +
    \ No newline at end of file + + diff --git a/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/html5-table-formatting-1.html b/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/html5-table-formatting-1.html index 1c76a2c1946..01bc33f3ad2 100644 --- a/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/html5-table-formatting-1.html +++ b/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/html5-table-formatting-1.html @@ -1,8 +1,8 @@ - +

    HTML5 Table Formatting algorithm (row/column grid computation)

    @@ -20,7 +20,7 @@ - +

    This should be a 50px by 50px blue square:

    The table grid is 0x1, so the table is empty and follows step 3B of the table layout algorithm

    @@ -54,45 +54,45 @@ - +
    \ No newline at end of file + + diff --git a/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/html5-table-formatting-2.html b/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/html5-table-formatting-2.html index 88957311336..34173649776 100644 --- a/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/html5-table-formatting-2.html +++ b/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/html5-table-formatting-2.html @@ -1,8 +1,9 @@ - + +

    HTML5 Table Formatting algorithm (row/column grid computation)

    @@ -30,7 +31,7 @@ - +

    This should be a 175px by 175px blue square:

    The table grid is 2x2, so the table is not empty and follows step 3A of the table layout algorithm (which adds anonymous cell boxes)

    @@ -42,7 +43,7 @@ - +

    This should be a 175px by 175px blue square:

    The table grid is 2x2, so the table is not empty and follows step 3A of the table layout algorithm (which adds anonymous cell boxes)

    @@ -54,7 +55,7 @@ - +

    This should be a 175px by 175px blue square:

    The table grid is 2x2, so the table is not empty and follows step 3A of the table layout algorithm (which adds anonymous cell boxes)

    @@ -66,7 +67,7 @@ - +

    This should be a 175px by 175px blue square:

    The table grid is 2x2, so the table is not empty and follows step 3A of the table layout algorithm (which adds anonymous cell boxes)

    @@ -78,72 +79,72 @@ - +
    \ No newline at end of file + + diff --git a/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/html5-table-formatting-3.html b/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/html5-table-formatting-3.html index ea878a6c4cd..0b6cdd8760e 100644 --- a/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/html5-table-formatting-3.html +++ b/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/html5-table-formatting-3.html @@ -1,8 +1,9 @@ - + +

    HTML5 Table Formatting algorithm (row/column grid computation)

    @@ -49,7 +50,7 @@ - +
    \ No newline at end of file + + diff --git a/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/html5-table-formatting-fixed-layout-1.html b/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/html5-table-formatting-fixed-layout-1.html index ca61c26a9cb..0e6373505f9 100644 --- a/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/html5-table-formatting-fixed-layout-1.html +++ b/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/html5-table-formatting-fixed-layout-1.html @@ -1,8 +1,8 @@ - +

    HTML5 Table Formatting algorithm and Fixed Layout (row/column grid computation)

    @@ -18,7 +18,7 @@
    - +
    \ No newline at end of file + + diff --git a/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/markup-generator.html b/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/markup-generator.html index 08a11fb6989..3509712cb36 100644 --- a/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/markup-generator.html +++ b/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/markup-generator.html @@ -6,7 +6,7 @@ var textarea = document.querySelector('textarea'); var testingBorderAttributes = true; var seed = 0; - + // This is not meant to be a good random number generator; I literally don't care function XorshiftMath(seed) { var x = 1; @@ -23,7 +23,7 @@ return (w%1024)/1024; } } - + var rndGen = new XorshiftMath(seed); function rnd(x) { return x > rndGen.random(); @@ -32,15 +32,15 @@ var i = list.length; while(i>1 && rnd(1/i)) { i--; } return list[i-1]; } - + function generateMarkup(root) { if(rnd(0.99)) { - - // + + // // the table has a element - // + // var table = document.createElement('table'); - + // if(testingBorderAttributes) { if(rnd(0.3)) { table.setAttribute('border',pickInList(['0','10','yes'])); } @@ -48,39 +48,39 @@ if(rnd(0.3)) { table.setAttribute('rules',pickInList(['all','rows','groups'])); } table.setAttribute("cellspacing","0"); } - - + + generateRowGroups(table); root.appendChild(table); - + } else { - + // // the table has no
    element - // - + // + generateRowGroup(root); - + } } - + function generateRowGroups(root) { if(rnd(0.5)) { - + generateRowGroup(root); while(rnd(0.25)) { generateRowGroup(root); } - + } else { - + generateRows(root); - + } } - + function generateRowGroup(root) { - + var tbody; if(rnd(0.7)) { tbody = document.createElement('tbody'); } else if (rnd(0.5)) { @@ -88,14 +88,14 @@ } else { tbody = document.createElement('tfoot'); } - + generateRows(tbody); root.appendChild(tbody); - + } - + function generateRows(root) { - + while(rnd(0.9)) { if(rnd(0.9)) { generateRow(root); @@ -103,19 +103,19 @@ generateCells(root); } } - + } - + function generateRow(root) { - + var tr = document.createElement('tr'); generateCells(tr); root.appendChild(tr); - + } - + function generateCells(root) { - + while(rnd(0.9)) { if(rnd(0.9)) { generateCell(root); @@ -123,30 +123,30 @@ generateCellContent(root); } } - + } - + function generateCell(root) { - + var td = document.createElement( rnd(0.9) ? 'td' : 'th' ); generateCellContent(td); root.appendChild(td); - + } - + function generateCellContent() { // for now, do nothing } - + for(var i = 10; i--;) { //document.write(""); } - + if(navigator.userAgent.indexOf("Edge") == -1) { var downloadLink = document.createElement('a'); downloadLink.setAttribute("download","report.txt"); @@ -154,23 +154,23 @@ downloadLink.textContent = "download"; document.body.appendChild(downloadLink); } - + function appendReportFor(markup) { var report = markup.innerHTML + '\r\n\r\n'; - + // // append markup to the dom - // + // var root = document.querySelector('aside'); root.innerHTML = ''; root.appendChild(markup); - + // // output box stats // var boxes = markup.getElementsByTagName("*"); for(var i = 0; i \ No newline at end of file + + diff --git a/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/table-model-fixup-2.html b/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/table-model-fixup-2.html index d38878cbd63..81770d517c4 100644 --- a/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/table-model-fixup-2.html +++ b/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/table-model-fixup-2.html @@ -1,8 +1,8 @@ - + -
    -

    Width Distribution

    -

    "Computing the table width"

    -

    This is testing that the table root's width when the TABLEROOT width is auto Spec Text

    - - - - - - - - - - - - - -
    - - - \ No newline at end of file + + + + + + + + + +
    +

    Width Distribution

    +

    "Computing the table width"

    +

    This is testing that the table root's width when the TABLEROOT width is auto Spec Text

    + + + + + + + + + + + + + +
    + + + diff --git a/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/width-distribution/distribution-algo-1.html b/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/width-distribution/distribution-algo-1.html index 0f2aa85b105..13779eed94f 100644 --- a/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/width-distribution/distribution-algo-1.html +++ b/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/width-distribution/distribution-algo-1.html @@ -1,7 +1,6 @@ - @@ -17,7 +16,7 @@

    Width Distribution

    "Distribution Algorithm"

    -

    Tests the first step that all cells get their min content guess which is that +

    Tests the first step that all cells get their min content guess which is that of their min content Spec Text

    @@ -59,4 +58,4 @@ ] ]); - \ No newline at end of file + diff --git a/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/width-distribution/distribution-algo-2.html b/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/width-distribution/distribution-algo-2.html index 0f2aa85b105..13779eed94f 100644 --- a/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/width-distribution/distribution-algo-2.html +++ b/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/width-distribution/distribution-algo-2.html @@ -1,7 +1,6 @@ - @@ -17,7 +16,7 @@

    Width Distribution

    "Distribution Algorithm"

    -

    Tests the first step that all cells get their min content guess which is that +

    Tests the first step that all cells get their min content guess which is that of their min content Spec Text

    @@ -59,4 +58,4 @@ ] ]); - \ No newline at end of file + diff --git a/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/width-distribution/distribution-algo-min-content-guess.html b/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/width-distribution/distribution-algo-min-content-guess.html index a6ef2bfb60b..87d67fadbfe 100644 --- a/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/width-distribution/distribution-algo-min-content-guess.html +++ b/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/width-distribution/distribution-algo-min-content-guess.html @@ -1,7 +1,6 @@ - @@ -17,7 +16,7 @@

    Width Distribution

    "Distribution Algorithm - min-content guess"

    -

    Tests the first step that all cells get their min content guess which is that +

    Tests the first step that all cells get their min content guess which is that of their min content Spec Text

    @@ -59,4 +58,4 @@ ] ]); - \ No newline at end of file + diff --git a/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/width-distribution/distribution-algo-min-content-percent-guess.html b/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/width-distribution/distribution-algo-min-content-percent-guess.html index 48feddc7726..66d086af6b6 100644 --- a/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/width-distribution/distribution-algo-min-content-percent-guess.html +++ b/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/width-distribution/distribution-algo-min-content-percent-guess.html @@ -1,7 +1,6 @@ - @@ -62,4 +61,4 @@ ] ]); - \ No newline at end of file + diff --git a/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/width-distribution/distribution-algo-min-content-specified-guess.1.html b/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/width-distribution/distribution-algo-min-content-specified-guess.1.html index 2123e66d2ba..0bca27ccf6f 100644 --- a/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/width-distribution/distribution-algo-min-content-specified-guess.1.html +++ b/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/width-distribution/distribution-algo-min-content-specified-guess.1.html @@ -1,7 +1,6 @@ - @@ -21,7 +20,7 @@

    Width Distribution

    "Distribution Algorithm - min-content-specified guess"

    -

    Tests that the size of the column as the spec states that if the cell is constrained then the +

    Tests that the size of the column as the spec states that if the cell is constrained then the Spec Text

    @@ -49,4 +48,4 @@ ] ]); - \ No newline at end of file + diff --git a/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/width-distribution/distribution-algo-min-content-specified-guess.html b/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/width-distribution/distribution-algo-min-content-specified-guess.html index a8db31fa8a1..a6aea8ba909 100644 --- a/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/width-distribution/distribution-algo-min-content-specified-guess.html +++ b/tests/wpt/web-platform-tests/css/work-in-progress/microsoft/css-tables/width-distribution/distribution-algo-min-content-specified-guess.html @@ -1,7 +1,6 @@ - @@ -21,7 +20,7 @@

    Width Distribution

    "Distribution Algorithm - min-content-specified guess"

    -

    Tests that the size of the column as the spec states that if the cell is constrained then the +

    Tests that the size of the column as the spec states that if the cell is constrained then the Spec Text

    @@ -49,4 +48,4 @@ ] ]); - \ No newline at end of file + diff --git a/tests/wpt/web-platform-tests/cssom-view/MediaQueryList-001.html b/tests/wpt/web-platform-tests/cssom-view/MediaQueryList-001.html index 65c70732288..06c81d5de4c 100644 --- a/tests/wpt/web-platform-tests/cssom-view/MediaQueryList-001.html +++ b/tests/wpt/web-platform-tests/cssom-view/MediaQueryList-001.html @@ -10,12 +10,11 @@ -

    This case tests the MediaQueryList -

    The test passes if the value is 1280/800

    +

    This case tests the MediaQueryList

    diff --git a/tests/wpt/web-platform-tests/cssom-view/cssom-view-window-screen-interface.html b/tests/wpt/web-platform-tests/cssom-view/cssom-view-window-screen-interface.html index 0d5e9bcaa54..7abd2e591e9 100644 --- a/tests/wpt/web-platform-tests/cssom-view/cssom-view-window-screen-interface.html +++ b/tests/wpt/web-platform-tests/cssom-view/cssom-view-window-screen-interface.html @@ -30,7 +30,7 @@ "window.screen.availWidth >= 0 && window.screen.availWidth <= window.screen.width"); test(function(){assert_true(window.screen.availHeight >= 0 && window.screen.availHeight <= window.screen.height);}, "window.screen.availHeight >= 0 && window.screen.availHeight <= window.screen.height"); - test(function(){assert_true(window.screen.colorDepth == 0 || window.screen.colorDepth == 16 || window.screen.colorDepth == 24 || window.screen.colorDepth == 32);}, + test(function(){assert_in_array(window.screen.colorDepth, [0, 16, 24, 32]);}, "window.screen.colorDepth == 0 || window.screen.colorDepth == 16 || window.screen.colorDepth == 24 || window.screen.colorDepth == 32"); test(function(){assert_equals(window.screen.pixelDepth, window.screen.colorDepth);}, "window.screen.pixelDepth must return the value returned by window.screen.colorDepth"); diff --git a/tests/wpt/web-platform-tests/cssom-view/cssom-view/media-query-list-interface.xht b/tests/wpt/web-platform-tests/cssom-view/cssom-view/media-query-list-interface.xht index 7742bf1117a..98bdaae6ec4 100644 --- a/tests/wpt/web-platform-tests/cssom-view/cssom-view/media-query-list-interface.xht +++ b/tests/wpt/web-platform-tests/cssom-view/cssom-view/media-query-list-interface.xht @@ -18,10 +18,10 @@ var mediaQueryList; test( function(){ - assert_inherits(window, "matchMedia"); + assert_own_property(window, "matchMedia"); mediaQueryList = window.matchMedia('foo'); - }, 'window_inherits_matchmedia', { - assert: ['window.matchMedia is inherited. If this fails, the rest of the test fails.'] + }, 'window_exposes_matchmedia', { + assert: ['window.matchMedia is exposed by window. If this fails, the rest of the test fails.'] } ); /* @@ -50,10 +50,10 @@ */ test( function() { - assert_own_property(mediaQueryList, 'media'); - assert_own_property(mediaQueryList, 'matches'); + assert_inherits(mediaQueryList, 'media'); + assert_inherits(mediaQueryList, 'matches'); }, 'mediaquerylist_properties', { - assert: ['MediaQueryList properties are owned by window'] + assert: ['MediaQueryList properties are inherited'] } ); test( diff --git a/tests/wpt/web-platform-tests/cssom-view/cssom-view/window-interface.xht b/tests/wpt/web-platform-tests/cssom-view/cssom-view/window-interface.xht index ee1227d0291..2ed64cba6e6 100644 --- a/tests/wpt/web-platform-tests/cssom-view/cssom-view/window-interface.xht +++ b/tests/wpt/web-platform-tests/cssom-view/cssom-view/window-interface.xht @@ -15,8 +15,8 @@
    -
    - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc ultricies tortor eu augue eleifend malesuada. Duis id condimentum urna. Duis vulputate urna a dignissim sodales. Aenean et magna id dui rutrum suscipit. Etiam metus mauris, congue ac suscipit dapibus, mattis non neque. Donec porttitor eros sed mauris tristique, non condimentum augue feugiat. Suspendisse iaculis faucibus nunc at porttitor. Integer convallis enim in feugiat molestie. Ut eget tincidunt mi, vel malesuada lectus. Quisque fermentum neque a sapien interdum consectetur. Nam tincidunt leo sit amet tortor ornare, sit amet ultrices ante semper. Fusce malesuada mi vitae venenatis sagittis. Duis eget urna quam. - - Sed lacinia aliquam tortor quis elementum. Cras vitae mauris erat. Vestibulum posuere justo et dolor condimentum feugiat. Sed at magna nunc. Suspendisse est nunc, ultrices sed enim lobortis, vulputate rutrum mauris. Fusce ultrices eget erat blandit porta. Sed eros nulla, tristique eget porta a, viverra vel velit. Praesent sit amet odio eleifend, tempor arcu ut, elementum tellus. Suspendisse lorem tortor, sodales eget nulla a, rhoncus lobortis magna. Phasellus purus ante, rhoncus a ipsum nec, condimentum lacinia purus. Cras lobortis posuere nisi, vitae dapibus ante feugiat et. Quisque ornare nisi quis erat congue viverra. Vestibulum a nunc odio. - - Sed id venenatis tortor. Curabitur sit amet mauris eget mi semper rutrum vel et odio. Phasellus eu sapien in sem ultricies pretium eu sit amet magna. Nulla finibus nec lorem ac semper. Nulla eleifend eros id fringilla pellentesque. Proin eleifend, sem vel lobortis viverra, massa augue viverra felis, quis ultricies sapien ipsum at magna. Duis rutrum tempus lobortis. Aliquam quis nulla eget velit viverra pretium. Maecenas venenatis nec nisl at pulvinar. Duis in sodales lectus, ac porta augue. - - Sed sed ante aliquam, rutrum nisl quis, fermentum tellus. Proin ac leo molestie, euismod mauris sed, consequat nunc. Vivamus ut leo a nunc pharetra accumsan a non lorem. Aliquam iaculis mattis augue, in eleifend est accumsan vel. Pellentesque efficitur pulvinar leo vel ornare. Pellentesque non fermentum enim, ut efficitur elit. Duis risus quam, congue vel nulla a, blandit egestas erat. Suspendisse at sodales dolor. Vivamus auctor, lorem et ultrices venenatis, erat ex mollis nisi, quis maximus libero quam a libero. - - Curabitur elit lacus, bibendum non tempus a, bibendum sit amet ante. Mauris eget nibh quis leo rhoncus consequat. Integer iaculis sed sapien eu pellentesque. In aliquet elementum lorem, ut consequat elit ultrices id. Phasellus vestibulum ex ex, ac sagittis tortor convallis et. Curabitur placerat id lectus at aliquam. Morbi sed nisl sem. Nam sit amet arcu maximus, volutpat nisl ac, dignissim neque. Etiam nec efficitur libero. Quisque tristique pulvinar est, eget dictum ex vehicula non. Nam dignissim non felis a iaculis. Nullam vel dolor vitae libero aliquet congue. Donec mi eros, semper non lectus at, commodo ullamcorper ligula. Donec commodo, sem vel lacinia porttitor, elit orci maximus felis, eget eleifend est velit id lorem. -
    +
    @@ -59,16 +51,70 @@ test(function () { section.scroll(50, 60); - assert_equals(section.scrollLeft, 50, "changed scrollLeft should be 60"); - assert_equals(section.scrollTop, 60, "changed scrollTop should be 50"); - }, "Element scroll test"); + assert_equals(section.scrollLeft, 50, "changed scrollLeft should be 50"); + assert_equals(section.scrollTop, 60, "changed scrollTop should be 60"); + }, "Element scroll test (two arguments)"); + + test(function () { + section.scroll({left: 55, top: 65}); + + assert_equals(section.scrollLeft, 55, "changed scrollLeft should be 55"); + assert_equals(section.scrollTop, 65, "changed scrollTop should be 65"); + + section.scroll({left: 85}); + + assert_equals(section.scrollLeft, 85, "changed scrollLeft should be 85"); + assert_equals(section.scrollTop, 65, "scrollTop should stay at 65"); + + section.scroll({top: 75}); + + assert_equals(section.scrollLeft, 85, "scrollLeft should stay at 85"); + assert_equals(section.scrollTop, 75, "changed scrollTop should be 75"); + + section.scroll({}); + + assert_equals(section.scrollLeft, 85, "scrollLeft should stay at 85"); + assert_equals(section.scrollTop, 75, "scrollTop should stay at 75"); + + section.scroll(); + + assert_equals(section.scrollLeft, 85, "scrollLeft should stay at 85"); + assert_equals(section.scrollTop, 75, "scrollTop should stay at 75"); + }, "Element scroll test (one argument)"); test(function () { section.scrollTo(80, 70); assert_equals(section.scrollLeft, 80, "changed scrollLeft should be 70"); assert_equals(section.scrollTop, 70, "changed scrollTop should be 80"); - }, "Element scrollTo test"); + }, "Element scrollTo test (two arguments)"); + + test(function () { + section.scrollTo({left: 75, top: 85}); + + assert_equals(section.scrollLeft, 75, "changed scrollLeft should be 75"); + assert_equals(section.scrollTop, 85, "changed scrollTop should be 85"); + + section.scrollTo({left: 65}); + + assert_equals(section.scrollLeft, 65, "changed scrollLeft should be 65"); + assert_equals(section.scrollTop, 85, "scrollTop should stay at 85"); + + section.scrollTo({top: 55}); + + assert_equals(section.scrollLeft, 65, "scrollLeft should stay at 65"); + assert_equals(section.scrollTop, 55, "changed scrollTop should be 55"); + + section.scrollTo({}); + + assert_equals(section.scrollLeft, 65, "scrollLeft should stay at 65"); + assert_equals(section.scrollTop, 55, "scrollTop should stay at 55"); + + section.scrollTo(); + + assert_equals(section.scrollLeft, 65, "scrollLeft should stay at 55"); + assert_equals(section.scrollTop, 55, "scrollTop should stay at 55"); + }, "Element scrollTo test (one argument)"); test(function () { var left = section.scrollLeft; @@ -78,14 +124,48 @@ assert_equals(section.scrollLeft, left + 10, "increment of scrollLeft should be 10") assert_equals(section.scrollTop, top + 20, "increment of scrollTop should be 20") - }) + }, "Element scrollBy test (two arguments)"); + + test(function () { + var left = section.scrollLeft; + var top = section.scrollTop; + + section.scrollBy({left: 5, top: 15}); + left += 5 + top += 15 + + assert_equals(section.scrollLeft, left, "increment of scrollLeft should be 5") + assert_equals(section.scrollTop, top, "increment of scrollTop should be 15") + + section.scrollBy({left: -15}); + left -= 15 + + assert_equals(section.scrollLeft, left, "decrement of scrollLeft should be 15") + assert_equals(section.scrollTop, top, "scrollTop should not be modified") + + section.scrollBy({top: -5}); + top -= 5; + + assert_equals(section.scrollLeft, left, "scrollLeft should not be modified") + assert_equals(section.scrollTop, top, "decrement of scrollTop should be 5") + + section.scrollBy({}); + + assert_equals(section.scrollLeft, left, "scrollLeft should not be modified") + assert_equals(section.scrollTop, top, "scrollTop should not be modified") + + section.scrollBy(); + + assert_equals(section.scrollLeft, left, "scrollLeft should not be modified") + assert_equals(section.scrollTop, top, "scrollTop should not be modified") + }, "Element scrollBy test (one argument)"); test(function () { section.scrollTop = 1000; section.scrollLeft = 1000; - assert_equals(section.scrollTop, 636, "changed scrollTop should be 636"); - assert_equals(section.scrollLeft, 100, "changed scrollLeft should be 100"); + assert_equals(section.scrollTop, 700 - 500, "changed scrollTop should be 200"); + assert_equals(section.scrollLeft, 400 - 300, "changed scrollLeft should be 100"); }, "Element scroll maximum test"); diff --git a/tests/wpt/web-platform-tests/cssom-view/htmlelement-offset-width-001.html b/tests/wpt/web-platform-tests/cssom-view/htmlelement-offset-width-001.html index 1d48779db65..9171997e2a9 100644 --- a/tests/wpt/web-platform-tests/cssom-view/htmlelement-offset-width-001.html +++ b/tests/wpt/web-platform-tests/cssom-view/htmlelement-offset-width-001.html @@ -19,7 +19,9 @@ el.appendChild(document.createTextNode("...")); assert_equals(el.offsetWidth, 0, "new element has offset width not equal to zero"); assert_not_equals(document.getElementById("myDiv"), 0, "element with content has offset width equal to zero"); - document.documentElement.remove(); + var html = document.removeChild(document.documentElement); + // Put back the root element, so that testharnessreport.js can append the result. + this.add_cleanup(function() { document.appendChild(html); }); assert_equals(el.offsetWidth, 0, "new element has offset width not equal to zero after removing documentElement"); }); diff --git a/tests/wpt/web-platform-tests/cssom-view/offsetParent_element_test.html b/tests/wpt/web-platform-tests/cssom-view/offsetParent_element_test.html index 473120f4b9b..aa4a1e55e27 100644 --- a/tests/wpt/web-platform-tests/cssom-view/offsetParent_element_test.html +++ b/tests/wpt/web-platform-tests/cssom-view/offsetParent_element_test.html @@ -109,7 +109,7 @@ test(function() { assert_equals(none_element_child_video.offsetParent,null); assert_equals(none_element_child_audio.offsetParent,null); assert_equals(none_element_child_canvas.offsetParent,null); - assert_equals(none_element_child_svg.offsetParent,null); + assert_equals(none_element_child_svg.offsetParent,undefined); }, "Valid the algorithm rule of offsetParent check step 1", { assert: "The offsetParent attribute algorithm rule checking passed!" } ); diff --git a/tests/wpt/web-platform-tests/cssom-view/scrollIntoView-empty-args.html b/tests/wpt/web-platform-tests/cssom-view/scrollIntoView-empty-args.html new file mode 100644 index 00000000000..8ffd68a4149 --- /dev/null +++ b/tests/wpt/web-platform-tests/cssom-view/scrollIntoView-empty-args.html @@ -0,0 +1,50 @@ + + + +Check End Position of scrollIntoView when arg is not fully specified +
    +
    +
    +
    + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/cssom-view/scrollIntoView-shadow.html b/tests/wpt/web-platform-tests/cssom-view/scrollIntoView-shadow.html new file mode 100644 index 00000000000..6d44df6e4ea --- /dev/null +++ b/tests/wpt/web-platform-tests/cssom-view/scrollIntoView-shadow.html @@ -0,0 +1,33 @@ + + + +Check End Position of scrollIntoView of shadow elements +
    +
    +
    +
    +
    +
    +
    + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/cssom-view/scrollIntoView-smooth.html b/tests/wpt/web-platform-tests/cssom-view/scrollIntoView-smooth.html new file mode 100644 index 00000000000..8799b8bd7a7 --- /dev/null +++ b/tests/wpt/web-platform-tests/cssom-view/scrollIntoView-smooth.html @@ -0,0 +1,101 @@ + + + +Check End Position of smooth scrollIntoView +
    +
    +
    +
    +
    + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/cssom-view/scrolling-quirks-vs-nonquirks.html b/tests/wpt/web-platform-tests/cssom-view/scrolling-quirks-vs-nonquirks.html new file mode 100644 index 00000000000..568f572ac22 --- /dev/null +++ b/tests/wpt/web-platform-tests/cssom-view/scrolling-quirks-vs-nonquirks.html @@ -0,0 +1,220 @@ + + +cssom-view - scrolling quirks VS nonquirks mode + + + + + +
    + diff --git a/tests/wpt/web-platform-tests/cssom/CSSKeyframeRule.html b/tests/wpt/web-platform-tests/cssom/CSSKeyframeRule.html index 20067f95cd2..532aa6fa910 100644 --- a/tests/wpt/web-platform-tests/cssom/CSSKeyframeRule.html +++ b/tests/wpt/web-platform-tests/cssom/CSSKeyframeRule.html @@ -41,4 +41,11 @@ assert_equals(toRule.style.marginLeft, "-5%"); assert_equals(toRule.style.width, "50%"); }, "CSSKeyframeRule: style property"); + + test(function() { + fromRule.style = "margin-left: 50%; width: 100%;"; + + assert_equals(fromRule.style.marginLeft, "50%", "margin-left"); + assert_equals(fromRule.style.width, "100%", "width"); + }, "CSSKeyframeRule: style property has [PutForwards]"); diff --git a/tests/wpt/web-platform-tests/cssom/CSSStyleRule.html b/tests/wpt/web-platform-tests/cssom/CSSStyleRule.html index 626301a9fb0..3acdfb12852 100644 --- a/tests/wpt/web-platform-tests/cssom/CSSStyleRule.html +++ b/tests/wpt/web-platform-tests/cssom/CSSStyleRule.html @@ -101,6 +101,13 @@ assert_equals(rule.style.padding, "5px"); assert_equals(rule.style.border, "1px solid"); }, "Mutability of CSSStyleRule's style attribute"); + + test(function() { + rule.style = "margin: 15px; padding: 2px;"; + + assert_equals(rule.style.margin, "15px", "margin"); + assert_equals(rule.style.padding, "2px", "padding"); + }, "CSSStyleRule's style has [PutForwards]"); diff --git a/tests/wpt/web-platform-tests/cssom/getComputedStyle-pseudo.html b/tests/wpt/web-platform-tests/cssom/getComputedStyle-pseudo.html new file mode 100644 index 00000000000..8efd484fc21 --- /dev/null +++ b/tests/wpt/web-platform-tests/cssom/getComputedStyle-pseudo.html @@ -0,0 +1,43 @@ + + +CSSOM: Correct resolution of resolved value for display-affected pseudo-elements + + + + + + +
    +
    +
    + diff --git a/tests/wpt/web-platform-tests/cssom/insertRule-charset-no-index.html b/tests/wpt/web-platform-tests/cssom/insertRule-charset-no-index.html new file mode 100644 index 00000000000..b94dc11afae --- /dev/null +++ b/tests/wpt/web-platform-tests/cssom/insertRule-charset-no-index.html @@ -0,0 +1,32 @@ + + + + CSS Test: CSSOM StyleSheet insertRule with charset and omitted second argument + + + + + + + + + +
    + + + diff --git a/tests/wpt/web-platform-tests/cssom/insertRule-import-no-index.html b/tests/wpt/web-platform-tests/cssom/insertRule-import-no-index.html new file mode 100644 index 00000000000..c97d3949487 --- /dev/null +++ b/tests/wpt/web-platform-tests/cssom/insertRule-import-no-index.html @@ -0,0 +1,33 @@ + + + + CSS Test: CSSOM StyleSheet insertRule with import and omitted second argument + + + + + + + + + +
    + + + diff --git a/tests/wpt/web-platform-tests/cssom/insertRule-namespace-no-index.html b/tests/wpt/web-platform-tests/cssom/insertRule-namespace-no-index.html new file mode 100644 index 00000000000..8a3315d8606 --- /dev/null +++ b/tests/wpt/web-platform-tests/cssom/insertRule-namespace-no-index.html @@ -0,0 +1,40 @@ + + + + CSS Test: CSSOM StyleSheet insertRule with namespace and omitted second argument + + + + + + + + + +
    + + + diff --git a/tests/wpt/web-platform-tests/cssom/insertRule-no-index.html b/tests/wpt/web-platform-tests/cssom/insertRule-no-index.html new file mode 100644 index 00000000000..c9704b7475a --- /dev/null +++ b/tests/wpt/web-platform-tests/cssom/insertRule-no-index.html @@ -0,0 +1,35 @@ + + + + CSS Test: CSSOM StyleSheet insertRule omitted second argument + + + + + + + + + +
    + + + diff --git a/tests/wpt/web-platform-tests/cssom/support/import-charset.css b/tests/wpt/web-platform-tests/cssom/support/import-charset.css new file mode 100644 index 00000000000..9f44090c94a --- /dev/null +++ b/tests/wpt/web-platform-tests/cssom/support/import-charset.css @@ -0,0 +1 @@ +@charset "UTF-8"; diff --git a/tests/wpt/web-platform-tests/cssom/variable-names.html b/tests/wpt/web-platform-tests/cssom/variable-names.html new file mode 100644 index 00000000000..b951b7dfbb2 --- /dev/null +++ b/tests/wpt/web-platform-tests/cssom/variable-names.html @@ -0,0 +1,47 @@ + + +Tests for handling of CSS Custom Property names + + + +
    + diff --git a/tests/wpt/web-platform-tests/custom-elements/custom-element-registry/per-global.html b/tests/wpt/web-platform-tests/custom-elements/custom-element-registry/per-global.html new file mode 100644 index 00000000000..3570dcf811d --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/custom-element-registry/per-global.html @@ -0,0 +1,14 @@ + + +Custom Elements: CustomElementRegistry is per global + + + + + + + + diff --git a/tests/wpt/web-platform-tests/custom-elements/microtasks-and-constructors.html b/tests/wpt/web-platform-tests/custom-elements/microtasks-and-constructors.html new file mode 100644 index 00000000000..78d2cba42c0 --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/microtasks-and-constructors.html @@ -0,0 +1,123 @@ + +Custom elements: performing a microtask checkpoint after construction + + + + + + + +
    + + + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/docs/_writing-tests/css-metadata.md b/tests/wpt/web-platform-tests/docs/_writing-tests/css-metadata.md index 28ace9b6798..437d7f51ec6 100644 --- a/tests/wpt/web-platform-tests/docs/_writing-tests/css-metadata.md +++ b/tests/wpt/web-platform-tests/docs/_writing-tests/css-metadata.md @@ -66,8 +66,9 @@ href="https://www.w3.org/TR/CSS21/colors.html#background-properties" />
    - + diff --git a/tests/wpt/web-platform-tests/docs/_writing-tests/idlharness.html b/tests/wpt/web-platform-tests/docs/_writing-tests/idlharness.html deleted file mode 100644 index f9e18ef41fc..00000000000 --- a/tests/wpt/web-platform-tests/docs/_writing-tests/idlharness.html +++ /dev/null @@ -1,11 +0,0 @@ ---- -layout: page -title: idlharness.js API -order: 6 ---- - - diff --git a/tests/wpt/web-platform-tests/resources/docs/idlharness.md b/tests/wpt/web-platform-tests/docs/_writing-tests/idlharness.md similarity index 99% rename from tests/wpt/web-platform-tests/resources/docs/idlharness.md rename to tests/wpt/web-platform-tests/docs/_writing-tests/idlharness.md index 141077b3a72..76c121953c0 100644 --- a/tests/wpt/web-platform-tests/resources/docs/idlharness.md +++ b/tests/wpt/web-platform-tests/docs/_writing-tests/idlharness.md @@ -1,3 +1,9 @@ +--- +layout: page +title: idlharness.js API +order: 6 +--- + ## Introduction ## `idlharness.js` automatically generates browser tests for WebIDL interfaces, using diff --git a/tests/wpt/web-platform-tests/docs/_writing-tests/testharness-api.html b/tests/wpt/web-platform-tests/docs/_writing-tests/testharness-api.html deleted file mode 100644 index 80af9f0e1f0..00000000000 --- a/tests/wpt/web-platform-tests/docs/_writing-tests/testharness-api.html +++ /dev/null @@ -1,11 +0,0 @@ ---- -layout: page -title: testharness.js API -order: 5 ---- - - diff --git a/tests/wpt/web-platform-tests/resources/docs/api.md b/tests/wpt/web-platform-tests/docs/_writing-tests/testharness-api.md similarity index 98% rename from tests/wpt/web-platform-tests/resources/docs/api.md rename to tests/wpt/web-platform-tests/docs/_writing-tests/testharness-api.md index 133054f324d..d091d148e6a 100644 --- a/tests/wpt/web-platform-tests/resources/docs/api.md +++ b/tests/wpt/web-platform-tests/docs/_writing-tests/testharness-api.md @@ -1,3 +1,9 @@ +--- +layout: page +title: testharness.js API +order: 5 +--- + ## Introduction ## testharness.js provides a framework for writing testcases. It is intended to @@ -660,11 +666,13 @@ asserts that `actual` is strictly true asserts that `actual` is strictly false ### `assert_equals(actual, expected, description)` -asserts that `actual` is the same value as `expected` +asserts that `actual` is the same value as `expected`. +Relies on `===`, distinguishes between `-0` and `+0`, and has a specific check for `NaN`. ### `assert_not_equals(actual, expected, description)` asserts that `actual` is a different value to `expected`. This means that `expected` is a misnomer. +Relies on `===`, distinguishes between `-0` and `+0`, and has a specific check for `NaN`. ### `assert_in_array(actual, expected, description)` asserts that `expected` is an Array, and `actual` is equal to one of the @@ -728,8 +736,6 @@ assert that property `property_name` on object is readonly tests, a constant is also supported, e.g., "TIMEOUT_ERR") * object - the thrown exception must have a property called "name" that matches code.name - * null - allow any exception (in general, one of the options above - should be used) `func` - a function that should throw diff --git a/tests/wpt/web-platform-tests/docs/_writing-tests/testharness.md b/tests/wpt/web-platform-tests/docs/_writing-tests/testharness.md index 3da61849289..84aef5887b6 100644 --- a/tests/wpt/web-platform-tests/docs/_writing-tests/testharness.md +++ b/tests/wpt/web-platform-tests/docs/_writing-tests/testharness.md @@ -80,6 +80,12 @@ creating a `FileAPI/Blob-constructor.any.js` as follows: This test could then be run from `FileAPI/Blob-constructor.any.worker.html` as well as `FileAPI/Blob-constructor.any.html`. +To check if your test is run from a window or worker you can use the following two methods that will +be made available by the framework: + + self.GLOBAL.isWindow() + self.GLOBAL.isWorker() + ### Including other JavaScript resources in auto-generated boilerplate tests Use `// META: script=link/to/resource.js` at the beginning of the resource. For example, @@ -95,5 +101,5 @@ Use `// META: timeout=long` at the beginning of the resource. [general guidelines]: {{ site.baseurl }}{% link _writing-tests/general-guidelines.md %} -[testharness-api]: {{ site.baseurl }}{% link _writing-tests/testharness-api.html %} -[idlharness]: {{ site.baseurl }}{% link _writing-tests/idlharness.html %} +[testharness-api]: {{ site.baseurl }}{% link _writing-tests/testharness-api.md %} +[idlharness]: {{ site.baseurl }}{% link _writing-tests/idlharness.md %} diff --git a/tests/wpt/web-platform-tests/docs/assets/_reftest_graph_example.dot b/tests/wpt/web-platform-tests/docs/assets/_reftest_graph_example.dot index d9bdef76d06..9389f07dc2b 100644 --- a/tests/wpt/web-platform-tests/docs/assets/_reftest_graph_example.dot +++ b/tests/wpt/web-platform-tests/docs/assets/_reftest_graph_example.dot @@ -1,3 +1,5 @@ +# Generate with `$ dot -Tsvg -oreftest_graph_example.svg _reftest_graph_example.dot` + digraph reftest_graph_example { "a.html" -> "b.html" [label="=="]; "a.html" -> "c.html" [label="=="]; diff --git a/tests/wpt/web-platform-tests/docs/assets/main.scss b/tests/wpt/web-platform-tests/docs/assets/main.scss index e2a5d80eefe..4dc5e5c4147 100644 --- a/tests/wpt/web-platform-tests/docs/assets/main.scss +++ b/tests/wpt/web-platform-tests/docs/assets/main.scss @@ -93,18 +93,6 @@ nav.home { } -// TTWF include iframes -iframe.ttwf { - border: 1px solid grey; - width: 100%; - max-width: 990px; - height: 75vh; - margin: 0 auto; - display: block; - box-sizing: border-box; -} - - // Site nav (class name is to avoid conflict with minima defined .site-nav) .wpt-site-nav { float: right; diff --git a/tests/wpt/web-platform-tests/dom/events/Event-dispatch-click.html b/tests/wpt/web-platform-tests/dom/events/Event-dispatch-click.html index 760116beae9..29b0cae01d6 100644 --- a/tests/wpt/web-platform-tests/dom/events/Event-dispatch-click.html +++ b/tests/wpt/web-platform-tests/dom/events/Event-dispatch-click.html @@ -68,7 +68,7 @@ async_test(function(t) { var child = input.appendChild(document.createElement("input")) child.type = "checkbox" child.onclick = t.step_func(function() { - assert_true(input.checked, "child pre-click must be triggered") + assert_true(child.checked, "child pre-click must be triggered") }) child.dispatchEvent(new MouseEvent("click", {bubbles:true})) t.done() diff --git a/tests/wpt/web-platform-tests/dom/historical.html b/tests/wpt/web-platform-tests/dom/historical.html index d669ad4af12..c6fd00ff55c 100644 --- a/tests/wpt/web-platform-tests/dom/historical.html +++ b/tests/wpt/web-platform-tests/dom/historical.html @@ -1,4 +1,5 @@ + Historical DOM features must be removed diff --git a/tests/wpt/web-platform-tests/dom/interfaces.html b/tests/wpt/web-platform-tests/dom/interfaces.html index a8d827bde98..e6b12e3cbd4 100644 --- a/tests/wpt/web-platform-tests/dom/interfaces.html +++ b/tests/wpt/web-platform-tests/dom/interfaces.html @@ -8,571 +8,18 @@

    DOM IDL tests

    - - diff --git a/tests/wpt/web-platform-tests/dom/nodes/DOMImplementation-createDocumentType.html b/tests/wpt/web-platform-tests/dom/nodes/DOMImplementation-createDocumentType.html index ac79ddd7340..f7e6e18b844 100644 --- a/tests/wpt/web-platform-tests/dom/nodes/DOMImplementation-createDocumentType.html +++ b/tests/wpt/web-platform-tests/dom/nodes/DOMImplementation-createDocumentType.html @@ -80,9 +80,9 @@ test(function() { ["(", "", "", "INVALID_CHARACTER_ERR"], [")", "", "", "INVALID_CHARACTER_ERR"], ["f:oo", "", "", null], - [":foo", "", "", "NAMESPACE_ERR"], - ["foo:", "", "", "NAMESPACE_ERR"], - ["prefix::local", "", "", "NAMESPACE_ERR"], + [":foo", "", "", "INVALID_CHARACTER_ERR"], + ["foo:", "", "", "INVALID_CHARACTER_ERR"], + ["prefix::local", "", "", "INVALID_CHARACTER_ERR"], ["foo", "foo", "", null], ["foo", "", "foo", null], ["foo", "f'oo", "", null], diff --git a/tests/wpt/web-platform-tests/dom/nodes/Document-constructor-svg.svg b/tests/wpt/web-platform-tests/dom/nodes/Document-constructor-svg.svg new file mode 100644 index 00000000000..28aaf16bdcd --- /dev/null +++ b/tests/wpt/web-platform-tests/dom/nodes/Document-constructor-svg.svg @@ -0,0 +1,47 @@ + + + +Document constructor + + + +test(function() { + var doc = new Document(); + assert_true(doc instanceof Node, "Should be a Node"); + assert_true(doc instanceof Document, "Should be a Document"); + assert_false(doc instanceof XMLDocument, "Should not be an XMLDocument"); + assert_equals(Object.getPrototypeOf(doc), Document.prototype, + "Document should be the primary interface"); +}, "new Document(): interfaces") + +test(function() { + var doc = new Document(); + assert_equals(doc.firstChild, null, "firstChild"); + assert_equals(doc.lastChild, null, "lastChild"); + assert_equals(doc.doctype, null, "doctype"); + assert_equals(doc.documentElement, null, "documentElement"); + assert_array_equals(doc.childNodes, [], "childNodes"); +}, "new Document(): children") + +test(function() { + var doc = new Document(); + assert_equals(doc.URL, "about:blank"); + assert_equals(doc.documentURI, "about:blank"); + assert_equals(doc.compatMode, "CSS1Compat"); + assert_equals(doc.characterSet, "UTF-8"); + assert_equals(doc.contentType, "application/xml"); + assert_equals(doc.origin, document.origin); + assert_equals(doc.createElement("DIV").localName, "DIV"); +}, "new Document(): metadata") + +test(function() { + var doc = new Document(); + assert_equals(doc.characterSet, "UTF-8", "characterSet"); + assert_equals(doc.charset, "UTF-8", "charset"); + assert_equals(doc.inputEncoding, "UTF-8", "inputEncoding"); +}, "new Document(): characterSet aliases") + + + diff --git a/tests/wpt/web-platform-tests/dom/nodes/Document-constructor-xml.xml b/tests/wpt/web-platform-tests/dom/nodes/Document-constructor-xml.xml new file mode 100644 index 00000000000..9aada512c89 --- /dev/null +++ b/tests/wpt/web-platform-tests/dom/nodes/Document-constructor-xml.xml @@ -0,0 +1,50 @@ + + + + +Document constructor + + + + + + + + diff --git a/tests/wpt/web-platform-tests/dom/nodes/Document-constructor.html b/tests/wpt/web-platform-tests/dom/nodes/Document-constructor.html index 11549da4ab4..3ebc780e327 100644 --- a/tests/wpt/web-platform-tests/dom/nodes/Document-constructor.html +++ b/tests/wpt/web-platform-tests/dom/nodes/Document-constructor.html @@ -33,6 +33,7 @@ test(function() { assert_equals(doc.compatMode, "CSS1Compat"); assert_equals(doc.characterSet, "UTF-8"); assert_equals(doc.contentType, "application/xml"); + assert_equals(doc.origin, document.origin); assert_equals(doc.createElement("DIV").localName, "DIV"); }, "new Document(): metadata") diff --git a/tests/wpt/web-platform-tests/dom/nodes/Document-createElementNS.js b/tests/wpt/web-platform-tests/dom/nodes/Document-createElementNS.js index 1abd3330183..bf5e12cf951 100644 --- a/tests/wpt/web-platform-tests/dom/nodes/Document-createElementNS.js +++ b/tests/wpt/web-platform-tests/dom/nodes/Document-createElementNS.js @@ -25,11 +25,11 @@ var createElementNS_tests = [ [null, "fo o", "INVALID_CHARACTER_ERR"], [null, "-foo", "INVALID_CHARACTER_ERR"], [null, ".foo", "INVALID_CHARACTER_ERR"], - [null, ":foo", "NAMESPACE_ERR"], + [null, ":foo", "INVALID_CHARACTER_ERR"], [null, "f:oo", "NAMESPACE_ERR"], - [null, "foo:", "NAMESPACE_ERR"], - [null, "f:o:o", "NAMESPACE_ERR"], - [null, ":", "NAMESPACE_ERR"], + [null, "foo:", "INVALID_CHARACTER_ERR"], + [null, "f:o:o", "INVALID_CHARACTER_ERR"], + [null, ":", "INVALID_CHARACTER_ERR"], [null, "xml", null], [null, "xmlns", "NAMESPACE_ERR"], [null, "xmlfoo", null], @@ -38,19 +38,19 @@ var createElementNS_tests = [ [null, "xmlfoo:bar", "NAMESPACE_ERR"], [null, "null:xml", "NAMESPACE_ERR"], ["", null, null], - ["", ":foo", "NAMESPACE_ERR"], + ["", ":foo", "INVALID_CHARACTER_ERR"], ["", "f:oo", "NAMESPACE_ERR"], - ["", "foo:", "NAMESPACE_ERR"], + ["", "foo:", "INVALID_CHARACTER_ERR"], [undefined, null, null], [undefined, undefined, null], [undefined, "foo", null], [undefined, "1foo", "INVALID_CHARACTER_ERR"], [undefined, "f1oo", null], [undefined, "foo1", null], - [undefined, ":foo", "NAMESPACE_ERR"], + [undefined, ":foo", "INVALID_CHARACTER_ERR"], [undefined, "f:oo", "NAMESPACE_ERR"], - [undefined, "foo:", "NAMESPACE_ERR"], - [undefined, "f::oo", "NAMESPACE_ERR"], + [undefined, "foo:", "INVALID_CHARACTER_ERR"], + [undefined, "f::oo", "INVALID_CHARACTER_ERR"], [undefined, "xml", null], [undefined, "xmlns", "NAMESPACE_ERR"], [undefined, "xmlfoo", null], @@ -65,15 +65,15 @@ var createElementNS_tests = [ ["http://example.com/", ".foo", "INVALID_CHARACTER_ERR"], ["http://example.com/", "f1oo", null], ["http://example.com/", "foo1", null], - ["http://example.com/", ":foo", "NAMESPACE_ERR"], + ["http://example.com/", ":foo", "INVALID_CHARACTER_ERR"], ["http://example.com/", "f:oo", null], - ["http://example.com/", "f:o:o", "NAMESPACE_ERR"], - ["http://example.com/", "foo:", "NAMESPACE_ERR"], - ["http://example.com/", "f::oo", "NAMESPACE_ERR"], - ["http://example.com/", "a:0", "NAMESPACE_ERR"], + ["http://example.com/", "f:o:o", "INVALID_CHARACTER_ERR"], + ["http://example.com/", "foo:", "INVALID_CHARACTER_ERR"], + ["http://example.com/", "f::oo", "INVALID_CHARACTER_ERR"], + ["http://example.com/", "a:0", "INVALID_CHARACTER_ERR"], ["http://example.com/", "0:a", "INVALID_CHARACTER_ERR"], ["http://example.com/", "a:_", null], - ["http://example.com/", "a:\u0BC6", "NAMESPACE_ERR"], + ["http://example.com/", "a:\u0BC6", "INVALID_CHARACTER_ERR"], ["http://example.com/", "\u0BC6:a", "INVALID_CHARACTER_ERR"], ["http://example.com/", "a:a\u0BC6", null], ["http://example.com/", "a\u0BC6:a", null], @@ -98,7 +98,7 @@ var createElementNS_tests = [ ["http://example.com/", "xmlns:foo", "NAMESPACE_ERR"], ["http://example.com/", "XMLNS:foo", null], ["http://example.com/", "xmlfoo:bar", null], - ["http://example.com/", "prefix::local", "NAMESPACE_ERR"], + ["http://example.com/", "prefix::local", "INVALID_CHARACTER_ERR"], ["http://example.com/", "namespaceURI:{", "INVALID_CHARACTER_ERR"], ["http://example.com/", "namespaceURI:}", "INVALID_CHARACTER_ERR"], ["http://example.com/", "namespaceURI:~", "INVALID_CHARACTER_ERR"], @@ -130,9 +130,9 @@ var createElementNS_tests = [ ["/", "1foo", "INVALID_CHARACTER_ERR"], ["/", "f1oo", null], ["/", "foo1", null], - ["/", ":foo", "NAMESPACE_ERR"], + ["/", ":foo", "INVALID_CHARACTER_ERR"], ["/", "f:oo", null], - ["/", "foo:", "NAMESPACE_ERR"], + ["/", "foo:", "INVALID_CHARACTER_ERR"], ["/", "xml", null], ["/", "xmlns", "NAMESPACE_ERR"], ["/", "xmlfoo", null], @@ -143,9 +143,9 @@ var createElementNS_tests = [ ["http://www.w3.org/XML/1998/namespace", "1foo", "INVALID_CHARACTER_ERR"], ["http://www.w3.org/XML/1998/namespace", "f1oo", null], ["http://www.w3.org/XML/1998/namespace", "foo1", null], - ["http://www.w3.org/XML/1998/namespace", ":foo", "NAMESPACE_ERR"], + ["http://www.w3.org/XML/1998/namespace", ":foo", "INVALID_CHARACTER_ERR"], ["http://www.w3.org/XML/1998/namespace", "f:oo", null], - ["http://www.w3.org/XML/1998/namespace", "foo:", "NAMESPACE_ERR"], + ["http://www.w3.org/XML/1998/namespace", "foo:", "INVALID_CHARACTER_ERR"], ["http://www.w3.org/XML/1998/namespace", "xml", null], ["http://www.w3.org/XML/1998/namespace", "xmlns", "NAMESPACE_ERR"], ["http://www.w3.org/XML/1998/namespace", "xmlfoo", null], @@ -158,9 +158,9 @@ var createElementNS_tests = [ ["http://www.w3.org/2000/xmlns/", "1foo", "INVALID_CHARACTER_ERR"], ["http://www.w3.org/2000/xmlns/", "f1oo", "NAMESPACE_ERR"], ["http://www.w3.org/2000/xmlns/", "foo1", "NAMESPACE_ERR"], - ["http://www.w3.org/2000/xmlns/", ":foo", "NAMESPACE_ERR"], + ["http://www.w3.org/2000/xmlns/", ":foo", "INVALID_CHARACTER_ERR"], ["http://www.w3.org/2000/xmlns/", "f:oo", "NAMESPACE_ERR"], - ["http://www.w3.org/2000/xmlns/", "foo:", "NAMESPACE_ERR"], + ["http://www.w3.org/2000/xmlns/", "foo:", "INVALID_CHARACTER_ERR"], ["http://www.w3.org/2000/xmlns/", "xml", "NAMESPACE_ERR"], ["http://www.w3.org/2000/xmlns/", "xmlns", null], ["http://www.w3.org/2000/xmlns/", "xmlfoo", "NAMESPACE_ERR"], @@ -172,9 +172,9 @@ var createElementNS_tests = [ ["foo:", "1foo", "INVALID_CHARACTER_ERR"], ["foo:", "f1oo", null], ["foo:", "foo1", null], - ["foo:", ":foo", "NAMESPACE_ERR"], + ["foo:", ":foo", "INVALID_CHARACTER_ERR"], ["foo:", "f:oo", null], - ["foo:", "foo:", "NAMESPACE_ERR"], + ["foo:", "foo:", "INVALID_CHARACTER_ERR"], ["foo:", "xml", null], ["foo:", "xmlns", "NAMESPACE_ERR"], ["foo:", "xmlfoo", null], diff --git a/tests/wpt/web-platform-tests/dom/nodes/Document-createEvent.html b/tests/wpt/web-platform-tests/dom/nodes/Document-createEvent.html index 29657e05b88..93b5ec4efef 100644 --- a/tests/wpt/web-platform-tests/dom/nodes/Document-createEvent.html +++ b/tests/wpt/web-platform-tests/dom/nodes/Document-createEvent.html @@ -81,7 +81,6 @@ var someNonCreateableEvents = [ "ClipboardEvent", "CommandEvent", "DataContainerEvent", - "DeviceLightEvent", "ExtendableEvent", "ExtendableMessageEvent", "FetchEvent", diff --git a/tests/wpt/web-platform-tests/dom/nodes/Element-classlist.html b/tests/wpt/web-platform-tests/dom/nodes/Element-classlist.html index 22b499e931f..ece938e6f90 100644 --- a/tests/wpt/web-platform-tests/dom/nodes/Element-classlist.html +++ b/tests/wpt/web-platform-tests/dom/nodes/Element-classlist.html @@ -1,407 +1,462 @@ - - - Element.classList in case-sensitive documents - - - - - + +
    + - - + var expectedAfter = after; -
    + assert_equals(e.getAttribute("class"), expectedAfter, + "wrong class after modification"); + }, "classList." + funcName + "(" + args.map(format_value).join(", ") + + ") with attribute value " + format_value(before) + desc); +} - - +function assignToClassListStrict(e) { + "use strict"; + e.classList = "foo"; + e.removeAttribute("class"); +} + +function assignToClassList(e) { + var expect = e.classList; + e.classList = "foo"; + assert_equals(e.classList, expect, + "classList should be unchanged after assignment"); + e.removeAttribute("class"); +} + +function testClassList(e, desc) { + + // assignment + + test(function() { + assignToClassListStrict(e); + assignToClassList(e); + }, "Assigning to classList" + desc); + + // supports + test(function() { + assert_throws(TypeError(), function() { + e.classList.supports("a"); + }) + }, ".supports() must throw TypeError" + desc); + + // length attribute + + function checkLength(value, length) { + test(function() { + setClass(e, value); + assert_equals(e.classList.length, length); + }, "classList.length when " + + (value === null ? "removed" : "set to " + format_value(value)) + desc); + } + + checkLength(null, 0); + checkLength("", 0); + checkLength(" \t \f", 0); + checkLength("a", 1); + checkLength("a A", 2); + checkLength("\r\na\t\f", 1); + checkLength("a a", 1); + checkLength("a a a a a a", 1); + checkLength("a a b b", 2); + checkLength("a A B b", 4); + checkLength("a b c c b a a b c c", 3); + checkLength(" a a b", 2); + checkLength("a\tb\nc\fd\re f", 6); + + // [Stringifies] + + function checkStringifier(value, expected) { + test(function() { + setClass(e, value); + assert_equals(e.classList.toString(), expected); + }, "classList.toString() when " + + (value === null ? "removed" : "set to " + format_value(value)) + desc); + } + + checkStringifier(null, ""); + checkStringifier("foo", "foo"); + checkStringifier(" a a b", " a a b"); + + // item() method + + function checkItems(attributeValue, expectedValues) { + function checkItemFunction(index, expected) { + assert_equals(e.classList.item(index), expected, + "classList.item(" + index + ")"); + } + + function checkItemArray(index, expected) { + assert_equals(e.classList[index], expected, "classList[" + index + "]"); + } + + test(function() { + setClass(e, attributeValue); + + checkItemFunction(-1, null); + checkItemArray(-1, undefined); + + var i = 0; + while (i < expectedValues.length) { + checkItemFunction(i, expectedValues[i]); + checkItemArray(i, expectedValues[i]); + i++; + } + + checkItemFunction(i, null); + checkItemArray(i, undefined); + + checkItemFunction(0xffffffff, null); + checkItemArray(0xffffffff, undefined); + + checkItemFunction(0xfffffffe, null); + checkItemArray(0xfffffffe, undefined); + }, "classList.item() when set to " + format_value(attributeValue) + desc); + } + + checkItems(null, []); + checkItems("a", ["a"]); + checkItems("aa AA aa", ["aa", "AA"]); + checkItems("a b", ["a", "b"]); + checkItems(" a a b", ["a", "b"]); + checkItems("\t\n\f\r a\t\n\f\r b\t\n\f\r ", ["a", "b"]); + + // contains() method + + function checkContains(attributeValue, args, expectedRes) { + if (!Array.isArray(expectedRes)) { + expectedRes = Array(args.length).fill(expectedRes); + } + setClass(e, attributeValue); + for (var i = 0; i < args.length; i++) { + test(function() { + assert_equals(e.classList.contains(args[i]), expectedRes[i], + "classList.contains(\"" + args[i] + "\")"); + }, "classList.contains(" + format_value(args[i]) + ") when set to " + + format_value(attributeValue) + desc); + } + } + + checkContains(null, ["a", "", " "], false); + checkContains("", ["a"], false); + + checkContains("a", ["a"], true); + checkContains("a", ["aa", "b", "A", "a.", "a)",, "a'", 'a"', "a$", "a~", + "a?", "a\\"], false); + + // All "ASCII whitespace" per spec, before and after + checkContains("a", ["a\t", "\ta", "a\n", "\na", "a\f", "\fa", "a\r", "\ra", + "a ", " a"], false); + + checkContains("aa AA", ["aa", "AA", "aA"], [true, true, false]); + checkContains("a a a", ["a", "aa", "b"], [true, false, false]); + checkContains("a b c", ["a", "b"], true); + + checkContains("null undefined", [null, undefined], true); + checkContains("\t\n\f\r a\t\n\f\r b\t\n\f\r ", ["a", "b"], true); + + // add() method + + function checkAdd(before, argument, after, expectedException) { + checkModification(e, "add", argument, undefined, before, after, + expectedException, desc); + // Also check force toggle + // XXX https://github.com/whatwg/dom/issues/443 + //if (!Array.isArray(argument)) { + // checkModification(e, "toggle", [argument, true], true, before, after, + // expectedException); + //} + } + + checkAdd(null, "", null, "SyntaxError"); + checkAdd(null, ["a", ""], null, "SyntaxError"); + checkAdd(null, " ", null, "InvalidCharacterError"); + checkAdd(null, "\ta", null, "InvalidCharacterError"); + checkAdd(null, "a\t", null, "InvalidCharacterError"); + checkAdd(null, "\na", null, "InvalidCharacterError"); + checkAdd(null, "a\n", null, "InvalidCharacterError"); + checkAdd(null, "\fa", null, "InvalidCharacterError"); + checkAdd(null, "a\f", null, "InvalidCharacterError"); + checkAdd(null, "\ra", null, "InvalidCharacterError"); + checkAdd(null, "a\r", null, "InvalidCharacterError"); + checkAdd(null, " a", null, "InvalidCharacterError"); + checkAdd(null, "a ", null, "InvalidCharacterError"); + checkAdd(null, ["a", " "], null, "InvalidCharacterError"); + checkAdd(null, ["a", "aa "], null, "InvalidCharacterError"); + + checkAdd("a", "a", "a"); + checkAdd("aa", "AA", "aa AA"); + checkAdd("a b c", "a", "a b c"); + checkAdd("a a a b", "a", "a b"); + checkAdd(null, "a", "a"); + checkAdd("", "a", "a"); + checkAdd(" ", "a", "a"); + checkAdd(" \f", "a", "a"); + checkAdd("a", "b", "a b"); + checkAdd("a b c", "d", "a b c d"); + checkAdd("a b c ", "d", "a b c d"); + checkAdd(" a a b", "c", "a b c"); + checkAdd(" a a b", "a", "a b"); + checkAdd("\t\n\f\r a\t\n\f\r b\t\n\f\r ", "c", "a b c"); + + // multiple add + checkAdd("a b c ", ["d", "e"], "a b c d e"); + checkAdd("a b c ", ["a", "a"], "a b c"); + checkAdd("a b c ", ["d", "d"], "a b c d"); + checkAdd("a b c a ", [], "a b c"); + checkAdd(null, ["a", "b"], "a b"); + checkAdd("", ["a", "b"], "a b"); + + checkAdd(null, null, "null"); + checkAdd(null, undefined, "undefined"); + + // remove() method + + function checkRemove(before, argument, after, expectedException) { + checkModification(e, "remove", argument, undefined, before, after, + expectedException, desc); + // Also check force toggle + // XXX https://github.com/whatwg/dom/issues/443 + //if (!Array.isArray(argument)) { + // checkModification(e, "toggle", [argument, false], false, before, after, + // expectedException); + //} + } + + checkRemove(null, "", null, "SyntaxError"); + checkRemove(null, " ", null, "InvalidCharacterError"); + checkRemove("\ta", "\ta", "\ta", "InvalidCharacterError"); + checkRemove("a\t", "a\t", "a\t", "InvalidCharacterError"); + checkRemove("\na", "\na", "\na", "InvalidCharacterError"); + checkRemove("a\n", "a\n", "a\n", "InvalidCharacterError"); + checkRemove("\fa", "\fa", "\fa", "InvalidCharacterError"); + checkRemove("a\f", "a\f", "a\f", "InvalidCharacterError"); + checkRemove("\ra", "\ra", "\ra", "InvalidCharacterError"); + checkRemove("a\r", "a\r", "a\r", "InvalidCharacterError"); + checkRemove(" a", " a", " a", "InvalidCharacterError"); + checkRemove("a ", "a ", "a ", "InvalidCharacterError"); + checkRemove("aa ", "aa ", null, "InvalidCharacterError"); + + checkRemove(null, "a", null); + checkRemove("", "a", ""); + checkRemove("a b c", "d", "a b c"); + checkRemove("a b c", "A", "a b c"); + checkRemove(" a a a ", "a", ""); + checkRemove("a b", "a", "b"); + checkRemove("a b ", "a", "b"); + checkRemove("a a b", "a", "b"); + checkRemove("aa aa bb", "aa", "bb"); + checkRemove("a a b a a c a a", "a", "b c"); + + checkRemove("a b c", "b", "a c"); + checkRemove("aaa bbb ccc", "bbb", "aaa ccc"); + checkRemove(" a b c ", "b", "a c"); + checkRemove("a b b b c", "b", "a c"); + + checkRemove("a b c", "c", "a b"); + checkRemove(" a b c ", "c", "a b"); + checkRemove("a b c c c", "c", "a b"); + + checkRemove("a b a c a d a", "a", "b c d"); + checkRemove("AA BB aa CC AA dd aa", "AA", "BB aa CC dd"); + + checkRemove("\ra\na\ta\f", "a", ""); + checkRemove("\t\n\f\r a\t\n\f\r b\t\n\f\r ", "a", "b"); + + // multiple remove + checkRemove("a b c ", ["d", "e"], "a b c"); + checkRemove("a b c ", ["a", "b"], "c"); + checkRemove("a b c ", ["a", "c"], "b"); + checkRemove("a b c ", ["a", "a"], "b c"); + checkRemove("a b c ", ["d", "d"], "a b c"); + checkRemove("a b c ", [], "a b c"); + checkRemove(null, ["a", "b"], null); + checkRemove("", ["a", "b"], ""); + checkRemove("a a", [], "a"); + + checkRemove("null", null, ""); + checkRemove("undefined", undefined, ""); + + // toggle() method + + function checkToggle(before, argument, expectedRes, after, expectedException) { + checkModification(e, "toggle", argument, expectedRes, before, after, + expectedException, desc); + } + + checkToggle(null, "", null, null, "SyntaxError"); + checkToggle(null, "aa ", null, null, "InvalidCharacterError"); + + checkToggle(null, "a", true, "a"); + checkToggle("", "a", true, "a"); + checkToggle(" ", "a", true, "a"); + checkToggle(" \f", "a", true, "a"); + checkToggle("a", "b", true, "a b"); + checkToggle("a", "A", true, "a A"); + checkToggle("a b c", "d", true, "a b c d"); + checkToggle(" a a b", "d", true, "a b d"); + + checkToggle("a", "a", false, ""); + checkToggle(" a a a ", "a", false, ""); + checkToggle(" A A A ", "a", true, "A a"); + checkToggle(" a b c ", "b", false, "a c"); + checkToggle(" a b c b b", "b", false, "a c"); + checkToggle(" a b c ", "c", false, "a b"); + checkToggle(" a b c ", "a", false, "b c"); + checkToggle(" a a b", "b", false, "a"); + checkToggle("\t\n\f\r a\t\n\f\r b\t\n\f\r ", "a", false, "b"); + checkToggle("\t\n\f\r a\t\n\f\r b\t\n\f\r ", "c", true, "a b c"); + + checkToggle("null", null, false, ""); + checkToggle("", null, true, "null"); + checkToggle("undefined", undefined, false, ""); + checkToggle("", undefined, true, "undefined"); + + + // tests for the force argument handling + // XXX Remove these if https://github.com/whatwg/dom/issues/443 is fixed + + function checkForceToggle(before, argument, force, expectedRes, after, expectedException) { + checkModification(e, "toggle", [argument, force], expectedRes, before, + after, expectedException, desc); + } + + checkForceToggle("", "a", true, true, "a"); + checkForceToggle("a", "a", true, true, "a"); + checkForceToggle("a", "b", true, true, "a b"); + checkForceToggle("a b", "b", true, true, "a b"); + checkForceToggle("", "a", false, false, ""); + checkForceToggle("a", "a", false, false, ""); + checkForceToggle("a", "b", false, false, "a"); + checkForceToggle("a b", "b", false, false, "a"); + + + // replace() method + function checkReplace(before, token, newToken, after, expectedException) { + checkModification(e, "replace", [token, newToken], undefined, before, + after, expectedException, desc); + } + + checkReplace(null, "", "a", null, "SyntaxError"); + checkReplace(null, "", " ", null, "SyntaxError"); + checkReplace(null, " ", "a", null, "InvalidCharacterError"); + checkReplace(null, "\ta", "b", null, "InvalidCharacterError"); + checkReplace(null, "a\t", "b", null, "InvalidCharacterError"); + checkReplace(null, "\na", "b", null, "InvalidCharacterError"); + checkReplace(null, "a\n", "b", null, "InvalidCharacterError"); + checkReplace(null, "\fa", "b", null, "InvalidCharacterError"); + checkReplace(null, "a\f", "b", null, "InvalidCharacterError"); + checkReplace(null, "\ra", "b", null, "InvalidCharacterError"); + checkReplace(null, "a\r", "b", null, "InvalidCharacterError"); + checkReplace(null, " a", "b", null, "InvalidCharacterError"); + checkReplace(null, "a ", "b", null, "InvalidCharacterError"); + + checkReplace(null, "a", "", null, "SyntaxError"); + checkReplace(null, " ", "", null, "SyntaxError"); + checkReplace(null, "a", " ", null, "InvalidCharacterError"); + checkReplace(null, "b", "\ta", null, "InvalidCharacterError"); + checkReplace(null, "b", "a\t", null, "InvalidCharacterError"); + checkReplace(null, "b", "\na", null, "InvalidCharacterError"); + checkReplace(null, "b", "a\n", null, "InvalidCharacterError"); + checkReplace(null, "b", "\fa", null, "InvalidCharacterError"); + checkReplace(null, "b", "a\f", null, "InvalidCharacterError"); + checkReplace(null, "b", "\ra", null, "InvalidCharacterError"); + checkReplace(null, "b", "a\r", null, "InvalidCharacterError"); + checkReplace(null, "b", " a", null, "InvalidCharacterError"); + checkReplace(null, "b", "a ", null, "InvalidCharacterError"); + + checkReplace("a", "a", "a", "a"); + checkReplace("a", "a", "b", "b"); + checkReplace("a", "A", "b", "a"); + checkReplace("a b", "b", "A", "a A"); + checkReplace("a b c", "d", "e", "a b c"); + // https://github.com/whatwg/dom/issues/443 + checkReplace("a a a b", "a", "a", "a b"); + checkReplace("a a a b", "c", "d", "a a a b"); + checkReplace(null, "a", "b", null); + checkReplace("", "a", "b", ""); + checkReplace(" ", "a", "b", " "); + checkReplace(" a \f", "a", "b", "b"); + checkReplace("a b c", "b", "d", "a d c"); + // https://github.com/whatwg/dom/issues/442 + // Implementations agree on the first one here, so I test it, but disagree on + // the second, so no test until the spec decides what to say. + checkReplace("a b c", "c", "a", "a b"); + checkReplace("c b a", "c", "a", "a b"); + checkReplace("a b a", "a", "c", "c b"); + checkReplace("a b a", "b", "c", "a c"); + checkReplace(" a a b", "a", "c", "c b"); + checkReplace(" a a b", "b", "c", "a c"); + checkReplace("\t\n\f\r a\t\n\f\r b\t\n\f\r ", "a", "c", "c b"); + checkReplace("\t\n\f\r a\t\n\f\r b\t\n\f\r ", "b", "c", "a c"); + + checkReplace("a null", null, "b", "a b"); + checkReplace("a b", "a", null, "null b"); + checkReplace("a undefined", undefined, "b", "a b"); + checkReplace("a b", "a", undefined, "undefined b"); +} + +var content = document.getElementById("content"); + +var htmlNode = document.createElement("div"); +content.appendChild(htmlNode); +testClassList(htmlNode, " (HTML node)"); + +var xhtmlNode = document.createElementNS(XHTML_NS, "div"); +content.appendChild(xhtmlNode); +testClassList(xhtmlNode, " (XHTML node)"); + +var mathMLNode = document.createElementNS(MATHML_NS, "math"); +content.appendChild(mathMLNode); +testClassList(mathMLNode, " (MathML node)"); + +var xmlNode = document.createElementNS(null, "foo"); +content.appendChild(xmlNode); +testClassList(xmlNode, " (XML node with null namespace)"); + +var fooNode = document.createElementNS("http://example.org/foo", "foo"); +content.appendChild(fooNode); +testClassList(fooNode, " (foo node)"); + diff --git a/tests/wpt/web-platform-tests/dom/nodes/ParentNode-querySelector-All-content.html b/tests/wpt/web-platform-tests/dom/nodes/ParentNode-querySelector-All-content.html index affb00af2bf..8dc13545516 100644 --- a/tests/wpt/web-platform-tests/dom/nodes/ParentNode-querySelector-All-content.html +++ b/tests/wpt/web-platform-tests/dom/nodes/ParentNode-querySelector-All-content.html @@ -30,7 +30,7 @@
    -

    +

      diff --git a/tests/wpt/web-platform-tests/dom/nodes/ParentNode-querySelector-All-content.xht b/tests/wpt/web-platform-tests/dom/nodes/ParentNode-querySelector-All-content.xht index 14faa9bd4db..0e9b925f58c 100644 --- a/tests/wpt/web-platform-tests/dom/nodes/ParentNode-querySelector-All-content.xht +++ b/tests/wpt/web-platform-tests/dom/nodes/ParentNode-querySelector-All-content.xht @@ -25,7 +25,7 @@
      -

      +

        diff --git a/tests/wpt/web-platform-tests/dom/nodes/ParentNode-querySelector-All-xht.xht b/tests/wpt/web-platform-tests/dom/nodes/ParentNode-querySelector-All-xht.xht index 7a673202b95..3915aee42cf 100644 --- a/tests/wpt/web-platform-tests/dom/nodes/ParentNode-querySelector-All-xht.xht +++ b/tests/wpt/web-platform-tests/dom/nodes/ParentNode-querySelector-All-xht.xht @@ -14,12 +14,18 @@
        - diff --git a/tests/wpt/web-platform-tests/dom/nodes/mutationobservers.js b/tests/wpt/web-platform-tests/dom/nodes/mutationobservers.js index 772f280bee9..a95529ab39c 100644 --- a/tests/wpt/web-platform-tests/dom/nodes/mutationobservers.js +++ b/tests/wpt/web-platform-tests/dom/nodes/mutationobservers.js @@ -1,7 +1,7 @@ // Compares a mutation record to a predefined one // mutationToCheck is a mutation record from the user agent // expectedRecord is a mutation record minted by the test -// for expectedRecord, if properties are ommitted, they get default ones +// for expectedRecord, if properties are omitted, they get default ones function checkRecords(target, mutationToCheck, expectedRecord) { var mr1; var mr2; diff --git a/tests/wpt/web-platform-tests/dom/nodes/selectors.js b/tests/wpt/web-platform-tests/dom/nodes/selectors.js index 71d52de0b82..2b84df14561 100644 --- a/tests/wpt/web-platform-tests/dom/nodes/selectors.js +++ b/tests/wpt/web-platform-tests/dom/nodes/selectors.js @@ -76,16 +76,16 @@ var validSelectors = [ // Attribute Selectors // - presence [att] - {name: "Attribute presence selector, matching align attribute with value", selector: ".attr-presence-div1[align]", expect: ["attr-presence-div1"], level: 2, testType: TEST_QSA | TEST_MATCH}, - {name: "Attribute presence selector, matching align attribute with empty value", selector: ".attr-presence-div2[align]", expect: ["attr-presence-div2"], level: 2, testType: TEST_QSA | TEST_MATCH}, - {name: "Attribute presence selector, matching title attribute, case insensitivity", selector: "#attr-presence [TiTlE]", expect: ["attr-presence-a1", "attr-presence-span1"], exclude: ["xhtml"], level: 2, testType: TEST_QSA | TEST_MATCH}, - {name: "Attribute presence selector, not matching title attribute, case sensitivity", selector: "#attr-presence [TiTlE]", expect: [], exclude: ["html"], level: 2, testType: TEST_QSA | TEST_MATCH}, - {name: "Attribute presence selector, matching custom data-* attribute", selector: "[data-attr-presence]", expect: ["attr-presence-pre1", "attr-presence-blockquote1"], level: 2, testType: TEST_QSA | TEST_MATCH}, - {name: "Attribute presence selector, not matching attribute with similar name", selector: ".attr-presence-div3[align], .attr-presence-div4[align]", expect: [] /*no matches*/, level: 2, testType: TEST_QSA}, - {name: "Attribute presence selector, matching attribute with non-ASCII characters", selector: "ul[data-中文]", expect: ["attr-presence-ul1"], level: 2, testType: TEST_QSA | TEST_MATCH}, - {name: "Attribute presence selector, not matching default option without selected attribute", selector: "#attr-presence-select1 option[selected]", expect: [] /* no matches */, level: 2, testType: TEST_QSA}, - {name: "Attribute presence selector, matching option with selected attribute", selector: "#attr-presence-select2 option[selected]", expect: ["attr-presence-select2-option4"], level: 2, testType: TEST_QSA | TEST_MATCH}, - {name: "Attribute presence selector, matching multiple options with selected attributes", selector: "#attr-presence-select3 option[selected]", expect: ["attr-presence-select3-option2", "attr-presence-select3-option3"], level: 2, testType: TEST_QSA | TEST_MATCH}, + {name: "Attribute presence selector, matching align attribute with value", selector: ".attr-presence-div1[align]", expect: ["attr-presence-div1"], level: 2, testType: TEST_QSA | TEST_MATCH}, + {name: "Attribute presence selector, matching align attribute with empty value", selector: ".attr-presence-div2[align]", expect: ["attr-presence-div2"], level: 2, testType: TEST_QSA | TEST_MATCH}, + {name: "Attribute presence selector, matching title attribute, case insensitivity", selector: "#attr-presence [*|TiTlE]", expect: ["attr-presence-a1", "attr-presence-span1", "attr-presence-i1"], exclude: ["xhtml"], level: 2, testType: TEST_QSA | TEST_MATCH}, + {name: "Attribute presence selector, not matching title attribute, case sensitivity", selector: "#attr-presence [*|TiTlE]", expect: [], exclude: ["html"], level: 2, testType: TEST_QSA | TEST_MATCH}, + {name: "Attribute presence selector, matching custom data-* attribute", selector: "[data-attr-presence]", expect: ["attr-presence-pre1", "attr-presence-blockquote1"], level: 2, testType: TEST_QSA | TEST_MATCH}, + {name: "Attribute presence selector, not matching attribute with similar name", selector: ".attr-presence-div3[align], .attr-presence-div4[align]", expect: [] /*no matches*/, level: 2, testType: TEST_QSA}, + {name: "Attribute presence selector, matching attribute with non-ASCII characters", selector: "ul[data-中文]", expect: ["attr-presence-ul1"], level: 2, testType: TEST_QSA | TEST_MATCH}, + {name: "Attribute presence selector, not matching default option without selected attribute", selector: "#attr-presence-select1 option[selected]", expect: [] /* no matches */, level: 2, testType: TEST_QSA}, + {name: "Attribute presence selector, matching option with selected attribute", selector: "#attr-presence-select2 option[selected]", expect: ["attr-presence-select2-option4"], level: 2, testType: TEST_QSA | TEST_MATCH}, + {name: "Attribute presence selector, matching multiple options with selected attributes", selector: "#attr-presence-select3 option[selected]", expect: ["attr-presence-select3-option2", "attr-presence-select3-option3"], level: 2, testType: TEST_QSA | TEST_MATCH}, // - value [att=val] {name: "Attribute value selector, matching align attribute with value", selector: "#attr-value [align=\"center\"]", expect: ["attr-value-div1"], level: 2, testType: TEST_QSA | TEST_MATCH}, @@ -176,7 +176,7 @@ var validSelectors = [ {name: ":nth-of-type selector, matching every second elemetn of their type, starting from the first", selector: "#pseudo-nth-p1 span:nth-of-type(2n-1)", expect: ["pseudo-nth-span1", "pseudo-nth-span3"], level: 3, testType: TEST_QSA | TEST_MATCH}, // - :nth-last-of-type(n) (Level 3) - {name: ":nth-last-of-type selector, matching the thrid last em element", selector: "#pseudo-nth-p1 em:nth-last-of-type(3)", expect: ["pseudo-nth-em2"], level: 3, testType: TEST_QSA | TEST_MATCH}, + {name: ":nth-last-of-type selector, matching the third last em element", selector: "#pseudo-nth-p1 em:nth-last-of-type(3)", expect: ["pseudo-nth-em2"], level: 3, testType: TEST_QSA | TEST_MATCH}, {name: ":nth-last-of-type selector, matching every second last element of their type", selector: "#pseudo-nth-p1 :nth-last-of-type(2n)", expect: ["pseudo-nth-span1", "pseudo-nth-em1", "pseudo-nth-strong1", "pseudo-nth-em3", "pseudo-nth-span3"], level: 3, testType: TEST_QSA | TEST_MATCH}, {name: ":nth-last-of-type selector, matching every second last element of their type, starting from the last", selector: "#pseudo-nth-p1 span:nth-last-of-type(2n-1)", expect: ["pseudo-nth-span2", "pseudo-nth-span4"], level: 3, testType: TEST_QSA | TEST_MATCH}, @@ -548,7 +548,7 @@ var scopedSelectors = [ {name: ":nth-of-type selector, matching every second elemetn of their type, starting from the first", selector: "span:nth-of-type(2n-1)", ctx: "#pseudo-nth-p1", expect: ["pseudo-nth-span1", "pseudo-nth-span3"], level: 3, testType: TEST_FIND | TEST_MATCH}, // - :nth-last-of-type(n) (Level 3) - {name: ":nth-last-of-type selector, matching the thrid last em element", selector: "em:nth-last-of-type(3)", ctx: "#pseudo-nth-p1", expect: ["pseudo-nth-em2"], level: 3, testType: TEST_FIND | TEST_MATCH}, + {name: ":nth-last-of-type selector, matching the third last em element", selector: "em:nth-last-of-type(3)", ctx: "#pseudo-nth-p1", expect: ["pseudo-nth-em2"], level: 3, testType: TEST_FIND | TEST_MATCH}, {name: ":nth-last-of-type selector, matching every second last element of their type", selector: ":nth-last-of-type(2n)", ctx: "#pseudo-nth-p1", expect: ["pseudo-nth-span1", "pseudo-nth-em1", "pseudo-nth-strong1", "pseudo-nth-em3", "pseudo-nth-span3"], level: 3, testType: TEST_FIND | TEST_MATCH}, {name: ":nth-last-of-type selector, matching every second last element of their type, starting from the last", selector: "span:nth-last-of-type(2n-1)", ctx: "#pseudo-nth-p1", expect: ["pseudo-nth-span2", "pseudo-nth-span4"], level: 3, testType: TEST_FIND | TEST_MATCH}, diff --git a/tests/wpt/web-platform-tests/domparsing/DOMParser-parseFromString-xml-internal-subset.html b/tests/wpt/web-platform-tests/domparsing/DOMParser-parseFromString-xml-internal-subset.html new file mode 100644 index 00000000000..26b5fa99f17 --- /dev/null +++ b/tests/wpt/web-platform-tests/domparsing/DOMParser-parseFromString-xml-internal-subset.html @@ -0,0 +1,24 @@ + +Parsing and serialization of doctype internal subset + + + diff --git a/tests/wpt/web-platform-tests/dpub-aam/OWNERS b/tests/wpt/web-platform-tests/dpub-aam/OWNERS index 35ae0f6c00b..2a4c47ed4df 100644 --- a/tests/wpt/web-platform-tests/dpub-aam/OWNERS +++ b/tests/wpt/web-platform-tests/dpub-aam/OWNERS @@ -1 +1,2 @@ @halindrome +@joanmarie diff --git a/tests/wpt/web-platform-tests/dpub-aam/doc-abstract-manual.html b/tests/wpt/web-platform-tests/dpub-aam/doc-abstract-manual.html new file mode 100644 index 00000000000..c8b39bda035 --- /dev/null +++ b/tests/wpt/web-platform-tests/dpub-aam/doc-abstract-manual.html @@ -0,0 +1,101 @@ + + + + doc-abstract + + + + + + + + +

        This test examines the ARIA properties for doc-abstract.

        +
        Text
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/dpub-aam/doc-acknowledgments-manual.html b/tests/wpt/web-platform-tests/dpub-aam/doc-acknowledgments-manual.html new file mode 100644 index 00000000000..e45c462727a --- /dev/null +++ b/tests/wpt/web-platform-tests/dpub-aam/doc-acknowledgments-manual.html @@ -0,0 +1,113 @@ + + + + doc-acknowledgments + + + + + + + + +

        This test examines the ARIA properties for doc-acknowledgments.

        +
        Text
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/dpub-aam/doc-afterword-manual.html b/tests/wpt/web-platform-tests/dpub-aam/doc-afterword-manual.html new file mode 100644 index 00000000000..94cd2d8e973 --- /dev/null +++ b/tests/wpt/web-platform-tests/dpub-aam/doc-afterword-manual.html @@ -0,0 +1,113 @@ + + + + doc-afterword + + + + + + + + +

        This test examines the ARIA properties for doc-afterword.

        +
        Text
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/dpub-aam/doc-appendix-manual.html b/tests/wpt/web-platform-tests/dpub-aam/doc-appendix-manual.html new file mode 100644 index 00000000000..da4bf3c6cf4 --- /dev/null +++ b/tests/wpt/web-platform-tests/dpub-aam/doc-appendix-manual.html @@ -0,0 +1,113 @@ + + + + doc-appendix + + + + + + + + +

        This test examines the ARIA properties for doc-appendix.

        +
        Text
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/dpub-aam/doc-backlink-manual.html b/tests/wpt/web-platform-tests/dpub-aam/doc-backlink-manual.html new file mode 100644 index 00000000000..51eb6acc7ca --- /dev/null +++ b/tests/wpt/web-platform-tests/dpub-aam/doc-backlink-manual.html @@ -0,0 +1,133 @@ + + + + doc-backlink + + + + + + + + +

        This test examines the ARIA properties for doc-backlink.

        +
        +
        child 1
        +
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/dpub-aam/doc-biblioentry-manual.html b/tests/wpt/web-platform-tests/dpub-aam/doc-biblioentry-manual.html new file mode 100644 index 00000000000..d97ec2a70c3 --- /dev/null +++ b/tests/wpt/web-platform-tests/dpub-aam/doc-biblioentry-manual.html @@ -0,0 +1,109 @@ + + + + doc-biblioentry + + + + + + + + +

        This test examines the ARIA properties for doc-biblioentry.

        +
        Text
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/dpub-aam/doc-bibliography-manual.html b/tests/wpt/web-platform-tests/dpub-aam/doc-bibliography-manual.html new file mode 100644 index 00000000000..c69a17aa294 --- /dev/null +++ b/tests/wpt/web-platform-tests/dpub-aam/doc-bibliography-manual.html @@ -0,0 +1,113 @@ + + + + doc-bibliography + + + + + + + + +

        This test examines the ARIA properties for doc-bibliography.

        +
        Text
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/dpub-aam/doc-biblioref-manual.html b/tests/wpt/web-platform-tests/dpub-aam/doc-biblioref-manual.html new file mode 100644 index 00000000000..29ea65fe216 --- /dev/null +++ b/tests/wpt/web-platform-tests/dpub-aam/doc-biblioref-manual.html @@ -0,0 +1,133 @@ + + + + doc-biblioref + + + + + + + + +

        This test examines the ARIA properties for doc-biblioref.

        +
        +
        child 1
        +
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/dpub-aam/doc-chapter-manual.html b/tests/wpt/web-platform-tests/dpub-aam/doc-chapter-manual.html new file mode 100644 index 00000000000..3a080ae755c --- /dev/null +++ b/tests/wpt/web-platform-tests/dpub-aam/doc-chapter-manual.html @@ -0,0 +1,113 @@ + + + + doc-chapter + + + + + + + + +

        This test examines the ARIA properties for doc-chapter.

        +
        Text
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/dpub-aam/doc-colophon-manual.html b/tests/wpt/web-platform-tests/dpub-aam/doc-colophon-manual.html new file mode 100644 index 00000000000..b7cdb5ad9f4 --- /dev/null +++ b/tests/wpt/web-platform-tests/dpub-aam/doc-colophon-manual.html @@ -0,0 +1,101 @@ + + + + doc-colophon + + + + + + + + +

        This test examines the ARIA properties for doc-colophon.

        +
        Text
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/dpub-aam/doc-conclusion-manual.html b/tests/wpt/web-platform-tests/dpub-aam/doc-conclusion-manual.html new file mode 100644 index 00000000000..c1786c8dbfb --- /dev/null +++ b/tests/wpt/web-platform-tests/dpub-aam/doc-conclusion-manual.html @@ -0,0 +1,113 @@ + + + + doc-conclusion + + + + + + + + +

        This test examines the ARIA properties for doc-conclusion.

        +
        Text
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/dpub-aam/doc-cover-manual.html b/tests/wpt/web-platform-tests/dpub-aam/doc-cover-manual.html new file mode 100644 index 00000000000..c09931fbde6 --- /dev/null +++ b/tests/wpt/web-platform-tests/dpub-aam/doc-cover-manual.html @@ -0,0 +1,97 @@ + + + + doc-cover + + + + + + + + +

        This test examines the ARIA properties for doc-cover.

        +
        Text
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/dpub-aam/doc-credit-manual.html b/tests/wpt/web-platform-tests/dpub-aam/doc-credit-manual.html new file mode 100644 index 00000000000..f23baa5bc64 --- /dev/null +++ b/tests/wpt/web-platform-tests/dpub-aam/doc-credit-manual.html @@ -0,0 +1,101 @@ + + + + doc-credit + + + + + + + + +

        This test examines the ARIA properties for doc-credit.

        +
        Text
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/dpub-aam/doc-credits-manual.html b/tests/wpt/web-platform-tests/dpub-aam/doc-credits-manual.html new file mode 100644 index 00000000000..5562c5d9dab --- /dev/null +++ b/tests/wpt/web-platform-tests/dpub-aam/doc-credits-manual.html @@ -0,0 +1,113 @@ + + + + doc-credits + + + + + + + + +

        This test examines the ARIA properties for doc-credits.

        +
        Text
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/dpub-aam/doc-dedication-manual.html b/tests/wpt/web-platform-tests/dpub-aam/doc-dedication-manual.html new file mode 100644 index 00000000000..9c95d929890 --- /dev/null +++ b/tests/wpt/web-platform-tests/dpub-aam/doc-dedication-manual.html @@ -0,0 +1,101 @@ + + + + doc-dedication + + + + + + + + +

        This test examines the ARIA properties for doc-dedication.

        +
        Text
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/dpub-aam/doc-endnote-manual.html b/tests/wpt/web-platform-tests/dpub-aam/doc-endnote-manual.html new file mode 100644 index 00000000000..63320c96cad --- /dev/null +++ b/tests/wpt/web-platform-tests/dpub-aam/doc-endnote-manual.html @@ -0,0 +1,109 @@ + + + + doc-endnote + + + + + + + + +

        This test examines the ARIA properties for doc-endnote.

        +
        Text
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/dpub-aam/doc-endnotes-manual.html b/tests/wpt/web-platform-tests/dpub-aam/doc-endnotes-manual.html new file mode 100644 index 00000000000..040b6e9c56c --- /dev/null +++ b/tests/wpt/web-platform-tests/dpub-aam/doc-endnotes-manual.html @@ -0,0 +1,113 @@ + + + + doc-endnotes + + + + + + + + +

        This test examines the ARIA properties for doc-endnotes.

        +
        Text
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/dpub-aam/doc-epigraph-manual.html b/tests/wpt/web-platform-tests/dpub-aam/doc-epigraph-manual.html new file mode 100644 index 00000000000..26b5d638bbb --- /dev/null +++ b/tests/wpt/web-platform-tests/dpub-aam/doc-epigraph-manual.html @@ -0,0 +1,101 @@ + + + + doc-epigraph + + + + + + + + +

        This test examines the ARIA properties for doc-epigraph.

        +
        Text
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/dpub-aam/doc-epilogue-manual.html b/tests/wpt/web-platform-tests/dpub-aam/doc-epilogue-manual.html new file mode 100644 index 00000000000..059e7c3cea8 --- /dev/null +++ b/tests/wpt/web-platform-tests/dpub-aam/doc-epilogue-manual.html @@ -0,0 +1,113 @@ + + + + doc-epilogue + + + + + + + + +

        This test examines the ARIA properties for doc-epilogue.

        +
        Text
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/dpub-aam/doc-errata-manual.html b/tests/wpt/web-platform-tests/dpub-aam/doc-errata-manual.html new file mode 100644 index 00000000000..759fb6ca6e4 --- /dev/null +++ b/tests/wpt/web-platform-tests/dpub-aam/doc-errata-manual.html @@ -0,0 +1,113 @@ + + + + doc-errata + + + + + + + + +

        This test examines the ARIA properties for doc-errata.

        +
        Text
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/dpub-aam/doc-example-manual.html b/tests/wpt/web-platform-tests/dpub-aam/doc-example-manual.html new file mode 100644 index 00000000000..df11392abff --- /dev/null +++ b/tests/wpt/web-platform-tests/dpub-aam/doc-example-manual.html @@ -0,0 +1,101 @@ + + + + doc-example + + + + + + + + +

        This test examines the ARIA properties for doc-example.

        +
        Text
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/dpub-aam/doc-footnote-manual.html b/tests/wpt/web-platform-tests/dpub-aam/doc-footnote-manual.html new file mode 100644 index 00000000000..ad5f1f7116e --- /dev/null +++ b/tests/wpt/web-platform-tests/dpub-aam/doc-footnote-manual.html @@ -0,0 +1,101 @@ + + + + doc-footnote + + + + + + + + +

        This test examines the ARIA properties for doc-footnote.

        +
        Text
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/dpub-aam/doc-foreword-manual.html b/tests/wpt/web-platform-tests/dpub-aam/doc-foreword-manual.html new file mode 100644 index 00000000000..c56d3144622 --- /dev/null +++ b/tests/wpt/web-platform-tests/dpub-aam/doc-foreword-manual.html @@ -0,0 +1,113 @@ + + + + doc-foreword + + + + + + + + +

        This test examines the ARIA properties for doc-foreword.

        +
        Text
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/dpub-aam/doc-glossary-manual.html b/tests/wpt/web-platform-tests/dpub-aam/doc-glossary-manual.html new file mode 100644 index 00000000000..b22e3be66c5 --- /dev/null +++ b/tests/wpt/web-platform-tests/dpub-aam/doc-glossary-manual.html @@ -0,0 +1,113 @@ + + + + doc-glossary + + + + + + + + +

        This test examines the ARIA properties for doc-glossary.

        +
        Text
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/dpub-aam/doc-glossref-manual.html b/tests/wpt/web-platform-tests/dpub-aam/doc-glossref-manual.html new file mode 100644 index 00000000000..6a03b871c32 --- /dev/null +++ b/tests/wpt/web-platform-tests/dpub-aam/doc-glossref-manual.html @@ -0,0 +1,133 @@ + + + + doc-glossref + + + + + + + + +

        This test examines the ARIA properties for doc-glossref.

        +
        +
        child 1
        +
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/dpub-aam/doc-index-manual.html b/tests/wpt/web-platform-tests/dpub-aam/doc-index-manual.html new file mode 100644 index 00000000000..b24abfa2938 --- /dev/null +++ b/tests/wpt/web-platform-tests/dpub-aam/doc-index-manual.html @@ -0,0 +1,113 @@ + + + + doc-index + + + + + + + + +

        This test examines the ARIA properties for doc-index.

        +
        Text
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/dpub-aam/doc-introduction-manual.html b/tests/wpt/web-platform-tests/dpub-aam/doc-introduction-manual.html new file mode 100644 index 00000000000..e720f74c48e --- /dev/null +++ b/tests/wpt/web-platform-tests/dpub-aam/doc-introduction-manual.html @@ -0,0 +1,113 @@ + + + + doc-introduction + + + + + + + + +

        This test examines the ARIA properties for doc-introduction.

        +
        Text
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/dpub-aam/doc-noteref-manual.html b/tests/wpt/web-platform-tests/dpub-aam/doc-noteref-manual.html new file mode 100644 index 00000000000..f78af805eaf --- /dev/null +++ b/tests/wpt/web-platform-tests/dpub-aam/doc-noteref-manual.html @@ -0,0 +1,133 @@ + + + + doc-noteref + + + + + + + + +

        This test examines the ARIA properties for doc-noteref.

        +
        +
        child 1
        +
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/dpub-aam/doc-notice-manual.html b/tests/wpt/web-platform-tests/dpub-aam/doc-notice-manual.html new file mode 100644 index 00000000000..d3135a76316 --- /dev/null +++ b/tests/wpt/web-platform-tests/dpub-aam/doc-notice-manual.html @@ -0,0 +1,101 @@ + + + + doc-notice + + + + + + + + +

        This test examines the ARIA properties for doc-notice.

        +
        Text
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/dpub-aam/doc-pagebreak-manual.html b/tests/wpt/web-platform-tests/dpub-aam/doc-pagebreak-manual.html new file mode 100644 index 00000000000..1bafd77cbeb --- /dev/null +++ b/tests/wpt/web-platform-tests/dpub-aam/doc-pagebreak-manual.html @@ -0,0 +1,103 @@ + + + + doc-pagebreak + + + + + + + + +

        This test examines the ARIA properties for doc-pagebreak.

        +
        Text
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/dpub-aam/doc-pagelist-manual.html b/tests/wpt/web-platform-tests/dpub-aam/doc-pagelist-manual.html new file mode 100644 index 00000000000..24bd42e0c24 --- /dev/null +++ b/tests/wpt/web-platform-tests/dpub-aam/doc-pagelist-manual.html @@ -0,0 +1,113 @@ + + + + doc-pagelist + + + + + + + + +

        This test examines the ARIA properties for doc-pagelist.

        +
        Text
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/dpub-aam/doc-part-manual.html b/tests/wpt/web-platform-tests/dpub-aam/doc-part-manual.html new file mode 100644 index 00000000000..bc06f0ef43a --- /dev/null +++ b/tests/wpt/web-platform-tests/dpub-aam/doc-part-manual.html @@ -0,0 +1,113 @@ + + + + doc-part + + + + + + + + +

        This test examines the ARIA properties for doc-part.

        +
        Text
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/dpub-aam/doc-preface-manual.html b/tests/wpt/web-platform-tests/dpub-aam/doc-preface-manual.html new file mode 100644 index 00000000000..0a2bdbfe6a0 --- /dev/null +++ b/tests/wpt/web-platform-tests/dpub-aam/doc-preface-manual.html @@ -0,0 +1,113 @@ + + + + doc-preface + + + + + + + + +

        This test examines the ARIA properties for doc-preface.

        +
        Text
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/dpub-aam/doc-prologue-manual.html b/tests/wpt/web-platform-tests/dpub-aam/doc-prologue-manual.html new file mode 100644 index 00000000000..077cfb832e0 --- /dev/null +++ b/tests/wpt/web-platform-tests/dpub-aam/doc-prologue-manual.html @@ -0,0 +1,113 @@ + + + + doc-prologue + + + + + + + + +

        This test examines the ARIA properties for doc-prologue.

        +
        Text
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/dpub-aam/doc-pullquote-manual.html b/tests/wpt/web-platform-tests/dpub-aam/doc-pullquote-manual.html new file mode 100644 index 00000000000..543c4ed9035 --- /dev/null +++ b/tests/wpt/web-platform-tests/dpub-aam/doc-pullquote-manual.html @@ -0,0 +1,101 @@ + + + + doc-pullquote + + + + + + + + +

        This test examines the ARIA properties for doc-pullquote.

        +
        Text
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/dpub-aam/doc-qna-manual.html b/tests/wpt/web-platform-tests/dpub-aam/doc-qna-manual.html new file mode 100644 index 00000000000..8b9c4666d14 --- /dev/null +++ b/tests/wpt/web-platform-tests/dpub-aam/doc-qna-manual.html @@ -0,0 +1,101 @@ + + + + doc-qna + + + + + + + + +

        This test examines the ARIA properties for doc-qna.

        +
        Text
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/dpub-aam/doc-subtitle-manual.html b/tests/wpt/web-platform-tests/dpub-aam/doc-subtitle-manual.html new file mode 100644 index 00000000000..551891983d5 --- /dev/null +++ b/tests/wpt/web-platform-tests/dpub-aam/doc-subtitle-manual.html @@ -0,0 +1,101 @@ + + + + doc-subtitle + + + + + + + + +

        This test examines the ARIA properties for doc-subtitle.

        +
        Text
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/dpub-aam/doc-tip-manual.html b/tests/wpt/web-platform-tests/dpub-aam/doc-tip-manual.html new file mode 100644 index 00000000000..ec59b0f0b5c --- /dev/null +++ b/tests/wpt/web-platform-tests/dpub-aam/doc-tip-manual.html @@ -0,0 +1,101 @@ + + + + doc-tip + + + + + + + + +

        This test examines the ARIA properties for doc-tip.

        +
        Text
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/dpub-aam/doc-toc-manual.html b/tests/wpt/web-platform-tests/dpub-aam/doc-toc-manual.html new file mode 100644 index 00000000000..c3969e23220 --- /dev/null +++ b/tests/wpt/web-platform-tests/dpub-aam/doc-toc-manual.html @@ -0,0 +1,113 @@ + + + + doc-toc + + + + + + + + +

        This test examines the ARIA properties for doc-toc.

        +
        Text
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/editing/data/README.md b/tests/wpt/web-platform-tests/editing/data/README.md new file mode 100644 index 00000000000..606c67182ca --- /dev/null +++ b/tests/wpt/web-platform-tests/editing/data/README.md @@ -0,0 +1,166 @@ +# editing/data/*.js Format # + +In the interests of keeping file size down, the format of these +(machine-generated) data files is relatively concise. Unfortunately, this +means they can appear slightly cryptic to the untrained eye: + + ["foo[bar]baz", + [["stylewithcss","false"],["bold",""]], + "foo[bar]baz", + [true,true], + {"stylewithcss":[false,true,"",false,false,""],"bold":[false,false,"",false,true,""]}], + +But never fear! It's not actually so complicated (assuming you understand the +relevant APIs to begin with). Each line has the following format, which we +will explain in due course: + + ["initial HTML", + [["command1", "arg1"], ["command2", "arg2"]], + "expected HTML", + [expected retval from command1, expected retval from command2], + {"command1":[expected original/final indeterm/state/value 1], + "command2":[expected original/final indeterm/state/value 2]}], + +## Line 1: Initial HTML ## + + -> ["foo[bar]baz", + [["stylewithcss","false"],["bold",""]], + "foo[bar]baz", + [true,true], + {"stylewithcss":[false,true,"",false,false,""],"bold":[false,false,"",false,true,""]}], + +When testing, first a contenteditable div's innerHTML is set to the value given +here. Then the characters []{} are located and removed, and the selection is +set to where they used to be, as follows: + + * [ and ] indicate the left or right endpoint of the selection, if it's in + a text node. + * { and } indicate the left or right endpoint of the selection, if it's not + in a text node. + +Thus `[foo]` means the selection start and end are (foo, 0) and (foo, +3), while `{foo}` means they're (``, 0) and (``, 1). +`[foo}` and `{foo]` are also possible. There is no way to +describe backwards selections (i.e., distinguish anchor/focus). + +In cases where you want the selection in a place where it's not possible to +place text, like `
        fontRequires a specific font to be installed. (Details must be - provided and/or the font linked to in the test description)Requires a specific font to be installed at the OS level. (A link to the + font to be installed must be provided; this is not needed if only web + fonts are used.)
        history
        {}
        `, another format +exists using data-start and data-end attributes. It's only used in a few +tests, so it is not documented here. + +## Line 2: commands ## + + ["foo[bar]baz", + -> [["stylewithcss","false"],["bold",""]], + "foo[bar]baz", + [true,true], + {"stylewithcss":[false,true,"",false,false,""],"bold":[false,false,"",false,true,""]}], + +After the innerHTML of the editing host is filled in, the commands given here +are run in order, like this: + + document.execCommand("stylewithcss", false, "false"); + document.execCommand("bold", false, ""); + +Most tests have only one command run. The exceptions are: + + 1. styleWithCSS. Tests that involve formatting elements or styles are run + twice, once with styleWithCSS on and once with it off. + 2. defaultParagraphSeparator. Tests that involve `

        `s or `

        `s are run + twice, once with defaultParagraphSeparator set to "div" and once "p". + 3. multitest.js tests interactions between different commands, so it contains + arbitrary combinations of commands. + +## Line 3: expected HTML ## + + ["foo[bar]baz", + [["stylewithcss","false"],["bold",""]], + -> "foo[bar]baz", + [true,true], + {"stylewithcss":[false,true,"",false,false,""],"bold":[false,false,"",false,true,""]}], + +After the commands are run, we check that the innerHTML of the editing host +matches the expected HTML provided here. As on line 1, the characters []{} +(and data-start/data-end attributes) have special meaning and are not really +expected to be in the HTML. However, on this line they don't affect the test's +processing -- there are no tests of what the final selection is. + +## Line 4: expected return values ## + + ["foo[bar]baz", + [["stylewithcss","false"],["bold",""]], + "foo[bar]baz", + -> [true,true], + {"stylewithcss":[false,true,"",false,false,""],"bold":[false,false,"",false,true,""]}], + +execCommand() returns a boolean: true if all went well, false if not (e.g., +invalid value). This line says what value each execCommand() call from line 2 +was supposed to return. Usually they'll all be true, but for tests of +error-handling they'll sometimes be false. + +## Line 5: expected indeterm/state/value ## + + ["foo[bar]baz", + [["stylewithcss","false"],["bold",""]], + "foo[bar]baz", + [true,true], + -> {"stylewithcss":[false,true,"",false,false,""],"bold":[false,false,"",false,true,""]}], + +For each command that we're running, we check queryCommandIndeterm(), +queryCommandState(), and queryCommandValue() before we begin running any of our +commands, and again after we've finished the last one. (We don't run these +checks in between commands.) For each command, this line gives an array of six +expected values, in order: + + 1. Indeterm before + 2. State before + 3. Value before + 4. Indeterm after + 5. State after + 6. Value after + +You can remember this by keeping in mind that the three "before" values come +before the three "after" values, and each set of three values is in +alphabetical order (indeterm/state/value). + +## Analysis of a real-world example ## + +Let's look back at the example we started with and see what it means: + + ["foo[bar]baz", + [["stylewithcss","false"],["bold",""]], + "foo[bar]baz", + [true,true], + {"stylewithcss":[false,true,"",false,false,""],"bold":[false,false,"",false,true,""]}], + +Line 1: Set the innerHTML of our editing host to `foobarbaz`, and set the +selection's start and end inside the resulting text node, selecting the letters +"bar". (We actually first set the innerHTML to `foo[bar]baz` and remove the +brackets afterwards.) + +Line 2: Execute the commands: + + document.execCommand("stylewithcss", false, "false"); + document.execCommand("bold", false, ""); + +Before doing this, we record the indeterm/state/value for both "stylewithcss" +and "bold", and afterwards, we record them again. We also record the return +value of both execCommand() calls. + +Line 3: Our new innerHTML should be `foobarbaz`. The [ and ] say where +we would theoretically want the selection to be, but no actual test is run. + +Line 4: Both execCommands we ran should return true. + +Line 5: We expect the indeterm for styleWithCSS to be false both before and +after, and the value to be "" before and after -- since they always are for +this command. The state for styleWithCSS should be true beforehand, because +that's the way the previous test left it -- the testing framework doesn't clear +these settings in between tests. (Thus the first test of styleWithCSS on the +page also tests the default value of the state.) But we set it to false, so +after the tests it should be false. + +We expect the indeterm for bold to be false both before and after, because +before nothing is bold, and after everything is bold. Value should be "" +before and after, because it always is for bold. The state before should be +false, but after should have changed to true. diff --git a/tests/wpt/web-platform-tests/editing/data/backcolor.js b/tests/wpt/web-platform-tests/editing/data/backcolor.js index be8bda01af2..4d6e77e21d1 100644 --- a/tests/wpt/web-platform-tests/editing/data/backcolor.js +++ b/tests/wpt/web-platform-tests/editing/data/backcolor.js @@ -1,3 +1,4 @@ +// For documentation of the format, see README in this directory. var browserTests = [ ["foo[]bar", [["backcolor","#00FFFF"]], diff --git a/tests/wpt/web-platform-tests/editing/data/bold.js b/tests/wpt/web-platform-tests/editing/data/bold.js index e9f04726be5..61ccf4f8adf 100644 --- a/tests/wpt/web-platform-tests/editing/data/bold.js +++ b/tests/wpt/web-platform-tests/editing/data/bold.js @@ -1,3 +1,4 @@ +// For documentation of the format, see README in this directory. var browserTests = [ ["foo[]bar", [["bold",""]], diff --git a/tests/wpt/web-platform-tests/editing/data/createlink.js b/tests/wpt/web-platform-tests/editing/data/createlink.js index 275fcbd5995..87e59d281e5 100644 --- a/tests/wpt/web-platform-tests/editing/data/createlink.js +++ b/tests/wpt/web-platform-tests/editing/data/createlink.js @@ -1,3 +1,4 @@ +// For documentation of the format, see README in this directory. var browserTests = [ ["foo[]bar", [["createlink","http://www.google.com/"]], diff --git a/tests/wpt/web-platform-tests/editing/data/delete-list-items-in-table-cells.js b/tests/wpt/web-platform-tests/editing/data/delete-list-items-in-table-cells.js new file mode 100644 index 00000000000..cd5670e5851 --- /dev/null +++ b/tests/wpt/web-platform-tests/editing/data/delete-list-items-in-table-cells.js @@ -0,0 +1,23 @@ +// For documentation of the format, see README in this directory. +var browserTests = [ +['
        1. a
        2. {}
        b
        ', + [["delete",""]], + '
        1. a
        b
        ', + [true], + {"delete":[false,false,"",false,false,""]}], +['
        • a
        • {}
        b
        ', + [["delete",""]], + '
        • a
        b
        ', + [true], + {"delete":[false,false,"",false,false,""]}], +['
        1. {}
        ', + [["delete",""]], + '

        ', + [true], + {"delete":[false,false,"",false,false,""]}], +['
        • {}
        ', + [["delete",""]], + '

        ', + [true], + {"delete":[false,false,"",false,false,""]}], +] diff --git a/tests/wpt/web-platform-tests/editing/data/delete.js b/tests/wpt/web-platform-tests/editing/data/delete.js index bfea9283142..8a2bd707531 100644 --- a/tests/wpt/web-platform-tests/editing/data/delete.js +++ b/tests/wpt/web-platform-tests/editing/data/delete.js @@ -1,3 +1,4 @@ +// For documentation of the format, see README in this directory. var browserTests = [ ["foo[]bar", [["delete",""]], diff --git a/tests/wpt/web-platform-tests/editing/data/fontname.js b/tests/wpt/web-platform-tests/editing/data/fontname.js index 9f0cebd3e68..f4193a9bce7 100644 --- a/tests/wpt/web-platform-tests/editing/data/fontname.js +++ b/tests/wpt/web-platform-tests/editing/data/fontname.js @@ -1,3 +1,4 @@ +// For documentation of the format, see README in this directory. var browserTests = [ ["foo[]bar", [["fontname","sans-serif"]], diff --git a/tests/wpt/web-platform-tests/editing/data/fontsize.js b/tests/wpt/web-platform-tests/editing/data/fontsize.js index 8ab0f24c278..eb741b4f331 100644 --- a/tests/wpt/web-platform-tests/editing/data/fontsize.js +++ b/tests/wpt/web-platform-tests/editing/data/fontsize.js @@ -1,3 +1,4 @@ +// For documentation of the format, see README in this directory. var browserTests = [ ["foo[]bar", [["fontsize","4"]], diff --git a/tests/wpt/web-platform-tests/editing/data/forecolor.js b/tests/wpt/web-platform-tests/editing/data/forecolor.js index 5278f0953ba..57deb5b434a 100644 --- a/tests/wpt/web-platform-tests/editing/data/forecolor.js +++ b/tests/wpt/web-platform-tests/editing/data/forecolor.js @@ -1,3 +1,4 @@ +// For documentation of the format, see README in this directory. var browserTests = [ ["foo[]bar", [["forecolor","#0000FF"]], diff --git a/tests/wpt/web-platform-tests/editing/data/formatblock.js b/tests/wpt/web-platform-tests/editing/data/formatblock.js index 39c20e2680a..e69c8bb89c7 100644 --- a/tests/wpt/web-platform-tests/editing/data/formatblock.js +++ b/tests/wpt/web-platform-tests/editing/data/formatblock.js @@ -1,3 +1,4 @@ +// For documentation of the format, see README in this directory. var browserTests = [ ["foo[]bar

        extra", [["defaultparagraphseparator","div"],["formatblock","

        "]], diff --git a/tests/wpt/web-platform-tests/editing/data/forwarddelete.js b/tests/wpt/web-platform-tests/editing/data/forwarddelete.js index 66cf6cf3378..eb8d14ee0e5 100644 --- a/tests/wpt/web-platform-tests/editing/data/forwarddelete.js +++ b/tests/wpt/web-platform-tests/editing/data/forwarddelete.js @@ -1,3 +1,4 @@ +// For documentation of the format, see README in this directory. var browserTests = [ ["foo[]", [["forwarddelete",""]], diff --git a/tests/wpt/web-platform-tests/editing/data/hilitecolor.js b/tests/wpt/web-platform-tests/editing/data/hilitecolor.js index e1f561d8fa4..25706196321 100644 --- a/tests/wpt/web-platform-tests/editing/data/hilitecolor.js +++ b/tests/wpt/web-platform-tests/editing/data/hilitecolor.js @@ -1,3 +1,4 @@ +// For documentation of the format, see README in this directory. var browserTests = [ ["foo[]bar", [["hilitecolor","#00FFFF"]], diff --git a/tests/wpt/web-platform-tests/editing/data/indent.js b/tests/wpt/web-platform-tests/editing/data/indent.js index 28327163060..6d18fc35b73 100644 --- a/tests/wpt/web-platform-tests/editing/data/indent.js +++ b/tests/wpt/web-platform-tests/editing/data/indent.js @@ -1,3 +1,4 @@ +// For documentation of the format, see README in this directory. var browserTests = [ ["foo[]bar

        extra", [["indent",""]], diff --git a/tests/wpt/web-platform-tests/editing/data/inserthorizontalrule.js b/tests/wpt/web-platform-tests/editing/data/inserthorizontalrule.js index 9d12d6809be..998822789f1 100644 --- a/tests/wpt/web-platform-tests/editing/data/inserthorizontalrule.js +++ b/tests/wpt/web-platform-tests/editing/data/inserthorizontalrule.js @@ -1,3 +1,4 @@ +// For documentation of the format, see README in this directory. var browserTests = [ ["foo[]bar", [["inserthorizontalrule",""]], diff --git a/tests/wpt/web-platform-tests/editing/data/inserthtml.js b/tests/wpt/web-platform-tests/editing/data/inserthtml.js index 78581bf533d..0c6cff86c60 100644 --- a/tests/wpt/web-platform-tests/editing/data/inserthtml.js +++ b/tests/wpt/web-platform-tests/editing/data/inserthtml.js @@ -1,3 +1,4 @@ +// For documentation of the format, see README in this directory. var browserTests = [ ["foo[]bar", [["stylewithcss","true"],["inserthtml","abcd"]], diff --git a/tests/wpt/web-platform-tests/editing/data/insertimage.js b/tests/wpt/web-platform-tests/editing/data/insertimage.js index d1874e65212..c2e26cb56d4 100644 --- a/tests/wpt/web-platform-tests/editing/data/insertimage.js +++ b/tests/wpt/web-platform-tests/editing/data/insertimage.js @@ -1,3 +1,4 @@ +// For documentation of the format, see README in this directory. var browserTests = [ ["foo[]bar", [["insertimage","/img/lion.svg"]], diff --git a/tests/wpt/web-platform-tests/editing/data/insertlinebreak.js b/tests/wpt/web-platform-tests/editing/data/insertlinebreak.js index 2793cbb1c5f..a37483eddb0 100644 --- a/tests/wpt/web-platform-tests/editing/data/insertlinebreak.js +++ b/tests/wpt/web-platform-tests/editing/data/insertlinebreak.js @@ -1,3 +1,4 @@ +// For documentation of the format, see README in this directory. var browserTests = [ ["foo[bar]baz", [["insertlinebreak",""]], diff --git a/tests/wpt/web-platform-tests/editing/data/insertorderedlist.js b/tests/wpt/web-platform-tests/editing/data/insertorderedlist.js index 76bda2d4bab..31259552cd1 100644 --- a/tests/wpt/web-platform-tests/editing/data/insertorderedlist.js +++ b/tests/wpt/web-platform-tests/editing/data/insertorderedlist.js @@ -1,3 +1,4 @@ +// For documentation of the format, see README in this directory. var browserTests = [ ["foo[]bar", [["insertorderedlist",""]], diff --git a/tests/wpt/web-platform-tests/editing/data/insertparagraph.js b/tests/wpt/web-platform-tests/editing/data/insertparagraph.js index a9a3be4e703..432f0e0de35 100644 --- a/tests/wpt/web-platform-tests/editing/data/insertparagraph.js +++ b/tests/wpt/web-platform-tests/editing/data/insertparagraph.js @@ -1,3 +1,4 @@ +// For documentation of the format, see README in this directory. var browserTests = [ ["foo[bar]baz", [["defaultparagraphseparator","div"],["insertparagraph",""]], diff --git a/tests/wpt/web-platform-tests/editing/data/inserttext.js b/tests/wpt/web-platform-tests/editing/data/inserttext.js index 8d4e31c17a2..4012510fcb6 100644 --- a/tests/wpt/web-platform-tests/editing/data/inserttext.js +++ b/tests/wpt/web-platform-tests/editing/data/inserttext.js @@ -1,3 +1,4 @@ +// For documentation of the format, see README in this directory. var browserTests = [ ["foo[bar]baz", [["inserttext","a"]], diff --git a/tests/wpt/web-platform-tests/editing/data/insertunorderedlist.js b/tests/wpt/web-platform-tests/editing/data/insertunorderedlist.js index ad4a7236fae..c7b6bf52e33 100644 --- a/tests/wpt/web-platform-tests/editing/data/insertunorderedlist.js +++ b/tests/wpt/web-platform-tests/editing/data/insertunorderedlist.js @@ -1,3 +1,4 @@ +// For documentation of the format, see README in this directory. var browserTests = [ ["foo[]bar", [["insertunorderedlist",""]], diff --git a/tests/wpt/web-platform-tests/editing/data/italic.js b/tests/wpt/web-platform-tests/editing/data/italic.js index 96ee0d9565c..b7bd63f95b9 100644 --- a/tests/wpt/web-platform-tests/editing/data/italic.js +++ b/tests/wpt/web-platform-tests/editing/data/italic.js @@ -1,3 +1,4 @@ +// For documentation of the format, see README in this directory. var browserTests = [ ["foo[]bar", [["italic",""]], diff --git a/tests/wpt/web-platform-tests/editing/data/justifycenter.js b/tests/wpt/web-platform-tests/editing/data/justifycenter.js index 76491ee44c5..8e4c80b4665 100644 --- a/tests/wpt/web-platform-tests/editing/data/justifycenter.js +++ b/tests/wpt/web-platform-tests/editing/data/justifycenter.js @@ -1,3 +1,4 @@ +// For documentation of the format, see README in this directory. var browserTests = [ ["foo[]bar

        extra", [["stylewithcss","true"],["defaultparagraphseparator","div"],["justifycenter",""]], diff --git a/tests/wpt/web-platform-tests/editing/data/justifyfull.js b/tests/wpt/web-platform-tests/editing/data/justifyfull.js index c8beca840cf..602ae11893a 100644 --- a/tests/wpt/web-platform-tests/editing/data/justifyfull.js +++ b/tests/wpt/web-platform-tests/editing/data/justifyfull.js @@ -1,3 +1,4 @@ +// For documentation of the format, see README in this directory. var browserTests = [ ["foo[]bar

        extra", [["stylewithcss","true"],["defaultparagraphseparator","div"],["justifyfull",""]], diff --git a/tests/wpt/web-platform-tests/editing/data/justifyleft.js b/tests/wpt/web-platform-tests/editing/data/justifyleft.js index c08033744be..e0a48e3e20f 100644 --- a/tests/wpt/web-platform-tests/editing/data/justifyleft.js +++ b/tests/wpt/web-platform-tests/editing/data/justifyleft.js @@ -1,3 +1,4 @@ +// For documentation of the format, see README in this directory. var browserTests = [ ["foo[]bar

        extra", [["justifyleft",""]], diff --git a/tests/wpt/web-platform-tests/editing/data/justifyright.js b/tests/wpt/web-platform-tests/editing/data/justifyright.js index 595f7376eee..c07f5d0bdd6 100644 --- a/tests/wpt/web-platform-tests/editing/data/justifyright.js +++ b/tests/wpt/web-platform-tests/editing/data/justifyright.js @@ -1,3 +1,4 @@ +// For documentation of the format, see README in this directory. var browserTests = [ ["foo[]bar

        extra", [["stylewithcss","true"],["defaultparagraphseparator","div"],["justifyright",""]], diff --git a/tests/wpt/web-platform-tests/editing/data/misc.js b/tests/wpt/web-platform-tests/editing/data/misc.js index 490b595377a..83c02ab769f 100644 --- a/tests/wpt/web-platform-tests/editing/data/misc.js +++ b/tests/wpt/web-platform-tests/editing/data/misc.js @@ -1,3 +1,4 @@ +// For documentation of the format, see README in this directory. var browserTests = [ ["foo[bar]baz", [["defaultparagraphseparator",""]], @@ -8,7 +9,7 @@ var browserTests = [ [["defaultparagraphseparator","div"]], "foo[bar]baz", [true], - {"defaultparagraphseparator":[false,false,"p",false,false,"div"]}], + {"defaultparagraphseparator":[false,false,"div",false,false,"div"]}], ["foo[bar]baz", [["defaultparagraphseparator","p"]], "foo[bar]baz", @@ -19,6 +20,16 @@ var browserTests = [ "foo[bar]baz", [true], {"defaultparagraphseparator":[false,false,"p",false,false,"div"]}], +["foo[bar]baz", + [["defaultparagraphseparator"," p "]], + "foo[bar]baz", + [false], + {"defaultparagraphseparator":[false,false,"div",false,false,"div"]}], +["foo[bar]baz", + [["defaultparagraphseparator","

        "]], + "foo[bar]baz", + [false], + {"defaultparagraphseparator":[false,false,"div",false,false,"div"]}], ["foo[bar]baz", [["defaultparagraphseparator","P"]], "foo[bar]baz", @@ -28,32 +39,22 @@ var browserTests = [ [["defaultparagraphseparator"," div "]], "foo[bar]baz", [false], - {"defaultparagraphseparator":[false,false,"p",false,false,"div"]}], -["foo[bar]baz", - [["defaultparagraphseparator"," p "]], - "foo[bar]baz", - [false], - {"defaultparagraphseparator":[false,false,"p",false,false,"div"]}], + {"defaultparagraphseparator":[false,false,"p",false,false,"p"]}], ["foo[bar]baz", [["defaultparagraphseparator","

        "]], "foo[bar]baz", [false], - {"defaultparagraphseparator":[false,false,"p",false,false,"div"]}], -["foo[bar]baz", - [["defaultparagraphseparator","

        "]], - "foo[bar]baz", - [false], - {"defaultparagraphseparator":[false,false,"p",false,false,"div"]}], + {"defaultparagraphseparator":[false,false,"p",false,false,"p"]}], ["foo[bar]baz", [["defaultparagraphseparator","li"]], "foo[bar]baz", [false], - {"defaultparagraphseparator":[false,false,"p",false,false,"div"]}], + {"defaultparagraphseparator":[false,false,"p",false,false,"p"]}], ["foo[bar]baz", [["defaultparagraphseparator","blockquote"]], "foo[bar]baz", [false], - {"defaultparagraphseparator":[false,false,"p",false,false,"div"]}], + {"defaultparagraphseparator":[false,false,"p",false,false,"p"]}], ["foo[bar]baz", [["selectall",""]], "foo[bar]baz", diff --git a/tests/wpt/web-platform-tests/editing/data/multitest.js b/tests/wpt/web-platform-tests/editing/data/multitest.js index 040e41eb2c6..338b9c905d6 100644 --- a/tests/wpt/web-platform-tests/editing/data/multitest.js +++ b/tests/wpt/web-platform-tests/editing/data/multitest.js @@ -1,3 +1,4 @@ +// For documentation of the format, see README in this directory. var browserTests = [ ["foo[]bar", [["bold",""],["inserttext","a"]], diff --git a/tests/wpt/web-platform-tests/editing/data/outdent.js b/tests/wpt/web-platform-tests/editing/data/outdent.js index 18d48d0cb98..271824bee51 100644 --- a/tests/wpt/web-platform-tests/editing/data/outdent.js +++ b/tests/wpt/web-platform-tests/editing/data/outdent.js @@ -1,3 +1,4 @@ +// For documentation of the format, see README in this directory. var browserTests = [ ["

        foo[bar]

        baz

        extra", [["outdent",""]], diff --git a/tests/wpt/web-platform-tests/editing/data/removeformat.js b/tests/wpt/web-platform-tests/editing/data/removeformat.js index 0ff0a76ce96..cfc355d8854 100644 --- a/tests/wpt/web-platform-tests/editing/data/removeformat.js +++ b/tests/wpt/web-platform-tests/editing/data/removeformat.js @@ -1,3 +1,4 @@ +// For documentation of the format, see README in this directory. var browserTests = [ ["foo[]bar", [["removeformat",""]], diff --git a/tests/wpt/web-platform-tests/editing/data/strikethrough.js b/tests/wpt/web-platform-tests/editing/data/strikethrough.js index 97170708df3..9817f4f0f85 100644 --- a/tests/wpt/web-platform-tests/editing/data/strikethrough.js +++ b/tests/wpt/web-platform-tests/editing/data/strikethrough.js @@ -1,3 +1,4 @@ +// For documentation of the format, see README in this directory. var browserTests = [ ["foo[]bar", [["strikethrough",""]], diff --git a/tests/wpt/web-platform-tests/editing/data/subscript.js b/tests/wpt/web-platform-tests/editing/data/subscript.js index af6ae896540..212981438b6 100644 --- a/tests/wpt/web-platform-tests/editing/data/subscript.js +++ b/tests/wpt/web-platform-tests/editing/data/subscript.js @@ -1,3 +1,4 @@ +// For documentation of the format, see README in this directory. var browserTests = [ ["foo[]bar", [["subscript",""]], diff --git a/tests/wpt/web-platform-tests/editing/data/superscript.js b/tests/wpt/web-platform-tests/editing/data/superscript.js index 337c70d30e7..e06fe6f4b17 100644 --- a/tests/wpt/web-platform-tests/editing/data/superscript.js +++ b/tests/wpt/web-platform-tests/editing/data/superscript.js @@ -1,3 +1,4 @@ +// For documentation of the format, see README in this directory. var browserTests = [ ["foo[]bar", [["superscript",""]], diff --git a/tests/wpt/web-platform-tests/editing/data/underline.js b/tests/wpt/web-platform-tests/editing/data/underline.js index 3414214386e..4dac89f66e1 100644 --- a/tests/wpt/web-platform-tests/editing/data/underline.js +++ b/tests/wpt/web-platform-tests/editing/data/underline.js @@ -1,3 +1,4 @@ +// For documentation of the format, see README in this directory. var browserTests = [ ["foo[]bar", [["underline",""]], diff --git a/tests/wpt/web-platform-tests/editing/data/unlink.js b/tests/wpt/web-platform-tests/editing/data/unlink.js index 8e5ea4489ab..84f8600f1bc 100644 --- a/tests/wpt/web-platform-tests/editing/data/unlink.js +++ b/tests/wpt/web-platform-tests/editing/data/unlink.js @@ -1,3 +1,4 @@ +// For documentation of the format, see README in this directory. var browserTests = [ ["foo[]bar", [["unlink",""]], diff --git a/tests/wpt/web-platform-tests/editing/other/extra-text-nodes.html b/tests/wpt/web-platform-tests/editing/other/extra-text-nodes.html new file mode 100644 index 00000000000..2cd1232d00b --- /dev/null +++ b/tests/wpt/web-platform-tests/editing/other/extra-text-nodes.html @@ -0,0 +1,43 @@ + + +Editor should not create unnecessary text nodes + + +

        + diff --git a/tests/wpt/web-platform-tests/editing/run/delete-list-items-in-table-cell.html b/tests/wpt/web-platform-tests/editing/run/delete-list-items-in-table-cell.html new file mode 100644 index 00000000000..c87fff45fd4 --- /dev/null +++ b/tests/wpt/web-platform-tests/editing/run/delete-list-items-in-table-cell.html @@ -0,0 +1,51 @@ + + + +delete list items in table cells - HTML editing conformance tests + +

        + +
        + +
        + + + + + + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/jis0208_index.js b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/jis0208_index.js new file mode 100644 index 00000000000..1c9a10fb4d6 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/jis0208_index.js @@ -0,0 +1,3 @@ +// index is ShiftJIS index pointer, value is Unicode codepoint (dec) +// this is copy-pasted from the json version of the index belonging to the Encoding spec +var jis0208 = [12288,12289,12290,65292,65294,12539,65306,65307,65311,65281,12443,12444,180,65344,168,65342,65507,65343,12541,12542,12445,12446,12291,20189,12293,12294,12295,12540,8213,8208,65295,65340,65374,8741,65372,8230,8229,8216,8217,8220,8221,65288,65289,12308,12309,65339,65341,65371,65373,12296,12297,12298,12299,12300,12301,12302,12303,12304,12305,65291,65293,177,215,247,65309,8800,65308,65310,8806,8807,8734,8756,9794,9792,176,8242,8243,8451,65509,65284,65504,65505,65285,65283,65286,65290,65312,167,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,9661,9660,8251,12306,8594,8592,8593,8595,12307,null,null,null,null,null,null,null,null,null,null,null,8712,8715,8838,8839,8834,8835,8746,8745,null,null,null,null,null,null,null,null,8743,8744,65506,8658,8660,8704,8707,null,null,null,null,null,null,null,null,null,null,null,8736,8869,8978,8706,8711,8801,8786,8810,8811,8730,8765,8733,8757,8747,8748,null,null,null,null,null,null,null,8491,8240,9839,9837,9834,8224,8225,182,null,null,null,null,9711,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,null,null,null,null,null,null,null,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,null,null,null,null,null,null,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,null,null,null,null,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,null,null,null,null,null,null,null,null,null,null,null,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,null,null,null,null,null,null,null,null,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,null,null,null,null,null,null,null,null,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,null,null,null,null,null,null,null,null,null,null,null,null,null,9472,9474,9484,9488,9496,9492,9500,9516,9508,9524,9532,9473,9475,9487,9491,9499,9495,9507,9523,9515,9531,9547,9504,9519,9512,9527,9535,9501,9520,9509,9528,9538,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,9327,9328,9329,9330,9331,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,null,13129,13076,13090,13133,13080,13095,13059,13110,13137,13143,13069,13094,13091,13099,13130,13115,13212,13213,13214,13198,13199,13252,13217,null,null,null,null,null,null,null,null,13179,12317,12319,8470,13261,8481,12964,12965,12966,12967,12968,12849,12850,12857,13182,13181,13180,8786,8801,8747,8750,8721,8730,8869,8736,8735,8895,8757,8745,8746,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20124,21782,23043,38463,21696,24859,25384,23030,36898,33909,33564,31312,24746,25569,28197,26093,33894,33446,39925,26771,22311,26017,25201,23451,22992,34427,39156,32098,32190,39822,25110,31903,34999,23433,24245,25353,26263,26696,38343,38797,26447,20197,20234,20301,20381,20553,22258,22839,22996,23041,23561,24799,24847,24944,26131,26885,28858,30031,30064,31227,32173,32239,32963,33806,34915,35586,36949,36986,21307,20117,20133,22495,32946,37057,30959,19968,22769,28322,36920,31282,33576,33419,39983,20801,21360,21693,21729,22240,23035,24341,39154,28139,32996,34093,38498,38512,38560,38907,21515,21491,23431,28879,32701,36802,38632,21359,40284,31418,19985,30867,33276,28198,22040,21764,27421,34074,39995,23013,21417,28006,29916,38287,22082,20113,36939,38642,33615,39180,21473,21942,23344,24433,26144,26355,26628,27704,27891,27945,29787,30408,31310,38964,33521,34907,35424,37613,28082,30123,30410,39365,24742,35585,36234,38322,27022,21421,20870,22290,22576,22852,23476,24310,24616,25513,25588,27839,28436,28814,28948,29017,29141,29503,32257,33398,33489,34199,36960,37467,40219,22633,26044,27738,29989,20985,22830,22885,24448,24540,25276,26106,27178,27431,27572,29579,32705,35158,40236,40206,40644,23713,27798,33659,20740,23627,25014,33222,26742,29281,20057,20474,21368,24681,28201,31311,38899,19979,21270,20206,20309,20285,20385,20339,21152,21487,22025,22799,23233,23478,23521,31185,26247,26524,26550,27468,27827,28779,29634,31117,31166,31292,31623,33457,33499,33540,33655,33775,33747,34662,35506,22057,36008,36838,36942,38686,34442,20420,23784,25105,29273,30011,33253,33469,34558,36032,38597,39187,39381,20171,20250,35299,22238,22602,22730,24315,24555,24618,24724,24674,25040,25106,25296,25913,39745,26214,26800,28023,28784,30028,30342,32117,33445,34809,38283,38542,35997,20977,21182,22806,21683,23475,23830,24936,27010,28079,30861,33995,34903,35442,37799,39608,28012,39336,34521,22435,26623,34510,37390,21123,22151,21508,24275,25313,25785,26684,26680,27579,29554,30906,31339,35226,35282,36203,36611,37101,38307,38548,38761,23398,23731,27005,38989,38990,25499,31520,27179,27263,26806,39949,28511,21106,21917,24688,25324,27963,28167,28369,33883,35088,36676,19988,39993,21494,26907,27194,38788,26666,20828,31427,33970,37340,37772,22107,40232,26658,33541,33841,31909,21000,33477,29926,20094,20355,20896,23506,21002,21208,21223,24059,21914,22570,23014,23436,23448,23515,24178,24185,24739,24863,24931,25022,25563,25954,26577,26707,26874,27454,27475,27735,28450,28567,28485,29872,29976,30435,30475,31487,31649,31777,32233,32566,32752,32925,33382,33694,35251,35532,36011,36996,37969,38291,38289,38306,38501,38867,39208,33304,20024,21547,23736,24012,29609,30284,30524,23721,32747,36107,38593,38929,38996,39000,20225,20238,21361,21916,22120,22522,22855,23305,23492,23696,24076,24190,24524,25582,26426,26071,26082,26399,26827,26820,27231,24112,27589,27671,27773,30079,31048,23395,31232,32000,24509,35215,35352,36020,36215,36556,36637,39138,39438,39740,20096,20605,20736,22931,23452,25135,25216,25836,27450,29344,30097,31047,32681,34811,35516,35696,25516,33738,38816,21513,21507,21931,26708,27224,35440,30759,26485,40653,21364,23458,33050,34384,36870,19992,20037,20167,20241,21450,21560,23470,24339,24613,25937,26429,27714,27762,27875,28792,29699,31350,31406,31496,32026,31998,32102,26087,29275,21435,23621,24040,25298,25312,25369,28192,34394,35377,36317,37624,28417,31142,39770,20136,20139,20140,20379,20384,20689,20807,31478,20849,20982,21332,21281,21375,21483,21932,22659,23777,24375,24394,24623,24656,24685,25375,25945,27211,27841,29378,29421,30703,33016,33029,33288,34126,37111,37857,38911,39255,39514,20208,20957,23597,26241,26989,23616,26354,26997,29577,26704,31873,20677,21220,22343,24062,37670,26020,27427,27453,29748,31105,31165,31563,32202,33465,33740,34943,35167,35641,36817,37329,21535,37504,20061,20534,21477,21306,29399,29590,30697,33510,36527,39366,39368,39378,20855,24858,34398,21936,31354,20598,23507,36935,38533,20018,27355,37351,23633,23624,25496,31391,27795,38772,36705,31402,29066,38536,31874,26647,32368,26705,37740,21234,21531,34219,35347,32676,36557,37089,21350,34952,31041,20418,20670,21009,20804,21843,22317,29674,22411,22865,24418,24452,24693,24950,24935,25001,25522,25658,25964,26223,26690,28179,30054,31293,31995,32076,32153,32331,32619,33550,33610,34509,35336,35427,35686,36605,38938,40335,33464,36814,39912,21127,25119,25731,28608,38553,26689,20625,27424,27770,28500,31348,32080,34880,35363,26376,20214,20537,20518,20581,20860,21048,21091,21927,22287,22533,23244,24314,25010,25080,25331,25458,26908,27177,29309,29356,29486,30740,30831,32121,30476,32937,35211,35609,36066,36562,36963,37749,38522,38997,39443,40568,20803,21407,21427,24187,24358,28187,28304,29572,29694,32067,33335,35328,35578,38480,20046,20491,21476,21628,22266,22993,23396,24049,24235,24359,25144,25925,26543,28246,29392,31946,34996,32929,32993,33776,34382,35463,36328,37431,38599,39015,40723,20116,20114,20237,21320,21577,21566,23087,24460,24481,24735,26791,27278,29786,30849,35486,35492,35703,37264,20062,39881,20132,20348,20399,20505,20502,20809,20844,21151,21177,21246,21402,21475,21521,21518,21897,22353,22434,22909,23380,23389,23439,24037,24039,24055,24184,24195,24218,24247,24344,24658,24908,25239,25304,25511,25915,26114,26179,26356,26477,26657,26775,27083,27743,27946,28009,28207,28317,30002,30343,30828,31295,31968,32005,32024,32094,32177,32789,32771,32943,32945,33108,33167,33322,33618,34892,34913,35611,36002,36092,37066,37237,37489,30783,37628,38308,38477,38917,39321,39640,40251,21083,21163,21495,21512,22741,25335,28640,35946,36703,40633,20811,21051,21578,22269,31296,37239,40288,40658,29508,28425,33136,29969,24573,24794,39592,29403,36796,27492,38915,20170,22256,22372,22718,23130,24680,25031,26127,26118,26681,26801,28151,30165,32058,33390,39746,20123,20304,21449,21766,23919,24038,24046,26619,27801,29811,30722,35408,37782,35039,22352,24231,25387,20661,20652,20877,26368,21705,22622,22971,23472,24425,25165,25505,26685,27507,28168,28797,37319,29312,30741,30758,31085,25998,32048,33756,35009,36617,38555,21092,22312,26448,32618,36001,20916,22338,38442,22586,27018,32948,21682,23822,22524,30869,40442,20316,21066,21643,25662,26152,26388,26613,31364,31574,32034,37679,26716,39853,31545,21273,20874,21047,23519,25334,25774,25830,26413,27578,34217,38609,30352,39894,25420,37638,39851,30399,26194,19977,20632,21442,23665,24808,25746,25955,26719,29158,29642,29987,31639,32386,34453,35715,36059,37240,39184,26028,26283,27531,20181,20180,20282,20351,21050,21496,21490,21987,22235,22763,22987,22985,23039,23376,23629,24066,24107,24535,24605,25351,25903,23388,26031,26045,26088,26525,27490,27515,27663,29509,31049,31169,31992,32025,32043,32930,33026,33267,35222,35422,35433,35430,35468,35566,36039,36060,38604,39164,27503,20107,20284,20365,20816,23383,23546,24904,25345,26178,27425,28363,27835,29246,29885,30164,30913,31034,32780,32819,33258,33940,36766,27728,40575,24335,35672,40235,31482,36600,23437,38635,19971,21489,22519,22833,23241,23460,24713,28287,28422,30142,36074,23455,34048,31712,20594,26612,33437,23649,34122,32286,33294,20889,23556,25448,36198,26012,29038,31038,32023,32773,35613,36554,36974,34503,37034,20511,21242,23610,26451,28796,29237,37196,37320,37675,33509,23490,24369,24825,20027,21462,23432,25163,26417,27530,29417,29664,31278,33131,36259,37202,39318,20754,21463,21610,23551,25480,27193,32172,38656,22234,21454,21608,23447,23601,24030,20462,24833,25342,27954,31168,31179,32066,32333,32722,33261,33311,33936,34886,35186,35728,36468,36655,36913,37195,37228,38598,37276,20160,20303,20805,21313,24467,25102,26580,27713,28171,29539,32294,37325,37507,21460,22809,23487,28113,31069,32302,31899,22654,29087,20986,34899,36848,20426,23803,26149,30636,31459,33308,39423,20934,24490,26092,26991,27529,28147,28310,28516,30462,32020,24033,36981,37255,38918,20966,21021,25152,26257,26329,28186,24246,32210,32626,26360,34223,34295,35576,21161,21465,22899,24207,24464,24661,37604,38500,20663,20767,21213,21280,21319,21484,21736,21830,21809,22039,22888,22974,23100,23477,23558,23567,23569,23578,24196,24202,24288,24432,25215,25220,25307,25484,25463,26119,26124,26157,26230,26494,26786,27167,27189,27836,28040,28169,28248,28988,28966,29031,30151,30465,30813,30977,31077,31216,31456,31505,31911,32057,32918,33750,33931,34121,34909,35059,35359,35388,35412,35443,35937,36062,37284,37478,37758,37912,38556,38808,19978,19976,19998,20055,20887,21104,22478,22580,22732,23330,24120,24773,25854,26465,26454,27972,29366,30067,31331,33976,35698,37304,37664,22065,22516,39166,25325,26893,27542,29165,32340,32887,33394,35302,39135,34645,36785,23611,20280,20449,20405,21767,23072,23517,23529,24515,24910,25391,26032,26187,26862,27035,28024,28145,30003,30137,30495,31070,31206,32051,33251,33455,34218,35242,35386,36523,36763,36914,37341,38663,20154,20161,20995,22645,22764,23563,29978,23613,33102,35338,36805,38499,38765,31525,35535,38920,37218,22259,21416,36887,21561,22402,24101,25512,27700,28810,30561,31883,32736,34928,36930,37204,37648,37656,38543,29790,39620,23815,23913,25968,26530,36264,38619,25454,26441,26905,33733,38935,38592,35070,28548,25722,23544,19990,28716,30045,26159,20932,21046,21218,22995,24449,24615,25104,25919,25972,26143,26228,26866,26646,27491,28165,29298,29983,30427,31934,32854,22768,35069,35199,35488,35475,35531,36893,37266,38738,38745,25993,31246,33030,38587,24109,24796,25114,26021,26132,26512,30707,31309,31821,32318,33034,36012,36196,36321,36447,30889,20999,25305,25509,25666,25240,35373,31363,31680,35500,38634,32118,33292,34633,20185,20808,21315,21344,23459,23554,23574,24029,25126,25159,25776,26643,26676,27849,27973,27927,26579,28508,29006,29053,26059,31359,31661,32218,32330,32680,33146,33307,33337,34214,35438,36046,36341,36984,36983,37549,37521,38275,39854,21069,21892,28472,28982,20840,31109,32341,33203,31950,22092,22609,23720,25514,26366,26365,26970,29401,30095,30094,30990,31062,31199,31895,32032,32068,34311,35380,38459,36961,40736,20711,21109,21452,21474,20489,21930,22766,22863,29245,23435,23652,21277,24803,24819,25436,25475,25407,25531,25805,26089,26361,24035,27085,27133,28437,29157,20105,30185,30456,31379,31967,32207,32156,32865,33609,33624,33900,33980,34299,35013,36208,36865,36973,37783,38684,39442,20687,22679,24974,33235,34101,36104,36896,20419,20596,21063,21363,24687,25417,26463,28204,36275,36895,20439,23646,36042,26063,32154,21330,34966,20854,25539,23384,23403,23562,25613,26449,36956,20182,22810,22826,27760,35409,21822,22549,22949,24816,25171,26561,33333,26965,38464,39364,39464,20307,22534,23550,32784,23729,24111,24453,24608,24907,25140,26367,27888,28382,32974,33151,33492,34955,36024,36864,36910,38538,40667,39899,20195,21488,22823,31532,37261,38988,40441,28381,28711,21331,21828,23429,25176,25246,25299,27810,28655,29730,35351,37944,28609,35582,33592,20967,34552,21482,21481,20294,36948,36784,22890,33073,24061,31466,36799,26842,35895,29432,40008,27197,35504,20025,21336,22022,22374,25285,25506,26086,27470,28129,28251,28845,30701,31471,31658,32187,32829,32966,34507,35477,37723,22243,22727,24382,26029,26262,27264,27573,30007,35527,20516,30693,22320,24347,24677,26234,27744,30196,31258,32622,33268,34584,36933,39347,31689,30044,31481,31569,33988,36880,31209,31378,33590,23265,30528,20013,20210,23449,24544,25277,26172,26609,27880,34411,34935,35387,37198,37619,39376,27159,28710,29482,33511,33879,36015,19969,20806,20939,21899,23541,24086,24115,24193,24340,24373,24427,24500,25074,25361,26274,26397,28526,29266,30010,30522,32884,33081,33144,34678,35519,35548,36229,36339,37530,38263,38914,40165,21189,25431,30452,26389,27784,29645,36035,37806,38515,27941,22684,26894,27084,36861,37786,30171,36890,22618,26626,25524,27131,20291,28460,26584,36795,34086,32180,37716,26943,28528,22378,22775,23340,32044,29226,21514,37347,40372,20141,20302,20572,20597,21059,35998,21576,22564,23450,24093,24213,24237,24311,24351,24716,25269,25402,25552,26799,27712,30855,31118,31243,32224,33351,35330,35558,36420,36883,37048,37165,37336,40718,27877,25688,25826,25973,28404,30340,31515,36969,37841,28346,21746,24505,25764,36685,36845,37444,20856,22635,22825,23637,24215,28155,32399,29980,36028,36578,39003,28857,20253,27583,28593,30000,38651,20814,21520,22581,22615,22956,23648,24466,26007,26460,28193,30331,33759,36077,36884,37117,37709,30757,30778,21162,24230,22303,22900,24594,20498,20826,20908,20941,20992,21776,22612,22616,22871,23445,23798,23947,24764,25237,25645,26481,26691,26812,26847,30423,28120,28271,28059,28783,29128,24403,30168,31095,31561,31572,31570,31958,32113,21040,33891,34153,34276,35342,35588,35910,36367,36867,36879,37913,38518,38957,39472,38360,20685,21205,21516,22530,23566,24999,25758,27934,30643,31461,33012,33796,36947,37509,23776,40199,21311,24471,24499,28060,29305,30563,31167,31716,27602,29420,35501,26627,27233,20984,31361,26932,23626,40182,33515,23493,37193,28702,22136,23663,24775,25958,27788,35930,36929,38931,21585,26311,37389,22856,37027,20869,20045,20970,34201,35598,28760,25466,37707,26978,39348,32260,30071,21335,26976,36575,38627,27741,20108,23612,24336,36841,21250,36049,32905,34425,24319,26085,20083,20837,22914,23615,38894,20219,22922,24525,35469,28641,31152,31074,23527,33905,29483,29105,24180,24565,25467,25754,29123,31896,20035,24316,20043,22492,22178,24745,28611,32013,33021,33075,33215,36786,35223,34468,24052,25226,25773,35207,26487,27874,27966,29750,30772,23110,32629,33453,39340,20467,24259,25309,25490,25943,26479,30403,29260,32972,32954,36649,37197,20493,22521,23186,26757,26995,29028,29437,36023,22770,36064,38506,36889,34687,31204,30695,33833,20271,21093,21338,25293,26575,27850,30333,31636,31893,33334,34180,36843,26333,28448,29190,32283,33707,39361,40614,20989,31665,30834,31672,32903,31560,27368,24161,32908,30033,30048,20843,37474,28300,30330,37271,39658,20240,32624,25244,31567,38309,40169,22138,22617,34532,38588,20276,21028,21322,21453,21467,24070,25644,26001,26495,27710,27726,29256,29359,29677,30036,32321,33324,34281,36009,31684,37318,29033,38930,39151,25405,26217,30058,30436,30928,34115,34542,21290,21329,21542,22915,24199,24444,24754,25161,25209,25259,26000,27604,27852,30130,30382,30865,31192,32203,32631,32933,34987,35513,36027,36991,38750,39131,27147,31800,20633,23614,24494,26503,27608,29749,30473,32654,40763,26570,31255,21305,30091,39661,24422,33181,33777,32920,24380,24517,30050,31558,36924,26727,23019,23195,32016,30334,35628,20469,24426,27161,27703,28418,29922,31080,34920,35413,35961,24287,25551,30149,31186,33495,37672,37618,33948,34541,39981,21697,24428,25996,27996,28693,36007,36051,38971,25935,29942,19981,20184,22496,22827,23142,23500,20904,24067,24220,24598,25206,25975,26023,26222,28014,29238,31526,33104,33178,33433,35676,36000,36070,36212,38428,38468,20398,25771,27494,33310,33889,34154,37096,23553,26963,39080,33914,34135,20239,21103,24489,24133,26381,31119,33145,35079,35206,28149,24343,25173,27832,20175,29289,39826,20998,21563,22132,22707,24996,25198,28954,22894,31881,31966,32027,38640,25991,32862,19993,20341,20853,22592,24163,24179,24330,26564,20006,34109,38281,38491,31859,38913,20731,22721,30294,30887,21029,30629,34065,31622,20559,22793,29255,31687,32232,36794,36820,36941,20415,21193,23081,24321,38829,20445,33303,37610,22275,25429,27497,29995,35036,36628,31298,21215,22675,24917,25098,26286,27597,31807,33769,20515,20472,21253,21574,22577,22857,23453,23792,23791,23849,24214,25265,25447,25918,26041,26379,27861,27873,28921,30770,32299,32990,33459,33804,34028,34562,35090,35370,35914,37030,37586,39165,40179,40300,20047,20129,20621,21078,22346,22952,24125,24536,24537,25151,26292,26395,26576,26834,20882,32033,32938,33192,35584,35980,36031,37502,38450,21536,38956,21271,20693,21340,22696,25778,26420,29287,30566,31302,37350,21187,27809,27526,22528,24140,22868,26412,32763,20961,30406,25705,30952,39764,40635,22475,22969,26151,26522,27598,21737,27097,24149,33180,26517,39850,26622,40018,26717,20134,20451,21448,25273,26411,27819,36804,20397,32365,40639,19975,24930,28288,28459,34067,21619,26410,39749,24051,31637,23724,23494,34588,28234,34001,31252,33032,22937,31885,27665,30496,21209,22818,28961,29279,30683,38695,40289,26891,23167,23064,20901,21517,21629,26126,30431,36855,37528,40180,23018,29277,28357,20813,26825,32191,32236,38754,40634,25720,27169,33538,22916,23391,27611,29467,30450,32178,32791,33945,20786,26408,40665,30446,26466,21247,39173,23588,25147,31870,36016,21839,24758,32011,38272,21249,20063,20918,22812,29242,32822,37326,24357,30690,21380,24441,32004,34220,35379,36493,38742,26611,34222,37971,24841,24840,27833,30290,35565,36664,21807,20305,20778,21191,21451,23461,24189,24736,24962,25558,26377,26586,28263,28044,29494,29495,30001,31056,35029,35480,36938,37009,37109,38596,34701,22805,20104,20313,19982,35465,36671,38928,20653,24188,22934,23481,24248,25562,25594,25793,26332,26954,27096,27915,28342,29076,29992,31407,32650,32768,33865,33993,35201,35617,36362,36965,38525,39178,24958,25233,27442,27779,28020,32716,32764,28096,32645,34746,35064,26469,33713,38972,38647,27931,32097,33853,37226,20081,21365,23888,27396,28651,34253,34349,35239,21033,21519,23653,26446,26792,29702,29827,30178,35023,35041,37324,38626,38520,24459,29575,31435,33870,25504,30053,21129,27969,28316,29705,30041,30827,31890,38534,31452,40845,20406,24942,26053,34396,20102,20142,20698,20001,20940,23534,26009,26753,28092,29471,30274,30637,31260,31975,33391,35538,36988,37327,38517,38936,21147,32209,20523,21400,26519,28107,29136,29747,33256,36650,38563,40023,40607,29792,22593,28057,32047,39006,20196,20278,20363,20919,21169,23994,24604,29618,31036,33491,37428,38583,38646,38666,40599,40802,26278,27508,21015,21155,28872,35010,24265,24651,24976,28451,29001,31806,32244,32879,34030,36899,37676,21570,39791,27347,28809,36034,36335,38706,21172,23105,24266,24324,26391,27004,27028,28010,28431,29282,29436,31725,32769,32894,34635,37070,20845,40595,31108,32907,37682,35542,20525,21644,35441,27498,36036,33031,24785,26528,40434,20121,20120,39952,35435,34241,34152,26880,28286,30871,33109,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,24332,19984,19989,20010,20017,20022,20028,20031,20034,20054,20056,20098,20101,35947,20106,33298,24333,20110,20126,20127,20128,20130,20144,20147,20150,20174,20173,20164,20166,20162,20183,20190,20205,20191,20215,20233,20314,20272,20315,20317,20311,20295,20342,20360,20367,20376,20347,20329,20336,20369,20335,20358,20374,20760,20436,20447,20430,20440,20443,20433,20442,20432,20452,20453,20506,20520,20500,20522,20517,20485,20252,20470,20513,20521,20524,20478,20463,20497,20486,20547,20551,26371,20565,20560,20552,20570,20566,20588,20600,20608,20634,20613,20660,20658,20681,20682,20659,20674,20694,20702,20709,20717,20707,20718,20729,20725,20745,20737,20738,20758,20757,20756,20762,20769,20794,20791,20796,20795,20799,20800,20818,20812,20820,20834,31480,20841,20842,20846,20864,20866,22232,20876,20873,20879,20881,20883,20885,20886,20900,20902,20898,20905,20906,20907,20915,20913,20914,20912,20917,20925,20933,20937,20955,20960,34389,20969,20973,20976,20981,20990,20996,21003,21012,21006,21031,21034,21038,21043,21049,21071,21060,21067,21068,21086,21076,21098,21108,21097,21107,21119,21117,21133,21140,21138,21105,21128,21137,36776,36775,21164,21165,21180,21173,21185,21197,21207,21214,21219,21222,39149,21216,21235,21237,21240,21241,21254,21256,30008,21261,21264,21263,21269,21274,21283,21295,21297,21299,21304,21312,21318,21317,19991,21321,21325,20950,21342,21353,21358,22808,21371,21367,21378,21398,21408,21414,21413,21422,21424,21430,21443,31762,38617,21471,26364,29166,21486,21480,21485,21498,21505,21565,21568,21548,21549,21564,21550,21558,21545,21533,21582,21647,21621,21646,21599,21617,21623,21616,21650,21627,21632,21622,21636,21648,21638,21703,21666,21688,21669,21676,21700,21704,21672,21675,21698,21668,21694,21692,21720,21733,21734,21775,21780,21757,21742,21741,21754,21730,21817,21824,21859,21836,21806,21852,21829,21846,21847,21816,21811,21853,21913,21888,21679,21898,21919,21883,21886,21912,21918,21934,21884,21891,21929,21895,21928,21978,21957,21983,21956,21980,21988,21972,22036,22007,22038,22014,22013,22043,22009,22094,22096,29151,22068,22070,22066,22072,22123,22116,22063,22124,22122,22150,22144,22154,22176,22164,22159,22181,22190,22198,22196,22210,22204,22209,22211,22208,22216,22222,22225,22227,22231,22254,22265,22272,22271,22276,22281,22280,22283,22285,22291,22296,22294,21959,22300,22310,22327,22328,22350,22331,22336,22351,22377,22464,22408,22369,22399,22409,22419,22432,22451,22436,22442,22448,22467,22470,22484,22482,22483,22538,22486,22499,22539,22553,22557,22642,22561,22626,22603,22640,27584,22610,22589,22649,22661,22713,22687,22699,22714,22750,22715,22712,22702,22725,22739,22737,22743,22745,22744,22757,22748,22756,22751,22767,22778,22777,22779,22780,22781,22786,22794,22800,22811,26790,22821,22828,22829,22834,22840,22846,31442,22869,22864,22862,22874,22872,22882,22880,22887,22892,22889,22904,22913,22941,20318,20395,22947,22962,22982,23016,23004,22925,23001,23002,23077,23071,23057,23068,23049,23066,23104,23148,23113,23093,23094,23138,23146,23194,23228,23230,23243,23234,23229,23267,23255,23270,23273,23254,23290,23291,23308,23307,23318,23346,23248,23338,23350,23358,23363,23365,23360,23377,23381,23386,23387,23397,23401,23408,23411,23413,23416,25992,23418,23424,23427,23462,23480,23491,23495,23497,23508,23504,23524,23526,23522,23518,23525,23531,23536,23542,23539,23557,23559,23560,23565,23571,23584,23586,23592,23608,23609,23617,23622,23630,23635,23632,23631,23409,23660,23662,20066,23670,23673,23692,23697,23700,22939,23723,23739,23734,23740,23735,23749,23742,23751,23769,23785,23805,23802,23789,23948,23786,23819,23829,23831,23900,23839,23835,23825,23828,23842,23834,23833,23832,23884,23890,23886,23883,23916,23923,23926,23943,23940,23938,23970,23965,23980,23982,23997,23952,23991,23996,24009,24013,24019,24018,24022,24027,24043,24050,24053,24075,24090,24089,24081,24091,24118,24119,24132,24131,24128,24142,24151,24148,24159,24162,24164,24135,24181,24182,24186,40636,24191,24224,24257,24258,24264,24272,24271,24278,24291,24285,24282,24283,24290,24289,24296,24297,24300,24305,24307,24304,24308,24312,24318,24323,24329,24413,24412,24331,24337,24342,24361,24365,24376,24385,24392,24396,24398,24367,24401,24406,24407,24409,24417,24429,24435,24439,24451,24450,24447,24458,24456,24465,24455,24478,24473,24472,24480,24488,24493,24508,24534,24571,24548,24568,24561,24541,24755,24575,24609,24672,24601,24592,24617,24590,24625,24603,24597,24619,24614,24591,24634,24666,24641,24682,24695,24671,24650,24646,24653,24675,24643,24676,24642,24684,24683,24665,24705,24717,24807,24707,24730,24708,24731,24726,24727,24722,24743,24715,24801,24760,24800,24787,24756,24560,24765,24774,24757,24792,24909,24853,24838,24822,24823,24832,24820,24826,24835,24865,24827,24817,24845,24846,24903,24894,24872,24871,24906,24895,24892,24876,24884,24893,24898,24900,24947,24951,24920,24921,24922,24939,24948,24943,24933,24945,24927,24925,24915,24949,24985,24982,24967,25004,24980,24986,24970,24977,25003,25006,25036,25034,25033,25079,25032,25027,25030,25018,25035,32633,25037,25062,25059,25078,25082,25076,25087,25085,25084,25086,25088,25096,25097,25101,25100,25108,25115,25118,25121,25130,25134,25136,25138,25139,25153,25166,25182,25187,25179,25184,25192,25212,25218,25225,25214,25234,25235,25238,25300,25219,25236,25303,25297,25275,25295,25343,25286,25812,25288,25308,25292,25290,25282,25287,25243,25289,25356,25326,25329,25383,25346,25352,25327,25333,25424,25406,25421,25628,25423,25494,25486,25472,25515,25462,25507,25487,25481,25503,25525,25451,25449,25534,25577,25536,25542,25571,25545,25554,25590,25540,25622,25652,25606,25619,25638,25654,25885,25623,25640,25615,25703,25711,25718,25678,25898,25749,25747,25765,25769,25736,25788,25818,25810,25797,25799,25787,25816,25794,25841,25831,33289,25824,25825,25260,25827,25839,25900,25846,25844,25842,25850,25856,25853,25880,25884,25861,25892,25891,25899,25908,25909,25911,25910,25912,30027,25928,25942,25941,25933,25944,25950,25949,25970,25976,25986,25987,35722,26011,26015,26027,26039,26051,26054,26049,26052,26060,26066,26075,26073,26080,26081,26097,26482,26122,26115,26107,26483,26165,26166,26164,26140,26191,26180,26185,26177,26206,26205,26212,26215,26216,26207,26210,26224,26243,26248,26254,26249,26244,26264,26269,26305,26297,26313,26302,26300,26308,26296,26326,26330,26336,26175,26342,26345,26352,26357,26359,26383,26390,26398,26406,26407,38712,26414,26431,26422,26433,26424,26423,26438,26462,26464,26457,26467,26468,26505,26480,26537,26492,26474,26508,26507,26534,26529,26501,26551,26607,26548,26604,26547,26601,26552,26596,26590,26589,26594,26606,26553,26574,26566,26599,27292,26654,26694,26665,26688,26701,26674,26702,26803,26667,26713,26723,26743,26751,26783,26767,26797,26772,26781,26779,26755,27310,26809,26740,26805,26784,26810,26895,26765,26750,26881,26826,26888,26840,26914,26918,26849,26892,26829,26836,26855,26837,26934,26898,26884,26839,26851,26917,26873,26848,26863,26920,26922,26906,26915,26913,26822,27001,26999,26972,27000,26987,26964,27006,26990,26937,26996,26941,26969,26928,26977,26974,26973,27009,26986,27058,27054,27088,27071,27073,27091,27070,27086,23528,27082,27101,27067,27075,27047,27182,27025,27040,27036,27029,27060,27102,27112,27138,27163,27135,27402,27129,27122,27111,27141,27057,27166,27117,27156,27115,27146,27154,27329,27171,27155,27204,27148,27250,27190,27256,27207,27234,27225,27238,27208,27192,27170,27280,27277,27296,27268,27298,27299,27287,34327,27323,27331,27330,27320,27315,27308,27358,27345,27359,27306,27354,27370,27387,27397,34326,27386,27410,27414,39729,27423,27448,27447,30428,27449,39150,27463,27459,27465,27472,27481,27476,27483,27487,27489,27512,27513,27519,27520,27524,27523,27533,27544,27541,27550,27556,27562,27563,27567,27570,27569,27571,27575,27580,27590,27595,27603,27615,27628,27627,27635,27631,40638,27656,27667,27668,27675,27684,27683,27742,27733,27746,27754,27778,27789,27802,27777,27803,27774,27752,27763,27794,27792,27844,27889,27859,27837,27863,27845,27869,27822,27825,27838,27834,27867,27887,27865,27882,27935,34893,27958,27947,27965,27960,27929,27957,27955,27922,27916,28003,28051,28004,27994,28025,27993,28046,28053,28644,28037,28153,28181,28170,28085,28103,28134,28088,28102,28140,28126,28108,28136,28114,28101,28154,28121,28132,28117,28138,28142,28205,28270,28206,28185,28274,28255,28222,28195,28267,28203,28278,28237,28191,28227,28218,28238,28196,28415,28189,28216,28290,28330,28312,28361,28343,28371,28349,28335,28356,28338,28372,28373,28303,28325,28354,28319,28481,28433,28748,28396,28408,28414,28479,28402,28465,28399,28466,28364,28478,28435,28407,28550,28538,28536,28545,28544,28527,28507,28659,28525,28546,28540,28504,28558,28561,28610,28518,28595,28579,28577,28580,28601,28614,28586,28639,28629,28652,28628,28632,28657,28654,28635,28681,28683,28666,28689,28673,28687,28670,28699,28698,28532,28701,28696,28703,28720,28734,28722,28753,28771,28825,28818,28847,28913,28844,28856,28851,28846,28895,28875,28893,28889,28937,28925,28956,28953,29029,29013,29064,29030,29026,29004,29014,29036,29071,29179,29060,29077,29096,29100,29143,29113,29118,29138,29129,29140,29134,29152,29164,29159,29173,29180,29177,29183,29197,29200,29211,29224,29229,29228,29232,29234,29243,29244,29247,29248,29254,29259,29272,29300,29310,29314,29313,29319,29330,29334,29346,29351,29369,29362,29379,29382,29380,29390,29394,29410,29408,29409,29433,29431,20495,29463,29450,29468,29462,29469,29492,29487,29481,29477,29502,29518,29519,40664,29527,29546,29544,29552,29560,29557,29563,29562,29640,29619,29646,29627,29632,29669,29678,29662,29858,29701,29807,29733,29688,29746,29754,29781,29759,29791,29785,29761,29788,29801,29808,29795,29802,29814,29822,29835,29854,29863,29898,29903,29908,29681,29920,29923,29927,29929,29934,29938,29936,29937,29944,29943,29956,29955,29957,29964,29966,29965,29973,29971,29982,29990,29996,30012,30020,30029,30026,30025,30043,30022,30042,30057,30052,30055,30059,30061,30072,30070,30086,30087,30068,30090,30089,30082,30100,30106,30109,30117,30115,30146,30131,30147,30133,30141,30136,30140,30129,30157,30154,30162,30169,30179,30174,30206,30207,30204,30209,30192,30202,30194,30195,30219,30221,30217,30239,30247,30240,30241,30242,30244,30260,30256,30267,30279,30280,30278,30300,30296,30305,30306,30312,30313,30314,30311,30316,30320,30322,30326,30328,30332,30336,30339,30344,30347,30350,30358,30355,30361,30362,30384,30388,30392,30393,30394,30402,30413,30422,30418,30430,30433,30437,30439,30442,34351,30459,30472,30471,30468,30505,30500,30494,30501,30502,30491,30519,30520,30535,30554,30568,30571,30555,30565,30591,30590,30585,30606,30603,30609,30624,30622,30640,30646,30649,30655,30652,30653,30651,30663,30669,30679,30682,30684,30691,30702,30716,30732,30738,31014,30752,31018,30789,30862,30836,30854,30844,30874,30860,30883,30901,30890,30895,30929,30918,30923,30932,30910,30908,30917,30922,30956,30951,30938,30973,30964,30983,30994,30993,31001,31020,31019,31040,31072,31063,31071,31066,31061,31059,31098,31103,31114,31133,31143,40779,31146,31150,31155,31161,31162,31177,31189,31207,31212,31201,31203,31240,31245,31256,31257,31264,31263,31104,31281,31291,31294,31287,31299,31319,31305,31329,31330,31337,40861,31344,31353,31357,31368,31383,31381,31384,31382,31401,31432,31408,31414,31429,31428,31423,36995,31431,31434,31437,31439,31445,31443,31449,31450,31453,31457,31458,31462,31469,31472,31490,31503,31498,31494,31539,31512,31513,31518,31541,31528,31542,31568,31610,31492,31565,31499,31564,31557,31605,31589,31604,31591,31600,31601,31596,31598,31645,31640,31647,31629,31644,31642,31627,31634,31631,31581,31641,31691,31681,31692,31695,31668,31686,31709,31721,31761,31764,31718,31717,31840,31744,31751,31763,31731,31735,31767,31757,31734,31779,31783,31786,31775,31799,31787,31805,31820,31811,31828,31823,31808,31824,31832,31839,31844,31830,31845,31852,31861,31875,31888,31908,31917,31906,31915,31905,31912,31923,31922,31921,31918,31929,31933,31936,31941,31938,31960,31954,31964,31970,39739,31983,31986,31988,31990,31994,32006,32002,32028,32021,32010,32069,32075,32046,32050,32063,32053,32070,32115,32086,32078,32114,32104,32110,32079,32099,32147,32137,32091,32143,32125,32155,32186,32174,32163,32181,32199,32189,32171,32317,32162,32175,32220,32184,32159,32176,32216,32221,32228,32222,32251,32242,32225,32261,32266,32291,32289,32274,32305,32287,32265,32267,32290,32326,32358,32315,32309,32313,32323,32311,32306,32314,32359,32349,32342,32350,32345,32346,32377,32362,32361,32380,32379,32387,32213,32381,36782,32383,32392,32393,32396,32402,32400,32403,32404,32406,32398,32411,32412,32568,32570,32581,32588,32589,32590,32592,32593,32597,32596,32600,32607,32608,32616,32617,32615,32632,32642,32646,32643,32648,32647,32652,32660,32670,32669,32666,32675,32687,32690,32697,32686,32694,32696,35697,32709,32710,32714,32725,32724,32737,32742,32745,32755,32761,39132,32774,32772,32779,32786,32792,32793,32796,32801,32808,32831,32827,32842,32838,32850,32856,32858,32863,32866,32872,32883,32882,32880,32886,32889,32893,32895,32900,32902,32901,32923,32915,32922,32941,20880,32940,32987,32997,32985,32989,32964,32986,32982,33033,33007,33009,33051,33065,33059,33071,33099,38539,33094,33086,33107,33105,33020,33137,33134,33125,33126,33140,33155,33160,33162,33152,33154,33184,33173,33188,33187,33119,33171,33193,33200,33205,33214,33208,33213,33216,33218,33210,33225,33229,33233,33241,33240,33224,33242,33247,33248,33255,33274,33275,33278,33281,33282,33285,33287,33290,33293,33296,33302,33321,33323,33336,33331,33344,33369,33368,33373,33370,33375,33380,33378,33384,33386,33387,33326,33393,33399,33400,33406,33421,33426,33451,33439,33467,33452,33505,33507,33503,33490,33524,33523,33530,33683,33539,33531,33529,33502,33542,33500,33545,33497,33589,33588,33558,33586,33585,33600,33593,33616,33605,33583,33579,33559,33560,33669,33690,33706,33695,33698,33686,33571,33678,33671,33674,33660,33717,33651,33653,33696,33673,33704,33780,33811,33771,33742,33789,33795,33752,33803,33729,33783,33799,33760,33778,33805,33826,33824,33725,33848,34054,33787,33901,33834,33852,34138,33924,33911,33899,33965,33902,33922,33897,33862,33836,33903,33913,33845,33994,33890,33977,33983,33951,34009,33997,33979,34010,34000,33985,33990,34006,33953,34081,34047,34036,34071,34072,34092,34079,34069,34068,34044,34112,34147,34136,34120,34113,34306,34123,34133,34176,34212,34184,34193,34186,34216,34157,34196,34203,34282,34183,34204,34167,34174,34192,34249,34234,34255,34233,34256,34261,34269,34277,34268,34297,34314,34323,34315,34302,34298,34310,34338,34330,34352,34367,34381,20053,34388,34399,34407,34417,34451,34467,34473,34474,34443,34444,34486,34479,34500,34502,34480,34505,34851,34475,34516,34526,34537,34540,34527,34523,34543,34578,34566,34568,34560,34563,34555,34577,34569,34573,34553,34570,34612,34623,34615,34619,34597,34601,34586,34656,34655,34680,34636,34638,34676,34647,34664,34670,34649,34643,34659,34666,34821,34722,34719,34690,34735,34763,34749,34752,34768,38614,34731,34756,34739,34759,34758,34747,34799,34802,34784,34831,34829,34814,34806,34807,34830,34770,34833,34838,34837,34850,34849,34865,34870,34873,34855,34875,34884,34882,34898,34905,34910,34914,34923,34945,34942,34974,34933,34941,34997,34930,34946,34967,34962,34990,34969,34978,34957,34980,34992,35007,34993,35011,35012,35028,35032,35033,35037,35065,35074,35068,35060,35048,35058,35076,35084,35082,35091,35139,35102,35109,35114,35115,35137,35140,35131,35126,35128,35148,35101,35168,35166,35174,35172,35181,35178,35183,35188,35191,35198,35203,35208,35210,35219,35224,35233,35241,35238,35244,35247,35250,35258,35261,35263,35264,35290,35292,35293,35303,35316,35320,35331,35350,35344,35340,35355,35357,35365,35382,35393,35419,35410,35398,35400,35452,35437,35436,35426,35461,35458,35460,35496,35489,35473,35493,35494,35482,35491,35524,35533,35522,35546,35563,35571,35559,35556,35569,35604,35552,35554,35575,35550,35547,35596,35591,35610,35553,35606,35600,35607,35616,35635,38827,35622,35627,35646,35624,35649,35660,35663,35662,35657,35670,35675,35674,35691,35679,35692,35695,35700,35709,35712,35724,35726,35730,35731,35734,35737,35738,35898,35905,35903,35912,35916,35918,35920,35925,35938,35948,35960,35962,35970,35977,35973,35978,35981,35982,35988,35964,35992,25117,36013,36010,36029,36018,36019,36014,36022,36040,36033,36068,36067,36058,36093,36090,36091,36100,36101,36106,36103,36111,36109,36112,40782,36115,36045,36116,36118,36199,36205,36209,36211,36225,36249,36290,36286,36282,36303,36314,36310,36300,36315,36299,36330,36331,36319,36323,36348,36360,36361,36351,36381,36382,36368,36383,36418,36405,36400,36404,36426,36423,36425,36428,36432,36424,36441,36452,36448,36394,36451,36437,36470,36466,36476,36481,36487,36485,36484,36491,36490,36499,36497,36500,36505,36522,36513,36524,36528,36550,36529,36542,36549,36552,36555,36571,36579,36604,36603,36587,36606,36618,36613,36629,36626,36633,36627,36636,36639,36635,36620,36646,36659,36667,36665,36677,36674,36670,36684,36681,36678,36686,36695,36700,36706,36707,36708,36764,36767,36771,36781,36783,36791,36826,36837,36834,36842,36847,36999,36852,36869,36857,36858,36881,36885,36897,36877,36894,36886,36875,36903,36918,36917,36921,36856,36943,36944,36945,36946,36878,36937,36926,36950,36952,36958,36968,36975,36982,38568,36978,36994,36989,36993,36992,37002,37001,37007,37032,37039,37041,37045,37090,37092,25160,37083,37122,37138,37145,37170,37168,37194,37206,37208,37219,37221,37225,37235,37234,37259,37257,37250,37282,37291,37295,37290,37301,37300,37306,37312,37313,37321,37323,37328,37334,37343,37345,37339,37372,37365,37366,37406,37375,37396,37420,37397,37393,37470,37463,37445,37449,37476,37448,37525,37439,37451,37456,37532,37526,37523,37531,37466,37583,37561,37559,37609,37647,37626,37700,37678,37657,37666,37658,37667,37690,37685,37691,37724,37728,37756,37742,37718,37808,37804,37805,37780,37817,37846,37847,37864,37861,37848,37827,37853,37840,37832,37860,37914,37908,37907,37891,37895,37904,37942,37931,37941,37921,37946,37953,37970,37956,37979,37984,37986,37982,37994,37417,38000,38005,38007,38013,37978,38012,38014,38017,38015,38274,38279,38282,38292,38294,38296,38297,38304,38312,38311,38317,38332,38331,38329,38334,38346,28662,38339,38349,38348,38357,38356,38358,38364,38369,38373,38370,38433,38440,38446,38447,38466,38476,38479,38475,38519,38492,38494,38493,38495,38502,38514,38508,38541,38552,38549,38551,38570,38567,38577,38578,38576,38580,38582,38584,38585,38606,38603,38601,38605,35149,38620,38669,38613,38649,38660,38662,38664,38675,38670,38673,38671,38678,38681,38692,38698,38704,38713,38717,38718,38724,38726,38728,38722,38729,38748,38752,38756,38758,38760,21202,38763,38769,38777,38789,38780,38785,38778,38790,38795,38799,38800,38812,38824,38822,38819,38835,38836,38851,38854,38856,38859,38876,38893,40783,38898,31455,38902,38901,38927,38924,38968,38948,38945,38967,38973,38982,38991,38987,39019,39023,39024,39025,39028,39027,39082,39087,39089,39094,39108,39107,39110,39145,39147,39171,39177,39186,39188,39192,39201,39197,39198,39204,39200,39212,39214,39229,39230,39234,39241,39237,39248,39243,39249,39250,39244,39253,39319,39320,39333,39341,39342,39356,39391,39387,39389,39384,39377,39405,39406,39409,39410,39419,39416,39425,39439,39429,39394,39449,39467,39479,39493,39490,39488,39491,39486,39509,39501,39515,39511,39519,39522,39525,39524,39529,39531,39530,39597,39600,39612,39616,39631,39633,39635,39636,39646,39647,39650,39651,39654,39663,39659,39662,39668,39665,39671,39675,39686,39704,39706,39711,39714,39715,39717,39719,39720,39721,39722,39726,39727,39730,39748,39747,39759,39757,39758,39761,39768,39796,39827,39811,39825,39830,39831,39839,39840,39848,39860,39872,39882,39865,39878,39887,39889,39890,39907,39906,39908,39892,39905,39994,39922,39921,39920,39957,39956,39945,39955,39948,39942,39944,39954,39946,39940,39982,39963,39973,39972,39969,39984,40007,39986,40006,39998,40026,40032,40039,40054,40056,40167,40172,40176,40201,40200,40171,40195,40198,40234,40230,40367,40227,40223,40260,40213,40210,40257,40255,40254,40262,40264,40285,40286,40292,40273,40272,40281,40306,40329,40327,40363,40303,40314,40346,40356,40361,40370,40388,40385,40379,40376,40378,40390,40399,40386,40409,40403,40440,40422,40429,40431,40445,40474,40475,40478,40565,40569,40573,40577,40584,40587,40588,40594,40597,40593,40605,40613,40617,40632,40618,40621,38753,40652,40654,40655,40656,40660,40668,40670,40669,40672,40677,40680,40687,40692,40694,40695,40697,40699,40700,40701,40711,40712,30391,40725,40737,40748,40766,40778,40786,40788,40803,40799,40800,40801,40806,40807,40812,40810,40823,40818,40822,40853,40860,40864,22575,27079,36953,29796,20956,29081,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32394,35100,37704,37512,34012,20425,28859,26161,26824,37625,26363,24389,20008,20193,20220,20224,20227,20281,20310,20370,20362,20378,20372,20429,20544,20514,20479,20510,20550,20592,20546,20628,20724,20696,20810,20836,20893,20926,20972,21013,21148,21158,21184,21211,21248,21255,21284,21362,21395,21426,21469,64014,21660,21642,21673,21759,21894,22361,22373,22444,22472,22471,64015,64016,22686,22706,22795,22867,22875,22877,22883,22948,22970,23382,23488,29999,23512,23532,23582,23718,23738,23797,23847,23891,64017,23874,23917,23992,23993,24016,24353,24372,24423,24503,24542,24669,24709,24714,24798,24789,24864,24818,24849,24887,24880,24984,25107,25254,25589,25696,25757,25806,25934,26112,26133,26171,26121,26158,26142,26148,26213,26199,26201,64018,26227,26265,26272,26290,26303,26362,26382,63785,26470,26555,26706,26560,26625,26692,26831,64019,26984,64020,27032,27106,27184,27243,27206,27251,27262,27362,27364,27606,27711,27740,27782,27759,27866,27908,28039,28015,28054,28076,28111,28152,28146,28156,28217,28252,28199,28220,28351,28552,28597,28661,28677,28679,28712,28805,28843,28943,28932,29020,28998,28999,64021,29121,29182,29361,29374,29476,64022,29559,29629,29641,29654,29667,29650,29703,29685,29734,29738,29737,29742,29794,29833,29855,29953,30063,30338,30364,30366,30363,30374,64023,30534,21167,30753,30798,30820,30842,31024,64024,64025,64026,31124,64027,31131,31441,31463,64028,31467,31646,64029,32072,32092,32183,32160,32214,32338,32583,32673,64030,33537,33634,33663,33735,33782,33864,33972,34131,34137,34155,64031,34224,64032,64033,34823,35061,35346,35383,35449,35495,35518,35551,64034,35574,35667,35711,36080,36084,36114,36214,64035,36559,64036,64037,36967,37086,64038,37141,37159,37338,37335,37342,37357,37358,37348,37349,37382,37392,37386,37434,37440,37436,37454,37465,37457,37433,37479,37543,37495,37496,37607,37591,37593,37584,64039,37589,37600,37587,37669,37665,37627,64040,37662,37631,37661,37634,37744,37719,37796,37830,37854,37880,37937,37957,37960,38290,63964,64041,38557,38575,38707,38715,38723,38733,38735,38737,38741,38999,39013,64042,64043,39207,64044,39326,39502,39641,39644,39797,39794,39823,39857,39867,39936,40304,40299,64045,40473,40657,null,null,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,65506,65508,65287,65282,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,65506,65508,65287,65282,12849,8470,8481,8757,32394,35100,37704,37512,34012,20425,28859,26161,26824,37625,26363,24389,20008,20193,20220,20224,20227,20281,20310,20370,20362,20378,20372,20429,20544,20514,20479,20510,20550,20592,20546,20628,20724,20696,20810,20836,20893,20926,20972,21013,21148,21158,21184,21211,21248,21255,21284,21362,21395,21426,21469,64014,21660,21642,21673,21759,21894,22361,22373,22444,22472,22471,64015,64016,22686,22706,22795,22867,22875,22877,22883,22948,22970,23382,23488,29999,23512,23532,23582,23718,23738,23797,23847,23891,64017,23874,23917,23992,23993,24016,24353,24372,24423,24503,24542,24669,24709,24714,24798,24789,24864,24818,24849,24887,24880,24984,25107,25254,25589,25696,25757,25806,25934,26112,26133,26171,26121,26158,26142,26148,26213,26199,26201,64018,26227,26265,26272,26290,26303,26362,26382,63785,26470,26555,26706,26560,26625,26692,26831,64019,26984,64020,27032,27106,27184,27243,27206,27251,27262,27362,27364,27606,27711,27740,27782,27759,27866,27908,28039,28015,28054,28076,28111,28152,28146,28156,28217,28252,28199,28220,28351,28552,28597,28661,28677,28679,28712,28805,28843,28943,28932,29020,28998,28999,64021,29121,29182,29361,29374,29476,64022,29559,29629,29641,29654,29667,29650,29703,29685,29734,29738,29737,29742,29794,29833,29855,29953,30063,30338,30364,30366,30363,30374,64023,30534,21167,30753,30798,30820,30842,31024,64024,64025,64026,31124,64027,31131,31441,31463,64028,31467,31646,64029,32072,32092,32183,32160,32214,32338,32583,32673,64030,33537,33634,33663,33735,33782,33864,33972,34131,34137,34155,64031,34224,64032,64033,34823,35061,35346,35383,35449,35495,35518,35551,64034,35574,35667,35711,36080,36084,36114,36214,64035,36559,64036,64037,36967,37086,64038,37141,37159,37338,37335,37342,37357,37358,37348,37349,37382,37392,37386,37434,37440,37436,37454,37465,37457,37433,37479,37543,37495,37496,37607,37591,37593,37584,64039,37589,37600,37587,37669,37665,37627,64040,37662,37631,37661,37634,37744,37719,37796,37830,37854,37880,37937,37957,37960,38290,63964,64041,38557,38575,38707,38715,38723,38733,38735,38737,38741,38999,39013,64042,64043,39207,64044,39326,39502,39641,39644,39797,39794,39823,39857,39867,39936,40304,40299,64045,40473,40657,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null] diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-decode-csshiftjis.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-decode-csshiftjis.html new file mode 100644 index 00000000000..9c811a93748 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-decode-csshiftjis.html @@ -0,0 +1,60 @@ + + + + +csshiftjis decoding + + + + + + + + + + + + + + + +
        + + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-decode-errors.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-decode-errors.html new file mode 100644 index 00000000000..be96f70dcde --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-decode-errors.html @@ -0,0 +1,118 @@ + + + + +Shift_jis decoding errors + + + + + + + + + + + + + +
        + + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms932.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms932.html new file mode 100644 index 00000000000..a73294f5328 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms932.html @@ -0,0 +1,60 @@ + + + + +ms932 decoding + + + + + + + + + + + + + + + +
        + + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms_kanji.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms_kanji.html new file mode 100644 index 00000000000..2b2c298024b --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms_kanji.html @@ -0,0 +1,60 @@ + + + + +ms_kanji decoding + + + + + + + + + + + + + + + +
        + + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-decode-shift-jis.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-decode-shift-jis.html new file mode 100644 index 00000000000..dabb661ad2d --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-decode-shift-jis.html @@ -0,0 +1,60 @@ + + + + +shift-jis decoding + + + + + + + + + + + + + + + +
        + + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-decode-sjis.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-decode-sjis.html new file mode 100644 index 00000000000..d66b5184949 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-decode-sjis.html @@ -0,0 +1,60 @@ + + + + +sjis decoding + + + + + + + + + + + + + + + +
        + + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-decode-windows-31j.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-decode-windows-31j.html new file mode 100644 index 00000000000..099cba681ac --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-decode-windows-31j.html @@ -0,0 +1,60 @@ + + + + +windows-31j decoding + + + + + + + + + + + + + + + +
        + + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-decode-x-sjis.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-decode-x-sjis.html new file mode 100644 index 00000000000..5ffa4617d1a --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-decode-x-sjis.html @@ -0,0 +1,60 @@ + + + + +x-sjis decoding + + + + + + + + + + + + + + + +
        + + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-decode.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-decode.html new file mode 100644 index 00000000000..e0355c2fb32 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-decode.html @@ -0,0 +1,60 @@ + + + + +ShiftJIS decoding + + + + + + + + + + + + + + + +
        + + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-decoder.js b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-decoder.js new file mode 100644 index 00000000000..6557bd698b8 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-decoder.js @@ -0,0 +1,80 @@ +function dec2char(n) { + // converts a decimal number to a Unicode character + // n: the dec codepoint value to be converted + if (n <= 0xffff) { + out = String.fromCharCode(n); + } else if (n <= 0x10ffff) { + n -= 0x10000; + out = + String.fromCharCode(0xd800 | (n >> 10)) + + String.fromCharCode(0xdc00 | (n & 0x3ff)); + } else out = "dec2char error: Code point out of range: " + n; + return out; +} + +function sjisDecoder(stream) { + stream = stream.replace(/%/g, " "); + stream = stream.replace(/[\s]+/g, " ").trim(); + var bytes = stream.split(" "); + for (i = 0; i < bytes.length; i++) bytes[i] = parseInt(bytes[i], 16); + var out = ""; + var lead, byte, leadoffset, offset, ptr, cp; + var sjisLead = 0x00; + var endofstream = 2000000; + var finished = false; + + while (!finished) { + if (bytes.length == 0) byte = endofstream; + else byte = bytes.shift(); + + if (byte == endofstream && sjisLead != 0x00) { + sjisLead = 0x00; + out += "�"; + continue; + } + if (byte == endofstream && sjisLead == 0x00) { + finished = true; + continue; + } + if (sjisLead != 0x00) { + lead = sjisLead; + ptr = null; + sjisLead = 0x00; + if (byte < 0x7f) offset = 0x40; + else offset = 0x41; + if (lead < 0xa0) leadoffset = 0x81; + else leadoffset = 0xc1; + if ((byte >= 0x40 && byte <= 0x7e) || (byte >= 0x80 && byte <= 0xfc)) + ptr = (lead - leadoffset) * 188 + byte - offset; + if (cp == null && ptr >= 8836 && ptr <= 10528) { + out += dec2char(0xe000 + ptr - 8836); + continue; + } + if (ptr == null) cp = null; + else cp = jis0208[ptr]; + if (cp == null && byte >= 0x00 && byte <= 0x7f) { + bytes.unshift(byte); + } + if (cp == null) { + out += "�"; + continue; + } + out += dec2char(cp); + continue; + } + if ((byte >= 0x00 && byte <= 0x7f) || byte == 0x80) { + out += dec2char(byte); + continue; + } + if (byte >= 0xa1 && byte <= 0xdf) { + out += dec2char(0xff61 + byte - 0xa1); + continue; + } + if ((byte >= 0x81 && byte <= 0x9f) || (byte >= 0xe0 && byte <= 0xfc)) { + sjisLead = byte; + continue; + } + out += "�"; + } + return out; +} diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-csshiftjis.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-csshiftjis.html new file mode 100644 index 00000000000..dd21b766d67 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-csshiftjis.html @@ -0,0 +1,148 @@ + + + + +csshiftjis encoding (form) + + + + + + + + + + + +
        + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-csshiftjis.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-csshiftjis.html.headers new file mode 100644 index 00000000000..fdb397d1f2f --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-csshiftjis.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=csshiftjis diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-han.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-han.html new file mode 100644 index 00000000000..4193e2e15a2 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-han.html @@ -0,0 +1,182 @@ + + + + +Shift_jis encoding errors (form, han) + + + + + + + + + + + +
        + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-han.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-han.html.headers new file mode 100644 index 00000000000..957b9153d84 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-han.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=shift_jis diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-hangul.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-hangul.html new file mode 100644 index 00000000000..ae2db160c96 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-hangul.html @@ -0,0 +1,152 @@ + + + + +Shift_jis encoding errors (form, hangul) + + + + + + + + + + + +
        + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-hangul.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-hangul.html.headers new file mode 100644 index 00000000000..957b9153d84 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-hangul.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=shift_jis diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-misc.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-misc.html new file mode 100644 index 00000000000..ca0cfa3ccae --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-misc.html @@ -0,0 +1,192 @@ + + + + +Shift_jis encoding errors (form, misc) + + + + + + + + + + + +
        + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-misc.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-misc.html.headers new file mode 100644 index 00000000000..957b9153d84 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-misc.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=shift_jis diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms932.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms932.html new file mode 100644 index 00000000000..f18bf665311 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms932.html @@ -0,0 +1,148 @@ + + + + +ms932 encoding (form) + + + + + + + + + + + +
        + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms932.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms932.html.headers new file mode 100644 index 00000000000..9f30fece573 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms932.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=ms932 diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms_kanji.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms_kanji.html new file mode 100644 index 00000000000..5b09074c153 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms_kanji.html @@ -0,0 +1,148 @@ + + + + +ms_kanji encoding (form) + + + + + + + + + + + +
        + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms_kanji.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms_kanji.html.headers new file mode 100644 index 00000000000..1951fffc0f0 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms_kanji.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=ms_kanji diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-shift-jis.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-shift-jis.html new file mode 100644 index 00000000000..cd6bb6e7fb9 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-shift-jis.html @@ -0,0 +1,148 @@ + + + + +shift-jis encoding (form) + + + + + + + + + + + +
        + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-shift-jis.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-shift-jis.html.headers new file mode 100644 index 00000000000..3239b8638eb --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-shift-jis.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=shift-jis diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-sjis.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-sjis.html new file mode 100644 index 00000000000..ddade82fc34 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-sjis.html @@ -0,0 +1,148 @@ + + + + +sjis encoding (form) + + + + + + + + + + + +
        + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-sjis.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-sjis.html.headers new file mode 100644 index 00000000000..5b9a2f2e789 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-sjis.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=sjis diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-windows-31j.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-windows-31j.html new file mode 100644 index 00000000000..335f622545d --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-windows-31j.html @@ -0,0 +1,148 @@ + + + + +windows-31j encoding (form) + + + + + + + + + + + +
        + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-windows-31j.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-windows-31j.html.headers new file mode 100644 index 00000000000..0d80d3827ee --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-windows-31j.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=windows-31j diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-x-sjis.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-x-sjis.html new file mode 100644 index 00000000000..1d754ffe615 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-x-sjis.html @@ -0,0 +1,148 @@ + + + + +x-sjis encoding (form) + + + + + + + + + + + +
        + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-x-sjis.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-x-sjis.html.headers new file mode 100644 index 00000000000..9b448cf27e5 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-x-sjis.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=x-sjis diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form.html new file mode 100644 index 00000000000..66d14835a11 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form.html @@ -0,0 +1,148 @@ + + + + +Shift_jis encoding (form) + + + + + + + + + + + +
        + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form.html.headers new file mode 100644 index 00000000000..957b9153d84 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=shift_jis diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-han.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-han.html new file mode 100644 index 00000000000..b396a7d5eb6 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-han.html @@ -0,0 +1,100 @@ + + + + +Shift_jis encoding errors (href, han) + + + + + + + + + + + +
        + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-han.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-han.html.headers new file mode 100644 index 00000000000..957b9153d84 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-han.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=shift_jis diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-hangul.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-hangul.html new file mode 100644 index 00000000000..42dd93f06d3 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-hangul.html @@ -0,0 +1,65 @@ + + + + +Shift_jis encoding (href, hangul) + + + + + + + + + + + +
        + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-hangul.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-hangul.html.headers new file mode 100644 index 00000000000..957b9153d84 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-hangul.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=shift_jis diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-misc.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-misc.html new file mode 100644 index 00000000000..113dbd782b0 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-misc.html @@ -0,0 +1,109 @@ + + + + +Shift_jis encoding (href, misc) + + + + + + + + + + + +
        + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-misc.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-misc.html.headers new file mode 100644 index 00000000000..957b9153d84 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-misc.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=shift_jis diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href.html new file mode 100644 index 00000000000..35c33fa982d --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href.html @@ -0,0 +1,62 @@ + + + + +Shift_jis encoding (href) + + + + + + + + + + + +
        + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href.html.headers new file mode 100644 index 00000000000..957b9153d84 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=shift_jis diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encoder.js b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encoder.js new file mode 100644 index 00000000000..8dd813507ce --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis-encoder.js @@ -0,0 +1,131 @@ +var sjisCPs = []; // index is unicode cp, value is pointer +for (var p = 0; p < 8272; p++) { + if (jis0208[p] != null && sjisCPs[jis0208[p]] == null) { + sjisCPs[jis0208[p]] = p; + } +} +for (p = 8836; p < jis0208.length; p++) { + if (jis0208[p] != null && sjisCPs[jis0208[p]] == null) { + sjisCPs[jis0208[p]] = p; + } +} + +function chars2cps(chars) { + // this is needed because of javascript's handling of supplementary characters + // char: a string of unicode characters + // returns an array of decimal code point values + var haut = 0; + var out = []; + for (var i = 0; i < chars.length; i++) { + var b = chars.charCodeAt(i); + if (b < 0 || b > 0xffff) { + alert("Error in chars2cps: byte out of range " + b.toString(16) + "!"); + } + if (haut != 0) { + if (0xdc00 <= b && b <= 0xdfff) { + out.push(0x10000 + ((haut - 0xd800) << 10) + (b - 0xdc00)); + haut = 0; + continue; + } else { + alert( + "Error in chars2cps: surrogate out of range " + + haut.toString(16) + + "!" + ); + haut = 0; + } + } + if (0xd800 <= b && b <= 0xdbff) { + haut = b; + } else { + out.push(b); + } + } + return out; +} + +function sjisEncoder(stream) { + var cps = chars2cps(stream); + var out = ""; + var cp; + var finished = false; + var endofstream = 2000000; + + while (!finished) { + if (cps.length == 0) cp = endofstream; + else cp = cps.shift(); + + if (cp == endofstream) { + finished = true; + continue; + } + if ((cp >= 0x00 && cp <= 0x7f) || cp == 0x80) { + out += " " + cp.toString(16).toUpperCase(); + continue; + } + if (cp == 0xa5) { + out += " 5C"; + continue; + } + if (cp == 0x203e) { + out += " 7E"; + continue; + } + if (cp >= 0xff61 && cp <= 0xff9f) { + temp = cp - 0xff61 + 0xa1; + out += temp.toString(16).toUpperCase(); + continue; + } + if (cp == 0x2212) { + cp = 0xff0d; + } + var ptr = sjisCPs[cp]; + if (ptr == null) { + return null; + // out += ' &#'+cp+';' + // continue + } + var lead = Math.floor(ptr / 188); + if (lead < 0x1f) leadoffset = 0x81; + else leadoffset = 0xc1; + var trail = ptr % 188; + first = lead + leadoffset; + if (trail < 0x3f) offset = 0x40; + else offset = 0x41; + second = trail + offset; + out += + " " + + first.toString(16).toUpperCase() + + " " + + second.toString(16).toUpperCase(); + } + return out.trim(); +} + +function convertToHex(str) { + // converts a string of ASCII characters to hex byte codes + var out = ""; + var result; + for (var c = 0; c < str.length; c++) { + result = str.charCodeAt(c).toString(16).toUpperCase() + " "; + out += result; + } + return out; +} + +function normalizeStr(str) { + var out = ""; + for (var c = 0; c < str.length; c++) { + if (str.charAt(c) == "%") { + out += String.fromCodePoint( + parseInt(str.charAt(c + 1) + str.charAt(c + 2), 16) + ); + c += 2; + } else out += str.charAt(c); + } + var result = ""; + for (var o = 0; o < out.length; o++) { + result += "%" + out.charCodeAt(o).toString(16).toUpperCase(); + } + return result.replace(/%1B%28%42$/, ""); +} diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-csshiftjis.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-csshiftjis.html new file mode 100755 index 00000000000..4d5911bfab4 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-csshiftjis.html @@ -0,0 +1 @@ +csshiftjis characters \ N } L ~ F @ A B C D E G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` p q r s t u w x y z { | } ~ v ] \ e f g h d c ~ T U V W X Y Z [ \ ] @ A B C D E F G H I | a @ A B C D E F G H I J K L M N O P Q R S @ A B V X Y Z q r s t u v w x y z k l J K T U @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ E [ R S e i ` c a k j d l f n _ m b g h ~ r s o p q u t O s ^ N u h O T v V R h T \ ] j i S l Y m w e d t W i C j k l x ` L m f A Z C n ] C g p o r q D N W a r s M C o U v q { | w u l ` t z x y U T { P b B X C @ A l D } E H F m G I | K J V M N L Q P O R S D U T W V X Y Z [ ~ [ e Z \ } ] S _ ` Z a T b c ~ f e g h ` i j k n l m y o p q ~ u s t r v w x y y z { } } ~ M o n Y h O U n c w w J N u E M k x C \ P m T K p ~ X } Q y F o f b p @ j E i h e g D @ f N i z C a B @ ] P D C i A E N F G L K N M J S O H I S B Y X O P U R [ V W T Z Q ` e a \ f P h A ^ b [ c _ i g r i d c m k p j n l k o r w u t Q q s R v } { | ~ \ X x y d X d l c } y \ n V B R ^ C _ W u | x g Y h U o m n d m p s [ O g V v t _ z D z @ D A @ D J W d B E W i F G o n K L I W H P p Q O R P N P M V W S K k U X w Y T } Z Q [ _ \ ^ ] k d a ` b c e f h g i l d j m n q o p q r E s t u y F G v w w x y z { } ~ F v G @ X q G { Q e h x Q @ J R q A K s A r W j w R Z x s R B H I b J F s z t A X y N K c H L X M { x N f p L f @ C D B _ F E A G H I L J K M N U O P M Q T U | V O o W X ^ Y J e Z g [ \ ] _ ` a b S R c ` F V j d e e f i h g a m k j l k ] p o n q r z s O t J S K E u u Y Z z w y O x v | { | v } } P ~ p b I x Y { f y S z D Q T d S c | J e ^ @ A B C Y D E F [ G H K I L J M } N Q Z O V P c } R S W T R e Z c S ] d _ f b a [ Y U X S ` q g @ h m i n A E \ k w l g j U p } J q s o { ~ x P v | { u z r t @ | | T y T [ w d f } ~ ` K g h r g E T Q P d B o h i ^ F C [ x U q ~ s U h G ~ | k l a f z V { U | { V f t c E W W N A i q g b \ A @ B C j D F G H g X I J f ] \ L K L N ] M N O { D Q p S V U R T W Z m X Y [ \ a Y t ^ n f ` f ] c b } g e d _ k i g m s u A t ^ _ M p o q n v l j r h ` h I x Z z } j i { j y | ~ K j V O ~ [ B d _ I X o A k ^ | O y T | P Y \ l W ~ M k @ h @ w K G F E B D C I E L H J M Q N O R S T U ~ W V Y \ \ [ ] V ^ ` _ a b c ~ c d e f g i h w } c j l B k m n o p q s r t i u E k v a B w x y z | { ~ } C X i ` ] r D B v @ A g D j m k ^ F h l Y _ Q \ C Z O @ A U t B i W [ D ~ C Y E a k n Q H ` F I X G N p a n M J H B Y R A Q @ N I R K H k E D M G F L C K O P U T V Y b S L W Q Z X ] [ ^ a Z G \ ` _ J M d h f N O b c g e m m j i l n P o q p r s D Q F u t R x Y { v z y _ b } G ~ | w B T S R V W U F o n M Y R z W C Z u v S q ] [ \ _ K T ] L P Q b l _ ` a X d b c ] f e g i h j i l k l m Z @ Z A B C D F G E r I H n K J L M O N Q P r [ R Y S p T c R b \ j U V [ Y X E W \ Z { L ^ l _ ] ` a o f c b E i d e h g D a ` ^ j k l n m u v p r t ] u s o q a x w y z | { s } ~ o S p I F c H s q r t M u ~ m v X ^ v r u m Z x u m C j v { y z d { V O q m A @ C B D b F E G I H | J V _ F S P O c L N j _ M K I [ Q R h \ T S T U W X H Y Z [ G \ H b ] d ` a ` ^ _ H b c B d e t g f i l j m k e m s o n n p q r n t u v w y { x z A | E q ~ M } v G [ ^ | J } y M } Z \ z U H e S l W f n I @ g C [ R B h A f a F G a I H I g D J E o M Q L U i R O P N K G W T V S p X e a [ _ Z b f j \ d Y ] ^ ] g c h j m i l k n u o v r t q w p c D k s { ~ | z ` } x @ q J D U y J [ \ Z r u l r Q A ` H K | s V l k ^ E W ] I b m n x _ w E E \ e r E ] B A t D C o r T H I G F J B N O K L M p U Q G P S R c V W V X Z ^ [ Y ^ \ ] d _ ` a c b e f g b h L v i j P k l m n o p q r s C w M t q u w v D x z y | { } ~ F H m c F | c p s t ` r e p H G t K N f ~ u W ` H @ U @ B C n J P Q D N F H R G K L O E E I F d O V T m S U W X [ Y Z M \ a ` A b h ] _ ^ P A d c e f g s i | j k l q r m \ n a o p z t w s u v x ` u a { ^ | } ~ g I w X I Z I a y O s p X q t \ U T J ] A @ C B D P E F G v H e I J K K ` L o M O N e P Q R S T U V p W X Y G Z [ \ ] v u ` _ P ^ L a b c K i d f e h i g ] f r m w l l k F l b Y j o p n _ F s a U v r w t u q N b z x k y z _ { ~ | @ } d y u w T x c ] Q J L ^ e L v n M \ f G d G o ^ q w q N z H H x H @ D A B C J E G I F L R K M N Q P O S R U T V W Y X g Z [ ] ^ _ \ ` a O R b ] c f e d y g r i h q k m j l p n P o r y S s A u t x ` w v { z y Q | } ~ D h C J _ H I v } R q t r A T i N x V ^ B k y K J I W M @ x Y S s X s A U z | V y _ X d B j t b n S z g e _ L K N s e e | K @ B A C d B ^ E D F ^ t K b G H L J I O Z M N L P V Y X L Q R U W Z T S ^ _ ` ] \ [ d b c a e f h g s i l j k m o p q t r u w v x M y z J [ { | } ~ t } { h j ~ @ w A z G @ K u B Y W G J _ d k I P r v x C f B C { a z j o p z { ^ @ B A C D E F H G I H Q J K Z O L M { a ` N O P R S U Q T V W X Y Z \ [ ^ a ] _ ` b c d e ] n f g y h w m l j k i w n o p q s r x t v R u x y z } | ~ { [ @ E T S @ D B A C L N D E I ~ F k h V L P D C E L @ A B H Q J G F K H G { L M N I O S T R Q W P U V Y X [ \ ] h Z ^ J _ ` a b c d e f g h k i [ j l m n p q o s o t u v K w x z y { | } ~ C l @ V s X ^ u } ~ I I W V i j { C | D ^ O P Q R S T U V W X F G H ` a b c d e f g h i j k l m n o p q r s t u v w x y m _ n O Q M o b p ` P U diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-csshiftjis.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-csshiftjis.html.headers new file mode 100644 index 00000000000..fdb397d1f2f --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-csshiftjis.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=csshiftjis diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-ms932.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-ms932.html new file mode 100755 index 00000000000..17e1908a8b0 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-ms932.html @@ -0,0 +1 @@ +ms932 characters \ N } L ~ F @ A B C D E G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` p q r s t u w x y z { | } ~ v ] \ e f g h d c ~ T U V W X Y Z [ \ ] @ A B C D E F G H I | a @ A B C D E F G H I J K L M N O P Q R S @ A B V X Y Z q r s t u v w x y z k l J K T U @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ E [ R S e i ` c a k j d l f n _ m b g h ~ r s o p q u t O s ^ N u h O T v V R h T \ ] j i S l Y m w e d t W i C j k l x ` L m f A Z C n ] C g p o r q D N W a r s M C o U v q { | w u l ` t z x y U T { P b B X C @ A l D } E H F m G I | K J V M N L Q P O R S D U T W V X Y Z [ ~ [ e Z \ } ] S _ ` Z a T b c ~ f e g h ` i j k n l m y o p q ~ u s t r v w x y y z { } } ~ M o n Y h O U n c w w J N u E M k x C \ P m T K p ~ X } Q y F o f b p @ j E i h e g D @ f N i z C a B @ ] P D C i A E N F G L K N M J S O H I S B Y X O P U R [ V W T Z Q ` e a \ f P h A ^ b [ c _ i g r i d c m k p j n l k o r w u t Q q s R v } { | ~ \ X x y d X d l c } y \ n V B R ^ C _ W u | x g Y h U o m n d m p s [ O g V v t _ z D z @ D A @ D J W d B E W i F G o n K L I W H P p Q O R P N P M V W S K k U X w Y T } Z Q [ _ \ ^ ] k d a ` b c e f h g i l d j m n q o p q r E s t u y F G v w w x y z { } ~ F v G @ X q G { Q e h x Q @ J R q A K s A r W j w R Z x s R B H I b J F s z t A X y N K c H L X M { x N f p L f @ C D B _ F E A G H I L J K M N U O P M Q T U | V O o W X ^ Y J e Z g [ \ ] _ ` a b S R c ` F V j d e e f i h g a m k j l k ] p o n q r z s O t J S K E u u Y Z z w y O x v | { | v } } P ~ p b I x Y { f y S z D Q T d S c | J e ^ @ A B C Y D E F [ G H K I L J M } N Q Z O V P c } R S W T R e Z c S ] d _ f b a [ Y U X S ` q g @ h m i n A E \ k w l g j U p } J q s o { ~ x P v | { u z r t @ | | T y T [ w d f } ~ ` K g h r g E T Q P d B o h i ^ F C [ x U q ~ s U h G ~ | k l a f z V { U | { V f t c E W W N A i q g b \ A @ B C j D F G H g X I J f ] \ L K L N ] M N O { D Q p S V U R T W Z m X Y [ \ a Y t ^ n f ` f ] c b } g e d _ k i g m s u A t ^ _ M p o q n v l j r h ` h I x Z z } j i { j y | ~ K j V O ~ [ B d _ I X o A k ^ | O y T | P Y \ l W ~ M k @ h @ w K G F E B D C I E L H J M Q N O R S T U ~ W V Y \ \ [ ] V ^ ` _ a b c ~ c d e f g i h w } c j l B k m n o p q s r t i u E k v a B w x y z | { ~ } C X i ` ] r D B v @ A g D j m k ^ F h l Y _ Q \ C Z O @ A U t B i W [ D ~ C Y E a k n Q H ` F I X G N p a n M J H B Y R A Q @ N I R K H k E D M G F L C K O P U T V Y b S L W Q Z X ] [ ^ a Z G \ ` _ J M d h f N O b c g e m m j i l n P o q p r s D Q F u t R x Y { v z y _ b } G ~ | w B T S R V W U F o n M Y R z W C Z u v S q ] [ \ _ K T ] L P Q b l _ ` a X d b c ] f e g i h j i l k l m Z @ Z A B C D F G E r I H n K J L M O N Q P r [ R Y S p T c R b \ j U V [ Y X E W \ Z { L ^ l _ ] ` a o f c b E i d e h g D a ` ^ j k l n m u v p r t ] u s o q a x w y z | { s } ~ o S p I F c H s q r t M u ~ m v X ^ v r u m Z x u m C j v { y z d { V O q m A @ C B D b F E G I H | J V _ F S P O c L N j _ M K I [ Q R h \ T S T U W X H Y Z [ G \ H b ] d ` a ` ^ _ H b c B d e t g f i l j m k e m s o n n p q r n t u v w y { x z A | E q ~ M } v G [ ^ | J } y M } Z \ z U H e S l W f n I @ g C [ R B h A f a F G a I H I g D J E o M Q L U i R O P N K G W T V S p X e a [ _ Z b f j \ d Y ] ^ ] g c h j m i l k n u o v r t q w p c D k s { ~ | z ` } x @ q J D U y J [ \ Z r u l r Q A ` H K | s V l k ^ E W ] I b m n x _ w E E \ e r E ] B A t D C o r T H I G F J B N O K L M p U Q G P S R c V W V X Z ^ [ Y ^ \ ] d _ ` a c b e f g b h L v i j P k l m n o p q r s C w M t q u w v D x z y | { } ~ F H m c F | c p s t ` r e p H G t K N f ~ u W ` H @ U @ B C n J P Q D N F H R G K L O E E I F d O V T m S U W X [ Y Z M \ a ` A b h ] _ ^ P A d c e f g s i | j k l q r m \ n a o p z t w s u v x ` u a { ^ | } ~ g I w X I Z I a y O s p X q t \ U T J ] A @ C B D P E F G v H e I J K K ` L o M O N e P Q R S T U V p W X Y G Z [ \ ] v u ` _ P ^ L a b c K i d f e h i g ] f r m w l l k F l b Y j o p n _ F s a U v r w t u q N b z x k y z _ { ~ | @ } d y u w T x c ] Q J L ^ e L v n M \ f G d G o ^ q w q N z H H x H @ D A B C J E G I F L R K M N Q P O S R U T V W Y X g Z [ ] ^ _ \ ` a O R b ] c f e d y g r i h q k m j l p n P o r y S s A u t x ` w v { z y Q | } ~ D h C J _ H I v } R q t r A T i N x V ^ B k y K J I W M @ x Y S s X s A U z | V y _ X d B j t b n S z g e _ L K N s e e | K @ B A C d B ^ E D F ^ t K b G H L J I O Z M N L P V Y X L Q R U W Z T S ^ _ ` ] \ [ d b c a e f h g s i l j k m o p q t r u w v x M y z J [ { | } ~ t } { h j ~ @ w A z G @ K u B Y W G J _ d k I P r v x C f B C { a z j o p z { ^ @ B A C D E F H G I H Q J K Z O L M { a ` N O P R S U Q T V W X Y Z \ [ ^ a ] _ ` b c d e ] n f g y h w m l j k i w n o p q s r x t v R u x y z } | ~ { [ @ E T S @ D B A C L N D E I ~ F k h V L P D C E L @ A B H Q J G F K H G { L M N I O S T R Q W P U V Y X [ \ ] h Z ^ J _ ` a b c d e f g h k i [ j l m n p q o s o t u v K w x z y { | } ~ C l @ V s X ^ u } ~ I I W V i j { C | D ^ O P Q R S T U V W X F G H ` a b c d e f g h i j k l m n o p q r s t u v w x y m _ n O Q M o b p ` P U diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-ms932.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-ms932.html.headers new file mode 100644 index 00000000000..9f30fece573 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-ms932.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=ms932 diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-ms_kanji.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-ms_kanji.html new file mode 100755 index 00000000000..254bc7d04f6 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-ms_kanji.html @@ -0,0 +1 @@ +ms_kanji characters \ N } L ~ F @ A B C D E G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` p q r s t u w x y z { | } ~ v ] \ e f g h d c ~ T U V W X Y Z [ \ ] @ A B C D E F G H I | a @ A B C D E F G H I J K L M N O P Q R S @ A B V X Y Z q r s t u v w x y z k l J K T U @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ E [ R S e i ` c a k j d l f n _ m b g h ~ r s o p q u t O s ^ N u h O T v V R h T \ ] j i S l Y m w e d t W i C j k l x ` L m f A Z C n ] C g p o r q D N W a r s M C o U v q { | w u l ` t z x y U T { P b B X C @ A l D } E H F m G I | K J V M N L Q P O R S D U T W V X Y Z [ ~ [ e Z \ } ] S _ ` Z a T b c ~ f e g h ` i j k n l m y o p q ~ u s t r v w x y y z { } } ~ M o n Y h O U n c w w J N u E M k x C \ P m T K p ~ X } Q y F o f b p @ j E i h e g D @ f N i z C a B @ ] P D C i A E N F G L K N M J S O H I S B Y X O P U R [ V W T Z Q ` e a \ f P h A ^ b [ c _ i g r i d c m k p j n l k o r w u t Q q s R v } { | ~ \ X x y d X d l c } y \ n V B R ^ C _ W u | x g Y h U o m n d m p s [ O g V v t _ z D z @ D A @ D J W d B E W i F G o n K L I W H P p Q O R P N P M V W S K k U X w Y T } Z Q [ _ \ ^ ] k d a ` b c e f h g i l d j m n q o p q r E s t u y F G v w w x y z { } ~ F v G @ X q G { Q e h x Q @ J R q A K s A r W j w R Z x s R B H I b J F s z t A X y N K c H L X M { x N f p L f @ C D B _ F E A G H I L J K M N U O P M Q T U | V O o W X ^ Y J e Z g [ \ ] _ ` a b S R c ` F V j d e e f i h g a m k j l k ] p o n q r z s O t J S K E u u Y Z z w y O x v | { | v } } P ~ p b I x Y { f y S z D Q T d S c | J e ^ @ A B C Y D E F [ G H K I L J M } N Q Z O V P c } R S W T R e Z c S ] d _ f b a [ Y U X S ` q g @ h m i n A E \ k w l g j U p } J q s o { ~ x P v | { u z r t @ | | T y T [ w d f } ~ ` K g h r g E T Q P d B o h i ^ F C [ x U q ~ s U h G ~ | k l a f z V { U | { V f t c E W W N A i q g b \ A @ B C j D F G H g X I J f ] \ L K L N ] M N O { D Q p S V U R T W Z m X Y [ \ a Y t ^ n f ` f ] c b } g e d _ k i g m s u A t ^ _ M p o q n v l j r h ` h I x Z z } j i { j y | ~ K j V O ~ [ B d _ I X o A k ^ | O y T | P Y \ l W ~ M k @ h @ w K G F E B D C I E L H J M Q N O R S T U ~ W V Y \ \ [ ] V ^ ` _ a b c ~ c d e f g i h w } c j l B k m n o p q s r t i u E k v a B w x y z | { ~ } C X i ` ] r D B v @ A g D j m k ^ F h l Y _ Q \ C Z O @ A U t B i W [ D ~ C Y E a k n Q H ` F I X G N p a n M J H B Y R A Q @ N I R K H k E D M G F L C K O P U T V Y b S L W Q Z X ] [ ^ a Z G \ ` _ J M d h f N O b c g e m m j i l n P o q p r s D Q F u t R x Y { v z y _ b } G ~ | w B T S R V W U F o n M Y R z W C Z u v S q ] [ \ _ K T ] L P Q b l _ ` a X d b c ] f e g i h j i l k l m Z @ Z A B C D F G E r I H n K J L M O N Q P r [ R Y S p T c R b \ j U V [ Y X E W \ Z { L ^ l _ ] ` a o f c b E i d e h g D a ` ^ j k l n m u v p r t ] u s o q a x w y z | { s } ~ o S p I F c H s q r t M u ~ m v X ^ v r u m Z x u m C j v { y z d { V O q m A @ C B D b F E G I H | J V _ F S P O c L N j _ M K I [ Q R h \ T S T U W X H Y Z [ G \ H b ] d ` a ` ^ _ H b c B d e t g f i l j m k e m s o n n p q r n t u v w y { x z A | E q ~ M } v G [ ^ | J } y M } Z \ z U H e S l W f n I @ g C [ R B h A f a F G a I H I g D J E o M Q L U i R O P N K G W T V S p X e a [ _ Z b f j \ d Y ] ^ ] g c h j m i l k n u o v r t q w p c D k s { ~ | z ` } x @ q J D U y J [ \ Z r u l r Q A ` H K | s V l k ^ E W ] I b m n x _ w E E \ e r E ] B A t D C o r T H I G F J B N O K L M p U Q G P S R c V W V X Z ^ [ Y ^ \ ] d _ ` a c b e f g b h L v i j P k l m n o p q r s C w M t q u w v D x z y | { } ~ F H m c F | c p s t ` r e p H G t K N f ~ u W ` H @ U @ B C n J P Q D N F H R G K L O E E I F d O V T m S U W X [ Y Z M \ a ` A b h ] _ ^ P A d c e f g s i | j k l q r m \ n a o p z t w s u v x ` u a { ^ | } ~ g I w X I Z I a y O s p X q t \ U T J ] A @ C B D P E F G v H e I J K K ` L o M O N e P Q R S T U V p W X Y G Z [ \ ] v u ` _ P ^ L a b c K i d f e h i g ] f r m w l l k F l b Y j o p n _ F s a U v r w t u q N b z x k y z _ { ~ | @ } d y u w T x c ] Q J L ^ e L v n M \ f G d G o ^ q w q N z H H x H @ D A B C J E G I F L R K M N Q P O S R U T V W Y X g Z [ ] ^ _ \ ` a O R b ] c f e d y g r i h q k m j l p n P o r y S s A u t x ` w v { z y Q | } ~ D h C J _ H I v } R q t r A T i N x V ^ B k y K J I W M @ x Y S s X s A U z | V y _ X d B j t b n S z g e _ L K N s e e | K @ B A C d B ^ E D F ^ t K b G H L J I O Z M N L P V Y X L Q R U W Z T S ^ _ ` ] \ [ d b c a e f h g s i l j k m o p q t r u w v x M y z J [ { | } ~ t } { h j ~ @ w A z G @ K u B Y W G J _ d k I P r v x C f B C { a z j o p z { ^ @ B A C D E F H G I H Q J K Z O L M { a ` N O P R S U Q T V W X Y Z \ [ ^ a ] _ ` b c d e ] n f g y h w m l j k i w n o p q s r x t v R u x y z } | ~ { [ @ E T S @ D B A C L N D E I ~ F k h V L P D C E L @ A B H Q J G F K H G { L M N I O S T R Q W P U V Y X [ \ ] h Z ^ J _ ` a b c d e f g h k i [ j l m n p q o s o t u v K w x z y { | } ~ C l @ V s X ^ u } ~ I I W V i j { C | D ^ O P Q R S T U V W X F G H ` a b c d e f g h i j k l m n o p q r s t u v w x y m _ n O Q M o b p ` P U diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-ms_kanji.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-ms_kanji.html.headers new file mode 100644 index 00000000000..1951fffc0f0 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-ms_kanji.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=ms_kanji diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-shift-jis.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-shift-jis.html new file mode 100755 index 00000000000..d6995d97e50 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-shift-jis.html @@ -0,0 +1 @@ +shift-jis characters \ N } L ~ F @ A B C D E G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` p q r s t u w x y z { | } ~ v ] \ e f g h d c ~ T U V W X Y Z [ \ ] @ A B C D E F G H I | a @ A B C D E F G H I J K L M N O P Q R S @ A B V X Y Z q r s t u v w x y z k l J K T U @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ E [ R S e i ` c a k j d l f n _ m b g h ~ r s o p q u t O s ^ N u h O T v V R h T \ ] j i S l Y m w e d t W i C j k l x ` L m f A Z C n ] C g p o r q D N W a r s M C o U v q { | w u l ` t z x y U T { P b B X C @ A l D } E H F m G I | K J V M N L Q P O R S D U T W V X Y Z [ ~ [ e Z \ } ] S _ ` Z a T b c ~ f e g h ` i j k n l m y o p q ~ u s t r v w x y y z { } } ~ M o n Y h O U n c w w J N u E M k x C \ P m T K p ~ X } Q y F o f b p @ j E i h e g D @ f N i z C a B @ ] P D C i A E N F G L K N M J S O H I S B Y X O P U R [ V W T Z Q ` e a \ f P h A ^ b [ c _ i g r i d c m k p j n l k o r w u t Q q s R v } { | ~ \ X x y d X d l c } y \ n V B R ^ C _ W u | x g Y h U o m n d m p s [ O g V v t _ z D z @ D A @ D J W d B E W i F G o n K L I W H P p Q O R P N P M V W S K k U X w Y T } Z Q [ _ \ ^ ] k d a ` b c e f h g i l d j m n q o p q r E s t u y F G v w w x y z { } ~ F v G @ X q G { Q e h x Q @ J R q A K s A r W j w R Z x s R B H I b J F s z t A X y N K c H L X M { x N f p L f @ C D B _ F E A G H I L J K M N U O P M Q T U | V O o W X ^ Y J e Z g [ \ ] _ ` a b S R c ` F V j d e e f i h g a m k j l k ] p o n q r z s O t J S K E u u Y Z z w y O x v | { | v } } P ~ p b I x Y { f y S z D Q T d S c | J e ^ @ A B C Y D E F [ G H K I L J M } N Q Z O V P c } R S W T R e Z c S ] d _ f b a [ Y U X S ` q g @ h m i n A E \ k w l g j U p } J q s o { ~ x P v | { u z r t @ | | T y T [ w d f } ~ ` K g h r g E T Q P d B o h i ^ F C [ x U q ~ s U h G ~ | k l a f z V { U | { V f t c E W W N A i q g b \ A @ B C j D F G H g X I J f ] \ L K L N ] M N O { D Q p S V U R T W Z m X Y [ \ a Y t ^ n f ` f ] c b } g e d _ k i g m s u A t ^ _ M p o q n v l j r h ` h I x Z z } j i { j y | ~ K j V O ~ [ B d _ I X o A k ^ | O y T | P Y \ l W ~ M k @ h @ w K G F E B D C I E L H J M Q N O R S T U ~ W V Y \ \ [ ] V ^ ` _ a b c ~ c d e f g i h w } c j l B k m n o p q s r t i u E k v a B w x y z | { ~ } C X i ` ] r D B v @ A g D j m k ^ F h l Y _ Q \ C Z O @ A U t B i W [ D ~ C Y E a k n Q H ` F I X G N p a n M J H B Y R A Q @ N I R K H k E D M G F L C K O P U T V Y b S L W Q Z X ] [ ^ a Z G \ ` _ J M d h f N O b c g e m m j i l n P o q p r s D Q F u t R x Y { v z y _ b } G ~ | w B T S R V W U F o n M Y R z W C Z u v S q ] [ \ _ K T ] L P Q b l _ ` a X d b c ] f e g i h j i l k l m Z @ Z A B C D F G E r I H n K J L M O N Q P r [ R Y S p T c R b \ j U V [ Y X E W \ Z { L ^ l _ ] ` a o f c b E i d e h g D a ` ^ j k l n m u v p r t ] u s o q a x w y z | { s } ~ o S p I F c H s q r t M u ~ m v X ^ v r u m Z x u m C j v { y z d { V O q m A @ C B D b F E G I H | J V _ F S P O c L N j _ M K I [ Q R h \ T S T U W X H Y Z [ G \ H b ] d ` a ` ^ _ H b c B d e t g f i l j m k e m s o n n p q r n t u v w y { x z A | E q ~ M } v G [ ^ | J } y M } Z \ z U H e S l W f n I @ g C [ R B h A f a F G a I H I g D J E o M Q L U i R O P N K G W T V S p X e a [ _ Z b f j \ d Y ] ^ ] g c h j m i l k n u o v r t q w p c D k s { ~ | z ` } x @ q J D U y J [ \ Z r u l r Q A ` H K | s V l k ^ E W ] I b m n x _ w E E \ e r E ] B A t D C o r T H I G F J B N O K L M p U Q G P S R c V W V X Z ^ [ Y ^ \ ] d _ ` a c b e f g b h L v i j P k l m n o p q r s C w M t q u w v D x z y | { } ~ F H m c F | c p s t ` r e p H G t K N f ~ u W ` H @ U @ B C n J P Q D N F H R G K L O E E I F d O V T m S U W X [ Y Z M \ a ` A b h ] _ ^ P A d c e f g s i | j k l q r m \ n a o p z t w s u v x ` u a { ^ | } ~ g I w X I Z I a y O s p X q t \ U T J ] A @ C B D P E F G v H e I J K K ` L o M O N e P Q R S T U V p W X Y G Z [ \ ] v u ` _ P ^ L a b c K i d f e h i g ] f r m w l l k F l b Y j o p n _ F s a U v r w t u q N b z x k y z _ { ~ | @ } d y u w T x c ] Q J L ^ e L v n M \ f G d G o ^ q w q N z H H x H @ D A B C J E G I F L R K M N Q P O S R U T V W Y X g Z [ ] ^ _ \ ` a O R b ] c f e d y g r i h q k m j l p n P o r y S s A u t x ` w v { z y Q | } ~ D h C J _ H I v } R q t r A T i N x V ^ B k y K J I W M @ x Y S s X s A U z | V y _ X d B j t b n S z g e _ L K N s e e | K @ B A C d B ^ E D F ^ t K b G H L J I O Z M N L P V Y X L Q R U W Z T S ^ _ ` ] \ [ d b c a e f h g s i l j k m o p q t r u w v x M y z J [ { | } ~ t } { h j ~ @ w A z G @ K u B Y W G J _ d k I P r v x C f B C { a z j o p z { ^ @ B A C D E F H G I H Q J K Z O L M { a ` N O P R S U Q T V W X Y Z \ [ ^ a ] _ ` b c d e ] n f g y h w m l j k i w n o p q s r x t v R u x y z } | ~ { [ @ E T S @ D B A C L N D E I ~ F k h V L P D C E L @ A B H Q J G F K H G { L M N I O S T R Q W P U V Y X [ \ ] h Z ^ J _ ` a b c d e f g h k i [ j l m n p q o s o t u v K w x z y { | } ~ C l @ V s X ^ u } ~ I I W V i j { C | D ^ O P Q R S T U V W X F G H ` a b c d e f g h i j k l m n o p q r s t u v w x y m _ n O Q M o b p ` P U diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-shift-jis.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-shift-jis.html.headers new file mode 100644 index 00000000000..3239b8638eb --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-shift-jis.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=shift-jis diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-sjis.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-sjis.html new file mode 100755 index 00000000000..d7ca820c58c --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-sjis.html @@ -0,0 +1 @@ +sjis characters \ N } L ~ F @ A B C D E G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` p q r s t u w x y z { | } ~ v ] \ e f g h d c ~ T U V W X Y Z [ \ ] @ A B C D E F G H I | a @ A B C D E F G H I J K L M N O P Q R S @ A B V X Y Z q r s t u v w x y z k l J K T U @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ E [ R S e i ` c a k j d l f n _ m b g h ~ r s o p q u t O s ^ N u h O T v V R h T \ ] j i S l Y m w e d t W i C j k l x ` L m f A Z C n ] C g p o r q D N W a r s M C o U v q { | w u l ` t z x y U T { P b B X C @ A l D } E H F m G I | K J V M N L Q P O R S D U T W V X Y Z [ ~ [ e Z \ } ] S _ ` Z a T b c ~ f e g h ` i j k n l m y o p q ~ u s t r v w x y y z { } } ~ M o n Y h O U n c w w J N u E M k x C \ P m T K p ~ X } Q y F o f b p @ j E i h e g D @ f N i z C a B @ ] P D C i A E N F G L K N M J S O H I S B Y X O P U R [ V W T Z Q ` e a \ f P h A ^ b [ c _ i g r i d c m k p j n l k o r w u t Q q s R v } { | ~ \ X x y d X d l c } y \ n V B R ^ C _ W u | x g Y h U o m n d m p s [ O g V v t _ z D z @ D A @ D J W d B E W i F G o n K L I W H P p Q O R P N P M V W S K k U X w Y T } Z Q [ _ \ ^ ] k d a ` b c e f h g i l d j m n q o p q r E s t u y F G v w w x y z { } ~ F v G @ X q G { Q e h x Q @ J R q A K s A r W j w R Z x s R B H I b J F s z t A X y N K c H L X M { x N f p L f @ C D B _ F E A G H I L J K M N U O P M Q T U | V O o W X ^ Y J e Z g [ \ ] _ ` a b S R c ` F V j d e e f i h g a m k j l k ] p o n q r z s O t J S K E u u Y Z z w y O x v | { | v } } P ~ p b I x Y { f y S z D Q T d S c | J e ^ @ A B C Y D E F [ G H K I L J M } N Q Z O V P c } R S W T R e Z c S ] d _ f b a [ Y U X S ` q g @ h m i n A E \ k w l g j U p } J q s o { ~ x P v | { u z r t @ | | T y T [ w d f } ~ ` K g h r g E T Q P d B o h i ^ F C [ x U q ~ s U h G ~ | k l a f z V { U | { V f t c E W W N A i q g b \ A @ B C j D F G H g X I J f ] \ L K L N ] M N O { D Q p S V U R T W Z m X Y [ \ a Y t ^ n f ` f ] c b } g e d _ k i g m s u A t ^ _ M p o q n v l j r h ` h I x Z z } j i { j y | ~ K j V O ~ [ B d _ I X o A k ^ | O y T | P Y \ l W ~ M k @ h @ w K G F E B D C I E L H J M Q N O R S T U ~ W V Y \ \ [ ] V ^ ` _ a b c ~ c d e f g i h w } c j l B k m n o p q s r t i u E k v a B w x y z | { ~ } C X i ` ] r D B v @ A g D j m k ^ F h l Y _ Q \ C Z O @ A U t B i W [ D ~ C Y E a k n Q H ` F I X G N p a n M J H B Y R A Q @ N I R K H k E D M G F L C K O P U T V Y b S L W Q Z X ] [ ^ a Z G \ ` _ J M d h f N O b c g e m m j i l n P o q p r s D Q F u t R x Y { v z y _ b } G ~ | w B T S R V W U F o n M Y R z W C Z u v S q ] [ \ _ K T ] L P Q b l _ ` a X d b c ] f e g i h j i l k l m Z @ Z A B C D F G E r I H n K J L M O N Q P r [ R Y S p T c R b \ j U V [ Y X E W \ Z { L ^ l _ ] ` a o f c b E i d e h g D a ` ^ j k l n m u v p r t ] u s o q a x w y z | { s } ~ o S p I F c H s q r t M u ~ m v X ^ v r u m Z x u m C j v { y z d { V O q m A @ C B D b F E G I H | J V _ F S P O c L N j _ M K I [ Q R h \ T S T U W X H Y Z [ G \ H b ] d ` a ` ^ _ H b c B d e t g f i l j m k e m s o n n p q r n t u v w y { x z A | E q ~ M } v G [ ^ | J } y M } Z \ z U H e S l W f n I @ g C [ R B h A f a F G a I H I g D J E o M Q L U i R O P N K G W T V S p X e a [ _ Z b f j \ d Y ] ^ ] g c h j m i l k n u o v r t q w p c D k s { ~ | z ` } x @ q J D U y J [ \ Z r u l r Q A ` H K | s V l k ^ E W ] I b m n x _ w E E \ e r E ] B A t D C o r T H I G F J B N O K L M p U Q G P S R c V W V X Z ^ [ Y ^ \ ] d _ ` a c b e f g b h L v i j P k l m n o p q r s C w M t q u w v D x z y | { } ~ F H m c F | c p s t ` r e p H G t K N f ~ u W ` H @ U @ B C n J P Q D N F H R G K L O E E I F d O V T m S U W X [ Y Z M \ a ` A b h ] _ ^ P A d c e f g s i | j k l q r m \ n a o p z t w s u v x ` u a { ^ | } ~ g I w X I Z I a y O s p X q t \ U T J ] A @ C B D P E F G v H e I J K K ` L o M O N e P Q R S T U V p W X Y G Z [ \ ] v u ` _ P ^ L a b c K i d f e h i g ] f r m w l l k F l b Y j o p n _ F s a U v r w t u q N b z x k y z _ { ~ | @ } d y u w T x c ] Q J L ^ e L v n M \ f G d G o ^ q w q N z H H x H @ D A B C J E G I F L R K M N Q P O S R U T V W Y X g Z [ ] ^ _ \ ` a O R b ] c f e d y g r i h q k m j l p n P o r y S s A u t x ` w v { z y Q | } ~ D h C J _ H I v } R q t r A T i N x V ^ B k y K J I W M @ x Y S s X s A U z | V y _ X d B j t b n S z g e _ L K N s e e | K @ B A C d B ^ E D F ^ t K b G H L J I O Z M N L P V Y X L Q R U W Z T S ^ _ ` ] \ [ d b c a e f h g s i l j k m o p q t r u w v x M y z J [ { | } ~ t } { h j ~ @ w A z G @ K u B Y W G J _ d k I P r v x C f B C { a z j o p z { ^ @ B A C D E F H G I H Q J K Z O L M { a ` N O P R S U Q T V W X Y Z \ [ ^ a ] _ ` b c d e ] n f g y h w m l j k i w n o p q s r x t v R u x y z } | ~ { [ @ E T S @ D B A C L N D E I ~ F k h V L P D C E L @ A B H Q J G F K H G { L M N I O S T R Q W P U V Y X [ \ ] h Z ^ J _ ` a b c d e f g h k i [ j l m n p q o s o t u v K w x z y { | } ~ C l @ V s X ^ u } ~ I I W V i j { C | D ^ O P Q R S T U V W X F G H ` a b c d e f g h i j k l m n o p q r s t u v w x y m _ n O Q M o b p ` P U diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-sjis.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-sjis.html.headers new file mode 100644 index 00000000000..5b9a2f2e789 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-sjis.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=sjis diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-windows-31j.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-windows-31j.html new file mode 100755 index 00000000000..c0b8387b200 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-windows-31j.html @@ -0,0 +1 @@ +windows-31j characters \ N } L ~ F @ A B C D E G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` p q r s t u w x y z { | } ~ v ] \ e f g h d c ~ T U V W X Y Z [ \ ] @ A B C D E F G H I | a @ A B C D E F G H I J K L M N O P Q R S @ A B V X Y Z q r s t u v w x y z k l J K T U @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ E [ R S e i ` c a k j d l f n _ m b g h ~ r s o p q u t O s ^ N u h O T v V R h T \ ] j i S l Y m w e d t W i C j k l x ` L m f A Z C n ] C g p o r q D N W a r s M C o U v q { | w u l ` t z x y U T { P b B X C @ A l D } E H F m G I | K J V M N L Q P O R S D U T W V X Y Z [ ~ [ e Z \ } ] S _ ` Z a T b c ~ f e g h ` i j k n l m y o p q ~ u s t r v w x y y z { } } ~ M o n Y h O U n c w w J N u E M k x C \ P m T K p ~ X } Q y F o f b p @ j E i h e g D @ f N i z C a B @ ] P D C i A E N F G L K N M J S O H I S B Y X O P U R [ V W T Z Q ` e a \ f P h A ^ b [ c _ i g r i d c m k p j n l k o r w u t Q q s R v } { | ~ \ X x y d X d l c } y \ n V B R ^ C _ W u | x g Y h U o m n d m p s [ O g V v t _ z D z @ D A @ D J W d B E W i F G o n K L I W H P p Q O R P N P M V W S K k U X w Y T } Z Q [ _ \ ^ ] k d a ` b c e f h g i l d j m n q o p q r E s t u y F G v w w x y z { } ~ F v G @ X q G { Q e h x Q @ J R q A K s A r W j w R Z x s R B H I b J F s z t A X y N K c H L X M { x N f p L f @ C D B _ F E A G H I L J K M N U O P M Q T U | V O o W X ^ Y J e Z g [ \ ] _ ` a b S R c ` F V j d e e f i h g a m k j l k ] p o n q r z s O t J S K E u u Y Z z w y O x v | { | v } } P ~ p b I x Y { f y S z D Q T d S c | J e ^ @ A B C Y D E F [ G H K I L J M } N Q Z O V P c } R S W T R e Z c S ] d _ f b a [ Y U X S ` q g @ h m i n A E \ k w l g j U p } J q s o { ~ x P v | { u z r t @ | | T y T [ w d f } ~ ` K g h r g E T Q P d B o h i ^ F C [ x U q ~ s U h G ~ | k l a f z V { U | { V f t c E W W N A i q g b \ A @ B C j D F G H g X I J f ] \ L K L N ] M N O { D Q p S V U R T W Z m X Y [ \ a Y t ^ n f ` f ] c b } g e d _ k i g m s u A t ^ _ M p o q n v l j r h ` h I x Z z } j i { j y | ~ K j V O ~ [ B d _ I X o A k ^ | O y T | P Y \ l W ~ M k @ h @ w K G F E B D C I E L H J M Q N O R S T U ~ W V Y \ \ [ ] V ^ ` _ a b c ~ c d e f g i h w } c j l B k m n o p q s r t i u E k v a B w x y z | { ~ } C X i ` ] r D B v @ A g D j m k ^ F h l Y _ Q \ C Z O @ A U t B i W [ D ~ C Y E a k n Q H ` F I X G N p a n M J H B Y R A Q @ N I R K H k E D M G F L C K O P U T V Y b S L W Q Z X ] [ ^ a Z G \ ` _ J M d h f N O b c g e m m j i l n P o q p r s D Q F u t R x Y { v z y _ b } G ~ | w B T S R V W U F o n M Y R z W C Z u v S q ] [ \ _ K T ] L P Q b l _ ` a X d b c ] f e g i h j i l k l m Z @ Z A B C D F G E r I H n K J L M O N Q P r [ R Y S p T c R b \ j U V [ Y X E W \ Z { L ^ l _ ] ` a o f c b E i d e h g D a ` ^ j k l n m u v p r t ] u s o q a x w y z | { s } ~ o S p I F c H s q r t M u ~ m v X ^ v r u m Z x u m C j v { y z d { V O q m A @ C B D b F E G I H | J V _ F S P O c L N j _ M K I [ Q R h \ T S T U W X H Y Z [ G \ H b ] d ` a ` ^ _ H b c B d e t g f i l j m k e m s o n n p q r n t u v w y { x z A | E q ~ M } v G [ ^ | J } y M } Z \ z U H e S l W f n I @ g C [ R B h A f a F G a I H I g D J E o M Q L U i R O P N K G W T V S p X e a [ _ Z b f j \ d Y ] ^ ] g c h j m i l k n u o v r t q w p c D k s { ~ | z ` } x @ q J D U y J [ \ Z r u l r Q A ` H K | s V l k ^ E W ] I b m n x _ w E E \ e r E ] B A t D C o r T H I G F J B N O K L M p U Q G P S R c V W V X Z ^ [ Y ^ \ ] d _ ` a c b e f g b h L v i j P k l m n o p q r s C w M t q u w v D x z y | { } ~ F H m c F | c p s t ` r e p H G t K N f ~ u W ` H @ U @ B C n J P Q D N F H R G K L O E E I F d O V T m S U W X [ Y Z M \ a ` A b h ] _ ^ P A d c e f g s i | j k l q r m \ n a o p z t w s u v x ` u a { ^ | } ~ g I w X I Z I a y O s p X q t \ U T J ] A @ C B D P E F G v H e I J K K ` L o M O N e P Q R S T U V p W X Y G Z [ \ ] v u ` _ P ^ L a b c K i d f e h i g ] f r m w l l k F l b Y j o p n _ F s a U v r w t u q N b z x k y z _ { ~ | @ } d y u w T x c ] Q J L ^ e L v n M \ f G d G o ^ q w q N z H H x H @ D A B C J E G I F L R K M N Q P O S R U T V W Y X g Z [ ] ^ _ \ ` a O R b ] c f e d y g r i h q k m j l p n P o r y S s A u t x ` w v { z y Q | } ~ D h C J _ H I v } R q t r A T i N x V ^ B k y K J I W M @ x Y S s X s A U z | V y _ X d B j t b n S z g e _ L K N s e e | K @ B A C d B ^ E D F ^ t K b G H L J I O Z M N L P V Y X L Q R U W Z T S ^ _ ` ] \ [ d b c a e f h g s i l j k m o p q t r u w v x M y z J [ { | } ~ t } { h j ~ @ w A z G @ K u B Y W G J _ d k I P r v x C f B C { a z j o p z { ^ @ B A C D E F H G I H Q J K Z O L M { a ` N O P R S U Q T V W X Y Z \ [ ^ a ] _ ` b c d e ] n f g y h w m l j k i w n o p q s r x t v R u x y z } | ~ { [ @ E T S @ D B A C L N D E I ~ F k h V L P D C E L @ A B H Q J G F K H G { L M N I O S T R Q W P U V Y X [ \ ] h Z ^ J _ ` a b c d e f g h k i [ j l m n p q o s o t u v K w x z y { | } ~ C l @ V s X ^ u } ~ I I W V i j { C | D ^ O P Q R S T U V W X F G H ` a b c d e f g h i j k l m n o p q r s t u v w x y m _ n O Q M o b p ` P U diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-windows-31j.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-windows-31j.html.headers new file mode 100644 index 00000000000..0d80d3827ee --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-windows-31j.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=windows-31j diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-x-sjis.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-x-sjis.html new file mode 100755 index 00000000000..8596b05adfa --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-x-sjis.html @@ -0,0 +1 @@ +x-sjis characters \ N } L ~ F @ A B C D E G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` p q r s t u w x y z { | } ~ v ] \ e f g h d c ~ T U V W X Y Z [ \ ] @ A B C D E F G H I | a @ A B C D E F G H I J K L M N O P Q R S @ A B V X Y Z q r s t u v w x y z k l J K T U @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ E [ R S e i ` c a k j d l f n _ m b g h ~ r s o p q u t O s ^ N u h O T v V R h T \ ] j i S l Y m w e d t W i C j k l x ` L m f A Z C n ] C g p o r q D N W a r s M C o U v q { | w u l ` t z x y U T { P b B X C @ A l D } E H F m G I | K J V M N L Q P O R S D U T W V X Y Z [ ~ [ e Z \ } ] S _ ` Z a T b c ~ f e g h ` i j k n l m y o p q ~ u s t r v w x y y z { } } ~ M o n Y h O U n c w w J N u E M k x C \ P m T K p ~ X } Q y F o f b p @ j E i h e g D @ f N i z C a B @ ] P D C i A E N F G L K N M J S O H I S B Y X O P U R [ V W T Z Q ` e a \ f P h A ^ b [ c _ i g r i d c m k p j n l k o r w u t Q q s R v } { | ~ \ X x y d X d l c } y \ n V B R ^ C _ W u | x g Y h U o m n d m p s [ O g V v t _ z D z @ D A @ D J W d B E W i F G o n K L I W H P p Q O R P N P M V W S K k U X w Y T } Z Q [ _ \ ^ ] k d a ` b c e f h g i l d j m n q o p q r E s t u y F G v w w x y z { } ~ F v G @ X q G { Q e h x Q @ J R q A K s A r W j w R Z x s R B H I b J F s z t A X y N K c H L X M { x N f p L f @ C D B _ F E A G H I L J K M N U O P M Q T U | V O o W X ^ Y J e Z g [ \ ] _ ` a b S R c ` F V j d e e f i h g a m k j l k ] p o n q r z s O t J S K E u u Y Z z w y O x v | { | v } } P ~ p b I x Y { f y S z D Q T d S c | J e ^ @ A B C Y D E F [ G H K I L J M } N Q Z O V P c } R S W T R e Z c S ] d _ f b a [ Y U X S ` q g @ h m i n A E \ k w l g j U p } J q s o { ~ x P v | { u z r t @ | | T y T [ w d f } ~ ` K g h r g E T Q P d B o h i ^ F C [ x U q ~ s U h G ~ | k l a f z V { U | { V f t c E W W N A i q g b \ A @ B C j D F G H g X I J f ] \ L K L N ] M N O { D Q p S V U R T W Z m X Y [ \ a Y t ^ n f ` f ] c b } g e d _ k i g m s u A t ^ _ M p o q n v l j r h ` h I x Z z } j i { j y | ~ K j V O ~ [ B d _ I X o A k ^ | O y T | P Y \ l W ~ M k @ h @ w K G F E B D C I E L H J M Q N O R S T U ~ W V Y \ \ [ ] V ^ ` _ a b c ~ c d e f g i h w } c j l B k m n o p q s r t i u E k v a B w x y z | { ~ } C X i ` ] r D B v @ A g D j m k ^ F h l Y _ Q \ C Z O @ A U t B i W [ D ~ C Y E a k n Q H ` F I X G N p a n M J H B Y R A Q @ N I R K H k E D M G F L C K O P U T V Y b S L W Q Z X ] [ ^ a Z G \ ` _ J M d h f N O b c g e m m j i l n P o q p r s D Q F u t R x Y { v z y _ b } G ~ | w B T S R V W U F o n M Y R z W C Z u v S q ] [ \ _ K T ] L P Q b l _ ` a X d b c ] f e g i h j i l k l m Z @ Z A B C D F G E r I H n K J L M O N Q P r [ R Y S p T c R b \ j U V [ Y X E W \ Z { L ^ l _ ] ` a o f c b E i d e h g D a ` ^ j k l n m u v p r t ] u s o q a x w y z | { s } ~ o S p I F c H s q r t M u ~ m v X ^ v r u m Z x u m C j v { y z d { V O q m A @ C B D b F E G I H | J V _ F S P O c L N j _ M K I [ Q R h \ T S T U W X H Y Z [ G \ H b ] d ` a ` ^ _ H b c B d e t g f i l j m k e m s o n n p q r n t u v w y { x z A | E q ~ M } v G [ ^ | J } y M } Z \ z U H e S l W f n I @ g C [ R B h A f a F G a I H I g D J E o M Q L U i R O P N K G W T V S p X e a [ _ Z b f j \ d Y ] ^ ] g c h j m i l k n u o v r t q w p c D k s { ~ | z ` } x @ q J D U y J [ \ Z r u l r Q A ` H K | s V l k ^ E W ] I b m n x _ w E E \ e r E ] B A t D C o r T H I G F J B N O K L M p U Q G P S R c V W V X Z ^ [ Y ^ \ ] d _ ` a c b e f g b h L v i j P k l m n o p q r s C w M t q u w v D x z y | { } ~ F H m c F | c p s t ` r e p H G t K N f ~ u W ` H @ U @ B C n J P Q D N F H R G K L O E E I F d O V T m S U W X [ Y Z M \ a ` A b h ] _ ^ P A d c e f g s i | j k l q r m \ n a o p z t w s u v x ` u a { ^ | } ~ g I w X I Z I a y O s p X q t \ U T J ] A @ C B D P E F G v H e I J K K ` L o M O N e P Q R S T U V p W X Y G Z [ \ ] v u ` _ P ^ L a b c K i d f e h i g ] f r m w l l k F l b Y j o p n _ F s a U v r w t u q N b z x k y z _ { ~ | @ } d y u w T x c ] Q J L ^ e L v n M \ f G d G o ^ q w q N z H H x H @ D A B C J E G I F L R K M N Q P O S R U T V W Y X g Z [ ] ^ _ \ ` a O R b ] c f e d y g r i h q k m j l p n P o r y S s A u t x ` w v { z y Q | } ~ D h C J _ H I v } R q t r A T i N x V ^ B k y K J I W M @ x Y S s X s A U z | V y _ X d B j t b n S z g e _ L K N s e e | K @ B A C d B ^ E D F ^ t K b G H L J I O Z M N L P V Y X L Q R U W Z T S ^ _ ` ] \ [ d b c a e f h g s i l j k m o p q t r u w v x M y z J [ { | } ~ t } { h j ~ @ w A z G @ K u B Y W G J _ d k I P r v x C f B C { a z j o p z { ^ @ B A C D E F H G I H Q J K Z O L M { a ` N O P R S U Q T V W X Y Z \ [ ^ a ] _ ` b c d e ] n f g y h w m l j k i w n o p q s r x t v R u x y z } | ~ { [ @ E T S @ D B A C L N D E I ~ F k h V L P D C E L @ A B H Q J G F K H G { L M N I O S T R Q W P U V Y X [ \ ] h Z ^ J _ ` a b c d e f g h k i [ j l m n p q o s o t u v K w x z y { | } ~ C l @ V s X ^ u } ~ I I W V i j { C | D ^ O P Q R S T U V W X F G H ` a b c d e f g h i j k l m n o p q r s t u v w x y m _ n O Q M o b p ` P U diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-x-sjis.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-x-sjis.html.headers new file mode 100644 index 00000000000..9b448cf27e5 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars-x-sjis.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=x-sjis diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars.html new file mode 100755 index 00000000000..9f77bfc8f09 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars.html @@ -0,0 +1 @@ +shift_jis characters \ N } L ~ F @ A B C D E G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` p q r s t u w x y z { | } ~ v ] \ e f g h d c ~ T U V W X Y Z [ \ ] @ A B C D E F G H I | a @ A B C D E F G H I J K L M N O P Q R S @ A B V X Y Z q r s t u v w x y z k l J K T U @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ E [ R S e i ` c a k j d l f n _ m b g h ~ r s o p q u t O s ^ N u h O T v V R h T \ ] j i S l Y m w e d t W i C j k l x ` L m f A Z C n ] C g p o r q D N W a r s M C o U v q { | w u l ` t z x y U T { P b B X C @ A l D } E H F m G I | K J V M N L Q P O R S D U T W V X Y Z [ ~ [ e Z \ } ] S _ ` Z a T b c ~ f e g h ` i j k n l m y o p q ~ u s t r v w x y y z { } } ~ M o n Y h O U n c w w J N u E M k x C \ P m T K p ~ X } Q y F o f b p @ j E i h e g D @ f N i z C a B @ ] P D C i A E N F G L K N M J S O H I S B Y X O P U R [ V W T Z Q ` e a \ f P h A ^ b [ c _ i g r i d c m k p j n l k o r w u t Q q s R v } { | ~ \ X x y d X d l c } y \ n V B R ^ C _ W u | x g Y h U o m n d m p s [ O g V v t _ z D z @ D A @ D J W d B E W i F G o n K L I W H P p Q O R P N P M V W S K k U X w Y T } Z Q [ _ \ ^ ] k d a ` b c e f h g i l d j m n q o p q r E s t u y F G v w w x y z { } ~ F v G @ X q G { Q e h x Q @ J R q A K s A r W j w R Z x s R B H I b J F s z t A X y N K c H L X M { x N f p L f @ C D B _ F E A G H I L J K M N U O P M Q T U | V O o W X ^ Y J e Z g [ \ ] _ ` a b S R c ` F V j d e e f i h g a m k j l k ] p o n q r z s O t J S K E u u Y Z z w y O x v | { | v } } P ~ p b I x Y { f y S z D Q T d S c | J e ^ @ A B C Y D E F [ G H K I L J M } N Q Z O V P c } R S W T R e Z c S ] d _ f b a [ Y U X S ` q g @ h m i n A E \ k w l g j U p } J q s o { ~ x P v | { u z r t @ | | T y T [ w d f } ~ ` K g h r g E T Q P d B o h i ^ F C [ x U q ~ s U h G ~ | k l a f z V { U | { V f t c E W W N A i q g b \ A @ B C j D F G H g X I J f ] \ L K L N ] M N O { D Q p S V U R T W Z m X Y [ \ a Y t ^ n f ` f ] c b } g e d _ k i g m s u A t ^ _ M p o q n v l j r h ` h I x Z z } j i { j y | ~ K j V O ~ [ B d _ I X o A k ^ | O y T | P Y \ l W ~ M k @ h @ w K G F E B D C I E L H J M Q N O R S T U ~ W V Y \ \ [ ] V ^ ` _ a b c ~ c d e f g i h w } c j l B k m n o p q s r t i u E k v a B w x y z | { ~ } C X i ` ] r D B v @ A g D j m k ^ F h l Y _ Q \ C Z O @ A U t B i W [ D ~ C Y E a k n Q H ` F I X G N p a n M J H B Y R A Q @ N I R K H k E D M G F L C K O P U T V Y b S L W Q Z X ] [ ^ a Z G \ ` _ J M d h f N O b c g e m m j i l n P o q p r s D Q F u t R x Y { v z y _ b } G ~ | w B T S R V W U F o n M Y R z W C Z u v S q ] [ \ _ K T ] L P Q b l _ ` a X d b c ] f e g i h j i l k l m Z @ Z A B C D F G E r I H n K J L M O N Q P r [ R Y S p T c R b \ j U V [ Y X E W \ Z { L ^ l _ ] ` a o f c b E i d e h g D a ` ^ j k l n m u v p r t ] u s o q a x w y z | { s } ~ o S p I F c H s q r t M u ~ m v X ^ v r u m Z x u m C j v { y z d { V O q m A @ C B D b F E G I H | J V _ F S P O c L N j _ M K I [ Q R h \ T S T U W X H Y Z [ G \ H b ] d ` a ` ^ _ H b c B d e t g f i l j m k e m s o n n p q r n t u v w y { x z A | E q ~ M } v G [ ^ | J } y M } Z \ z U H e S l W f n I @ g C [ R B h A f a F G a I H I g D J E o M Q L U i R O P N K G W T V S p X e a [ _ Z b f j \ d Y ] ^ ] g c h j m i l k n u o v r t q w p c D k s { ~ | z ` } x @ q J D U y J [ \ Z r u l r Q A ` H K | s V l k ^ E W ] I b m n x _ w E E \ e r E ] B A t D C o r T H I G F J B N O K L M p U Q G P S R c V W V X Z ^ [ Y ^ \ ] d _ ` a c b e f g b h L v i j P k l m n o p q r s C w M t q u w v D x z y | { } ~ F H m c F | c p s t ` r e p H G t K N f ~ u W ` H @ U @ B C n J P Q D N F H R G K L O E E I F d O V T m S U W X [ Y Z M \ a ` A b h ] _ ^ P A d c e f g s i | j k l q r m \ n a o p z t w s u v x ` u a { ^ | } ~ g I w X I Z I a y O s p X q t \ U T J ] A @ C B D P E F G v H e I J K K ` L o M O N e P Q R S T U V p W X Y G Z [ \ ] v u ` _ P ^ L a b c K i d f e h i g ] f r m w l l k F l b Y j o p n _ F s a U v r w t u q N b z x k y z _ { ~ | @ } d y u w T x c ] Q J L ^ e L v n M \ f G d G o ^ q w q N z H H x H @ D A B C J E G I F L R K M N Q P O S R U T V W Y X g Z [ ] ^ _ \ ` a O R b ] c f e d y g r i h q k m j l p n P o r y S s A u t x ` w v { z y Q | } ~ D h C J _ H I v } R q t r A T i N x V ^ B k y K J I W M @ x Y S s X s A U z | V y _ X d B j t b n S z g e _ L K N s e e | K @ B A C d B ^ E D F ^ t K b G H L J I O Z M N L P V Y X L Q R U W Z T S ^ _ ` ] \ [ d b c a e f h g s i l j k m o p q t r u w v x M y z J [ { | } ~ t } { h j ~ @ w A z G @ K u B Y W G J _ d k I P r v x C f B C { a z j o p z { ^ @ B A C D E F H G I H Q J K Z O L M { a ` N O P R S U Q T V W X Y Z \ [ ^ a ] _ ` b c d e ] n f g y h w m l j k i w n o p q s r x t v R u x y z } | ~ { [ @ E T S @ D B A C L N D E I ~ F k h V L P D C E L @ A B H Q J G F K H G { L M N I O S T R Q W P U V Y X [ \ ] h Z ^ J _ ` a b c d e f g h k i [ j l m n p q o s o t u v K w x z y { | } ~ C l @ V s X ^ u } ~ I I W V i j { C | D ^ O P Q R S T U V W X F G H ` a b c d e f g h i j k l m n o p q r s t u v w x y m _ n O Q M o b p ` P U diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars.html.headers new file mode 100644 index 00000000000..957b9153d84 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_chars.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=shift_jis diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_errors.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_errors.html new file mode 100755 index 00000000000..f918bd3bdc6 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_errors.html @@ -0,0 +1,8 @@ + + + + +Shift_JIS characters + + n + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_errors.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_errors.html.headers new file mode 100644 index 00000000000..957b9153d84 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/shift_jis/sjis_errors.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=shift_jis diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-decode-cseuckr.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-decode-cseuckr.html new file mode 100644 index 00000000000..4e1720d7a47 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-decode-cseuckr.html @@ -0,0 +1,60 @@ + + + + +cseuckr decoding + + + + + + + + + + + + + + + +
        + + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-decode-csksc56011987.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-decode-csksc56011987.html new file mode 100644 index 00000000000..bedfd7d551f --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-decode-csksc56011987.html @@ -0,0 +1,60 @@ + + + + +csksc56011987 decoding + + + + + + + + + + + + + + + +
        + + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-decode-errors.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-decode-errors.html new file mode 100644 index 00000000000..a30e15614d1 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-decode-errors.html @@ -0,0 +1,101 @@ + + + + +EUC-KR decoding errors + + + + + + + + + + + + + +
        + + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-decode-iso-ir-149.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-decode-iso-ir-149.html new file mode 100644 index 00000000000..ce71d3b3a05 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-decode-iso-ir-149.html @@ -0,0 +1,60 @@ + + + + +iso-ir-149 decoding + + + + + + + + + + + + + + + +
        + + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-decode-korean.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-decode-korean.html new file mode 100644 index 00000000000..8a6971f7517 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-decode-korean.html @@ -0,0 +1,60 @@ + + + + +korean decoding + + + + + + + + + + + + + + + +
        + + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-decode-ks_c_5601-1987.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-decode-ks_c_5601-1987.html new file mode 100644 index 00000000000..5c38428f59a --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-decode-ks_c_5601-1987.html @@ -0,0 +1,60 @@ + + + + +ks_c_5601-1987 decoding + + + + + + + + + + + + + + + +
        + + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-decode-ks_c_5601-1989.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-decode-ks_c_5601-1989.html new file mode 100644 index 00000000000..09066b52ee7 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-decode-ks_c_5601-1989.html @@ -0,0 +1,60 @@ + + + + +ks_c_5601-1989 decoding + + + + + + + + + + + + + + + +
        + + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-decode-ksc5601.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-decode-ksc5601.html new file mode 100644 index 00000000000..64e4e97bc37 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-decode-ksc5601.html @@ -0,0 +1,60 @@ + + + + +ksc5601 decoding + + + + + + + + + + + + + + + +
        + + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-decode-ksc_5601.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-decode-ksc_5601.html new file mode 100644 index 00000000000..74292461841 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-decode-ksc_5601.html @@ -0,0 +1,60 @@ + + + + +ksc_5601 decoding + + + + + + + + + + + + + + + +
        + + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-decode-windows-949.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-decode-windows-949.html new file mode 100644 index 00000000000..66e71af72fa --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-decode-windows-949.html @@ -0,0 +1,60 @@ + + + + +windows-949 decoding + + + + + + + + + + + + + + + +
        + + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-decode.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-decode.html new file mode 100644 index 00000000000..dab13027af1 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-decode.html @@ -0,0 +1,60 @@ + + + + +EUC-KR decoding + + + + + + + + + + + + + + + +
        + + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-decoder.js b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-decoder.js new file mode 100644 index 00000000000..1df1095b9ba --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-decoder.js @@ -0,0 +1,67 @@ +function dec2char(n) { + // converts a decimal number to a Unicode character + // n: the dec codepoint value to be converted + if (n <= 0xffff) { + out = String.fromCharCode(n); + } else if (n <= 0x10ffff) { + n -= 0x10000; + out = + String.fromCharCode(0xd800 | (n >> 10)) + + String.fromCharCode(0xdc00 | (n & 0x3ff)); + } else out = "dec2char error: Code point out of range: " + n; + return out; +} + +function euckrDecoder(stream) { + stream = stream.replace(/%/g, " "); + stream = stream.replace(/[\s]+/g, " ").trim(); + var bytes = stream.split(" "); + for (i = 0; i < bytes.length; i++) bytes[i] = parseInt(bytes[i], 16); + var out = ""; + var lead, byte, offset, ptr, cp; + var euckrLead = 0x00; + var endofstream = 2000000; + var finished = false; + + while (!finished) { + if (bytes.length == 0) byte = endofstream; + else byte = bytes.shift(); + + if (byte == endofstream && euckrLead != 0x00) { + euckrLead = 0x00; + out += "�"; + continue; + } + if (byte == endofstream && euckrLead == 0x00) { + finished = true; + continue; + } + + if (euckrLead != 0x00) { + lead = euckrLead; + ptr = null; + euckrLead = 0x00; + if (byte >= 0x41 || byte <= 0xfe) + ptr = (lead - 0x81) * 190 + (byte - 0x41); + if (ptr == null) cp = null; + else cp = euckr[ptr]; + if (cp == null && byte >= 0x00 && byte <= 0x7f) bytes.unshift(byte); + if (cp == null) { + out += "�"; + continue; + } + out += dec2char(cp); + continue; + } + if (byte >= 0x00 && byte <= 0x7f) { + out += dec2char(byte); + continue; + } + if (byte >= 0x81 && byte <= 0xfe) { + euckrLead = byte; + continue; + } + out += "�"; + } + return out; +} diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-cseuckr.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-cseuckr.html new file mode 100644 index 00000000000..d8cdbe20c03 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-cseuckr.html @@ -0,0 +1,148 @@ + + + + +cseuckr encoding (form) + + + + + + + + + + + +
        + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-cseuckr.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-cseuckr.html.headers new file mode 100644 index 00000000000..bb29ae1a1c9 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-cseuckr.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=cseuckr diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987.html new file mode 100644 index 00000000000..8c6b9d673a9 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987.html @@ -0,0 +1,148 @@ + + + + +csksc56011987 encoding (form) + + + + + + + + + + + +
        + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987.html.headers new file mode 100644 index 00000000000..00d925bd7d5 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=csksc56011987 diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-han.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-han.html new file mode 100644 index 00000000000..ecf31578e40 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-han.html @@ -0,0 +1,183 @@ + + + + +EUC-KR encoding errors (form, han) + + + + + + + + + + + +
        + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-han.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-han.html.headers new file mode 100644 index 00000000000..3a990e85bfb --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-han.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=euc-kr diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-hangul.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-hangul.html new file mode 100644 index 00000000000..1a79c6fc9ae --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-hangul.html @@ -0,0 +1,181 @@ + + + +EUC-KR encoding errors (form, hangul) + + + + + + + + + + + +
        + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-hangul.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-hangul.html.headers new file mode 100644 index 00000000000..3a990e85bfb --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-hangul.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=euc-kr diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-misc.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-misc.html new file mode 100644 index 00000000000..6290de6d5e2 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-misc.html @@ -0,0 +1,192 @@ + + + + +EUC-KR encoding errors (form, misc) + + + + + + + + + + + +
        + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-misc.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-misc.html.headers new file mode 100644 index 00000000000..3a990e85bfb --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-misc.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=euc-kr diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149.html new file mode 100644 index 00000000000..4ced58e7ae9 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149.html @@ -0,0 +1,148 @@ + + + + +iso-ir-149 encoding (form) + + + + + + + + + + + +
        + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149.html.headers new file mode 100644 index 00000000000..524d1bdcbee --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=iso-ir-149 diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean.html new file mode 100644 index 00000000000..d7cae24445e --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean.html @@ -0,0 +1,157 @@ + + + + +korean encoding (form) + + + + + + + + + + + +
        + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean.html.headers new file mode 100644 index 00000000000..4b82def1fb1 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=korean diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987.html new file mode 100644 index 00000000000..f1f1b3720b4 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987.html @@ -0,0 +1,148 @@ + + + + +ks_c_5601-1987 encoding (form) + + + + + + + + + + + +
        + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987.html.headers new file mode 100644 index 00000000000..3ad0c41e18d --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=ks_c_5601-1987 diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989.html new file mode 100644 index 00000000000..8a36d77acbf --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989.html @@ -0,0 +1,157 @@ + + + + +ks_c_5601-1989 encoding (form) + + + + + + + + + + + +
        + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989.html.headers new file mode 100644 index 00000000000..d9e638cdc0d --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=ks_c_5601-1989 diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc5601.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc5601.html new file mode 100644 index 00000000000..bc132bd627e --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc5601.html @@ -0,0 +1,148 @@ + + + + +ksc5601 encoding (form) + + + + + + + + + + + +
        + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc5601.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc5601.html.headers new file mode 100644 index 00000000000..e983a5502ef --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc5601.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=ksc5601 diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601.html new file mode 100644 index 00000000000..f306e5b08f2 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601.html @@ -0,0 +1,148 @@ + + + + +ksc_5601 encoding (form) + + + + + + + + + + + +
        + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601.html.headers new file mode 100644 index 00000000000..6a409228971 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=ksc_5601 diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-windows-949.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-windows-949.html new file mode 100644 index 00000000000..3d2b4d1d302 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-windows-949.html @@ -0,0 +1,148 @@ + + + + +windows-949 encoding (form) + + + + + + + + + + + +
        + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-windows-949.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-windows-949.html.headers new file mode 100644 index 00000000000..33119bcf87a --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-windows-949.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=windows-949 diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form.html new file mode 100644 index 00000000000..47e40aa68a5 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form.html @@ -0,0 +1,148 @@ + + + + +EUC-KR encoding (form) + + + + + + + + + + + +
        + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form.html.headers new file mode 100644 index 00000000000..3a990e85bfb --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-form.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=euc-kr diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-han.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-han.html new file mode 100644 index 00000000000..abfddb4db4e --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-han.html @@ -0,0 +1,100 @@ + + + + +EUC-KR encoding errors (href, han) + + + + + + + + + + + +
        + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-han.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-han.html.headers new file mode 100644 index 00000000000..3a990e85bfb --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-han.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=euc-kr diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-misc.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-misc.html new file mode 100644 index 00000000000..6c9f4af8e88 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-misc.html @@ -0,0 +1,109 @@ + + + + +EUC-KR encoding errors (href, misc) + + + + + + + + + + + +
        + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-misc.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-misc.html.headers new file mode 100644 index 00000000000..3a990e85bfb --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-misc.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=euc-kr diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-href.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-href.html new file mode 100644 index 00000000000..f03a417aeb7 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-href.html @@ -0,0 +1,62 @@ + + + + +EUC-KR encoding (href) + + + + + + + + + + + +
        + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-href.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-href.html.headers new file mode 100644 index 00000000000..3a990e85bfb --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encode-href.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=euc-kr diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encoder.js b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encoder.js new file mode 100644 index 00000000000..1c773189541 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr-encoder.js @@ -0,0 +1,105 @@ +var euckrCPs = []; // index is unicode cp, value is pointer +for (p = 0; p < euckr.length; p++) { + if (euckr[p] != null && euckrCPs[euckr[p]] == null) { + euckrCPs[euckr[p]] = p; + } +} + +function chars2cps(chars) { + // this is needed because of javascript's handling of supplementary characters + // char: a string of unicode characters + // returns an array of decimal code point values + var haut = 0; + var out = []; + for (var i = 0; i < chars.length; i++) { + var b = chars.charCodeAt(i); + if (b < 0 || b > 0xffff) { + alert("Error in chars2cps: byte out of range " + b.toString(16) + "!"); + } + if (haut != 0) { + if (0xdc00 <= b && b <= 0xdfff) { + out.push(0x10000 + ((haut - 0xd800) << 10) + (b - 0xdc00)); + haut = 0; + continue; + } else { + alert( + "Error in chars2cps: surrogate out of range " + + haut.toString(16) + + "!" + ); + haut = 0; + } + } + if (0xd800 <= b && b <= 0xdbff) { + haut = b; + } else { + out.push(b); + } + } + return out; +} + +function euckrEncoder(stream) { + cps = chars2cps(stream); + var out = ""; + var cp; + var finished = false; + var endofstream = 2000000; + + while (!finished) { + if (cps.length == 0) cp = endofstream; + else cp = cps.shift(); + + if (cp == endofstream) { + finished = true; + continue; + } + if (cp >= 0x00 && cp <= 0x7f) { + // ASCII + out += " " + cp.toString(16).toUpperCase(); + continue; + } + var ptr = euckrCPs[cp]; + if (ptr == null) { + return null; + // out += ' &#'+cp+';' + // continue + } + var lead = Math.floor(ptr / 190) + 0x81; + var trail = ptr % 190 + 0x41; + out += + " " + + lead.toString(16).toUpperCase() + + " " + + trail.toString(16).toUpperCase(); + } + return out.trim(); +} + +function convertToHex(str) { + // converts a string of ASCII characters to hex byte codes + var out = ""; + var result; + for (var c = 0; c < str.length; c++) { + result = str.charCodeAt(c).toString(16).toUpperCase() + " "; + out += result; + } + return out; +} + +function normalizeStr(str) { + var out = ""; + for (var c = 0; c < str.length; c++) { + if (str.charAt(c) == "%") { + out += String.fromCodePoint( + parseInt(str.charAt(c + 1) + str.charAt(c + 2), 16) + ); + c += 2; + } else out += str.charAt(c); + } + var result = ""; + for (var o = 0; o < out.length; o++) { + result += "%" + out.charCodeAt(o).toString(16).toUpperCase(); + } + return result.replace(/%1B%28%42$/, ""); +} diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-cseuckr.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-cseuckr.html new file mode 100755 index 00000000000..37b81454604 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-cseuckr.html @@ -0,0 +1 @@ +cseuckr characters ز ߲ ߾ ܰ ӡ Ҭ ޿ ߭ կ Ӣ ˿ ֵ ֶ ʡ ӣ ʢ ٲ ܱ ۧ ʣ ̧ ۨ ߡ ߿ ʤ к Ү ׿ ܲ ٳ ή ٢ ֩ ֪ ܬ ߢ ξ ʾ л շ ˧ м ױ ʥ ֫ ҽ ̤ ٴ в ڨ ˡ ϡ س ܦ ʿ հ Ϣ ͯ ϣ Ͱ У ʦ ٣ ͱ Ͳ ګ ʧ ٤ Ϥ ʨ Ӻ Ӥ ʩ ϥ ޭ ҥ ַ ͳ ӥ Ф г ۩ ӻ Ϧ ϧ ̱ ˨ Ӧ פ ү Х ҳ ҿ ۪ ٵ ʹ ˩ Ҧ ش ץ ڬ ʪ ޮ ݡ ͵ ݢ ί ʫ Ϩ ݣ Ҽ ج һ ΰ ۫ Ͷ ڭ ܳ צ ߣ ˪ ˢ ھ ֹ ˫ ڮ չ ϩ ֺ ص ٶ ۬ ح Ҵ ܴ ݤ ͷ ˬ ֯ Ϫ Ω ܧ ˭ ˮ گ ض ӧ ޯ ۭ ڰ ҷ ֻ ̥ ο Ҹ ڿ ٷ ط α ˯ ޻ ̨ Ӽ ϫ н ۮ ݦ ̼ ҹ Ϭ ͸ ظ Һ Ц ̩ ߺ ؤ ٸ ٹ ߮ ҵ ӵ ̪ ӽ պ ջ ͹ ۯ ͺ ϭ ߤ ͻ ݧ ְ ް ݨ Ө ۰ ۱ ײ ө ۲ ٥ ܵ ܶ ع ʬ ٦ ͼ ٺ Ӿ غ ѡ Ѣ ڱ ߴ ѣ ۳ ͽ ʭ ʮ Ϯ ܷ ٻ ϯ ʯ Ұ ׳ ̫ ڲ ѥ ܸ Ѥ о ͡ ߵ ԡ β ٧ ڳ п ۴ ״ ; ϰ Ϊ Ч ק ټ й Ѧ Ӫ ̬ ޱ Ԣ ձ ղ ռ ѧ γ ʰ ϱ ֱ ޲ ӫ ߯ ϲ ٽ Ը پ ϳ Ѩ ޼ ϴ ߥ ˰ ڡ ̽ ѩ Ѫ ک Ϳ ֬ զ ׵ ޳ ݩ ѫ ԣ ר ӿ ߶ Ԥ ڴ ڵ Ӭ ׶ ϵ ٨ ݪ ͢ ۵ ԥ ػ ש خ ؼ ̾ ߻ Ӷ ̭ ֲ Ԧ ս ޴ Թ ׷ ޵ ճ δ ؽ ϶ ܹ ֭ է ֡ ߰ ԧ մ ݫ Ժ ޶ ٿ ڪ ̲ Ի ̳ Ϸ Լ ִ ӷ ϸ Ѭ ޷ ּ ʱ ߦ ը Ш Ϲ ׸ ѭ Ѯ ε ׹ إ ѯ ֢ Ѱ ζ ܺ ̴ ߧ ˣ д ͣ ׺ ѱ ˱ Ѳ ˲ ߨ Ӹ ʲ ܻ ئ ׻ ת ͤ ۡ ٩ Ԩ ڶ Խ ԩ ٪ ؾ ܭ ̡ Ϻ ϻ ӭ Щ ׼ ѳ ܡ ا ۶ ͥ ب Ѵ ѵ Ѷ ѷ Ѹ Ԫ Ծ ܼ Ҷ Ρ ԫ ʳ ͦ ϼ Ъ Ы ء ܽ Ӯ آ ݬ ֽ е ѹ ߩ η Կ ӯ ֳ ݭ վ ڷ أ ˳ ͧ Ь Ѻ ڢ ڣ ҡ ۷ ׫ ̿ թ ˴ ̵ Ͻ ˵ ѻ Ӱ ֣ ׬ ͨ ̶ ͩ տ ݮ θ Ѽ ˶ ڸ ־ ֿ ѽ Ͼ ұ Ѿ ޽ ڤ ֤ ѿ ̷ ۸ ˤ ޡ ݯ ݰ ˷ ۹ ̮ ݱ د ޢ Ͽ ˸ ۺ ݲ ݳ ߷ ۻ ʴ ʵ ٫ ݴ ذ ι ж ΢ ޣ Ԭ ؿ ժ Э ߪ ۼ ٬ ֥ ١ ߸ ׭ ڹ ˹ ߱ Ϋ ܢ յ ա ڥ ۽ ӱ ޤ ٭ բ ʶ ߹ Ҥ ٱ ʷ Ӳ ֮ ޥ գ ׮ ˺ ̸ Ю ̯ ԭ κ ݵ ͪ ۾ ʸ Σ ͫ Τ ަ ں ۿ ˻ ׽ ާ ̹ ܨ ͬ ݶ ޸ λ ި ʹ ޹ ݷ Ԯ ݸ Я ݹ ݺ ۢ ʺ Υ ԯ ԰ ʻ ֦ ܾ ո ܩ ܪ ʼ ̦ ڻ Ա Բ ֧ а Φ Գ ӹ ̺ ס ر ܫ դ ݻ ά Դ ީ ӳ ٮ լ ߫ ۣ ݼ ̢ ߼ з ˥ ۤ ٯ ˼ ֨ Χ Ե Ӵ ׯ ڦ ˦ б μ ܣ ݽ ݾ װ ˽ Զ ͭ ̰ ڧ ߬ ܤ ު ڼ Է ޺ Ψ ׾ ߽ ޫ ܿ ν ة ʽ ݿ խ ޾ ۥ ע С ۦ ت ˾ ܮ ٰ ̻ ͮ ն ث ̣ ڽ ܯ ެ ף A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z ¡ ¢ £ ¤ ¥ ¦ A B § C ¨ D © E F ª G H I J « ¬ K ­ ® ¯ L M N O P Q ° ± R S ² T U V ³ W X Y Z a b c ´ µ d · ¸ e f g h i j ¹ k l m º n o p q r s t u v w x y z » A B C D E ¼ ½ F G ¾ H I J ¿ K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N á â ã O P Q R S ä å T U æ V W X ç Y Z a b c d e è é f ê ë ì g h i j k l í m n o î p ï q ð r s t u v w x ñ y z ò A B C D ó ô E F õ G H I ö J K L M N O P ÷ ø Q ù ú û R S T U V W ü ý X Y þ Z a b ÿ c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n ġ Ģ o p ģ q r Ĥ ĥ Ħ s t u v w x ħ Ĩ y ĩ z Ī ī Ĭ ĭ Į į İ ı IJ ij Ĵ ĵ Ķ A B C D E F ķ ĸ G Ĺ ĺ Ļ H I J K L M ļ Ľ N O P Q R S T U V W X Y Z a b c d e f ľ g h i j k l m n o p q r s t u v w x y z Ŀ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R š Ţ S ţ T Ť U V W X Y Z ť a b c Ŧ d e f ŧ g h i j k l m Ũ n o p q r s t u v w x ũ Ū y z ū Ŭ ŭ Ů ů A B C D E F G H I J K L M N O Ű ű P Q Ų R S T ų U V W X Y Z a Ŵ ŵ b Ŷ c ŷ d e f g h i Ÿ Ź j k ź l m n Ż ż o p q r s t Ž ž u ſ v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v ơ w x y z Ƣ ƣ Ƥ ƥ A B C Ʀ Ƨ D E F ƨ G H I J K L Ʃ M N O ƪ P Q R ƫ S T U V W X Y Ƭ Z a b c ƭ d e f g h i Ʈ Ư j k ư l m Ʊ Ʋ n Ƴ o p q r s ƴ Ƶ t ƶ u v w x y z Ʒ Ƹ ƹ ƺ ƻ Ƽ ƽ ƾ ƿ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l ǡ m n o p q r s t u v w x y z Ǣ A B C D E F G H ǣ I J K Ǥ L M N O P Q R S T U V W X Y Z a b c d e f g h ǥ i j k Ǧ l m n ǧ o p q r s t u v Ǩ w ǩ x y z Ǫ ǫ Ǭ ǭ Ǯ ǯ ǰ DZ Dz dz Ǵ A B C D E F G H I J K ǵ L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s Ƕ t u v Ƿ w x y Ǹ z ǹ Ǻ ǻ Ǽ ǽ Ǿ ǿ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z  ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ ȡ  Ž   ‘ ’ “ ” Ȣ • – — ˜ ™ š › œ  ž ȣ Ȥ Ÿ   ȥ A B C Ȧ D E F G ȧ H I Ȩ ȩ J Ȫ K ȫ L M N Ȭ O P ȭ Ȯ Q R ȯ S T U Ȱ V W X Y Z a b c d e ȱ f Ȳ g h i j k l ȳ ȴ m n ȵ o p q r s t u v w x y z Á  ȶ à ȷ Ä Å Æ Ç È É ȸ ȹ Ê Ë Ⱥ Ì Í Î Ȼ Ï Ð Ñ Ò Ó Ô Õ Ö ȼ × Ƚ Ø Ⱦ Ù Ú Û Ü Ý Þ ȿ ß à A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z ā Ă ă Ą ą Ć ć Ĉ ĉ Ċ ċ Č č Ď ď Đ đ Ē ē Ĕ ĕ Ė ė Ę ę Ě ě Ĝ ĝ Ğ ğ Ġ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z Ł ł Ń ń Ņ ņ Ň ň ʼn Ŋ ŋ Ō ō Ŏ ŏ Ő ő Œ œ Ŕ ŕ Ŗ ŗ Ř ř Ś ś Ŝ ŝ Ş ş Š A B C D E F G H I J K L M N O P Q R έ Т и Ң ң ҧ Ҩ ҩ Ҫ ҫ ҭ Ҳ Ҿ ե ի ծ ָ ܥ ݥ ߳ diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-cseuckr.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-cseuckr.html.headers new file mode 100644 index 00000000000..bb29ae1a1c9 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-cseuckr.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=cseuckr diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-csksc56011987.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-csksc56011987.html new file mode 100755 index 00000000000..96ab239bcdf --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-csksc56011987.html @@ -0,0 +1 @@ +csksc56011987 characters ز ߲ ߾ ܰ ӡ Ҭ ޿ ߭ կ Ӣ ˿ ֵ ֶ ʡ ӣ ʢ ٲ ܱ ۧ ʣ ̧ ۨ ߡ ߿ ʤ к Ү ׿ ܲ ٳ ή ٢ ֩ ֪ ܬ ߢ ξ ʾ л շ ˧ м ױ ʥ ֫ ҽ ̤ ٴ в ڨ ˡ ϡ س ܦ ʿ հ Ϣ ͯ ϣ Ͱ У ʦ ٣ ͱ Ͳ ګ ʧ ٤ Ϥ ʨ Ӻ Ӥ ʩ ϥ ޭ ҥ ַ ͳ ӥ Ф г ۩ ӻ Ϧ ϧ ̱ ˨ Ӧ פ ү Х ҳ ҿ ۪ ٵ ʹ ˩ Ҧ ش ץ ڬ ʪ ޮ ݡ ͵ ݢ ί ʫ Ϩ ݣ Ҽ ج һ ΰ ۫ Ͷ ڭ ܳ צ ߣ ˪ ˢ ھ ֹ ˫ ڮ չ ϩ ֺ ص ٶ ۬ ح Ҵ ܴ ݤ ͷ ˬ ֯ Ϫ Ω ܧ ˭ ˮ گ ض ӧ ޯ ۭ ڰ ҷ ֻ ̥ ο Ҹ ڿ ٷ ط α ˯ ޻ ̨ Ӽ ϫ н ۮ ݦ ̼ ҹ Ϭ ͸ ظ Һ Ц ̩ ߺ ؤ ٸ ٹ ߮ ҵ ӵ ̪ ӽ պ ջ ͹ ۯ ͺ ϭ ߤ ͻ ݧ ְ ް ݨ Ө ۰ ۱ ײ ө ۲ ٥ ܵ ܶ ع ʬ ٦ ͼ ٺ Ӿ غ ѡ Ѣ ڱ ߴ ѣ ۳ ͽ ʭ ʮ Ϯ ܷ ٻ ϯ ʯ Ұ ׳ ̫ ڲ ѥ ܸ Ѥ о ͡ ߵ ԡ β ٧ ڳ п ۴ ״ ; ϰ Ϊ Ч ק ټ й Ѧ Ӫ ̬ ޱ Ԣ ձ ղ ռ ѧ γ ʰ ϱ ֱ ޲ ӫ ߯ ϲ ٽ Ը پ ϳ Ѩ ޼ ϴ ߥ ˰ ڡ ̽ ѩ Ѫ ک Ϳ ֬ զ ׵ ޳ ݩ ѫ ԣ ר ӿ ߶ Ԥ ڴ ڵ Ӭ ׶ ϵ ٨ ݪ ͢ ۵ ԥ ػ ש خ ؼ ̾ ߻ Ӷ ̭ ֲ Ԧ ս ޴ Թ ׷ ޵ ճ δ ؽ ϶ ܹ ֭ է ֡ ߰ ԧ մ ݫ Ժ ޶ ٿ ڪ ̲ Ի ̳ Ϸ Լ ִ ӷ ϸ Ѭ ޷ ּ ʱ ߦ ը Ш Ϲ ׸ ѭ Ѯ ε ׹ إ ѯ ֢ Ѱ ζ ܺ ̴ ߧ ˣ д ͣ ׺ ѱ ˱ Ѳ ˲ ߨ Ӹ ʲ ܻ ئ ׻ ת ͤ ۡ ٩ Ԩ ڶ Խ ԩ ٪ ؾ ܭ ̡ Ϻ ϻ ӭ Щ ׼ ѳ ܡ ا ۶ ͥ ب Ѵ ѵ Ѷ ѷ Ѹ Ԫ Ծ ܼ Ҷ Ρ ԫ ʳ ͦ ϼ Ъ Ы ء ܽ Ӯ آ ݬ ֽ е ѹ ߩ η Կ ӯ ֳ ݭ վ ڷ أ ˳ ͧ Ь Ѻ ڢ ڣ ҡ ۷ ׫ ̿ թ ˴ ̵ Ͻ ˵ ѻ Ӱ ֣ ׬ ͨ ̶ ͩ տ ݮ θ Ѽ ˶ ڸ ־ ֿ ѽ Ͼ ұ Ѿ ޽ ڤ ֤ ѿ ̷ ۸ ˤ ޡ ݯ ݰ ˷ ۹ ̮ ݱ د ޢ Ͽ ˸ ۺ ݲ ݳ ߷ ۻ ʴ ʵ ٫ ݴ ذ ι ж ΢ ޣ Ԭ ؿ ժ Э ߪ ۼ ٬ ֥ ١ ߸ ׭ ڹ ˹ ߱ Ϋ ܢ յ ա ڥ ۽ ӱ ޤ ٭ բ ʶ ߹ Ҥ ٱ ʷ Ӳ ֮ ޥ գ ׮ ˺ ̸ Ю ̯ ԭ κ ݵ ͪ ۾ ʸ Σ ͫ Τ ަ ں ۿ ˻ ׽ ާ ̹ ܨ ͬ ݶ ޸ λ ި ʹ ޹ ݷ Ԯ ݸ Я ݹ ݺ ۢ ʺ Υ ԯ ԰ ʻ ֦ ܾ ո ܩ ܪ ʼ ̦ ڻ Ա Բ ֧ а Φ Գ ӹ ̺ ס ر ܫ դ ݻ ά Դ ީ ӳ ٮ լ ߫ ۣ ݼ ̢ ߼ з ˥ ۤ ٯ ˼ ֨ Χ Ե Ӵ ׯ ڦ ˦ б μ ܣ ݽ ݾ װ ˽ Զ ͭ ̰ ڧ ߬ ܤ ު ڼ Է ޺ Ψ ׾ ߽ ޫ ܿ ν ة ʽ ݿ խ ޾ ۥ ע С ۦ ت ˾ ܮ ٰ ̻ ͮ ն ث ̣ ڽ ܯ ެ ף A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z ¡ ¢ £ ¤ ¥ ¦ A B § C ¨ D © E F ª G H I J « ¬ K ­ ® ¯ L M N O P Q ° ± R S ² T U V ³ W X Y Z a b c ´ µ d · ¸ e f g h i j ¹ k l m º n o p q r s t u v w x y z » A B C D E ¼ ½ F G ¾ H I J ¿ K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N á â ã O P Q R S ä å T U æ V W X ç Y Z a b c d e è é f ê ë ì g h i j k l í m n o î p ï q ð r s t u v w x ñ y z ò A B C D ó ô E F õ G H I ö J K L M N O P ÷ ø Q ù ú û R S T U V W ü ý X Y þ Z a b ÿ c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n ġ Ģ o p ģ q r Ĥ ĥ Ħ s t u v w x ħ Ĩ y ĩ z Ī ī Ĭ ĭ Į į İ ı IJ ij Ĵ ĵ Ķ A B C D E F ķ ĸ G Ĺ ĺ Ļ H I J K L M ļ Ľ N O P Q R S T U V W X Y Z a b c d e f ľ g h i j k l m n o p q r s t u v w x y z Ŀ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R š Ţ S ţ T Ť U V W X Y Z ť a b c Ŧ d e f ŧ g h i j k l m Ũ n o p q r s t u v w x ũ Ū y z ū Ŭ ŭ Ů ů A B C D E F G H I J K L M N O Ű ű P Q Ų R S T ų U V W X Y Z a Ŵ ŵ b Ŷ c ŷ d e f g h i Ÿ Ź j k ź l m n Ż ż o p q r s t Ž ž u ſ v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v ơ w x y z Ƣ ƣ Ƥ ƥ A B C Ʀ Ƨ D E F ƨ G H I J K L Ʃ M N O ƪ P Q R ƫ S T U V W X Y Ƭ Z a b c ƭ d e f g h i Ʈ Ư j k ư l m Ʊ Ʋ n Ƴ o p q r s ƴ Ƶ t ƶ u v w x y z Ʒ Ƹ ƹ ƺ ƻ Ƽ ƽ ƾ ƿ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l ǡ m n o p q r s t u v w x y z Ǣ A B C D E F G H ǣ I J K Ǥ L M N O P Q R S T U V W X Y Z a b c d e f g h ǥ i j k Ǧ l m n ǧ o p q r s t u v Ǩ w ǩ x y z Ǫ ǫ Ǭ ǭ Ǯ ǯ ǰ DZ Dz dz Ǵ A B C D E F G H I J K ǵ L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s Ƕ t u v Ƿ w x y Ǹ z ǹ Ǻ ǻ Ǽ ǽ Ǿ ǿ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z  ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ ȡ  Ž   ‘ ’ “ ” Ȣ • – — ˜ ™ š › œ  ž ȣ Ȥ Ÿ   ȥ A B C Ȧ D E F G ȧ H I Ȩ ȩ J Ȫ K ȫ L M N Ȭ O P ȭ Ȯ Q R ȯ S T U Ȱ V W X Y Z a b c d e ȱ f Ȳ g h i j k l ȳ ȴ m n ȵ o p q r s t u v w x y z Á  ȶ à ȷ Ä Å Æ Ç È É ȸ ȹ Ê Ë Ⱥ Ì Í Î Ȼ Ï Ð Ñ Ò Ó Ô Õ Ö ȼ × Ƚ Ø Ⱦ Ù Ú Û Ü Ý Þ ȿ ß à A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z ā Ă ă Ą ą Ć ć Ĉ ĉ Ċ ċ Č č Ď ď Đ đ Ē ē Ĕ ĕ Ė ė Ę ę Ě ě Ĝ ĝ Ğ ğ Ġ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z Ł ł Ń ń Ņ ņ Ň ň ʼn Ŋ ŋ Ō ō Ŏ ŏ Ő ő Œ œ Ŕ ŕ Ŗ ŗ Ř ř Ś ś Ŝ ŝ Ş ş Š A B C D E F G H I J K L M N O P Q R έ Т и Ң ң ҧ Ҩ ҩ Ҫ ҫ ҭ Ҳ Ҿ ե ի ծ ָ ܥ ݥ ߳ \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-csksc56011987.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-csksc56011987.html.headers new file mode 100644 index 00000000000..00d925bd7d5 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-csksc56011987.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=csksc56011987 diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-iso-ir-149.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-iso-ir-149.html new file mode 100755 index 00000000000..6c4b5a0e4cc --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-iso-ir-149.html @@ -0,0 +1 @@ +iso-ir-149 characters ز ߲ ߾ ܰ ӡ Ҭ ޿ ߭ կ Ӣ ˿ ֵ ֶ ʡ ӣ ʢ ٲ ܱ ۧ ʣ ̧ ۨ ߡ ߿ ʤ к Ү ׿ ܲ ٳ ή ٢ ֩ ֪ ܬ ߢ ξ ʾ л շ ˧ м ױ ʥ ֫ ҽ ̤ ٴ в ڨ ˡ ϡ س ܦ ʿ հ Ϣ ͯ ϣ Ͱ У ʦ ٣ ͱ Ͳ ګ ʧ ٤ Ϥ ʨ Ӻ Ӥ ʩ ϥ ޭ ҥ ַ ͳ ӥ Ф г ۩ ӻ Ϧ ϧ ̱ ˨ Ӧ פ ү Х ҳ ҿ ۪ ٵ ʹ ˩ Ҧ ش ץ ڬ ʪ ޮ ݡ ͵ ݢ ί ʫ Ϩ ݣ Ҽ ج һ ΰ ۫ Ͷ ڭ ܳ צ ߣ ˪ ˢ ھ ֹ ˫ ڮ չ ϩ ֺ ص ٶ ۬ ح Ҵ ܴ ݤ ͷ ˬ ֯ Ϫ Ω ܧ ˭ ˮ گ ض ӧ ޯ ۭ ڰ ҷ ֻ ̥ ο Ҹ ڿ ٷ ط α ˯ ޻ ̨ Ӽ ϫ н ۮ ݦ ̼ ҹ Ϭ ͸ ظ Һ Ц ̩ ߺ ؤ ٸ ٹ ߮ ҵ ӵ ̪ ӽ պ ջ ͹ ۯ ͺ ϭ ߤ ͻ ݧ ְ ް ݨ Ө ۰ ۱ ײ ө ۲ ٥ ܵ ܶ ع ʬ ٦ ͼ ٺ Ӿ غ ѡ Ѣ ڱ ߴ ѣ ۳ ͽ ʭ ʮ Ϯ ܷ ٻ ϯ ʯ Ұ ׳ ̫ ڲ ѥ ܸ Ѥ о ͡ ߵ ԡ β ٧ ڳ п ۴ ״ ; ϰ Ϊ Ч ק ټ й Ѧ Ӫ ̬ ޱ Ԣ ձ ղ ռ ѧ γ ʰ ϱ ֱ ޲ ӫ ߯ ϲ ٽ Ը پ ϳ Ѩ ޼ ϴ ߥ ˰ ڡ ̽ ѩ Ѫ ک Ϳ ֬ զ ׵ ޳ ݩ ѫ ԣ ר ӿ ߶ Ԥ ڴ ڵ Ӭ ׶ ϵ ٨ ݪ ͢ ۵ ԥ ػ ש خ ؼ ̾ ߻ Ӷ ̭ ֲ Ԧ ս ޴ Թ ׷ ޵ ճ δ ؽ ϶ ܹ ֭ է ֡ ߰ ԧ մ ݫ Ժ ޶ ٿ ڪ ̲ Ի ̳ Ϸ Լ ִ ӷ ϸ Ѭ ޷ ּ ʱ ߦ ը Ш Ϲ ׸ ѭ Ѯ ε ׹ إ ѯ ֢ Ѱ ζ ܺ ̴ ߧ ˣ д ͣ ׺ ѱ ˱ Ѳ ˲ ߨ Ӹ ʲ ܻ ئ ׻ ת ͤ ۡ ٩ Ԩ ڶ Խ ԩ ٪ ؾ ܭ ̡ Ϻ ϻ ӭ Щ ׼ ѳ ܡ ا ۶ ͥ ب Ѵ ѵ Ѷ ѷ Ѹ Ԫ Ծ ܼ Ҷ Ρ ԫ ʳ ͦ ϼ Ъ Ы ء ܽ Ӯ آ ݬ ֽ е ѹ ߩ η Կ ӯ ֳ ݭ վ ڷ أ ˳ ͧ Ь Ѻ ڢ ڣ ҡ ۷ ׫ ̿ թ ˴ ̵ Ͻ ˵ ѻ Ӱ ֣ ׬ ͨ ̶ ͩ տ ݮ θ Ѽ ˶ ڸ ־ ֿ ѽ Ͼ ұ Ѿ ޽ ڤ ֤ ѿ ̷ ۸ ˤ ޡ ݯ ݰ ˷ ۹ ̮ ݱ د ޢ Ͽ ˸ ۺ ݲ ݳ ߷ ۻ ʴ ʵ ٫ ݴ ذ ι ж ΢ ޣ Ԭ ؿ ժ Э ߪ ۼ ٬ ֥ ١ ߸ ׭ ڹ ˹ ߱ Ϋ ܢ յ ա ڥ ۽ ӱ ޤ ٭ բ ʶ ߹ Ҥ ٱ ʷ Ӳ ֮ ޥ գ ׮ ˺ ̸ Ю ̯ ԭ κ ݵ ͪ ۾ ʸ Σ ͫ Τ ަ ں ۿ ˻ ׽ ާ ̹ ܨ ͬ ݶ ޸ λ ި ʹ ޹ ݷ Ԯ ݸ Я ݹ ݺ ۢ ʺ Υ ԯ ԰ ʻ ֦ ܾ ո ܩ ܪ ʼ ̦ ڻ Ա Բ ֧ а Φ Գ ӹ ̺ ס ر ܫ դ ݻ ά Դ ީ ӳ ٮ լ ߫ ۣ ݼ ̢ ߼ з ˥ ۤ ٯ ˼ ֨ Χ Ե Ӵ ׯ ڦ ˦ б μ ܣ ݽ ݾ װ ˽ Զ ͭ ̰ ڧ ߬ ܤ ު ڼ Է ޺ Ψ ׾ ߽ ޫ ܿ ν ة ʽ ݿ խ ޾ ۥ ע С ۦ ت ˾ ܮ ٰ ̻ ͮ ն ث ̣ ڽ ܯ ެ ף A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z ¡ ¢ £ ¤ ¥ ¦ A B § C ¨ D © E F ª G H I J « ¬ K ­ ® ¯ L M N O P Q ° ± R S ² T U V ³ W X Y Z a b c ´ µ d · ¸ e f g h i j ¹ k l m º n o p q r s t u v w x y z » A B C D E ¼ ½ F G ¾ H I J ¿ K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N á â ã O P Q R S ä å T U æ V W X ç Y Z a b c d e è é f ê ë ì g h i j k l í m n o î p ï q ð r s t u v w x ñ y z ò A B C D ó ô E F õ G H I ö J K L M N O P ÷ ø Q ù ú û R S T U V W ü ý X Y þ Z a b ÿ c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n ġ Ģ o p ģ q r Ĥ ĥ Ħ s t u v w x ħ Ĩ y ĩ z Ī ī Ĭ ĭ Į į İ ı IJ ij Ĵ ĵ Ķ A B C D E F ķ ĸ G Ĺ ĺ Ļ H I J K L M ļ Ľ N O P Q R S T U V W X Y Z a b c d e f ľ g h i j k l m n o p q r s t u v w x y z Ŀ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R š Ţ S ţ T Ť U V W X Y Z ť a b c Ŧ d e f ŧ g h i j k l m Ũ n o p q r s t u v w x ũ Ū y z ū Ŭ ŭ Ů ů A B C D E F G H I J K L M N O Ű ű P Q Ų R S T ų U V W X Y Z a Ŵ ŵ b Ŷ c ŷ d e f g h i Ÿ Ź j k ź l m n Ż ż o p q r s t Ž ž u ſ v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v ơ w x y z Ƣ ƣ Ƥ ƥ A B C Ʀ Ƨ D E F ƨ G H I J K L Ʃ M N O ƪ P Q R ƫ S T U V W X Y Ƭ Z a b c ƭ d e f g h i Ʈ Ư j k ư l m Ʊ Ʋ n Ƴ o p q r s ƴ Ƶ t ƶ u v w x y z Ʒ Ƹ ƹ ƺ ƻ Ƽ ƽ ƾ ƿ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l ǡ m n o p q r s t u v w x y z Ǣ A B C D E F G H ǣ I J K Ǥ L M N O P Q R S T U V W X Y Z a b c d e f g h ǥ i j k Ǧ l m n ǧ o p q r s t u v Ǩ w ǩ x y z Ǫ ǫ Ǭ ǭ Ǯ ǯ ǰ DZ Dz dz Ǵ A B C D E F G H I J K ǵ L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s Ƕ t u v Ƿ w x y Ǹ z ǹ Ǻ ǻ Ǽ ǽ Ǿ ǿ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z  ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ ȡ  Ž   ‘ ’ “ ” Ȣ • – — ˜ ™ š › œ  ž ȣ Ȥ Ÿ   ȥ A B C Ȧ D E F G ȧ H I Ȩ ȩ J Ȫ K ȫ L M N Ȭ O P ȭ Ȯ Q R ȯ S T U Ȱ V W X Y Z a b c d e ȱ f Ȳ g h i j k l ȳ ȴ m n ȵ o p q r s t u v w x y z Á  ȶ à ȷ Ä Å Æ Ç È É ȸ ȹ Ê Ë Ⱥ Ì Í Î Ȼ Ï Ð Ñ Ò Ó Ô Õ Ö ȼ × Ƚ Ø Ⱦ Ù Ú Û Ü Ý Þ ȿ ß à A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z ā Ă ă Ą ą Ć ć Ĉ ĉ Ċ ċ Č č Ď ď Đ đ Ē ē Ĕ ĕ Ė ė Ę ę Ě ě Ĝ ĝ Ğ ğ Ġ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z Ł ł Ń ń Ņ ņ Ň ň ʼn Ŋ ŋ Ō ō Ŏ ŏ Ő ő Œ œ Ŕ ŕ Ŗ ŗ Ř ř Ś ś Ŝ ŝ Ş ş Š A B C D E F G H I J K L M N O P Q R έ Т и Ң ң ҧ Ҩ ҩ Ҫ ҫ ҭ Ҳ Ҿ ե ի ծ ָ ܥ ݥ ߳ \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-iso-ir-149.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-iso-ir-149.html.headers new file mode 100644 index 00000000000..524d1bdcbee --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-iso-ir-149.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=iso-ir-149 diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-korean.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-korean.html new file mode 100755 index 00000000000..c41cce9c1e7 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-korean.html @@ -0,0 +1 @@ +korean characters ز ߲ ߾ ܰ ӡ Ҭ ޿ ߭ կ Ӣ ˿ ֵ ֶ ʡ ӣ ʢ ٲ ܱ ۧ ʣ ̧ ۨ ߡ ߿ ʤ к Ү ׿ ܲ ٳ ή ٢ ֩ ֪ ܬ ߢ ξ ʾ л շ ˧ м ױ ʥ ֫ ҽ ̤ ٴ в ڨ ˡ ϡ س ܦ ʿ հ Ϣ ͯ ϣ Ͱ У ʦ ٣ ͱ Ͳ ګ ʧ ٤ Ϥ ʨ Ӻ Ӥ ʩ ϥ ޭ ҥ ַ ͳ ӥ Ф г ۩ ӻ Ϧ ϧ ̱ ˨ Ӧ פ ү Х ҳ ҿ ۪ ٵ ʹ ˩ Ҧ ش ץ ڬ ʪ ޮ ݡ ͵ ݢ ί ʫ Ϩ ݣ Ҽ ج һ ΰ ۫ Ͷ ڭ ܳ צ ߣ ˪ ˢ ھ ֹ ˫ ڮ չ ϩ ֺ ص ٶ ۬ ح Ҵ ܴ ݤ ͷ ˬ ֯ Ϫ Ω ܧ ˭ ˮ گ ض ӧ ޯ ۭ ڰ ҷ ֻ ̥ ο Ҹ ڿ ٷ ط α ˯ ޻ ̨ Ӽ ϫ н ۮ ݦ ̼ ҹ Ϭ ͸ ظ Һ Ц ̩ ߺ ؤ ٸ ٹ ߮ ҵ ӵ ̪ ӽ պ ջ ͹ ۯ ͺ ϭ ߤ ͻ ݧ ְ ް ݨ Ө ۰ ۱ ײ ө ۲ ٥ ܵ ܶ ع ʬ ٦ ͼ ٺ Ӿ غ ѡ Ѣ ڱ ߴ ѣ ۳ ͽ ʭ ʮ Ϯ ܷ ٻ ϯ ʯ Ұ ׳ ̫ ڲ ѥ ܸ Ѥ о ͡ ߵ ԡ β ٧ ڳ п ۴ ״ ; ϰ Ϊ Ч ק ټ й Ѧ Ӫ ̬ ޱ Ԣ ձ ղ ռ ѧ γ ʰ ϱ ֱ ޲ ӫ ߯ ϲ ٽ Ը پ ϳ Ѩ ޼ ϴ ߥ ˰ ڡ ̽ ѩ Ѫ ک Ϳ ֬ զ ׵ ޳ ݩ ѫ ԣ ר ӿ ߶ Ԥ ڴ ڵ Ӭ ׶ ϵ ٨ ݪ ͢ ۵ ԥ ػ ש خ ؼ ̾ ߻ Ӷ ̭ ֲ Ԧ ս ޴ Թ ׷ ޵ ճ δ ؽ ϶ ܹ ֭ է ֡ ߰ ԧ մ ݫ Ժ ޶ ٿ ڪ ̲ Ի ̳ Ϸ Լ ִ ӷ ϸ Ѭ ޷ ּ ʱ ߦ ը Ш Ϲ ׸ ѭ Ѯ ε ׹ إ ѯ ֢ Ѱ ζ ܺ ̴ ߧ ˣ д ͣ ׺ ѱ ˱ Ѳ ˲ ߨ Ӹ ʲ ܻ ئ ׻ ת ͤ ۡ ٩ Ԩ ڶ Խ ԩ ٪ ؾ ܭ ̡ Ϻ ϻ ӭ Щ ׼ ѳ ܡ ا ۶ ͥ ب Ѵ ѵ Ѷ ѷ Ѹ Ԫ Ծ ܼ Ҷ Ρ ԫ ʳ ͦ ϼ Ъ Ы ء ܽ Ӯ آ ݬ ֽ е ѹ ߩ η Կ ӯ ֳ ݭ վ ڷ أ ˳ ͧ Ь Ѻ ڢ ڣ ҡ ۷ ׫ ̿ թ ˴ ̵ Ͻ ˵ ѻ Ӱ ֣ ׬ ͨ ̶ ͩ տ ݮ θ Ѽ ˶ ڸ ־ ֿ ѽ Ͼ ұ Ѿ ޽ ڤ ֤ ѿ ̷ ۸ ˤ ޡ ݯ ݰ ˷ ۹ ̮ ݱ د ޢ Ͽ ˸ ۺ ݲ ݳ ߷ ۻ ʴ ʵ ٫ ݴ ذ ι ж ΢ ޣ Ԭ ؿ ժ Э ߪ ۼ ٬ ֥ ١ ߸ ׭ ڹ ˹ ߱ Ϋ ܢ յ ա ڥ ۽ ӱ ޤ ٭ բ ʶ ߹ Ҥ ٱ ʷ Ӳ ֮ ޥ գ ׮ ˺ ̸ Ю ̯ ԭ κ ݵ ͪ ۾ ʸ Σ ͫ Τ ަ ں ۿ ˻ ׽ ާ ̹ ܨ ͬ ݶ ޸ λ ި ʹ ޹ ݷ Ԯ ݸ Я ݹ ݺ ۢ ʺ Υ ԯ ԰ ʻ ֦ ܾ ո ܩ ܪ ʼ ̦ ڻ Ա Բ ֧ а Φ Գ ӹ ̺ ס ر ܫ դ ݻ ά Դ ީ ӳ ٮ լ ߫ ۣ ݼ ̢ ߼ з ˥ ۤ ٯ ˼ ֨ Χ Ե Ӵ ׯ ڦ ˦ б μ ܣ ݽ ݾ װ ˽ Զ ͭ ̰ ڧ ߬ ܤ ު ڼ Է ޺ Ψ ׾ ߽ ޫ ܿ ν ة ʽ ݿ խ ޾ ۥ ע С ۦ ت ˾ ܮ ٰ ̻ ͮ ն ث ̣ ڽ ܯ ެ ף A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z ¡ ¢ £ ¤ ¥ ¦ A B § C ¨ D © E F ª G H I J « ¬ K ­ ® ¯ L M N O P Q ° ± R S ² T U V ³ W X Y Z a b c ´ µ d · ¸ e f g h i j ¹ k l m º n o p q r s t u v w x y z » A B C D E ¼ ½ F G ¾ H I J ¿ K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N á â ã O P Q R S ä å T U æ V W X ç Y Z a b c d e è é f ê ë ì g h i j k l í m n o î p ï q ð r s t u v w x ñ y z ò A B C D ó ô E F õ G H I ö J K L M N O P ÷ ø Q ù ú û R S T U V W ü ý X Y þ Z a b ÿ c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n ġ Ģ o p ģ q r Ĥ ĥ Ħ s t u v w x ħ Ĩ y ĩ z Ī ī Ĭ ĭ Į į İ ı IJ ij Ĵ ĵ Ķ A B C D E F ķ ĸ G Ĺ ĺ Ļ H I J K L M ļ Ľ N O P Q R S T U V W X Y Z a b c d e f ľ g h i j k l m n o p q r s t u v w x y z Ŀ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R š Ţ S ţ T Ť U V W X Y Z ť a b c Ŧ d e f ŧ g h i j k l m Ũ n o p q r s t u v w x ũ Ū y z ū Ŭ ŭ Ů ů A B C D E F G H I J K L M N O Ű ű P Q Ų R S T ų U V W X Y Z a Ŵ ŵ b Ŷ c ŷ d e f g h i Ÿ Ź j k ź l m n Ż ż o p q r s t Ž ž u ſ v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v ơ w x y z Ƣ ƣ Ƥ ƥ A B C Ʀ Ƨ D E F ƨ G H I J K L Ʃ M N O ƪ P Q R ƫ S T U V W X Y Ƭ Z a b c ƭ d e f g h i Ʈ Ư j k ư l m Ʊ Ʋ n Ƴ o p q r s ƴ Ƶ t ƶ u v w x y z Ʒ Ƹ ƹ ƺ ƻ Ƽ ƽ ƾ ƿ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l ǡ m n o p q r s t u v w x y z Ǣ A B C D E F G H ǣ I J K Ǥ L M N O P Q R S T U V W X Y Z a b c d e f g h ǥ i j k Ǧ l m n ǧ o p q r s t u v Ǩ w ǩ x y z Ǫ ǫ Ǭ ǭ Ǯ ǯ ǰ DZ Dz dz Ǵ A B C D E F G H I J K ǵ L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s Ƕ t u v Ƿ w x y Ǹ z ǹ Ǻ ǻ Ǽ ǽ Ǿ ǿ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z  ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ ȡ  Ž   ‘ ’ “ ” Ȣ • – — ˜ ™ š › œ  ž ȣ Ȥ Ÿ   ȥ A B C Ȧ D E F G ȧ H I Ȩ ȩ J Ȫ K ȫ L M N Ȭ O P ȭ Ȯ Q R ȯ S T U Ȱ V W X Y Z a b c d e ȱ f Ȳ g h i j k l ȳ ȴ m n ȵ o p q r s t u v w x y z Á  ȶ à ȷ Ä Å Æ Ç È É ȸ ȹ Ê Ë Ⱥ Ì Í Î Ȼ Ï Ð Ñ Ò Ó Ô Õ Ö ȼ × Ƚ Ø Ⱦ Ù Ú Û Ü Ý Þ ȿ ß à A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z ā Ă ă Ą ą Ć ć Ĉ ĉ Ċ ċ Č č Ď ď Đ đ Ē ē Ĕ ĕ Ė ė Ę ę Ě ě Ĝ ĝ Ğ ğ Ġ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z Ł ł Ń ń Ņ ņ Ň ň ʼn Ŋ ŋ Ō ō Ŏ ŏ Ő ő Œ œ Ŕ ŕ Ŗ ŗ Ř ř Ś ś Ŝ ŝ Ş ş Š A B C D E F G H I J K L M N O P Q R έ Т и Ң ң ҧ Ҩ ҩ Ҫ ҫ ҭ Ҳ Ҿ ե ի ծ ָ ܥ ݥ ߳ \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-korean.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-korean.html.headers new file mode 100644 index 00000000000..4b82def1fb1 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-korean.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=korean diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-ks_c_5601-1987.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-ks_c_5601-1987.html new file mode 100755 index 00000000000..7cb599c31bd --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-ks_c_5601-1987.html @@ -0,0 +1 @@ +ks_c_5601-1987 characters ز ߲ ߾ ܰ ӡ Ҭ ޿ ߭ կ Ӣ ˿ ֵ ֶ ʡ ӣ ʢ ٲ ܱ ۧ ʣ ̧ ۨ ߡ ߿ ʤ к Ү ׿ ܲ ٳ ή ٢ ֩ ֪ ܬ ߢ ξ ʾ л շ ˧ м ױ ʥ ֫ ҽ ̤ ٴ в ڨ ˡ ϡ س ܦ ʿ հ Ϣ ͯ ϣ Ͱ У ʦ ٣ ͱ Ͳ ګ ʧ ٤ Ϥ ʨ Ӻ Ӥ ʩ ϥ ޭ ҥ ַ ͳ ӥ Ф г ۩ ӻ Ϧ ϧ ̱ ˨ Ӧ פ ү Х ҳ ҿ ۪ ٵ ʹ ˩ Ҧ ش ץ ڬ ʪ ޮ ݡ ͵ ݢ ί ʫ Ϩ ݣ Ҽ ج һ ΰ ۫ Ͷ ڭ ܳ צ ߣ ˪ ˢ ھ ֹ ˫ ڮ չ ϩ ֺ ص ٶ ۬ ح Ҵ ܴ ݤ ͷ ˬ ֯ Ϫ Ω ܧ ˭ ˮ گ ض ӧ ޯ ۭ ڰ ҷ ֻ ̥ ο Ҹ ڿ ٷ ط α ˯ ޻ ̨ Ӽ ϫ н ۮ ݦ ̼ ҹ Ϭ ͸ ظ Һ Ц ̩ ߺ ؤ ٸ ٹ ߮ ҵ ӵ ̪ ӽ պ ջ ͹ ۯ ͺ ϭ ߤ ͻ ݧ ְ ް ݨ Ө ۰ ۱ ײ ө ۲ ٥ ܵ ܶ ع ʬ ٦ ͼ ٺ Ӿ غ ѡ Ѣ ڱ ߴ ѣ ۳ ͽ ʭ ʮ Ϯ ܷ ٻ ϯ ʯ Ұ ׳ ̫ ڲ ѥ ܸ Ѥ о ͡ ߵ ԡ β ٧ ڳ п ۴ ״ ; ϰ Ϊ Ч ק ټ й Ѧ Ӫ ̬ ޱ Ԣ ձ ղ ռ ѧ γ ʰ ϱ ֱ ޲ ӫ ߯ ϲ ٽ Ը پ ϳ Ѩ ޼ ϴ ߥ ˰ ڡ ̽ ѩ Ѫ ک Ϳ ֬ զ ׵ ޳ ݩ ѫ ԣ ר ӿ ߶ Ԥ ڴ ڵ Ӭ ׶ ϵ ٨ ݪ ͢ ۵ ԥ ػ ש خ ؼ ̾ ߻ Ӷ ̭ ֲ Ԧ ս ޴ Թ ׷ ޵ ճ δ ؽ ϶ ܹ ֭ է ֡ ߰ ԧ մ ݫ Ժ ޶ ٿ ڪ ̲ Ի ̳ Ϸ Լ ִ ӷ ϸ Ѭ ޷ ּ ʱ ߦ ը Ш Ϲ ׸ ѭ Ѯ ε ׹ إ ѯ ֢ Ѱ ζ ܺ ̴ ߧ ˣ д ͣ ׺ ѱ ˱ Ѳ ˲ ߨ Ӹ ʲ ܻ ئ ׻ ת ͤ ۡ ٩ Ԩ ڶ Խ ԩ ٪ ؾ ܭ ̡ Ϻ ϻ ӭ Щ ׼ ѳ ܡ ا ۶ ͥ ب Ѵ ѵ Ѷ ѷ Ѹ Ԫ Ծ ܼ Ҷ Ρ ԫ ʳ ͦ ϼ Ъ Ы ء ܽ Ӯ آ ݬ ֽ е ѹ ߩ η Կ ӯ ֳ ݭ վ ڷ أ ˳ ͧ Ь Ѻ ڢ ڣ ҡ ۷ ׫ ̿ թ ˴ ̵ Ͻ ˵ ѻ Ӱ ֣ ׬ ͨ ̶ ͩ տ ݮ θ Ѽ ˶ ڸ ־ ֿ ѽ Ͼ ұ Ѿ ޽ ڤ ֤ ѿ ̷ ۸ ˤ ޡ ݯ ݰ ˷ ۹ ̮ ݱ د ޢ Ͽ ˸ ۺ ݲ ݳ ߷ ۻ ʴ ʵ ٫ ݴ ذ ι ж ΢ ޣ Ԭ ؿ ժ Э ߪ ۼ ٬ ֥ ١ ߸ ׭ ڹ ˹ ߱ Ϋ ܢ յ ա ڥ ۽ ӱ ޤ ٭ բ ʶ ߹ Ҥ ٱ ʷ Ӳ ֮ ޥ գ ׮ ˺ ̸ Ю ̯ ԭ κ ݵ ͪ ۾ ʸ Σ ͫ Τ ަ ں ۿ ˻ ׽ ާ ̹ ܨ ͬ ݶ ޸ λ ި ʹ ޹ ݷ Ԯ ݸ Я ݹ ݺ ۢ ʺ Υ ԯ ԰ ʻ ֦ ܾ ո ܩ ܪ ʼ ̦ ڻ Ա Բ ֧ а Φ Գ ӹ ̺ ס ر ܫ դ ݻ ά Դ ީ ӳ ٮ լ ߫ ۣ ݼ ̢ ߼ з ˥ ۤ ٯ ˼ ֨ Χ Ե Ӵ ׯ ڦ ˦ б μ ܣ ݽ ݾ װ ˽ Զ ͭ ̰ ڧ ߬ ܤ ު ڼ Է ޺ Ψ ׾ ߽ ޫ ܿ ν ة ʽ ݿ խ ޾ ۥ ע С ۦ ت ˾ ܮ ٰ ̻ ͮ ն ث ̣ ڽ ܯ ެ ף A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z ¡ ¢ £ ¤ ¥ ¦ A B § C ¨ D © E F ª G H I J « ¬ K ­ ® ¯ L M N O P Q ° ± R S ² T U V ³ W X Y Z a b c ´ µ d · ¸ e f g h i j ¹ k l m º n o p q r s t u v w x y z » A B C D E ¼ ½ F G ¾ H I J ¿ K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N á â ã O P Q R S ä å T U æ V W X ç Y Z a b c d e è é f ê ë ì g h i j k l í m n o î p ï q ð r s t u v w x ñ y z ò A B C D ó ô E F õ G H I ö J K L M N O P ÷ ø Q ù ú û R S T U V W ü ý X Y þ Z a b ÿ c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n ġ Ģ o p ģ q r Ĥ ĥ Ħ s t u v w x ħ Ĩ y ĩ z Ī ī Ĭ ĭ Į į İ ı IJ ij Ĵ ĵ Ķ A B C D E F ķ ĸ G Ĺ ĺ Ļ H I J K L M ļ Ľ N O P Q R S T U V W X Y Z a b c d e f ľ g h i j k l m n o p q r s t u v w x y z Ŀ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R š Ţ S ţ T Ť U V W X Y Z ť a b c Ŧ d e f ŧ g h i j k l m Ũ n o p q r s t u v w x ũ Ū y z ū Ŭ ŭ Ů ů A B C D E F G H I J K L M N O Ű ű P Q Ų R S T ų U V W X Y Z a Ŵ ŵ b Ŷ c ŷ d e f g h i Ÿ Ź j k ź l m n Ż ż o p q r s t Ž ž u ſ v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v ơ w x y z Ƣ ƣ Ƥ ƥ A B C Ʀ Ƨ D E F ƨ G H I J K L Ʃ M N O ƪ P Q R ƫ S T U V W X Y Ƭ Z a b c ƭ d e f g h i Ʈ Ư j k ư l m Ʊ Ʋ n Ƴ o p q r s ƴ Ƶ t ƶ u v w x y z Ʒ Ƹ ƹ ƺ ƻ Ƽ ƽ ƾ ƿ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l ǡ m n o p q r s t u v w x y z Ǣ A B C D E F G H ǣ I J K Ǥ L M N O P Q R S T U V W X Y Z a b c d e f g h ǥ i j k Ǧ l m n ǧ o p q r s t u v Ǩ w ǩ x y z Ǫ ǫ Ǭ ǭ Ǯ ǯ ǰ DZ Dz dz Ǵ A B C D E F G H I J K ǵ L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s Ƕ t u v Ƿ w x y Ǹ z ǹ Ǻ ǻ Ǽ ǽ Ǿ ǿ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z  ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ ȡ  Ž   ‘ ’ “ ” Ȣ • – — ˜ ™ š › œ  ž ȣ Ȥ Ÿ   ȥ A B C Ȧ D E F G ȧ H I Ȩ ȩ J Ȫ K ȫ L M N Ȭ O P ȭ Ȯ Q R ȯ S T U Ȱ V W X Y Z a b c d e ȱ f Ȳ g h i j k l ȳ ȴ m n ȵ o p q r s t u v w x y z Á  ȶ à ȷ Ä Å Æ Ç È É ȸ ȹ Ê Ë Ⱥ Ì Í Î Ȼ Ï Ð Ñ Ò Ó Ô Õ Ö ȼ × Ƚ Ø Ⱦ Ù Ú Û Ü Ý Þ ȿ ß à A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z ā Ă ă Ą ą Ć ć Ĉ ĉ Ċ ċ Č č Ď ď Đ đ Ē ē Ĕ ĕ Ė ė Ę ę Ě ě Ĝ ĝ Ğ ğ Ġ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z Ł ł Ń ń Ņ ņ Ň ň ʼn Ŋ ŋ Ō ō Ŏ ŏ Ő ő Œ œ Ŕ ŕ Ŗ ŗ Ř ř Ś ś Ŝ ŝ Ş ş Š A B C D E F G H I J K L M N O P Q R έ Т и Ң ң ҧ Ҩ ҩ Ҫ ҫ ҭ Ҳ Ҿ ե ի ծ ָ ܥ ݥ ߳ \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-ks_c_5601-1987.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-ks_c_5601-1987.html.headers new file mode 100644 index 00000000000..3ad0c41e18d --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-ks_c_5601-1987.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=ks_c_5601-1987 diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-ks_c_5601-1989.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-ks_c_5601-1989.html new file mode 100755 index 00000000000..38c5d48204b --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-ks_c_5601-1989.html @@ -0,0 +1 @@ +ks_c_5601-1989 characters ز ߲ ߾ ܰ ӡ Ҭ ޿ ߭ կ Ӣ ˿ ֵ ֶ ʡ ӣ ʢ ٲ ܱ ۧ ʣ ̧ ۨ ߡ ߿ ʤ к Ү ׿ ܲ ٳ ή ٢ ֩ ֪ ܬ ߢ ξ ʾ л շ ˧ м ױ ʥ ֫ ҽ ̤ ٴ в ڨ ˡ ϡ س ܦ ʿ հ Ϣ ͯ ϣ Ͱ У ʦ ٣ ͱ Ͳ ګ ʧ ٤ Ϥ ʨ Ӻ Ӥ ʩ ϥ ޭ ҥ ַ ͳ ӥ Ф г ۩ ӻ Ϧ ϧ ̱ ˨ Ӧ פ ү Х ҳ ҿ ۪ ٵ ʹ ˩ Ҧ ش ץ ڬ ʪ ޮ ݡ ͵ ݢ ί ʫ Ϩ ݣ Ҽ ج һ ΰ ۫ Ͷ ڭ ܳ צ ߣ ˪ ˢ ھ ֹ ˫ ڮ չ ϩ ֺ ص ٶ ۬ ح Ҵ ܴ ݤ ͷ ˬ ֯ Ϫ Ω ܧ ˭ ˮ گ ض ӧ ޯ ۭ ڰ ҷ ֻ ̥ ο Ҹ ڿ ٷ ط α ˯ ޻ ̨ Ӽ ϫ н ۮ ݦ ̼ ҹ Ϭ ͸ ظ Һ Ц ̩ ߺ ؤ ٸ ٹ ߮ ҵ ӵ ̪ ӽ պ ջ ͹ ۯ ͺ ϭ ߤ ͻ ݧ ְ ް ݨ Ө ۰ ۱ ײ ө ۲ ٥ ܵ ܶ ع ʬ ٦ ͼ ٺ Ӿ غ ѡ Ѣ ڱ ߴ ѣ ۳ ͽ ʭ ʮ Ϯ ܷ ٻ ϯ ʯ Ұ ׳ ̫ ڲ ѥ ܸ Ѥ о ͡ ߵ ԡ β ٧ ڳ п ۴ ״ ; ϰ Ϊ Ч ק ټ й Ѧ Ӫ ̬ ޱ Ԣ ձ ղ ռ ѧ γ ʰ ϱ ֱ ޲ ӫ ߯ ϲ ٽ Ը پ ϳ Ѩ ޼ ϴ ߥ ˰ ڡ ̽ ѩ Ѫ ک Ϳ ֬ զ ׵ ޳ ݩ ѫ ԣ ר ӿ ߶ Ԥ ڴ ڵ Ӭ ׶ ϵ ٨ ݪ ͢ ۵ ԥ ػ ש خ ؼ ̾ ߻ Ӷ ̭ ֲ Ԧ ս ޴ Թ ׷ ޵ ճ δ ؽ ϶ ܹ ֭ է ֡ ߰ ԧ մ ݫ Ժ ޶ ٿ ڪ ̲ Ի ̳ Ϸ Լ ִ ӷ ϸ Ѭ ޷ ּ ʱ ߦ ը Ш Ϲ ׸ ѭ Ѯ ε ׹ إ ѯ ֢ Ѱ ζ ܺ ̴ ߧ ˣ д ͣ ׺ ѱ ˱ Ѳ ˲ ߨ Ӹ ʲ ܻ ئ ׻ ת ͤ ۡ ٩ Ԩ ڶ Խ ԩ ٪ ؾ ܭ ̡ Ϻ ϻ ӭ Щ ׼ ѳ ܡ ا ۶ ͥ ب Ѵ ѵ Ѷ ѷ Ѹ Ԫ Ծ ܼ Ҷ Ρ ԫ ʳ ͦ ϼ Ъ Ы ء ܽ Ӯ آ ݬ ֽ е ѹ ߩ η Կ ӯ ֳ ݭ վ ڷ أ ˳ ͧ Ь Ѻ ڢ ڣ ҡ ۷ ׫ ̿ թ ˴ ̵ Ͻ ˵ ѻ Ӱ ֣ ׬ ͨ ̶ ͩ տ ݮ θ Ѽ ˶ ڸ ־ ֿ ѽ Ͼ ұ Ѿ ޽ ڤ ֤ ѿ ̷ ۸ ˤ ޡ ݯ ݰ ˷ ۹ ̮ ݱ د ޢ Ͽ ˸ ۺ ݲ ݳ ߷ ۻ ʴ ʵ ٫ ݴ ذ ι ж ΢ ޣ Ԭ ؿ ժ Э ߪ ۼ ٬ ֥ ١ ߸ ׭ ڹ ˹ ߱ Ϋ ܢ յ ա ڥ ۽ ӱ ޤ ٭ բ ʶ ߹ Ҥ ٱ ʷ Ӳ ֮ ޥ գ ׮ ˺ ̸ Ю ̯ ԭ κ ݵ ͪ ۾ ʸ Σ ͫ Τ ަ ں ۿ ˻ ׽ ާ ̹ ܨ ͬ ݶ ޸ λ ި ʹ ޹ ݷ Ԯ ݸ Я ݹ ݺ ۢ ʺ Υ ԯ ԰ ʻ ֦ ܾ ո ܩ ܪ ʼ ̦ ڻ Ա Բ ֧ а Φ Գ ӹ ̺ ס ر ܫ դ ݻ ά Դ ީ ӳ ٮ լ ߫ ۣ ݼ ̢ ߼ з ˥ ۤ ٯ ˼ ֨ Χ Ե Ӵ ׯ ڦ ˦ б μ ܣ ݽ ݾ װ ˽ Զ ͭ ̰ ڧ ߬ ܤ ު ڼ Է ޺ Ψ ׾ ߽ ޫ ܿ ν ة ʽ ݿ խ ޾ ۥ ע С ۦ ت ˾ ܮ ٰ ̻ ͮ ն ث ̣ ڽ ܯ ެ ף A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z ¡ ¢ £ ¤ ¥ ¦ A B § C ¨ D © E F ª G H I J « ¬ K ­ ® ¯ L M N O P Q ° ± R S ² T U V ³ W X Y Z a b c ´ µ d · ¸ e f g h i j ¹ k l m º n o p q r s t u v w x y z » A B C D E ¼ ½ F G ¾ H I J ¿ K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N á â ã O P Q R S ä å T U æ V W X ç Y Z a b c d e è é f ê ë ì g h i j k l í m n o î p ï q ð r s t u v w x ñ y z ò A B C D ó ô E F õ G H I ö J K L M N O P ÷ ø Q ù ú û R S T U V W ü ý X Y þ Z a b ÿ c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n ġ Ģ o p ģ q r Ĥ ĥ Ħ s t u v w x ħ Ĩ y ĩ z Ī ī Ĭ ĭ Į į İ ı IJ ij Ĵ ĵ Ķ A B C D E F ķ ĸ G Ĺ ĺ Ļ H I J K L M ļ Ľ N O P Q R S T U V W X Y Z a b c d e f ľ g h i j k l m n o p q r s t u v w x y z Ŀ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R š Ţ S ţ T Ť U V W X Y Z ť a b c Ŧ d e f ŧ g h i j k l m Ũ n o p q r s t u v w x ũ Ū y z ū Ŭ ŭ Ů ů A B C D E F G H I J K L M N O Ű ű P Q Ų R S T ų U V W X Y Z a Ŵ ŵ b Ŷ c ŷ d e f g h i Ÿ Ź j k ź l m n Ż ż o p q r s t Ž ž u ſ v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v ơ w x y z Ƣ ƣ Ƥ ƥ A B C Ʀ Ƨ D E F ƨ G H I J K L Ʃ M N O ƪ P Q R ƫ S T U V W X Y Ƭ Z a b c ƭ d e f g h i Ʈ Ư j k ư l m Ʊ Ʋ n Ƴ o p q r s ƴ Ƶ t ƶ u v w x y z Ʒ Ƹ ƹ ƺ ƻ Ƽ ƽ ƾ ƿ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l ǡ m n o p q r s t u v w x y z Ǣ A B C D E F G H ǣ I J K Ǥ L M N O P Q R S T U V W X Y Z a b c d e f g h ǥ i j k Ǧ l m n ǧ o p q r s t u v Ǩ w ǩ x y z Ǫ ǫ Ǭ ǭ Ǯ ǯ ǰ DZ Dz dz Ǵ A B C D E F G H I J K ǵ L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s Ƕ t u v Ƿ w x y Ǹ z ǹ Ǻ ǻ Ǽ ǽ Ǿ ǿ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z  ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ ȡ  Ž   ‘ ’ “ ” Ȣ • – — ˜ ™ š › œ  ž ȣ Ȥ Ÿ   ȥ A B C Ȧ D E F G ȧ H I Ȩ ȩ J Ȫ K ȫ L M N Ȭ O P ȭ Ȯ Q R ȯ S T U Ȱ V W X Y Z a b c d e ȱ f Ȳ g h i j k l ȳ ȴ m n ȵ o p q r s t u v w x y z Á  ȶ à ȷ Ä Å Æ Ç È É ȸ ȹ Ê Ë Ⱥ Ì Í Î Ȼ Ï Ð Ñ Ò Ó Ô Õ Ö ȼ × Ƚ Ø Ⱦ Ù Ú Û Ü Ý Þ ȿ ß à A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z ā Ă ă Ą ą Ć ć Ĉ ĉ Ċ ċ Č č Ď ď Đ đ Ē ē Ĕ ĕ Ė ė Ę ę Ě ě Ĝ ĝ Ğ ğ Ġ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z Ł ł Ń ń Ņ ņ Ň ň ʼn Ŋ ŋ Ō ō Ŏ ŏ Ő ő Œ œ Ŕ ŕ Ŗ ŗ Ř ř Ś ś Ŝ ŝ Ş ş Š A B C D E F G H I J K L M N O P Q R έ Т и Ң ң ҧ Ҩ ҩ Ҫ ҫ ҭ Ҳ Ҿ ե ի ծ ָ ܥ ݥ ߳ \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-ks_c_5601-1989.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-ks_c_5601-1989.html.headers new file mode 100644 index 00000000000..d9e638cdc0d --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-ks_c_5601-1989.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=ks_c_5601-1989 diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-ksc5601.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-ksc5601.html new file mode 100755 index 00000000000..6a7b5559cc2 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-ksc5601.html @@ -0,0 +1 @@ +ksc5601 characters ز ߲ ߾ ܰ ӡ Ҭ ޿ ߭ կ Ӣ ˿ ֵ ֶ ʡ ӣ ʢ ٲ ܱ ۧ ʣ ̧ ۨ ߡ ߿ ʤ к Ү ׿ ܲ ٳ ή ٢ ֩ ֪ ܬ ߢ ξ ʾ л շ ˧ м ױ ʥ ֫ ҽ ̤ ٴ в ڨ ˡ ϡ س ܦ ʿ հ Ϣ ͯ ϣ Ͱ У ʦ ٣ ͱ Ͳ ګ ʧ ٤ Ϥ ʨ Ӻ Ӥ ʩ ϥ ޭ ҥ ַ ͳ ӥ Ф г ۩ ӻ Ϧ ϧ ̱ ˨ Ӧ פ ү Х ҳ ҿ ۪ ٵ ʹ ˩ Ҧ ش ץ ڬ ʪ ޮ ݡ ͵ ݢ ί ʫ Ϩ ݣ Ҽ ج һ ΰ ۫ Ͷ ڭ ܳ צ ߣ ˪ ˢ ھ ֹ ˫ ڮ չ ϩ ֺ ص ٶ ۬ ح Ҵ ܴ ݤ ͷ ˬ ֯ Ϫ Ω ܧ ˭ ˮ گ ض ӧ ޯ ۭ ڰ ҷ ֻ ̥ ο Ҹ ڿ ٷ ط α ˯ ޻ ̨ Ӽ ϫ н ۮ ݦ ̼ ҹ Ϭ ͸ ظ Һ Ц ̩ ߺ ؤ ٸ ٹ ߮ ҵ ӵ ̪ ӽ պ ջ ͹ ۯ ͺ ϭ ߤ ͻ ݧ ְ ް ݨ Ө ۰ ۱ ײ ө ۲ ٥ ܵ ܶ ع ʬ ٦ ͼ ٺ Ӿ غ ѡ Ѣ ڱ ߴ ѣ ۳ ͽ ʭ ʮ Ϯ ܷ ٻ ϯ ʯ Ұ ׳ ̫ ڲ ѥ ܸ Ѥ о ͡ ߵ ԡ β ٧ ڳ п ۴ ״ ; ϰ Ϊ Ч ק ټ й Ѧ Ӫ ̬ ޱ Ԣ ձ ղ ռ ѧ γ ʰ ϱ ֱ ޲ ӫ ߯ ϲ ٽ Ը پ ϳ Ѩ ޼ ϴ ߥ ˰ ڡ ̽ ѩ Ѫ ک Ϳ ֬ զ ׵ ޳ ݩ ѫ ԣ ר ӿ ߶ Ԥ ڴ ڵ Ӭ ׶ ϵ ٨ ݪ ͢ ۵ ԥ ػ ש خ ؼ ̾ ߻ Ӷ ̭ ֲ Ԧ ս ޴ Թ ׷ ޵ ճ δ ؽ ϶ ܹ ֭ է ֡ ߰ ԧ մ ݫ Ժ ޶ ٿ ڪ ̲ Ի ̳ Ϸ Լ ִ ӷ ϸ Ѭ ޷ ּ ʱ ߦ ը Ш Ϲ ׸ ѭ Ѯ ε ׹ إ ѯ ֢ Ѱ ζ ܺ ̴ ߧ ˣ д ͣ ׺ ѱ ˱ Ѳ ˲ ߨ Ӹ ʲ ܻ ئ ׻ ת ͤ ۡ ٩ Ԩ ڶ Խ ԩ ٪ ؾ ܭ ̡ Ϻ ϻ ӭ Щ ׼ ѳ ܡ ا ۶ ͥ ب Ѵ ѵ Ѷ ѷ Ѹ Ԫ Ծ ܼ Ҷ Ρ ԫ ʳ ͦ ϼ Ъ Ы ء ܽ Ӯ آ ݬ ֽ е ѹ ߩ η Կ ӯ ֳ ݭ վ ڷ أ ˳ ͧ Ь Ѻ ڢ ڣ ҡ ۷ ׫ ̿ թ ˴ ̵ Ͻ ˵ ѻ Ӱ ֣ ׬ ͨ ̶ ͩ տ ݮ θ Ѽ ˶ ڸ ־ ֿ ѽ Ͼ ұ Ѿ ޽ ڤ ֤ ѿ ̷ ۸ ˤ ޡ ݯ ݰ ˷ ۹ ̮ ݱ د ޢ Ͽ ˸ ۺ ݲ ݳ ߷ ۻ ʴ ʵ ٫ ݴ ذ ι ж ΢ ޣ Ԭ ؿ ժ Э ߪ ۼ ٬ ֥ ١ ߸ ׭ ڹ ˹ ߱ Ϋ ܢ յ ա ڥ ۽ ӱ ޤ ٭ բ ʶ ߹ Ҥ ٱ ʷ Ӳ ֮ ޥ գ ׮ ˺ ̸ Ю ̯ ԭ κ ݵ ͪ ۾ ʸ Σ ͫ Τ ަ ں ۿ ˻ ׽ ާ ̹ ܨ ͬ ݶ ޸ λ ި ʹ ޹ ݷ Ԯ ݸ Я ݹ ݺ ۢ ʺ Υ ԯ ԰ ʻ ֦ ܾ ո ܩ ܪ ʼ ̦ ڻ Ա Բ ֧ а Φ Գ ӹ ̺ ס ر ܫ դ ݻ ά Դ ީ ӳ ٮ լ ߫ ۣ ݼ ̢ ߼ з ˥ ۤ ٯ ˼ ֨ Χ Ե Ӵ ׯ ڦ ˦ б μ ܣ ݽ ݾ װ ˽ Զ ͭ ̰ ڧ ߬ ܤ ު ڼ Է ޺ Ψ ׾ ߽ ޫ ܿ ν ة ʽ ݿ խ ޾ ۥ ע С ۦ ت ˾ ܮ ٰ ̻ ͮ ն ث ̣ ڽ ܯ ެ ף A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z ¡ ¢ £ ¤ ¥ ¦ A B § C ¨ D © E F ª G H I J « ¬ K ­ ® ¯ L M N O P Q ° ± R S ² T U V ³ W X Y Z a b c ´ µ d · ¸ e f g h i j ¹ k l m º n o p q r s t u v w x y z » A B C D E ¼ ½ F G ¾ H I J ¿ K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N á â ã O P Q R S ä å T U æ V W X ç Y Z a b c d e è é f ê ë ì g h i j k l í m n o î p ï q ð r s t u v w x ñ y z ò A B C D ó ô E F õ G H I ö J K L M N O P ÷ ø Q ù ú û R S T U V W ü ý X Y þ Z a b ÿ c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n ġ Ģ o p ģ q r Ĥ ĥ Ħ s t u v w x ħ Ĩ y ĩ z Ī ī Ĭ ĭ Į į İ ı IJ ij Ĵ ĵ Ķ A B C D E F ķ ĸ G Ĺ ĺ Ļ H I J K L M ļ Ľ N O P Q R S T U V W X Y Z a b c d e f ľ g h i j k l m n o p q r s t u v w x y z Ŀ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R š Ţ S ţ T Ť U V W X Y Z ť a b c Ŧ d e f ŧ g h i j k l m Ũ n o p q r s t u v w x ũ Ū y z ū Ŭ ŭ Ů ů A B C D E F G H I J K L M N O Ű ű P Q Ų R S T ų U V W X Y Z a Ŵ ŵ b Ŷ c ŷ d e f g h i Ÿ Ź j k ź l m n Ż ż o p q r s t Ž ž u ſ v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v ơ w x y z Ƣ ƣ Ƥ ƥ A B C Ʀ Ƨ D E F ƨ G H I J K L Ʃ M N O ƪ P Q R ƫ S T U V W X Y Ƭ Z a b c ƭ d e f g h i Ʈ Ư j k ư l m Ʊ Ʋ n Ƴ o p q r s ƴ Ƶ t ƶ u v w x y z Ʒ Ƹ ƹ ƺ ƻ Ƽ ƽ ƾ ƿ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l ǡ m n o p q r s t u v w x y z Ǣ A B C D E F G H ǣ I J K Ǥ L M N O P Q R S T U V W X Y Z a b c d e f g h ǥ i j k Ǧ l m n ǧ o p q r s t u v Ǩ w ǩ x y z Ǫ ǫ Ǭ ǭ Ǯ ǯ ǰ DZ Dz dz Ǵ A B C D E F G H I J K ǵ L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s Ƕ t u v Ƿ w x y Ǹ z ǹ Ǻ ǻ Ǽ ǽ Ǿ ǿ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z  ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ ȡ  Ž   ‘ ’ “ ” Ȣ • – — ˜ ™ š › œ  ž ȣ Ȥ Ÿ   ȥ A B C Ȧ D E F G ȧ H I Ȩ ȩ J Ȫ K ȫ L M N Ȭ O P ȭ Ȯ Q R ȯ S T U Ȱ V W X Y Z a b c d e ȱ f Ȳ g h i j k l ȳ ȴ m n ȵ o p q r s t u v w x y z Á  ȶ à ȷ Ä Å Æ Ç È É ȸ ȹ Ê Ë Ⱥ Ì Í Î Ȼ Ï Ð Ñ Ò Ó Ô Õ Ö ȼ × Ƚ Ø Ⱦ Ù Ú Û Ü Ý Þ ȿ ß à A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z ā Ă ă Ą ą Ć ć Ĉ ĉ Ċ ċ Č č Ď ď Đ đ Ē ē Ĕ ĕ Ė ė Ę ę Ě ě Ĝ ĝ Ğ ğ Ġ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z Ł ł Ń ń Ņ ņ Ň ň ʼn Ŋ ŋ Ō ō Ŏ ŏ Ő ő Œ œ Ŕ ŕ Ŗ ŗ Ř ř Ś ś Ŝ ŝ Ş ş Š A B C D E F G H I J K L M N O P Q R έ Т и Ң ң ҧ Ҩ ҩ Ҫ ҫ ҭ Ҳ Ҿ ե ի ծ ָ ܥ ݥ ߳ \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-ksc5601.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-ksc5601.html.headers new file mode 100644 index 00000000000..e983a5502ef --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-ksc5601.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=ksc5601 diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-ksc_5601.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-ksc_5601.html new file mode 100755 index 00000000000..3c7686e4189 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-ksc_5601.html @@ -0,0 +1 @@ +ksc_5601 characters ز ߲ ߾ ܰ ӡ Ҭ ޿ ߭ կ Ӣ ˿ ֵ ֶ ʡ ӣ ʢ ٲ ܱ ۧ ʣ ̧ ۨ ߡ ߿ ʤ к Ү ׿ ܲ ٳ ή ٢ ֩ ֪ ܬ ߢ ξ ʾ л շ ˧ м ױ ʥ ֫ ҽ ̤ ٴ в ڨ ˡ ϡ س ܦ ʿ հ Ϣ ͯ ϣ Ͱ У ʦ ٣ ͱ Ͳ ګ ʧ ٤ Ϥ ʨ Ӻ Ӥ ʩ ϥ ޭ ҥ ַ ͳ ӥ Ф г ۩ ӻ Ϧ ϧ ̱ ˨ Ӧ פ ү Х ҳ ҿ ۪ ٵ ʹ ˩ Ҧ ش ץ ڬ ʪ ޮ ݡ ͵ ݢ ί ʫ Ϩ ݣ Ҽ ج һ ΰ ۫ Ͷ ڭ ܳ צ ߣ ˪ ˢ ھ ֹ ˫ ڮ չ ϩ ֺ ص ٶ ۬ ح Ҵ ܴ ݤ ͷ ˬ ֯ Ϫ Ω ܧ ˭ ˮ گ ض ӧ ޯ ۭ ڰ ҷ ֻ ̥ ο Ҹ ڿ ٷ ط α ˯ ޻ ̨ Ӽ ϫ н ۮ ݦ ̼ ҹ Ϭ ͸ ظ Һ Ц ̩ ߺ ؤ ٸ ٹ ߮ ҵ ӵ ̪ ӽ պ ջ ͹ ۯ ͺ ϭ ߤ ͻ ݧ ְ ް ݨ Ө ۰ ۱ ײ ө ۲ ٥ ܵ ܶ ع ʬ ٦ ͼ ٺ Ӿ غ ѡ Ѣ ڱ ߴ ѣ ۳ ͽ ʭ ʮ Ϯ ܷ ٻ ϯ ʯ Ұ ׳ ̫ ڲ ѥ ܸ Ѥ о ͡ ߵ ԡ β ٧ ڳ п ۴ ״ ; ϰ Ϊ Ч ק ټ й Ѧ Ӫ ̬ ޱ Ԣ ձ ղ ռ ѧ γ ʰ ϱ ֱ ޲ ӫ ߯ ϲ ٽ Ը پ ϳ Ѩ ޼ ϴ ߥ ˰ ڡ ̽ ѩ Ѫ ک Ϳ ֬ զ ׵ ޳ ݩ ѫ ԣ ר ӿ ߶ Ԥ ڴ ڵ Ӭ ׶ ϵ ٨ ݪ ͢ ۵ ԥ ػ ש خ ؼ ̾ ߻ Ӷ ̭ ֲ Ԧ ս ޴ Թ ׷ ޵ ճ δ ؽ ϶ ܹ ֭ է ֡ ߰ ԧ մ ݫ Ժ ޶ ٿ ڪ ̲ Ի ̳ Ϸ Լ ִ ӷ ϸ Ѭ ޷ ּ ʱ ߦ ը Ш Ϲ ׸ ѭ Ѯ ε ׹ إ ѯ ֢ Ѱ ζ ܺ ̴ ߧ ˣ д ͣ ׺ ѱ ˱ Ѳ ˲ ߨ Ӹ ʲ ܻ ئ ׻ ת ͤ ۡ ٩ Ԩ ڶ Խ ԩ ٪ ؾ ܭ ̡ Ϻ ϻ ӭ Щ ׼ ѳ ܡ ا ۶ ͥ ب Ѵ ѵ Ѷ ѷ Ѹ Ԫ Ծ ܼ Ҷ Ρ ԫ ʳ ͦ ϼ Ъ Ы ء ܽ Ӯ آ ݬ ֽ е ѹ ߩ η Կ ӯ ֳ ݭ վ ڷ أ ˳ ͧ Ь Ѻ ڢ ڣ ҡ ۷ ׫ ̿ թ ˴ ̵ Ͻ ˵ ѻ Ӱ ֣ ׬ ͨ ̶ ͩ տ ݮ θ Ѽ ˶ ڸ ־ ֿ ѽ Ͼ ұ Ѿ ޽ ڤ ֤ ѿ ̷ ۸ ˤ ޡ ݯ ݰ ˷ ۹ ̮ ݱ د ޢ Ͽ ˸ ۺ ݲ ݳ ߷ ۻ ʴ ʵ ٫ ݴ ذ ι ж ΢ ޣ Ԭ ؿ ժ Э ߪ ۼ ٬ ֥ ١ ߸ ׭ ڹ ˹ ߱ Ϋ ܢ յ ա ڥ ۽ ӱ ޤ ٭ բ ʶ ߹ Ҥ ٱ ʷ Ӳ ֮ ޥ գ ׮ ˺ ̸ Ю ̯ ԭ κ ݵ ͪ ۾ ʸ Σ ͫ Τ ަ ں ۿ ˻ ׽ ާ ̹ ܨ ͬ ݶ ޸ λ ި ʹ ޹ ݷ Ԯ ݸ Я ݹ ݺ ۢ ʺ Υ ԯ ԰ ʻ ֦ ܾ ո ܩ ܪ ʼ ̦ ڻ Ա Բ ֧ а Φ Գ ӹ ̺ ס ر ܫ դ ݻ ά Դ ީ ӳ ٮ լ ߫ ۣ ݼ ̢ ߼ з ˥ ۤ ٯ ˼ ֨ Χ Ե Ӵ ׯ ڦ ˦ б μ ܣ ݽ ݾ װ ˽ Զ ͭ ̰ ڧ ߬ ܤ ު ڼ Է ޺ Ψ ׾ ߽ ޫ ܿ ν ة ʽ ݿ խ ޾ ۥ ע С ۦ ت ˾ ܮ ٰ ̻ ͮ ն ث ̣ ڽ ܯ ެ ף A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z ¡ ¢ £ ¤ ¥ ¦ A B § C ¨ D © E F ª G H I J « ¬ K ­ ® ¯ L M N O P Q ° ± R S ² T U V ³ W X Y Z a b c ´ µ d · ¸ e f g h i j ¹ k l m º n o p q r s t u v w x y z » A B C D E ¼ ½ F G ¾ H I J ¿ K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N á â ã O P Q R S ä å T U æ V W X ç Y Z a b c d e è é f ê ë ì g h i j k l í m n o î p ï q ð r s t u v w x ñ y z ò A B C D ó ô E F õ G H I ö J K L M N O P ÷ ø Q ù ú û R S T U V W ü ý X Y þ Z a b ÿ c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n ġ Ģ o p ģ q r Ĥ ĥ Ħ s t u v w x ħ Ĩ y ĩ z Ī ī Ĭ ĭ Į į İ ı IJ ij Ĵ ĵ Ķ A B C D E F ķ ĸ G Ĺ ĺ Ļ H I J K L M ļ Ľ N O P Q R S T U V W X Y Z a b c d e f ľ g h i j k l m n o p q r s t u v w x y z Ŀ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R š Ţ S ţ T Ť U V W X Y Z ť a b c Ŧ d e f ŧ g h i j k l m Ũ n o p q r s t u v w x ũ Ū y z ū Ŭ ŭ Ů ů A B C D E F G H I J K L M N O Ű ű P Q Ų R S T ų U V W X Y Z a Ŵ ŵ b Ŷ c ŷ d e f g h i Ÿ Ź j k ź l m n Ż ż o p q r s t Ž ž u ſ v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v ơ w x y z Ƣ ƣ Ƥ ƥ A B C Ʀ Ƨ D E F ƨ G H I J K L Ʃ M N O ƪ P Q R ƫ S T U V W X Y Ƭ Z a b c ƭ d e f g h i Ʈ Ư j k ư l m Ʊ Ʋ n Ƴ o p q r s ƴ Ƶ t ƶ u v w x y z Ʒ Ƹ ƹ ƺ ƻ Ƽ ƽ ƾ ƿ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l ǡ m n o p q r s t u v w x y z Ǣ A B C D E F G H ǣ I J K Ǥ L M N O P Q R S T U V W X Y Z a b c d e f g h ǥ i j k Ǧ l m n ǧ o p q r s t u v Ǩ w ǩ x y z Ǫ ǫ Ǭ ǭ Ǯ ǯ ǰ DZ Dz dz Ǵ A B C D E F G H I J K ǵ L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s Ƕ t u v Ƿ w x y Ǹ z ǹ Ǻ ǻ Ǽ ǽ Ǿ ǿ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z  ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ ȡ  Ž   ‘ ’ “ ” Ȣ • – — ˜ ™ š › œ  ž ȣ Ȥ Ÿ   ȥ A B C Ȧ D E F G ȧ H I Ȩ ȩ J Ȫ K ȫ L M N Ȭ O P ȭ Ȯ Q R ȯ S T U Ȱ V W X Y Z a b c d e ȱ f Ȳ g h i j k l ȳ ȴ m n ȵ o p q r s t u v w x y z Á  ȶ à ȷ Ä Å Æ Ç È É ȸ ȹ Ê Ë Ⱥ Ì Í Î Ȼ Ï Ð Ñ Ò Ó Ô Õ Ö ȼ × Ƚ Ø Ⱦ Ù Ú Û Ü Ý Þ ȿ ß à A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z ā Ă ă Ą ą Ć ć Ĉ ĉ Ċ ċ Č č Ď ď Đ đ Ē ē Ĕ ĕ Ė ė Ę ę Ě ě Ĝ ĝ Ğ ğ Ġ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z Ł ł Ń ń Ņ ņ Ň ň ʼn Ŋ ŋ Ō ō Ŏ ŏ Ő ő Œ œ Ŕ ŕ Ŗ ŗ Ř ř Ś ś Ŝ ŝ Ş ş Š A B C D E F G H I J K L M N O P Q R έ Т и Ң ң ҧ Ҩ ҩ Ҫ ҫ ҭ Ҳ Ҿ ե ի ծ ָ ܥ ݥ ߳ \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-ksc_5601.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-ksc_5601.html.headers new file mode 100644 index 00000000000..6a409228971 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-ksc_5601.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=ksc_5601 diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-windows-949.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-windows-949.html new file mode 100755 index 00000000000..2b69dc45017 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-windows-949.html @@ -0,0 +1 @@ +windows-949 characters ز ߲ ߾ ܰ ӡ Ҭ ޿ ߭ կ Ӣ ˿ ֵ ֶ ʡ ӣ ʢ ٲ ܱ ۧ ʣ ̧ ۨ ߡ ߿ ʤ к Ү ׿ ܲ ٳ ή ٢ ֩ ֪ ܬ ߢ ξ ʾ л շ ˧ м ױ ʥ ֫ ҽ ̤ ٴ в ڨ ˡ ϡ س ܦ ʿ հ Ϣ ͯ ϣ Ͱ У ʦ ٣ ͱ Ͳ ګ ʧ ٤ Ϥ ʨ Ӻ Ӥ ʩ ϥ ޭ ҥ ַ ͳ ӥ Ф г ۩ ӻ Ϧ ϧ ̱ ˨ Ӧ פ ү Х ҳ ҿ ۪ ٵ ʹ ˩ Ҧ ش ץ ڬ ʪ ޮ ݡ ͵ ݢ ί ʫ Ϩ ݣ Ҽ ج һ ΰ ۫ Ͷ ڭ ܳ צ ߣ ˪ ˢ ھ ֹ ˫ ڮ չ ϩ ֺ ص ٶ ۬ ح Ҵ ܴ ݤ ͷ ˬ ֯ Ϫ Ω ܧ ˭ ˮ گ ض ӧ ޯ ۭ ڰ ҷ ֻ ̥ ο Ҹ ڿ ٷ ط α ˯ ޻ ̨ Ӽ ϫ н ۮ ݦ ̼ ҹ Ϭ ͸ ظ Һ Ц ̩ ߺ ؤ ٸ ٹ ߮ ҵ ӵ ̪ ӽ պ ջ ͹ ۯ ͺ ϭ ߤ ͻ ݧ ְ ް ݨ Ө ۰ ۱ ײ ө ۲ ٥ ܵ ܶ ع ʬ ٦ ͼ ٺ Ӿ غ ѡ Ѣ ڱ ߴ ѣ ۳ ͽ ʭ ʮ Ϯ ܷ ٻ ϯ ʯ Ұ ׳ ̫ ڲ ѥ ܸ Ѥ о ͡ ߵ ԡ β ٧ ڳ п ۴ ״ ; ϰ Ϊ Ч ק ټ й Ѧ Ӫ ̬ ޱ Ԣ ձ ղ ռ ѧ γ ʰ ϱ ֱ ޲ ӫ ߯ ϲ ٽ Ը پ ϳ Ѩ ޼ ϴ ߥ ˰ ڡ ̽ ѩ Ѫ ک Ϳ ֬ զ ׵ ޳ ݩ ѫ ԣ ר ӿ ߶ Ԥ ڴ ڵ Ӭ ׶ ϵ ٨ ݪ ͢ ۵ ԥ ػ ש خ ؼ ̾ ߻ Ӷ ̭ ֲ Ԧ ս ޴ Թ ׷ ޵ ճ δ ؽ ϶ ܹ ֭ է ֡ ߰ ԧ մ ݫ Ժ ޶ ٿ ڪ ̲ Ի ̳ Ϸ Լ ִ ӷ ϸ Ѭ ޷ ּ ʱ ߦ ը Ш Ϲ ׸ ѭ Ѯ ε ׹ إ ѯ ֢ Ѱ ζ ܺ ̴ ߧ ˣ д ͣ ׺ ѱ ˱ Ѳ ˲ ߨ Ӹ ʲ ܻ ئ ׻ ת ͤ ۡ ٩ Ԩ ڶ Խ ԩ ٪ ؾ ܭ ̡ Ϻ ϻ ӭ Щ ׼ ѳ ܡ ا ۶ ͥ ب Ѵ ѵ Ѷ ѷ Ѹ Ԫ Ծ ܼ Ҷ Ρ ԫ ʳ ͦ ϼ Ъ Ы ء ܽ Ӯ آ ݬ ֽ е ѹ ߩ η Կ ӯ ֳ ݭ վ ڷ أ ˳ ͧ Ь Ѻ ڢ ڣ ҡ ۷ ׫ ̿ թ ˴ ̵ Ͻ ˵ ѻ Ӱ ֣ ׬ ͨ ̶ ͩ տ ݮ θ Ѽ ˶ ڸ ־ ֿ ѽ Ͼ ұ Ѿ ޽ ڤ ֤ ѿ ̷ ۸ ˤ ޡ ݯ ݰ ˷ ۹ ̮ ݱ د ޢ Ͽ ˸ ۺ ݲ ݳ ߷ ۻ ʴ ʵ ٫ ݴ ذ ι ж ΢ ޣ Ԭ ؿ ժ Э ߪ ۼ ٬ ֥ ١ ߸ ׭ ڹ ˹ ߱ Ϋ ܢ յ ա ڥ ۽ ӱ ޤ ٭ բ ʶ ߹ Ҥ ٱ ʷ Ӳ ֮ ޥ գ ׮ ˺ ̸ Ю ̯ ԭ κ ݵ ͪ ۾ ʸ Σ ͫ Τ ަ ں ۿ ˻ ׽ ާ ̹ ܨ ͬ ݶ ޸ λ ި ʹ ޹ ݷ Ԯ ݸ Я ݹ ݺ ۢ ʺ Υ ԯ ԰ ʻ ֦ ܾ ո ܩ ܪ ʼ ̦ ڻ Ա Բ ֧ а Φ Գ ӹ ̺ ס ر ܫ դ ݻ ά Դ ީ ӳ ٮ լ ߫ ۣ ݼ ̢ ߼ з ˥ ۤ ٯ ˼ ֨ Χ Ե Ӵ ׯ ڦ ˦ б μ ܣ ݽ ݾ װ ˽ Զ ͭ ̰ ڧ ߬ ܤ ު ڼ Է ޺ Ψ ׾ ߽ ޫ ܿ ν ة ʽ ݿ խ ޾ ۥ ע С ۦ ت ˾ ܮ ٰ ̻ ͮ ն ث ̣ ڽ ܯ ެ ף A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z ¡ ¢ £ ¤ ¥ ¦ A B § C ¨ D © E F ª G H I J « ¬ K ­ ® ¯ L M N O P Q ° ± R S ² T U V ³ W X Y Z a b c ´ µ d · ¸ e f g h i j ¹ k l m º n o p q r s t u v w x y z » A B C D E ¼ ½ F G ¾ H I J ¿ K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N á â ã O P Q R S ä å T U æ V W X ç Y Z a b c d e è é f ê ë ì g h i j k l í m n o î p ï q ð r s t u v w x ñ y z ò A B C D ó ô E F õ G H I ö J K L M N O P ÷ ø Q ù ú û R S T U V W ü ý X Y þ Z a b ÿ c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n ġ Ģ o p ģ q r Ĥ ĥ Ħ s t u v w x ħ Ĩ y ĩ z Ī ī Ĭ ĭ Į į İ ı IJ ij Ĵ ĵ Ķ A B C D E F ķ ĸ G Ĺ ĺ Ļ H I J K L M ļ Ľ N O P Q R S T U V W X Y Z a b c d e f ľ g h i j k l m n o p q r s t u v w x y z Ŀ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R š Ţ S ţ T Ť U V W X Y Z ť a b c Ŧ d e f ŧ g h i j k l m Ũ n o p q r s t u v w x ũ Ū y z ū Ŭ ŭ Ů ů A B C D E F G H I J K L M N O Ű ű P Q Ų R S T ų U V W X Y Z a Ŵ ŵ b Ŷ c ŷ d e f g h i Ÿ Ź j k ź l m n Ż ż o p q r s t Ž ž u ſ v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v ơ w x y z Ƣ ƣ Ƥ ƥ A B C Ʀ Ƨ D E F ƨ G H I J K L Ʃ M N O ƪ P Q R ƫ S T U V W X Y Ƭ Z a b c ƭ d e f g h i Ʈ Ư j k ư l m Ʊ Ʋ n Ƴ o p q r s ƴ Ƶ t ƶ u v w x y z Ʒ Ƹ ƹ ƺ ƻ Ƽ ƽ ƾ ƿ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l ǡ m n o p q r s t u v w x y z Ǣ A B C D E F G H ǣ I J K Ǥ L M N O P Q R S T U V W X Y Z a b c d e f g h ǥ i j k Ǧ l m n ǧ o p q r s t u v Ǩ w ǩ x y z Ǫ ǫ Ǭ ǭ Ǯ ǯ ǰ DZ Dz dz Ǵ A B C D E F G H I J K ǵ L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s Ƕ t u v Ƿ w x y Ǹ z ǹ Ǻ ǻ Ǽ ǽ Ǿ ǿ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z  ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ ȡ  Ž   ‘ ’ “ ” Ȣ • – — ˜ ™ š › œ  ž ȣ Ȥ Ÿ   ȥ A B C Ȧ D E F G ȧ H I Ȩ ȩ J Ȫ K ȫ L M N Ȭ O P ȭ Ȯ Q R ȯ S T U Ȱ V W X Y Z a b c d e ȱ f Ȳ g h i j k l ȳ ȴ m n ȵ o p q r s t u v w x y z Á  ȶ à ȷ Ä Å Æ Ç È É ȸ ȹ Ê Ë Ⱥ Ì Í Î Ȼ Ï Ð Ñ Ò Ó Ô Õ Ö ȼ × Ƚ Ø Ⱦ Ù Ú Û Ü Ý Þ ȿ ß à A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z ā Ă ă Ą ą Ć ć Ĉ ĉ Ċ ċ Č č Ď ď Đ đ Ē ē Ĕ ĕ Ė ė Ę ę Ě ě Ĝ ĝ Ğ ğ Ġ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z Ł ł Ń ń Ņ ņ Ň ň ʼn Ŋ ŋ Ō ō Ŏ ŏ Ő ő Œ œ Ŕ ŕ Ŗ ŗ Ř ř Ś ś Ŝ ŝ Ş ş Š A B C D E F G H I J K L M N O P Q R έ Т и Ң ң ҧ Ҩ ҩ Ҫ ҫ ҭ Ҳ Ҿ ե ի ծ ָ ܥ ݥ ߳ diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-windows-949.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-windows-949.html.headers new file mode 100644 index 00000000000..33119bcf87a --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars-windows-949.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=windows-949 diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars.html new file mode 100755 index 00000000000..22b48eb69a8 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars.html @@ -0,0 +1 @@ +euc-kr characters ز ߲ ߾ ܰ ӡ Ҭ ޿ ߭ կ Ӣ ˿ ֵ ֶ ʡ ӣ ʢ ٲ ܱ ۧ ʣ ̧ ۨ ߡ ߿ ʤ к Ү ׿ ܲ ٳ ή ٢ ֩ ֪ ܬ ߢ ξ ʾ л շ ˧ м ױ ʥ ֫ ҽ ̤ ٴ в ڨ ˡ ϡ س ܦ ʿ հ Ϣ ͯ ϣ Ͱ У ʦ ٣ ͱ Ͳ ګ ʧ ٤ Ϥ ʨ Ӻ Ӥ ʩ ϥ ޭ ҥ ַ ͳ ӥ Ф г ۩ ӻ Ϧ ϧ ̱ ˨ Ӧ פ ү Х ҳ ҿ ۪ ٵ ʹ ˩ Ҧ ش ץ ڬ ʪ ޮ ݡ ͵ ݢ ί ʫ Ϩ ݣ Ҽ ج һ ΰ ۫ Ͷ ڭ ܳ צ ߣ ˪ ˢ ھ ֹ ˫ ڮ չ ϩ ֺ ص ٶ ۬ ح Ҵ ܴ ݤ ͷ ˬ ֯ Ϫ Ω ܧ ˭ ˮ گ ض ӧ ޯ ۭ ڰ ҷ ֻ ̥ ο Ҹ ڿ ٷ ط α ˯ ޻ ̨ Ӽ ϫ н ۮ ݦ ̼ ҹ Ϭ ͸ ظ Һ Ц ̩ ߺ ؤ ٸ ٹ ߮ ҵ ӵ ̪ ӽ պ ջ ͹ ۯ ͺ ϭ ߤ ͻ ݧ ְ ް ݨ Ө ۰ ۱ ײ ө ۲ ٥ ܵ ܶ ع ʬ ٦ ͼ ٺ Ӿ غ ѡ Ѣ ڱ ߴ ѣ ۳ ͽ ʭ ʮ Ϯ ܷ ٻ ϯ ʯ Ұ ׳ ̫ ڲ ѥ ܸ Ѥ о ͡ ߵ ԡ β ٧ ڳ п ۴ ״ ; ϰ Ϊ Ч ק ټ й Ѧ Ӫ ̬ ޱ Ԣ ձ ղ ռ ѧ γ ʰ ϱ ֱ ޲ ӫ ߯ ϲ ٽ Ը پ ϳ Ѩ ޼ ϴ ߥ ˰ ڡ ̽ ѩ Ѫ ک Ϳ ֬ զ ׵ ޳ ݩ ѫ ԣ ר ӿ ߶ Ԥ ڴ ڵ Ӭ ׶ ϵ ٨ ݪ ͢ ۵ ԥ ػ ש خ ؼ ̾ ߻ Ӷ ̭ ֲ Ԧ ս ޴ Թ ׷ ޵ ճ δ ؽ ϶ ܹ ֭ է ֡ ߰ ԧ մ ݫ Ժ ޶ ٿ ڪ ̲ Ի ̳ Ϸ Լ ִ ӷ ϸ Ѭ ޷ ּ ʱ ߦ ը Ш Ϲ ׸ ѭ Ѯ ε ׹ إ ѯ ֢ Ѱ ζ ܺ ̴ ߧ ˣ д ͣ ׺ ѱ ˱ Ѳ ˲ ߨ Ӹ ʲ ܻ ئ ׻ ת ͤ ۡ ٩ Ԩ ڶ Խ ԩ ٪ ؾ ܭ ̡ Ϻ ϻ ӭ Щ ׼ ѳ ܡ ا ۶ ͥ ب Ѵ ѵ Ѷ ѷ Ѹ Ԫ Ծ ܼ Ҷ Ρ ԫ ʳ ͦ ϼ Ъ Ы ء ܽ Ӯ آ ݬ ֽ е ѹ ߩ η Կ ӯ ֳ ݭ վ ڷ أ ˳ ͧ Ь Ѻ ڢ ڣ ҡ ۷ ׫ ̿ թ ˴ ̵ Ͻ ˵ ѻ Ӱ ֣ ׬ ͨ ̶ ͩ տ ݮ θ Ѽ ˶ ڸ ־ ֿ ѽ Ͼ ұ Ѿ ޽ ڤ ֤ ѿ ̷ ۸ ˤ ޡ ݯ ݰ ˷ ۹ ̮ ݱ د ޢ Ͽ ˸ ۺ ݲ ݳ ߷ ۻ ʴ ʵ ٫ ݴ ذ ι ж ΢ ޣ Ԭ ؿ ժ Э ߪ ۼ ٬ ֥ ١ ߸ ׭ ڹ ˹ ߱ Ϋ ܢ յ ա ڥ ۽ ӱ ޤ ٭ բ ʶ ߹ Ҥ ٱ ʷ Ӳ ֮ ޥ գ ׮ ˺ ̸ Ю ̯ ԭ κ ݵ ͪ ۾ ʸ Σ ͫ Τ ަ ں ۿ ˻ ׽ ާ ̹ ܨ ͬ ݶ ޸ λ ި ʹ ޹ ݷ Ԯ ݸ Я ݹ ݺ ۢ ʺ Υ ԯ ԰ ʻ ֦ ܾ ո ܩ ܪ ʼ ̦ ڻ Ա Բ ֧ а Φ Գ ӹ ̺ ס ر ܫ դ ݻ ά Դ ީ ӳ ٮ լ ߫ ۣ ݼ ̢ ߼ з ˥ ۤ ٯ ˼ ֨ Χ Ե Ӵ ׯ ڦ ˦ б μ ܣ ݽ ݾ װ ˽ Զ ͭ ̰ ڧ ߬ ܤ ު ڼ Է ޺ Ψ ׾ ߽ ޫ ܿ ν ة ʽ ݿ խ ޾ ۥ ע С ۦ ت ˾ ܮ ٰ ̻ ͮ ն ث ̣ ڽ ܯ ެ ף A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z ¡ ¢ £ ¤ ¥ ¦ A B § C ¨ D © E F ª G H I J « ¬ K ­ ® ¯ L M N O P Q ° ± R S ² T U V ³ W X Y Z a b c ´ µ d · ¸ e f g h i j ¹ k l m º n o p q r s t u v w x y z » A B C D E ¼ ½ F G ¾ H I J ¿ K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N á â ã O P Q R S ä å T U æ V W X ç Y Z a b c d e è é f ê ë ì g h i j k l í m n o î p ï q ð r s t u v w x ñ y z ò A B C D ó ô E F õ G H I ö J K L M N O P ÷ ø Q ù ú û R S T U V W ü ý X Y þ Z a b ÿ c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n ġ Ģ o p ģ q r Ĥ ĥ Ħ s t u v w x ħ Ĩ y ĩ z Ī ī Ĭ ĭ Į į İ ı IJ ij Ĵ ĵ Ķ A B C D E F ķ ĸ G Ĺ ĺ Ļ H I J K L M ļ Ľ N O P Q R S T U V W X Y Z a b c d e f ľ g h i j k l m n o p q r s t u v w x y z Ŀ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R š Ţ S ţ T Ť U V W X Y Z ť a b c Ŧ d e f ŧ g h i j k l m Ũ n o p q r s t u v w x ũ Ū y z ū Ŭ ŭ Ů ů A B C D E F G H I J K L M N O Ű ű P Q Ų R S T ų U V W X Y Z a Ŵ ŵ b Ŷ c ŷ d e f g h i Ÿ Ź j k ź l m n Ż ż o p q r s t Ž ž u ſ v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v ơ w x y z Ƣ ƣ Ƥ ƥ A B C Ʀ Ƨ D E F ƨ G H I J K L Ʃ M N O ƪ P Q R ƫ S T U V W X Y Ƭ Z a b c ƭ d e f g h i Ʈ Ư j k ư l m Ʊ Ʋ n Ƴ o p q r s ƴ Ƶ t ƶ u v w x y z Ʒ Ƹ ƹ ƺ ƻ Ƽ ƽ ƾ ƿ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l ǡ m n o p q r s t u v w x y z Ǣ A B C D E F G H ǣ I J K Ǥ L M N O P Q R S T U V W X Y Z a b c d e f g h ǥ i j k Ǧ l m n ǧ o p q r s t u v Ǩ w ǩ x y z Ǫ ǫ Ǭ ǭ Ǯ ǯ ǰ DZ Dz dz Ǵ A B C D E F G H I J K ǵ L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s Ƕ t u v Ƿ w x y Ǹ z ǹ Ǻ ǻ Ǽ ǽ Ǿ ǿ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z  ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ ȡ  Ž   ‘ ’ “ ” Ȣ • – — ˜ ™ š › œ  ž ȣ Ȥ Ÿ   ȥ A B C Ȧ D E F G ȧ H I Ȩ ȩ J Ȫ K ȫ L M N Ȭ O P ȭ Ȯ Q R ȯ S T U Ȱ V W X Y Z a b c d e ȱ f Ȳ g h i j k l ȳ ȴ m n ȵ o p q r s t u v w x y z Á  ȶ à ȷ Ä Å Æ Ç È É ȸ ȹ Ê Ë Ⱥ Ì Í Î Ȼ Ï Ð Ñ Ò Ó Ô Õ Ö ȼ × Ƚ Ø Ⱦ Ù Ú Û Ü Ý Þ ȿ ß à A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z ā Ă ă Ą ą Ć ć Ĉ ĉ Ċ ċ Č č Ď ď Đ đ Ē ē Ĕ ĕ Ė ė Ę ę Ě ě Ĝ ĝ Ğ ğ Ġ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z Ł ł Ń ń Ņ ņ Ň ň ʼn Ŋ ŋ Ō ō Ŏ ŏ Ő ő Œ œ Ŕ ŕ Ŗ ŗ Ř ř Ś ś Ŝ ŝ Ş ş Š A B C D E F G H I J K L M N O P Q R έ Т и Ң ң ҧ Ҩ ҩ Ҫ ҫ ҭ Ҳ Ҿ ե ի ծ ָ ܥ ݥ ߳ diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars.html.headers new file mode 100644 index 00000000000..3a990e85bfb --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_chars.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=euc-kr diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_errors.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_errors.html new file mode 100755 index 00000000000..c311f289dce --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_errors.html @@ -0,0 +1,8 @@ + + + + +EUC-KR characters + + 1 [ + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_errors.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_errors.html.headers new file mode 100644 index 00000000000..3a990e85bfb --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_errors.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=euc-kr diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_index.js b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_index.js new file mode 100644 index 00000000000..e74d72c5922 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-korean/euc-kr/euckr_index.js @@ -0,0 +1,3 @@ +// index is EUC-KR index pointer, value is Unicode codepoint (dec) +// this is copy-pasted from the json version of the index belonging to the Encoding spec +var euckr = [44034,44035,44037,44038,44043,44044,44045,44046,44047,44056,44062,44063,44065,44066,44067,44069,44070,44071,44072,44073,44074,44075,44078,44082,44083,44084,null,null,null,null,null,null,44085,44086,44087,44090,44091,44093,44094,44095,44097,44098,44099,44100,44101,44102,44103,44104,44105,44106,44108,44110,44111,44112,44113,44114,44115,44117,null,null,null,null,null,null,44118,44119,44121,44122,44123,44125,44126,44127,44128,44129,44130,44131,44132,44133,44134,44135,44136,44137,44138,44139,44140,44141,44142,44143,44146,44147,44149,44150,44153,44155,44156,44157,44158,44159,44162,44167,44168,44173,44174,44175,44177,44178,44179,44181,44182,44183,44184,44185,44186,44187,44190,44194,44195,44196,44197,44198,44199,44203,44205,44206,44209,44210,44211,44212,44213,44214,44215,44218,44222,44223,44224,44226,44227,44229,44230,44231,44233,44234,44235,44237,44238,44239,44240,44241,44242,44243,44244,44246,44248,44249,44250,44251,44252,44253,44254,44255,44258,44259,44261,44262,44265,44267,44269,44270,44274,44276,44279,44280,44281,44282,44283,44286,44287,44289,44290,44291,44293,44295,44296,44297,44298,44299,44302,44304,44306,44307,44308,44309,44310,44311,44313,44314,44315,44317,44318,44319,44321,44322,44323,44324,44325,44326,44327,44328,44330,44331,44334,44335,44336,44337,44338,44339,null,null,null,null,null,null,44342,44343,44345,44346,44347,44349,44350,44351,44352,44353,44354,44355,44358,44360,44362,44363,44364,44365,44366,44367,44369,44370,44371,44373,44374,44375,null,null,null,null,null,null,44377,44378,44379,44380,44381,44382,44383,44384,44386,44388,44389,44390,44391,44392,44393,44394,44395,44398,44399,44401,44402,44407,44408,44409,44410,44414,44416,44419,44420,44421,44422,44423,44426,44427,44429,44430,44431,44433,44434,44435,44436,44437,44438,44439,44440,44441,44442,44443,44446,44447,44448,44449,44450,44451,44453,44454,44455,44456,44457,44458,44459,44460,44461,44462,44463,44464,44465,44466,44467,44468,44469,44470,44472,44473,44474,44475,44476,44477,44478,44479,44482,44483,44485,44486,44487,44489,44490,44491,44492,44493,44494,44495,44498,44500,44501,44502,44503,44504,44505,44506,44507,44509,44510,44511,44513,44514,44515,44517,44518,44519,44520,44521,44522,44523,44524,44525,44526,44527,44528,44529,44530,44531,44532,44533,44534,44535,44538,44539,44541,44542,44546,44547,44548,44549,44550,44551,44554,44556,44558,44559,44560,44561,44562,44563,44565,44566,44567,44568,44569,44570,44571,44572,null,null,null,null,null,null,44573,44574,44575,44576,44577,44578,44579,44580,44581,44582,44583,44584,44585,44586,44587,44588,44589,44590,44591,44594,44595,44597,44598,44601,44603,44604,null,null,null,null,null,null,44605,44606,44607,44610,44612,44615,44616,44617,44619,44623,44625,44626,44627,44629,44631,44632,44633,44634,44635,44638,44642,44643,44644,44646,44647,44650,44651,44653,44654,44655,44657,44658,44659,44660,44661,44662,44663,44666,44670,44671,44672,44673,44674,44675,44678,44679,44680,44681,44682,44683,44685,44686,44687,44688,44689,44690,44691,44692,44693,44694,44695,44696,44697,44698,44699,44700,44701,44702,44703,44704,44705,44706,44707,44708,44709,44710,44711,44712,44713,44714,44715,44716,44717,44718,44719,44720,44721,44722,44723,44724,44725,44726,44727,44728,44729,44730,44731,44735,44737,44738,44739,44741,44742,44743,44744,44745,44746,44747,44750,44754,44755,44756,44757,44758,44759,44762,44763,44765,44766,44767,44768,44769,44770,44771,44772,44773,44774,44775,44777,44778,44780,44782,44783,44784,44785,44786,44787,44789,44790,44791,44793,44794,44795,44797,44798,44799,44800,44801,44802,44803,44804,44805,null,null,null,null,null,null,44806,44809,44810,44811,44812,44814,44815,44817,44818,44819,44820,44821,44822,44823,44824,44825,44826,44827,44828,44829,44830,44831,44832,44833,44834,44835,null,null,null,null,null,null,44836,44837,44838,44839,44840,44841,44842,44843,44846,44847,44849,44851,44853,44854,44855,44856,44857,44858,44859,44862,44864,44868,44869,44870,44871,44874,44875,44876,44877,44878,44879,44881,44882,44883,44884,44885,44886,44887,44888,44889,44890,44891,44894,44895,44896,44897,44898,44899,44902,44903,44904,44905,44906,44907,44908,44909,44910,44911,44912,44913,44914,44915,44916,44917,44918,44919,44920,44922,44923,44924,44925,44926,44927,44929,44930,44931,44933,44934,44935,44937,44938,44939,44940,44941,44942,44943,44946,44947,44948,44950,44951,44952,44953,44954,44955,44957,44958,44959,44960,44961,44962,44963,44964,44965,44966,44967,44968,44969,44970,44971,44972,44973,44974,44975,44976,44977,44978,44979,44980,44981,44982,44983,44986,44987,44989,44990,44991,44993,44994,44995,44996,44997,44998,45002,45004,45007,45008,45009,45010,45011,45013,45014,45015,45016,45017,45018,45019,45021,45022,45023,45024,45025,null,null,null,null,null,null,45026,45027,45028,45029,45030,45031,45034,45035,45036,45037,45038,45039,45042,45043,45045,45046,45047,45049,45050,45051,45052,45053,45054,45055,45058,45059,null,null,null,null,null,null,45061,45062,45063,45064,45065,45066,45067,45069,45070,45071,45073,45074,45075,45077,45078,45079,45080,45081,45082,45083,45086,45087,45088,45089,45090,45091,45092,45093,45094,45095,45097,45098,45099,45100,45101,45102,45103,45104,45105,45106,45107,45108,45109,45110,45111,45112,45113,45114,45115,45116,45117,45118,45119,45120,45121,45122,45123,45126,45127,45129,45131,45133,45135,45136,45137,45138,45142,45144,45146,45147,45148,45150,45151,45152,45153,45154,45155,45156,45157,45158,45159,45160,45161,45162,45163,45164,45165,45166,45167,45168,45169,45170,45171,45172,45173,45174,45175,45176,45177,45178,45179,45182,45183,45185,45186,45187,45189,45190,45191,45192,45193,45194,45195,45198,45200,45202,45203,45204,45205,45206,45207,45211,45213,45214,45219,45220,45221,45222,45223,45226,45232,45234,45238,45239,45241,45242,45243,45245,45246,45247,45248,45249,45250,45251,45254,45258,45259,45260,45261,45262,45263,45266,null,null,null,null,null,null,45267,45269,45270,45271,45273,45274,45275,45276,45277,45278,45279,45281,45282,45283,45284,45286,45287,45288,45289,45290,45291,45292,45293,45294,45295,45296,null,null,null,null,null,null,45297,45298,45299,45300,45301,45302,45303,45304,45305,45306,45307,45308,45309,45310,45311,45312,45313,45314,45315,45316,45317,45318,45319,45322,45325,45326,45327,45329,45332,45333,45334,45335,45338,45342,45343,45344,45345,45346,45350,45351,45353,45354,45355,45357,45358,45359,45360,45361,45362,45363,45366,45370,45371,45372,45373,45374,45375,45378,45379,45381,45382,45383,45385,45386,45387,45388,45389,45390,45391,45394,45395,45398,45399,45401,45402,45403,45405,45406,45407,45409,45410,45411,45412,45413,45414,45415,45416,45417,45418,45419,45420,45421,45422,45423,45424,45425,45426,45427,45428,45429,45430,45431,45434,45435,45437,45438,45439,45441,45443,45444,45445,45446,45447,45450,45452,45454,45455,45456,45457,45461,45462,45463,45465,45466,45467,45469,45470,45471,45472,45473,45474,45475,45476,45477,45478,45479,45481,45482,45483,45484,45485,45486,45487,45488,45489,45490,45491,45492,45493,45494,45495,45496,null,null,null,null,null,null,45497,45498,45499,45500,45501,45502,45503,45504,45505,45506,45507,45508,45509,45510,45511,45512,45513,45514,45515,45517,45518,45519,45521,45522,45523,45525,null,null,null,null,null,null,45526,45527,45528,45529,45530,45531,45534,45536,45537,45538,45539,45540,45541,45542,45543,45546,45547,45549,45550,45551,45553,45554,45555,45556,45557,45558,45559,45560,45562,45564,45566,45567,45568,45569,45570,45571,45574,45575,45577,45578,45581,45582,45583,45584,45585,45586,45587,45590,45592,45594,45595,45596,45597,45598,45599,45601,45602,45603,45604,45605,45606,45607,45608,45609,45610,45611,45612,45613,45614,45615,45616,45617,45618,45619,45621,45622,45623,45624,45625,45626,45627,45629,45630,45631,45632,45633,45634,45635,45636,45637,45638,45639,45640,45641,45642,45643,45644,45645,45646,45647,45648,45649,45650,45651,45652,45653,45654,45655,45657,45658,45659,45661,45662,45663,45665,45666,45667,45668,45669,45670,45671,45674,45675,45676,45677,45678,45679,45680,45681,45682,45683,45686,45687,45688,45689,45690,45691,45693,45694,45695,45696,45697,45698,45699,45702,45703,45704,45706,45707,45708,45709,45710,null,null,null,null,null,null,45711,45714,45715,45717,45718,45719,45723,45724,45725,45726,45727,45730,45732,45735,45736,45737,45739,45741,45742,45743,45745,45746,45747,45749,45750,45751,null,null,null,null,null,null,45752,45753,45754,45755,45756,45757,45758,45759,45760,45761,45762,45763,45764,45765,45766,45767,45770,45771,45773,45774,45775,45777,45779,45780,45781,45782,45783,45786,45788,45790,45791,45792,45793,45795,45799,45801,45802,45808,45809,45810,45814,45820,45821,45822,45826,45827,45829,45830,45831,45833,45834,45835,45836,45837,45838,45839,45842,45846,45847,45848,45849,45850,45851,45853,45854,45855,45856,45857,45858,45859,45860,45861,45862,45863,45864,45865,45866,45867,45868,45869,45870,45871,45872,45873,45874,45875,45876,45877,45878,45879,45880,45881,45882,45883,45884,45885,45886,45887,45888,45889,45890,45891,45892,45893,45894,45895,45896,45897,45898,45899,45900,45901,45902,45903,45904,45905,45906,45907,45911,45913,45914,45917,45920,45921,45922,45923,45926,45928,45930,45932,45933,45935,45938,45939,45941,45942,45943,45945,45946,45947,45948,45949,45950,45951,45954,45958,45959,45960,45961,45962,45963,45965,null,null,null,null,null,null,45966,45967,45969,45970,45971,45973,45974,45975,45976,45977,45978,45979,45980,45981,45982,45983,45986,45987,45988,45989,45990,45991,45993,45994,45995,45997,null,null,null,null,null,null,45998,45999,46000,46001,46002,46003,46004,46005,46006,46007,46008,46009,46010,46011,46012,46013,46014,46015,46016,46017,46018,46019,46022,46023,46025,46026,46029,46031,46033,46034,46035,46038,46040,46042,46044,46046,46047,46049,46050,46051,46053,46054,46055,46057,46058,46059,46060,46061,46062,46063,46064,46065,46066,46067,46068,46069,46070,46071,46072,46073,46074,46075,46077,46078,46079,46080,46081,46082,46083,46084,46085,46086,46087,46088,46089,46090,46091,46092,46093,46094,46095,46097,46098,46099,46100,46101,46102,46103,46105,46106,46107,46109,46110,46111,46113,46114,46115,46116,46117,46118,46119,46122,46124,46125,46126,46127,46128,46129,46130,46131,46133,46134,46135,46136,46137,46138,46139,46140,46141,46142,46143,46144,46145,46146,46147,46148,46149,46150,46151,46152,46153,46154,46155,46156,46157,46158,46159,46162,46163,46165,46166,46167,46169,46170,46171,46172,46173,46174,46175,46178,46180,46182,null,null,null,null,null,null,46183,46184,46185,46186,46187,46189,46190,46191,46192,46193,46194,46195,46196,46197,46198,46199,46200,46201,46202,46203,46204,46205,46206,46207,46209,46210,null,null,null,null,null,null,46211,46212,46213,46214,46215,46217,46218,46219,46220,46221,46222,46223,46224,46225,46226,46227,46228,46229,46230,46231,46232,46233,46234,46235,46236,46238,46239,46240,46241,46242,46243,46245,46246,46247,46249,46250,46251,46253,46254,46255,46256,46257,46258,46259,46260,46262,46264,46266,46267,46268,46269,46270,46271,46273,46274,46275,46277,46278,46279,46281,46282,46283,46284,46285,46286,46287,46289,46290,46291,46292,46294,46295,46296,46297,46298,46299,46302,46303,46305,46306,46309,46311,46312,46313,46314,46315,46318,46320,46322,46323,46324,46325,46326,46327,46329,46330,46331,46332,46333,46334,46335,46336,46337,46338,46339,46340,46341,46342,46343,46344,46345,46346,46347,46348,46349,46350,46351,46352,46353,46354,46355,46358,46359,46361,46362,46365,46366,46367,46368,46369,46370,46371,46374,46379,46380,46381,46382,46383,46386,46387,46389,46390,46391,46393,46394,46395,46396,46397,46398,46399,46402,46406,null,null,null,null,null,null,46407,46408,46409,46410,46414,46415,46417,46418,46419,46421,46422,46423,46424,46425,46426,46427,46430,46434,46435,46436,46437,46438,46439,46440,46441,46442,null,null,null,null,null,null,46443,46444,46445,46446,46447,46448,46449,46450,46451,46452,46453,46454,46455,46456,46457,46458,46459,46460,46461,46462,46463,46464,46465,46466,46467,46468,46469,46470,46471,46472,46473,46474,46475,46476,46477,46478,46479,46480,46481,46482,46483,46484,46485,46486,46487,46488,46489,46490,46491,46492,46493,46494,46495,46498,46499,46501,46502,46503,46505,46508,46509,46510,46511,46514,46518,46519,46520,46521,46522,46526,46527,46529,46530,46531,46533,46534,46535,46536,46537,46538,46539,46542,46546,46547,46548,46549,46550,46551,46553,46554,46555,46556,46557,46558,46559,46560,46561,46562,46563,46564,46565,46566,46567,46568,46569,46570,46571,46573,46574,46575,46576,46577,46578,46579,46580,46581,46582,46583,46584,46585,46586,46587,46588,46589,46590,46591,46592,46593,46594,46595,46596,46597,46598,46599,46600,46601,46602,46603,46604,46605,46606,46607,46610,46611,46613,46614,46615,46617,46618,46619,46620,46621,null,null,null,null,null,null,46622,46623,46624,46625,46626,46627,46628,46630,46631,46632,46633,46634,46635,46637,46638,46639,46640,46641,46642,46643,46645,46646,46647,46648,46649,46650,null,null,null,null,null,null,46651,46652,46653,46654,46655,46656,46657,46658,46659,46660,46661,46662,46663,46665,46666,46667,46668,46669,46670,46671,46672,46673,46674,46675,46676,46677,46678,46679,46680,46681,46682,46683,46684,46685,46686,46687,46688,46689,46690,46691,46693,46694,46695,46697,46698,46699,46700,46701,46702,46703,46704,46705,46706,46707,46708,46709,46710,46711,46712,46713,46714,46715,46716,46717,46718,46719,46720,46721,46722,46723,46724,46725,46726,46727,46728,46729,46730,46731,46732,46733,46734,46735,46736,46737,46738,46739,46740,46741,46742,46743,46744,46745,46746,46747,46750,46751,46753,46754,46755,46757,46758,46759,46760,46761,46762,46765,46766,46767,46768,46770,46771,46772,46773,46774,46775,46776,46777,46778,46779,46780,46781,46782,46783,46784,46785,46786,46787,46788,46789,46790,46791,46792,46793,46794,46795,46796,46797,46798,46799,46800,46801,46802,46803,46805,46806,46807,46808,46809,46810,46811,46812,46813,null,null,null,null,null,null,46814,46815,46816,46817,46818,46819,46820,46821,46822,46823,46824,46825,46826,46827,46828,46829,46830,46831,46833,46834,46835,46837,46838,46839,46841,46842,null,null,null,null,null,null,46843,46844,46845,46846,46847,46850,46851,46852,46854,46855,46856,46857,46858,46859,46860,46861,46862,46863,46864,46865,46866,46867,46868,46869,46870,46871,46872,46873,46874,46875,46876,46877,46878,46879,46880,46881,46882,46883,46884,46885,46886,46887,46890,46891,46893,46894,46897,46898,46899,46900,46901,46902,46903,46906,46908,46909,46910,46911,46912,46913,46914,46915,46917,46918,46919,46921,46922,46923,46925,46926,46927,46928,46929,46930,46931,46934,46935,46936,46937,46938,46939,46940,46941,46942,46943,46945,46946,46947,46949,46950,46951,46953,46954,46955,46956,46957,46958,46959,46962,46964,46966,46967,46968,46969,46970,46971,46974,46975,46977,46978,46979,46981,46982,46983,46984,46985,46986,46987,46990,46995,46996,46997,47002,47003,47005,47006,47007,47009,47010,47011,47012,47013,47014,47015,47018,47022,47023,47024,47025,47026,47027,47030,47031,47033,47034,47035,47036,47037,47038,47039,47040,47041,null,null,null,null,null,null,47042,47043,47044,47045,47046,47048,47050,47051,47052,47053,47054,47055,47056,47057,47058,47059,47060,47061,47062,47063,47064,47065,47066,47067,47068,47069,null,null,null,null,null,null,47070,47071,47072,47073,47074,47075,47076,47077,47078,47079,47080,47081,47082,47083,47086,47087,47089,47090,47091,47093,47094,47095,47096,47097,47098,47099,47102,47106,47107,47108,47109,47110,47114,47115,47117,47118,47119,47121,47122,47123,47124,47125,47126,47127,47130,47132,47134,47135,47136,47137,47138,47139,47142,47143,47145,47146,47147,47149,47150,47151,47152,47153,47154,47155,47158,47162,47163,47164,47165,47166,47167,47169,47170,47171,47173,47174,47175,47176,47177,47178,47179,47180,47181,47182,47183,47184,47186,47188,47189,47190,47191,47192,47193,47194,47195,47198,47199,47201,47202,47203,47205,47206,47207,47208,47209,47210,47211,47214,47216,47218,47219,47220,47221,47222,47223,47225,47226,47227,47229,47230,47231,47232,47233,47234,47235,47236,47237,47238,47239,47240,47241,47242,47243,47244,47246,47247,47248,47249,47250,47251,47252,47253,47254,47255,47256,47257,47258,47259,47260,47261,47262,47263,null,null,null,null,null,null,47264,47265,47266,47267,47268,47269,47270,47271,47273,47274,47275,47276,47277,47278,47279,47281,47282,47283,47285,47286,47287,47289,47290,47291,47292,47293,null,null,null,null,null,null,47294,47295,47298,47300,47302,47303,47304,47305,47306,47307,47309,47310,47311,47313,47314,47315,47317,47318,47319,47320,47321,47322,47323,47324,47326,47328,47330,47331,47332,47333,47334,47335,47338,47339,47341,47342,47343,47345,47346,47347,47348,47349,47350,47351,47354,47356,47358,47359,47360,47361,47362,47363,47365,47366,47367,47368,47369,47370,47371,47372,47373,47374,47375,47376,47377,47378,47379,47380,47381,47382,47383,47385,47386,47387,47388,47389,47390,47391,47393,47394,47395,47396,47397,47398,47399,47400,47401,47402,47403,47404,47405,47406,47407,47408,47409,47410,47411,47412,47413,47414,47415,47416,47417,47418,47419,47422,47423,47425,47426,47427,47429,47430,47431,47432,47433,47434,47435,47437,47438,47440,47442,47443,47444,47445,47446,47447,47450,47451,47453,47454,47455,47457,47458,47459,47460,47461,47462,47463,47466,47468,47470,47471,47472,47473,47474,47475,47478,47479,47481,47482,47483,47485,null,null,null,null,null,null,47486,47487,47488,47489,47490,47491,47494,47496,47499,47500,47503,47504,47505,47506,47507,47508,47509,47510,47511,47512,47513,47514,47515,47516,47517,47518,null,null,null,null,null,null,47519,47520,47521,47522,47523,47524,47525,47526,47527,47528,47529,47530,47531,47534,47535,47537,47538,47539,47541,47542,47543,47544,47545,47546,47547,47550,47552,47554,47555,47556,47557,47558,47559,47562,47563,47565,47571,47572,47573,47574,47575,47578,47580,47583,47584,47586,47590,47591,47593,47594,47595,47597,47598,47599,47600,47601,47602,47603,47606,47611,47612,47613,47614,47615,47618,47619,47620,47621,47622,47623,47625,47626,47627,47628,47629,47630,47631,47632,47633,47634,47635,47636,47638,47639,47640,47641,47642,47643,47644,47645,47646,47647,47648,47649,47650,47651,47652,47653,47654,47655,47656,47657,47658,47659,47660,47661,47662,47663,47664,47665,47666,47667,47668,47669,47670,47671,47674,47675,47677,47678,47679,47681,47683,47684,47685,47686,47687,47690,47692,47695,47696,47697,47698,47702,47703,47705,47706,47707,47709,47710,47711,47712,47713,47714,47715,47718,47722,47723,47724,47725,47726,47727,null,null,null,null,null,null,47730,47731,47733,47734,47735,47737,47738,47739,47740,47741,47742,47743,47744,47745,47746,47750,47752,47753,47754,47755,47757,47758,47759,47760,47761,47762,null,null,null,null,null,null,47763,47764,47765,47766,47767,47768,47769,47770,47771,47772,47773,47774,47775,47776,47777,47778,47779,47780,47781,47782,47783,47786,47789,47790,47791,47793,47795,47796,47797,47798,47799,47802,47804,47806,47807,47808,47809,47810,47811,47813,47814,47815,47817,47818,47819,47820,47821,47822,47823,47824,47825,47826,47827,47828,47829,47830,47831,47834,47835,47836,47837,47838,47839,47840,47841,47842,47843,47844,47845,47846,47847,47848,47849,47850,47851,47852,47853,47854,47855,47856,47857,47858,47859,47860,47861,47862,47863,47864,47865,47866,47867,47869,47870,47871,47873,47874,47875,47877,47878,47879,47880,47881,47882,47883,47884,47886,47888,47890,47891,47892,47893,47894,47895,47897,47898,47899,47901,47902,47903,47905,47906,47907,47908,47909,47910,47911,47912,47914,47916,47917,47918,47919,47920,47921,47922,47923,47927,47929,47930,47935,47936,47937,47938,47939,47942,47944,47946,47947,47948,47950,47953,47954,null,null,null,null,null,null,47955,47957,47958,47959,47961,47962,47963,47964,47965,47966,47967,47968,47970,47972,47973,47974,47975,47976,47977,47978,47979,47981,47982,47983,47984,47985,null,null,null,null,null,null,47986,47987,47988,47989,47990,47991,47992,47993,47994,47995,47996,47997,47998,47999,48000,48001,48002,48003,48004,48005,48006,48007,48009,48010,48011,48013,48014,48015,48017,48018,48019,48020,48021,48022,48023,48024,48025,48026,48027,48028,48029,48030,48031,48032,48033,48034,48035,48037,48038,48039,48041,48042,48043,48045,48046,48047,48048,48049,48050,48051,48053,48054,48056,48057,48058,48059,48060,48061,48062,48063,48065,48066,48067,48069,48070,48071,48073,48074,48075,48076,48077,48078,48079,48081,48082,48084,48085,48086,48087,48088,48089,48090,48091,48092,48093,48094,48095,48096,48097,48098,48099,48100,48101,48102,48103,48104,48105,48106,48107,48108,48109,48110,48111,48112,48113,48114,48115,48116,48117,48118,48119,48122,48123,48125,48126,48129,48131,48132,48133,48134,48135,48138,48142,48144,48146,48147,48153,48154,48160,48161,48162,48163,48166,48168,48170,48171,48172,48174,48175,48178,48179,48181,null,null,null,null,null,null,48182,48183,48185,48186,48187,48188,48189,48190,48191,48194,48198,48199,48200,48202,48203,48206,48207,48209,48210,48211,48212,48213,48214,48215,48216,48217,null,null,null,null,null,null,48218,48219,48220,48222,48223,48224,48225,48226,48227,48228,48229,48230,48231,48232,48233,48234,48235,48236,48237,48238,48239,48240,48241,48242,48243,48244,48245,48246,48247,48248,48249,48250,48251,48252,48253,48254,48255,48256,48257,48258,48259,48262,48263,48265,48266,48269,48271,48272,48273,48274,48275,48278,48280,48283,48284,48285,48286,48287,48290,48291,48293,48294,48297,48298,48299,48300,48301,48302,48303,48306,48310,48311,48312,48313,48314,48315,48318,48319,48321,48322,48323,48325,48326,48327,48328,48329,48330,48331,48332,48334,48338,48339,48340,48342,48343,48345,48346,48347,48349,48350,48351,48352,48353,48354,48355,48356,48357,48358,48359,48360,48361,48362,48363,48364,48365,48366,48367,48368,48369,48370,48371,48375,48377,48378,48379,48381,48382,48383,48384,48385,48386,48387,48390,48392,48394,48395,48396,48397,48398,48399,48401,48402,48403,48405,48406,48407,48408,48409,48410,48411,48412,48413,null,null,null,null,null,null,48414,48415,48416,48417,48418,48419,48421,48422,48423,48424,48425,48426,48427,48429,48430,48431,48432,48433,48434,48435,48436,48437,48438,48439,48440,48441,null,null,null,null,null,null,48442,48443,48444,48445,48446,48447,48449,48450,48451,48452,48453,48454,48455,48458,48459,48461,48462,48463,48465,48466,48467,48468,48469,48470,48471,48474,48475,48476,48477,48478,48479,48480,48481,48482,48483,48485,48486,48487,48489,48490,48491,48492,48493,48494,48495,48496,48497,48498,48499,48500,48501,48502,48503,48504,48505,48506,48507,48508,48509,48510,48511,48514,48515,48517,48518,48523,48524,48525,48526,48527,48530,48532,48534,48535,48536,48539,48541,48542,48543,48544,48545,48546,48547,48549,48550,48551,48552,48553,48554,48555,48556,48557,48558,48559,48561,48562,48563,48564,48565,48566,48567,48569,48570,48571,48572,48573,48574,48575,48576,48577,48578,48579,48580,48581,48582,48583,48584,48585,48586,48587,48588,48589,48590,48591,48592,48593,48594,48595,48598,48599,48601,48602,48603,48605,48606,48607,48608,48609,48610,48611,48612,48613,48614,48615,48616,48618,48619,48620,48621,48622,48623,48625,null,null,null,null,null,null,48626,48627,48629,48630,48631,48633,48634,48635,48636,48637,48638,48639,48641,48642,48644,48646,48647,48648,48649,48650,48651,48654,48655,48657,48658,48659,null,null,null,null,null,null,48661,48662,48663,48664,48665,48666,48667,48670,48672,48673,48674,48675,48676,48677,48678,48679,48680,48681,48682,48683,48684,48685,48686,48687,48688,48689,48690,48691,48692,48693,48694,48695,48696,48697,48698,48699,48700,48701,48702,48703,48704,48705,48706,48707,48710,48711,48713,48714,48715,48717,48719,48720,48721,48722,48723,48726,48728,48732,48733,48734,48735,48738,48739,48741,48742,48743,48745,48747,48748,48749,48750,48751,48754,48758,48759,48760,48761,48762,48766,48767,48769,48770,48771,48773,48774,48775,48776,48777,48778,48779,48782,48786,48787,48788,48789,48790,48791,48794,48795,48796,48797,48798,48799,48800,48801,48802,48803,48804,48805,48806,48807,48809,48810,48811,48812,48813,48814,48815,48816,48817,48818,48819,48820,48821,48822,48823,48824,48825,48826,48827,48828,48829,48830,48831,48832,48833,48834,48835,48836,48837,48838,48839,48840,48841,48842,48843,48844,48845,48846,48847,48850,48851,null,null,null,null,null,null,48853,48854,48857,48858,48859,48860,48861,48862,48863,48865,48866,48870,48871,48872,48873,48874,48875,48877,48878,48879,48880,48881,48882,48883,48884,48885,null,null,null,null,null,null,48886,48887,48888,48889,48890,48891,48892,48893,48894,48895,48896,48898,48899,48900,48901,48902,48903,48906,48907,48908,48909,48910,48911,48912,48913,48914,48915,48916,48917,48918,48919,48922,48926,48927,48928,48929,48930,48931,48932,48933,48934,48935,48936,48937,48938,48939,48940,48941,48942,48943,48944,48945,48946,48947,48948,48949,48950,48951,48952,48953,48954,48955,48956,48957,48958,48959,48962,48963,48965,48966,48967,48969,48970,48971,48972,48973,48974,48975,48978,48979,48980,48982,48983,48984,48985,48986,48987,48988,48989,48990,48991,48992,48993,48994,48995,48996,48997,48998,48999,49000,49001,49002,49003,49004,49005,49006,49007,49008,49009,49010,49011,49012,49013,49014,49015,49016,49017,49018,49019,49020,49021,49022,49023,49024,49025,49026,49027,49028,49029,49030,49031,49032,49033,49034,49035,49036,49037,49038,49039,49040,49041,49042,49043,49045,49046,49047,49048,49049,49050,49051,49052,49053,null,null,null,null,null,null,49054,49055,49056,49057,49058,49059,49060,49061,49062,49063,49064,49065,49066,49067,49068,49069,49070,49071,49073,49074,49075,49076,49077,49078,49079,49080,null,null,null,null,null,null,49081,49082,49083,49084,49085,49086,49087,49088,49089,49090,49091,49092,49094,49095,49096,49097,49098,49099,49102,49103,49105,49106,49107,49109,49110,49111,49112,49113,49114,49115,49117,49118,49120,49122,49123,49124,49125,49126,49127,49128,49129,49130,49131,49132,49133,49134,49135,49136,49137,49138,49139,49140,49141,49142,49143,49144,49145,49146,49147,49148,49149,49150,49151,49152,49153,49154,49155,49156,49157,49158,49159,49160,49161,49162,49163,49164,49165,49166,49167,49168,49169,49170,49171,49172,49173,49174,49175,49176,49177,49178,49179,49180,49181,49182,49183,49184,49185,49186,49187,49188,49189,49190,49191,49192,49193,49194,49195,49196,49197,49198,49199,49200,49201,49202,49203,49204,49205,49206,49207,49208,49209,49210,49211,49213,49214,49215,49216,49217,49218,49219,49220,49221,49222,49223,49224,49225,49226,49227,49228,49229,49230,49231,49232,49234,49235,49236,49237,49238,49239,49241,49242,49243,null,null,null,null,null,null,49245,49246,49247,49249,49250,49251,49252,49253,49254,49255,49258,49259,49260,49261,49262,49263,49264,49265,49266,49267,49268,49269,49270,49271,49272,49273,null,null,null,null,null,null,49274,49275,49276,49277,49278,49279,49280,49281,49282,49283,49284,49285,49286,49287,49288,49289,49290,49291,49292,49293,49294,49295,49298,49299,49301,49302,49303,49305,49306,49307,49308,49309,49310,49311,49314,49316,49318,49319,49320,49321,49322,49323,49326,49329,49330,49335,49336,49337,49338,49339,49342,49346,49347,49348,49350,49351,49354,49355,49357,49358,49359,49361,49362,49363,49364,49365,49366,49367,49370,49374,49375,49376,49377,49378,49379,49382,49383,49385,49386,49387,49389,49390,49391,49392,49393,49394,49395,49398,49400,49402,49403,49404,49405,49406,49407,49409,49410,49411,49413,49414,49415,49417,49418,49419,49420,49421,49422,49423,49425,49426,49427,49428,49430,49431,49432,49433,49434,49435,49441,49442,49445,49448,49449,49450,49451,49454,49458,49459,49460,49461,49463,49466,49467,49469,49470,49471,49473,49474,49475,49476,49477,49478,49479,49482,49486,49487,49488,49489,49490,49491,49494,49495,null,null,null,null,null,null,49497,49498,49499,49501,49502,49503,49504,49505,49506,49507,49510,49514,49515,49516,49517,49518,49519,49521,49522,49523,49525,49526,49527,49529,49530,49531,null,null,null,null,null,null,49532,49533,49534,49535,49536,49537,49538,49539,49540,49542,49543,49544,49545,49546,49547,49551,49553,49554,49555,49557,49559,49560,49561,49562,49563,49566,49568,49570,49571,49572,49574,49575,49578,49579,49581,49582,49583,49585,49586,49587,49588,49589,49590,49591,49592,49593,49594,49595,49596,49598,49599,49600,49601,49602,49603,49605,49606,49607,49609,49610,49611,49613,49614,49615,49616,49617,49618,49619,49621,49622,49625,49626,49627,49628,49629,49630,49631,49633,49634,49635,49637,49638,49639,49641,49642,49643,49644,49645,49646,49647,49650,49652,49653,49654,49655,49656,49657,49658,49659,49662,49663,49665,49666,49667,49669,49670,49671,49672,49673,49674,49675,49678,49680,49682,49683,49684,49685,49686,49687,49690,49691,49693,49694,49697,49698,49699,49700,49701,49702,49703,49706,49708,49710,49712,49715,49717,49718,49719,49720,49721,49722,49723,49724,49725,49726,49727,49728,49729,49730,49731,49732,49733,null,null,null,null,null,null,49734,49735,49737,49738,49739,49740,49741,49742,49743,49746,49747,49749,49750,49751,49753,49754,49755,49756,49757,49758,49759,49761,49762,49763,49764,49766,null,null,null,null,null,null,49767,49768,49769,49770,49771,49774,49775,49777,49778,49779,49781,49782,49783,49784,49785,49786,49787,49790,49792,49794,49795,49796,49797,49798,49799,49802,49803,49804,49805,49806,49807,49809,49810,49811,49812,49813,49814,49815,49817,49818,49820,49822,49823,49824,49825,49826,49827,49830,49831,49833,49834,49835,49838,49839,49840,49841,49842,49843,49846,49848,49850,49851,49852,49853,49854,49855,49856,49857,49858,49859,49860,49861,49862,49863,49864,49865,49866,49867,49868,49869,49870,49871,49872,49873,49874,49875,49876,49877,49878,49879,49880,49881,49882,49883,49886,49887,49889,49890,49893,49894,49895,49896,49897,49898,49902,49904,49906,49907,49908,49909,49911,49914,49917,49918,49919,49921,49922,49923,49924,49925,49926,49927,49930,49931,49934,49935,49936,49937,49938,49942,49943,49945,49946,49947,49949,49950,49951,49952,49953,49954,49955,49958,49959,49962,49963,49964,49965,49966,49967,49968,49969,49970,null,null,null,null,null,null,49971,49972,49973,49974,49975,49976,49977,49978,49979,49980,49981,49982,49983,49984,49985,49986,49987,49988,49990,49991,49992,49993,49994,49995,49996,49997,null,null,null,null,null,null,49998,49999,50000,50001,50002,50003,50004,50005,50006,50007,50008,50009,50010,50011,50012,50013,50014,50015,50016,50017,50018,50019,50020,50021,50022,50023,50026,50027,50029,50030,50031,50033,50035,50036,50037,50038,50039,50042,50043,50046,50047,50048,50049,50050,50051,50053,50054,50055,50057,50058,50059,50061,50062,50063,50064,50065,50066,50067,50068,50069,50070,50071,50072,50073,50074,50075,50076,50077,50078,50079,50080,50081,50082,50083,50084,50085,50086,50087,50088,50089,50090,50091,50092,50093,50094,50095,50096,50097,50098,50099,50100,50101,50102,50103,50104,50105,50106,50107,50108,50109,50110,50111,50113,50114,50115,50116,50117,50118,50119,50120,50121,50122,50123,50124,50125,50126,50127,50128,50129,50130,50131,50132,50133,50134,50135,50138,50139,50141,50142,50145,50147,50148,50149,50150,50151,50154,50155,50156,50158,50159,50160,50161,50162,50163,50166,50167,50169,50170,50171,50172,50173,50174,null,null,null,null,null,null,50175,50176,50177,50178,50179,50180,50181,50182,50183,50185,50186,50187,50188,50189,50190,50191,50193,50194,50195,50196,50197,50198,50199,50200,50201,50202,null,null,null,null,null,null,50203,50204,50205,50206,50207,50208,50209,50210,50211,50213,50214,50215,50216,50217,50218,50219,50221,50222,50223,50225,50226,50227,50229,50230,50231,50232,50233,50234,50235,50238,50239,50240,50241,50242,50243,50244,50245,50246,50247,50249,50250,50251,50252,50253,50254,50255,50256,50257,50258,50259,50260,50261,50262,50263,50264,50265,50266,50267,50268,50269,50270,50271,50272,50273,50274,50275,50278,50279,50281,50282,50283,50285,50286,50287,50288,50289,50290,50291,50294,50295,50296,50298,50299,50300,50301,50302,50303,50305,50306,50307,50308,50309,50310,50311,50312,50313,50314,50315,50316,50317,50318,50319,50320,50321,50322,50323,50325,50326,50327,50328,50329,50330,50331,50333,50334,50335,50336,50337,50338,50339,50340,50341,50342,50343,50344,50345,50346,50347,50348,50349,50350,50351,50352,50353,50354,50355,50356,50357,50358,50359,50361,50362,50363,50365,50366,50367,50368,50369,50370,50371,50372,50373,null,null,null,null,null,null,50374,50375,50376,50377,50378,50379,50380,50381,50382,50383,50384,50385,50386,50387,50388,50389,50390,50391,50392,50393,50394,50395,50396,50397,50398,50399,null,null,null,null,null,null,50400,50401,50402,50403,50404,50405,50406,50407,50408,50410,50411,50412,50413,50414,50415,50418,50419,50421,50422,50423,50425,50427,50428,50429,50430,50434,50435,50436,50437,50438,50439,50440,50441,50442,50443,50445,50446,50447,50449,50450,50451,50453,50454,50455,50456,50457,50458,50459,50461,50462,50463,50464,50465,50466,50467,50468,50469,50470,50471,50474,50475,50477,50478,50479,50481,50482,50483,50484,50485,50486,50487,50490,50492,50494,50495,50496,50497,50498,50499,50502,50503,50507,50511,50512,50513,50514,50518,50522,50523,50524,50527,50530,50531,50533,50534,50535,50537,50538,50539,50540,50541,50542,50543,50546,50550,50551,50552,50553,50554,50555,50558,50559,50561,50562,50563,50565,50566,50568,50569,50570,50571,50574,50576,50578,50579,50580,50582,50585,50586,50587,50589,50590,50591,50593,50594,50595,50596,50597,50598,50599,50600,50602,50603,50604,50605,50606,50607,50608,50609,50610,50611,50614,null,null,null,null,null,null,50615,50618,50623,50624,50625,50626,50627,50635,50637,50639,50642,50643,50645,50646,50647,50649,50650,50651,50652,50653,50654,50655,50658,50660,50662,50663,null,null,null,null,null,null,50664,50665,50666,50667,50671,50673,50674,50675,50677,50680,50681,50682,50683,50690,50691,50692,50697,50698,50699,50701,50702,50703,50705,50706,50707,50708,50709,50710,50711,50714,50717,50718,50719,50720,50721,50722,50723,50726,50727,50729,50730,50731,50735,50737,50738,50742,50744,50746,50748,50749,50750,50751,50754,50755,50757,50758,50759,50761,50762,50763,50764,50765,50766,50767,50770,50774,50775,50776,50777,50778,50779,50782,50783,50785,50786,50787,50788,50789,50790,50791,50792,50793,50794,50795,50797,50798,50800,50802,50803,50804,50805,50806,50807,50810,50811,50813,50814,50815,50817,50818,50819,50820,50821,50822,50823,50826,50828,50830,50831,50832,50833,50834,50835,50838,50839,50841,50842,50843,50845,50846,50847,50848,50849,50850,50851,50854,50856,50858,50859,50860,50861,50862,50863,50866,50867,50869,50870,50871,50875,50876,50877,50878,50879,50882,50884,50886,50887,50888,50889,50890,50891,50894,null,null,null,null,null,null,50895,50897,50898,50899,50901,50902,50903,50904,50905,50906,50907,50910,50911,50914,50915,50916,50917,50918,50919,50922,50923,50925,50926,50927,50929,50930,null,null,null,null,null,null,50931,50932,50933,50934,50935,50938,50939,50940,50942,50943,50944,50945,50946,50947,50950,50951,50953,50954,50955,50957,50958,50959,50960,50961,50962,50963,50966,50968,50970,50971,50972,50973,50974,50975,50978,50979,50981,50982,50983,50985,50986,50987,50988,50989,50990,50991,50994,50996,50998,51000,51001,51002,51003,51006,51007,51009,51010,51011,51013,51014,51015,51016,51017,51019,51022,51024,51033,51034,51035,51037,51038,51039,51041,51042,51043,51044,51045,51046,51047,51049,51050,51052,51053,51054,51055,51056,51057,51058,51059,51062,51063,51065,51066,51067,51071,51072,51073,51074,51078,51083,51084,51085,51087,51090,51091,51093,51097,51099,51100,51101,51102,51103,51106,51111,51112,51113,51114,51115,51118,51119,51121,51122,51123,51125,51126,51127,51128,51129,51130,51131,51134,51138,51139,51140,51141,51142,51143,51146,51147,51149,51151,51153,51154,51155,51156,51157,51158,51159,51161,51162,51163,51164,null,null,null,null,null,null,51166,51167,51168,51169,51170,51171,51173,51174,51175,51177,51178,51179,51181,51182,51183,51184,51185,51186,51187,51188,51189,51190,51191,51192,51193,51194,null,null,null,null,null,null,51195,51196,51197,51198,51199,51202,51203,51205,51206,51207,51209,51211,51212,51213,51214,51215,51218,51220,51223,51224,51225,51226,51227,51230,51231,51233,51234,51235,51237,51238,51239,51240,51241,51242,51243,51246,51248,51250,51251,51252,51253,51254,51255,51257,51258,51259,51261,51262,51263,51265,51266,51267,51268,51269,51270,51271,51274,51275,51278,51279,51280,51281,51282,51283,51285,51286,51287,51288,51289,51290,51291,51292,51293,51294,51295,51296,51297,51298,51299,51300,51301,51302,51303,51304,51305,51306,51307,51308,51309,51310,51311,51314,51315,51317,51318,51319,51321,51323,51324,51325,51326,51327,51330,51332,51336,51337,51338,51342,51343,51344,51345,51346,51347,51349,51350,51351,51352,51353,51354,51355,51356,51358,51360,51362,51363,51364,51365,51366,51367,51369,51370,51371,51372,51373,51374,51375,51376,51377,51378,51379,51380,51381,51382,51383,51384,51385,51386,51387,51390,51391,51392,51393,null,null,null,null,null,null,51394,51395,51397,51398,51399,51401,51402,51403,51405,51406,51407,51408,51409,51410,51411,51414,51416,51418,51419,51420,51421,51422,51423,51426,51427,51429,null,null,null,null,null,null,51430,51431,51432,51433,51434,51435,51436,51437,51438,51439,51440,51441,51442,51443,51444,51446,51447,51448,51449,51450,51451,51454,51455,51457,51458,51459,51463,51464,51465,51466,51467,51470,12288,12289,12290,183,8229,8230,168,12291,173,8213,8741,65340,8764,8216,8217,8220,8221,12308,12309,12296,12297,12298,12299,12300,12301,12302,12303,12304,12305,177,215,247,8800,8804,8805,8734,8756,176,8242,8243,8451,8491,65504,65505,65509,9794,9792,8736,8869,8978,8706,8711,8801,8786,167,8251,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,9661,9660,8594,8592,8593,8595,8596,12307,8810,8811,8730,8765,8733,8757,8747,8748,8712,8715,8838,8839,8834,8835,8746,8745,8743,8744,65506,51472,51474,51475,51476,51477,51478,51479,51481,51482,51483,51484,51485,51486,51487,51488,51489,51490,51491,51492,51493,51494,51495,51496,51497,51498,51499,null,null,null,null,null,null,51501,51502,51503,51504,51505,51506,51507,51509,51510,51511,51512,51513,51514,51515,51516,51517,51518,51519,51520,51521,51522,51523,51524,51525,51526,51527,null,null,null,null,null,null,51528,51529,51530,51531,51532,51533,51534,51535,51538,51539,51541,51542,51543,51545,51546,51547,51548,51549,51550,51551,51554,51556,51557,51558,51559,51560,51561,51562,51563,51565,51566,51567,8658,8660,8704,8707,180,65374,711,728,733,730,729,184,731,161,191,720,8750,8721,8719,164,8457,8240,9665,9664,9655,9654,9828,9824,9825,9829,9831,9827,8857,9672,9635,9680,9681,9618,9636,9637,9640,9639,9638,9641,9832,9743,9742,9756,9758,182,8224,8225,8597,8599,8601,8598,8600,9837,9833,9834,9836,12927,12828,8470,13255,8482,13250,13272,8481,8364,174,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,51569,51570,51571,51573,51574,51575,51576,51577,51578,51579,51581,51582,51583,51584,51585,51586,51587,51588,51589,51590,51591,51594,51595,51597,51598,51599,null,null,null,null,null,null,51601,51602,51603,51604,51605,51606,51607,51610,51612,51614,51615,51616,51617,51618,51619,51620,51621,51622,51623,51624,51625,51626,51627,51628,51629,51630,null,null,null,null,null,null,51631,51632,51633,51634,51635,51636,51637,51638,51639,51640,51641,51642,51643,51644,51645,51646,51647,51650,51651,51653,51654,51657,51659,51660,51661,51662,51663,51666,51668,51671,51672,51675,65281,65282,65283,65284,65285,65286,65287,65288,65289,65290,65291,65292,65293,65294,65295,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,65306,65307,65308,65309,65310,65311,65312,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65339,65510,65341,65342,65343,65344,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,65371,65372,65373,65507,51678,51679,51681,51683,51685,51686,51688,51689,51690,51691,51694,51698,51699,51700,51701,51702,51703,51706,51707,51709,51710,51711,51713,51714,51715,51716,null,null,null,null,null,null,51717,51718,51719,51722,51726,51727,51728,51729,51730,51731,51733,51734,51735,51737,51738,51739,51740,51741,51742,51743,51744,51745,51746,51747,51748,51749,null,null,null,null,null,null,51750,51751,51752,51754,51755,51756,51757,51758,51759,51760,51761,51762,51763,51764,51765,51766,51767,51768,51769,51770,51771,51772,51773,51774,51775,51776,51777,51778,51779,51780,51781,51782,12593,12594,12595,12596,12597,12598,12599,12600,12601,12602,12603,12604,12605,12606,12607,12608,12609,12610,12611,12612,12613,12614,12615,12616,12617,12618,12619,12620,12621,12622,12623,12624,12625,12626,12627,12628,12629,12630,12631,12632,12633,12634,12635,12636,12637,12638,12639,12640,12641,12642,12643,12644,12645,12646,12647,12648,12649,12650,12651,12652,12653,12654,12655,12656,12657,12658,12659,12660,12661,12662,12663,12664,12665,12666,12667,12668,12669,12670,12671,12672,12673,12674,12675,12676,12677,12678,12679,12680,12681,12682,12683,12684,12685,12686,51783,51784,51785,51786,51787,51790,51791,51793,51794,51795,51797,51798,51799,51800,51801,51802,51803,51806,51810,51811,51812,51813,51814,51815,51817,51818,null,null,null,null,null,null,51819,51820,51821,51822,51823,51824,51825,51826,51827,51828,51829,51830,51831,51832,51833,51834,51835,51836,51838,51839,51840,51841,51842,51843,51845,51846,null,null,null,null,null,null,51847,51848,51849,51850,51851,51852,51853,51854,51855,51856,51857,51858,51859,51860,51861,51862,51863,51865,51866,51867,51868,51869,51870,51871,51872,51873,51874,51875,51876,51877,51878,51879,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,null,null,null,null,null,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,null,null,null,null,null,null,null,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,null,null,null,null,null,null,null,null,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,null,null,null,null,null,null,51880,51881,51882,51883,51884,51885,51886,51887,51888,51889,51890,51891,51892,51893,51894,51895,51896,51897,51898,51899,51902,51903,51905,51906,51907,51909,null,null,null,null,null,null,51910,51911,51912,51913,51914,51915,51918,51920,51922,51924,51925,51926,51927,51930,51931,51932,51933,51934,51935,51937,51938,51939,51940,51941,51942,51943,null,null,null,null,null,null,51944,51945,51946,51947,51949,51950,51951,51952,51953,51954,51955,51957,51958,51959,51960,51961,51962,51963,51964,51965,51966,51967,51968,51969,51970,51971,51972,51973,51974,51975,51977,51978,9472,9474,9484,9488,9496,9492,9500,9516,9508,9524,9532,9473,9475,9487,9491,9499,9495,9507,9523,9515,9531,9547,9504,9519,9512,9527,9535,9501,9520,9509,9528,9538,9490,9489,9498,9497,9494,9493,9486,9485,9502,9503,9505,9506,9510,9511,9513,9514,9517,9518,9521,9522,9525,9526,9529,9530,9533,9534,9536,9537,9539,9540,9541,9542,9543,9544,9545,9546,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,51979,51980,51981,51982,51983,51985,51986,51987,51989,51990,51991,51993,51994,51995,51996,51997,51998,51999,52002,52003,52004,52005,52006,52007,52008,52009,null,null,null,null,null,null,52010,52011,52012,52013,52014,52015,52016,52017,52018,52019,52020,52021,52022,52023,52024,52025,52026,52027,52028,52029,52030,52031,52032,52034,52035,52036,null,null,null,null,null,null,52037,52038,52039,52042,52043,52045,52046,52047,52049,52050,52051,52052,52053,52054,52055,52058,52059,52060,52062,52063,52064,52065,52066,52067,52069,52070,52071,52072,52073,52074,52075,52076,13205,13206,13207,8467,13208,13252,13219,13220,13221,13222,13209,13210,13211,13212,13213,13214,13215,13216,13217,13218,13258,13197,13198,13199,13263,13192,13193,13256,13223,13224,13232,13233,13234,13235,13236,13237,13238,13239,13240,13241,13184,13185,13186,13187,13188,13242,13243,13244,13245,13246,13247,13200,13201,13202,13203,13204,8486,13248,13249,13194,13195,13196,13270,13253,13229,13230,13231,13275,13225,13226,13227,13228,13277,13264,13267,13251,13257,13276,13254,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52077,52078,52079,52080,52081,52082,52083,52084,52085,52086,52087,52090,52091,52092,52093,52094,52095,52096,52097,52098,52099,52100,52101,52102,52103,52104,null,null,null,null,null,null,52105,52106,52107,52108,52109,52110,52111,52112,52113,52114,52115,52116,52117,52118,52119,52120,52121,52122,52123,52125,52126,52127,52128,52129,52130,52131,null,null,null,null,null,null,52132,52133,52134,52135,52136,52137,52138,52139,52140,52141,52142,52143,52144,52145,52146,52147,52148,52149,52150,52151,52153,52154,52155,52156,52157,52158,52159,52160,52161,52162,52163,52164,198,208,170,294,null,306,null,319,321,216,338,186,222,358,330,null,12896,12897,12898,12899,12900,12901,12902,12903,12904,12905,12906,12907,12908,12909,12910,12911,12912,12913,12914,12915,12916,12917,12918,12919,12920,12921,12922,12923,9424,9425,9426,9427,9428,9429,9430,9431,9432,9433,9434,9435,9436,9437,9438,9439,9440,9441,9442,9443,9444,9445,9446,9447,9448,9449,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,189,8531,8532,188,190,8539,8540,8541,8542,52165,52166,52167,52168,52169,52170,52171,52172,52173,52174,52175,52176,52177,52178,52179,52181,52182,52183,52184,52185,52186,52187,52188,52189,52190,52191,null,null,null,null,null,null,52192,52193,52194,52195,52197,52198,52200,52202,52203,52204,52205,52206,52207,52208,52209,52210,52211,52212,52213,52214,52215,52216,52217,52218,52219,52220,null,null,null,null,null,null,52221,52222,52223,52224,52225,52226,52227,52228,52229,52230,52231,52232,52233,52234,52235,52238,52239,52241,52242,52243,52245,52246,52247,52248,52249,52250,52251,52254,52255,52256,52259,52260,230,273,240,295,305,307,312,320,322,248,339,223,254,359,331,329,12800,12801,12802,12803,12804,12805,12806,12807,12808,12809,12810,12811,12812,12813,12814,12815,12816,12817,12818,12819,12820,12821,12822,12823,12824,12825,12826,12827,9372,9373,9374,9375,9376,9377,9378,9379,9380,9381,9382,9383,9384,9385,9386,9387,9388,9389,9390,9391,9392,9393,9394,9395,9396,9397,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345,9346,185,178,179,8308,8319,8321,8322,8323,8324,52261,52262,52266,52267,52269,52271,52273,52274,52275,52276,52277,52278,52279,52282,52287,52288,52289,52290,52291,52294,52295,52297,52298,52299,52301,52302,null,null,null,null,null,null,52303,52304,52305,52306,52307,52310,52314,52315,52316,52317,52318,52319,52321,52322,52323,52325,52327,52329,52330,52331,52332,52333,52334,52335,52337,52338,null,null,null,null,null,null,52339,52340,52342,52343,52344,52345,52346,52347,52348,52349,52350,52351,52352,52353,52354,52355,52356,52357,52358,52359,52360,52361,52362,52363,52364,52365,52366,52367,52368,52369,52370,52371,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,null,null,null,null,null,null,null,null,null,null,null,52372,52373,52374,52375,52378,52379,52381,52382,52383,52385,52386,52387,52388,52389,52390,52391,52394,52398,52399,52400,52401,52402,52403,52406,52407,52409,null,null,null,null,null,null,52410,52411,52413,52414,52415,52416,52417,52418,52419,52422,52424,52426,52427,52428,52429,52430,52431,52433,52434,52435,52437,52438,52439,52440,52441,52442,null,null,null,null,null,null,52443,52444,52445,52446,52447,52448,52449,52450,52451,52453,52454,52455,52456,52457,52458,52459,52461,52462,52463,52465,52466,52467,52468,52469,52470,52471,52472,52473,52474,52475,52476,52477,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,null,null,null,null,null,null,null,null,52478,52479,52480,52482,52483,52484,52485,52486,52487,52490,52491,52493,52494,52495,52497,52498,52499,52500,52501,52502,52503,52506,52508,52510,52511,52512,null,null,null,null,null,null,52513,52514,52515,52517,52518,52519,52521,52522,52523,52525,52526,52527,52528,52529,52530,52531,52532,52533,52534,52535,52536,52538,52539,52540,52541,52542,null,null,null,null,null,null,52543,52544,52545,52546,52547,52548,52549,52550,52551,52552,52553,52554,52555,52556,52557,52558,52559,52560,52561,52562,52563,52564,52565,52566,52567,52568,52569,52570,52571,52573,52574,52575,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,null,null,null,null,null,null,null,null,null,null,null,null,null,52577,52578,52579,52581,52582,52583,52584,52585,52586,52587,52590,52592,52594,52595,52596,52597,52598,52599,52601,52602,52603,52604,52605,52606,52607,52608,null,null,null,null,null,null,52609,52610,52611,52612,52613,52614,52615,52617,52618,52619,52620,52621,52622,52623,52624,52625,52626,52627,52630,52631,52633,52634,52635,52637,52638,52639,null,null,null,null,null,null,52640,52641,52642,52643,52646,52648,52650,52651,52652,52653,52654,52655,52657,52658,52659,52660,52661,52662,52663,52664,52665,52666,52667,52668,52669,52670,52671,52672,52673,52674,52675,52677,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52678,52679,52680,52681,52682,52683,52685,52686,52687,52689,52690,52691,52692,52693,52694,52695,52696,52697,52698,52699,52700,52701,52702,52703,52704,52705,null,null,null,null,null,null,52706,52707,52708,52709,52710,52711,52713,52714,52715,52717,52718,52719,52721,52722,52723,52724,52725,52726,52727,52730,52732,52734,52735,52736,52737,52738,null,null,null,null,null,null,52739,52741,52742,52743,52745,52746,52747,52749,52750,52751,52752,52753,52754,52755,52757,52758,52759,52760,52762,52763,52764,52765,52766,52767,52770,52771,52773,52774,52775,52777,52778,52779,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52780,52781,52782,52783,52786,52788,52790,52791,52792,52793,52794,52795,52796,52797,52798,52799,52800,52801,52802,52803,52804,52805,52806,52807,52808,52809,null,null,null,null,null,null,52810,52811,52812,52813,52814,52815,52816,52817,52818,52819,52820,52821,52822,52823,52826,52827,52829,52830,52834,52835,52836,52837,52838,52839,52842,52844,null,null,null,null,null,null,52846,52847,52848,52849,52850,52851,52854,52855,52857,52858,52859,52861,52862,52863,52864,52865,52866,52867,52870,52872,52874,52875,52876,52877,52878,52879,52882,52883,52885,52886,52887,52889,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52890,52891,52892,52893,52894,52895,52898,52902,52903,52904,52905,52906,52907,52910,52911,52912,52913,52914,52915,52916,52917,52918,52919,52920,52921,52922,null,null,null,null,null,null,52923,52924,52925,52926,52927,52928,52930,52931,52932,52933,52934,52935,52936,52937,52938,52939,52940,52941,52942,52943,52944,52945,52946,52947,52948,52949,null,null,null,null,null,null,52950,52951,52952,52953,52954,52955,52956,52957,52958,52959,52960,52961,52962,52963,52966,52967,52969,52970,52973,52974,52975,52976,52977,52978,52979,52982,52986,52987,52988,52989,52990,52991,44032,44033,44036,44039,44040,44041,44042,44048,44049,44050,44051,44052,44053,44054,44055,44057,44058,44059,44060,44061,44064,44068,44076,44077,44079,44080,44081,44088,44089,44092,44096,44107,44109,44116,44120,44124,44144,44145,44148,44151,44152,44154,44160,44161,44163,44164,44165,44166,44169,44170,44171,44172,44176,44180,44188,44189,44191,44192,44193,44200,44201,44202,44204,44207,44208,44216,44217,44219,44220,44221,44225,44228,44232,44236,44245,44247,44256,44257,44260,44263,44264,44266,44268,44271,44272,44273,44275,44277,44278,44284,44285,44288,44292,44294,52994,52995,52997,52998,52999,53001,53002,53003,53004,53005,53006,53007,53010,53012,53014,53015,53016,53017,53018,53019,53021,53022,53023,53025,53026,53027,null,null,null,null,null,null,53029,53030,53031,53032,53033,53034,53035,53038,53042,53043,53044,53045,53046,53047,53049,53050,53051,53052,53053,53054,53055,53056,53057,53058,53059,53060,null,null,null,null,null,null,53061,53062,53063,53064,53065,53066,53067,53068,53069,53070,53071,53072,53073,53074,53075,53078,53079,53081,53082,53083,53085,53086,53087,53088,53089,53090,53091,53094,53096,53098,53099,53100,44300,44301,44303,44305,44312,44316,44320,44329,44332,44333,44340,44341,44344,44348,44356,44357,44359,44361,44368,44372,44376,44385,44387,44396,44397,44400,44403,44404,44405,44406,44411,44412,44413,44415,44417,44418,44424,44425,44428,44432,44444,44445,44452,44471,44480,44481,44484,44488,44496,44497,44499,44508,44512,44516,44536,44537,44540,44543,44544,44545,44552,44553,44555,44557,44564,44592,44593,44596,44599,44600,44602,44608,44609,44611,44613,44614,44618,44620,44621,44622,44624,44628,44630,44636,44637,44639,44640,44641,44645,44648,44649,44652,44656,44664,53101,53102,53103,53106,53107,53109,53110,53111,53113,53114,53115,53116,53117,53118,53119,53121,53122,53123,53124,53126,53127,53128,53129,53130,53131,53133,null,null,null,null,null,null,53134,53135,53136,53137,53138,53139,53140,53141,53142,53143,53144,53145,53146,53147,53148,53149,53150,53151,53152,53154,53155,53156,53157,53158,53159,53161,null,null,null,null,null,null,53162,53163,53164,53165,53166,53167,53169,53170,53171,53172,53173,53174,53175,53176,53177,53178,53179,53180,53181,53182,53183,53184,53185,53186,53187,53189,53190,53191,53192,53193,53194,53195,44665,44667,44668,44669,44676,44677,44684,44732,44733,44734,44736,44740,44748,44749,44751,44752,44753,44760,44761,44764,44776,44779,44781,44788,44792,44796,44807,44808,44813,44816,44844,44845,44848,44850,44852,44860,44861,44863,44865,44866,44867,44872,44873,44880,44892,44893,44900,44901,44921,44928,44932,44936,44944,44945,44949,44956,44984,44985,44988,44992,44999,45000,45001,45003,45005,45006,45012,45020,45032,45033,45040,45041,45044,45048,45056,45057,45060,45068,45072,45076,45084,45085,45096,45124,45125,45128,45130,45132,45134,45139,45140,45141,45143,45145,53196,53197,53198,53199,53200,53201,53202,53203,53204,53205,53206,53207,53208,53209,53210,53211,53212,53213,53214,53215,53218,53219,53221,53222,53223,53225,null,null,null,null,null,null,53226,53227,53228,53229,53230,53231,53234,53236,53238,53239,53240,53241,53242,53243,53245,53246,53247,53249,53250,53251,53253,53254,53255,53256,53257,53258,null,null,null,null,null,null,53259,53260,53261,53262,53263,53264,53266,53267,53268,53269,53270,53271,53273,53274,53275,53276,53277,53278,53279,53280,53281,53282,53283,53284,53285,53286,53287,53288,53289,53290,53291,53292,45149,45180,45181,45184,45188,45196,45197,45199,45201,45208,45209,45210,45212,45215,45216,45217,45218,45224,45225,45227,45228,45229,45230,45231,45233,45235,45236,45237,45240,45244,45252,45253,45255,45256,45257,45264,45265,45268,45272,45280,45285,45320,45321,45323,45324,45328,45330,45331,45336,45337,45339,45340,45341,45347,45348,45349,45352,45356,45364,45365,45367,45368,45369,45376,45377,45380,45384,45392,45393,45396,45397,45400,45404,45408,45432,45433,45436,45440,45442,45448,45449,45451,45453,45458,45459,45460,45464,45468,45480,45516,45520,45524,45532,45533,53294,53295,53296,53297,53298,53299,53302,53303,53305,53306,53307,53309,53310,53311,53312,53313,53314,53315,53318,53320,53322,53323,53324,53325,53326,53327,null,null,null,null,null,null,53329,53330,53331,53333,53334,53335,53337,53338,53339,53340,53341,53342,53343,53345,53346,53347,53348,53349,53350,53351,53352,53353,53354,53355,53358,53359,null,null,null,null,null,null,53361,53362,53363,53365,53366,53367,53368,53369,53370,53371,53374,53375,53376,53378,53379,53380,53381,53382,53383,53384,53385,53386,53387,53388,53389,53390,53391,53392,53393,53394,53395,53396,45535,45544,45545,45548,45552,45561,45563,45565,45572,45573,45576,45579,45580,45588,45589,45591,45593,45600,45620,45628,45656,45660,45664,45672,45673,45684,45685,45692,45700,45701,45705,45712,45713,45716,45720,45721,45722,45728,45729,45731,45733,45734,45738,45740,45744,45748,45768,45769,45772,45776,45778,45784,45785,45787,45789,45794,45796,45797,45798,45800,45803,45804,45805,45806,45807,45811,45812,45813,45815,45816,45817,45818,45819,45823,45824,45825,45828,45832,45840,45841,45843,45844,45845,45852,45908,45909,45910,45912,45915,45916,45918,45919,45924,45925,53397,53398,53399,53400,53401,53402,53403,53404,53405,53406,53407,53408,53409,53410,53411,53414,53415,53417,53418,53419,53421,53422,53423,53424,53425,53426,null,null,null,null,null,null,53427,53430,53432,53434,53435,53436,53437,53438,53439,53442,53443,53445,53446,53447,53450,53451,53452,53453,53454,53455,53458,53462,53463,53464,53465,53466,null,null,null,null,null,null,53467,53470,53471,53473,53474,53475,53477,53478,53479,53480,53481,53482,53483,53486,53490,53491,53492,53493,53494,53495,53497,53498,53499,53500,53501,53502,53503,53504,53505,53506,53507,53508,45927,45929,45931,45934,45936,45937,45940,45944,45952,45953,45955,45956,45957,45964,45968,45972,45984,45985,45992,45996,46020,46021,46024,46027,46028,46030,46032,46036,46037,46039,46041,46043,46045,46048,46052,46056,46076,46096,46104,46108,46112,46120,46121,46123,46132,46160,46161,46164,46168,46176,46177,46179,46181,46188,46208,46216,46237,46244,46248,46252,46261,46263,46265,46272,46276,46280,46288,46293,46300,46301,46304,46307,46308,46310,46316,46317,46319,46321,46328,46356,46357,46360,46363,46364,46372,46373,46375,46376,46377,46378,46384,46385,46388,46392,53509,53510,53511,53512,53513,53514,53515,53516,53518,53519,53520,53521,53522,53523,53524,53525,53526,53527,53528,53529,53530,53531,53532,53533,53534,53535,null,null,null,null,null,null,53536,53537,53538,53539,53540,53541,53542,53543,53544,53545,53546,53547,53548,53549,53550,53551,53554,53555,53557,53558,53559,53561,53563,53564,53565,53566,null,null,null,null,null,null,53567,53570,53574,53575,53576,53577,53578,53579,53582,53583,53585,53586,53587,53589,53590,53591,53592,53593,53594,53595,53598,53600,53602,53603,53604,53605,53606,53607,53609,53610,53611,53613,46400,46401,46403,46404,46405,46411,46412,46413,46416,46420,46428,46429,46431,46432,46433,46496,46497,46500,46504,46506,46507,46512,46513,46515,46516,46517,46523,46524,46525,46528,46532,46540,46541,46543,46544,46545,46552,46572,46608,46609,46612,46616,46629,46636,46644,46664,46692,46696,46748,46749,46752,46756,46763,46764,46769,46804,46832,46836,46840,46848,46849,46853,46888,46889,46892,46895,46896,46904,46905,46907,46916,46920,46924,46932,46933,46944,46948,46952,46960,46961,46963,46965,46972,46973,46976,46980,46988,46989,46991,46992,46993,46994,46998,46999,53614,53615,53616,53617,53618,53619,53620,53621,53622,53623,53624,53625,53626,53627,53629,53630,53631,53632,53633,53634,53635,53637,53638,53639,53641,53642,null,null,null,null,null,null,53643,53644,53645,53646,53647,53648,53649,53650,53651,53652,53653,53654,53655,53656,53657,53658,53659,53660,53661,53662,53663,53666,53667,53669,53670,53671,null,null,null,null,null,null,53673,53674,53675,53676,53677,53678,53679,53682,53684,53686,53687,53688,53689,53691,53693,53694,53695,53697,53698,53699,53700,53701,53702,53703,53704,53705,53706,53707,53708,53709,53710,53711,47000,47001,47004,47008,47016,47017,47019,47020,47021,47028,47029,47032,47047,47049,47084,47085,47088,47092,47100,47101,47103,47104,47105,47111,47112,47113,47116,47120,47128,47129,47131,47133,47140,47141,47144,47148,47156,47157,47159,47160,47161,47168,47172,47185,47187,47196,47197,47200,47204,47212,47213,47215,47217,47224,47228,47245,47272,47280,47284,47288,47296,47297,47299,47301,47308,47312,47316,47325,47327,47329,47336,47337,47340,47344,47352,47353,47355,47357,47364,47384,47392,47420,47421,47424,47428,47436,47439,47441,47448,47449,47452,47456,47464,47465,53712,53713,53714,53715,53716,53717,53718,53719,53721,53722,53723,53724,53725,53726,53727,53728,53729,53730,53731,53732,53733,53734,53735,53736,53737,53738,null,null,null,null,null,null,53739,53740,53741,53742,53743,53744,53745,53746,53747,53749,53750,53751,53753,53754,53755,53756,53757,53758,53759,53760,53761,53762,53763,53764,53765,53766,null,null,null,null,null,null,53768,53770,53771,53772,53773,53774,53775,53777,53778,53779,53780,53781,53782,53783,53784,53785,53786,53787,53788,53789,53790,53791,53792,53793,53794,53795,53796,53797,53798,53799,53800,53801,47467,47469,47476,47477,47480,47484,47492,47493,47495,47497,47498,47501,47502,47532,47533,47536,47540,47548,47549,47551,47553,47560,47561,47564,47566,47567,47568,47569,47570,47576,47577,47579,47581,47582,47585,47587,47588,47589,47592,47596,47604,47605,47607,47608,47609,47610,47616,47617,47624,47637,47672,47673,47676,47680,47682,47688,47689,47691,47693,47694,47699,47700,47701,47704,47708,47716,47717,47719,47720,47721,47728,47729,47732,47736,47747,47748,47749,47751,47756,47784,47785,47787,47788,47792,47794,47800,47801,47803,47805,47812,47816,47832,47833,47868,53802,53803,53806,53807,53809,53810,53811,53813,53814,53815,53816,53817,53818,53819,53822,53824,53826,53827,53828,53829,53830,53831,53833,53834,53835,53836,null,null,null,null,null,null,53837,53838,53839,53840,53841,53842,53843,53844,53845,53846,53847,53848,53849,53850,53851,53853,53854,53855,53856,53857,53858,53859,53861,53862,53863,53864,null,null,null,null,null,null,53865,53866,53867,53868,53869,53870,53871,53872,53873,53874,53875,53876,53877,53878,53879,53880,53881,53882,53883,53884,53885,53886,53887,53890,53891,53893,53894,53895,53897,53898,53899,53900,47872,47876,47885,47887,47889,47896,47900,47904,47913,47915,47924,47925,47926,47928,47931,47932,47933,47934,47940,47941,47943,47945,47949,47951,47952,47956,47960,47969,47971,47980,48008,48012,48016,48036,48040,48044,48052,48055,48064,48068,48072,48080,48083,48120,48121,48124,48127,48128,48130,48136,48137,48139,48140,48141,48143,48145,48148,48149,48150,48151,48152,48155,48156,48157,48158,48159,48164,48165,48167,48169,48173,48176,48177,48180,48184,48192,48193,48195,48196,48197,48201,48204,48205,48208,48221,48260,48261,48264,48267,48268,48270,48276,48277,48279,53901,53902,53903,53906,53907,53908,53910,53911,53912,53913,53914,53915,53917,53918,53919,53921,53922,53923,53925,53926,53927,53928,53929,53930,53931,53933,null,null,null,null,null,null,53934,53935,53936,53938,53939,53940,53941,53942,53943,53946,53947,53949,53950,53953,53955,53956,53957,53958,53959,53962,53964,53965,53966,53967,53968,53969,null,null,null,null,null,null,53970,53971,53973,53974,53975,53977,53978,53979,53981,53982,53983,53984,53985,53986,53987,53990,53991,53992,53993,53994,53995,53996,53997,53998,53999,54002,54003,54005,54006,54007,54009,54010,48281,48282,48288,48289,48292,48295,48296,48304,48305,48307,48308,48309,48316,48317,48320,48324,48333,48335,48336,48337,48341,48344,48348,48372,48373,48374,48376,48380,48388,48389,48391,48393,48400,48404,48420,48428,48448,48456,48457,48460,48464,48472,48473,48484,48488,48512,48513,48516,48519,48520,48521,48522,48528,48529,48531,48533,48537,48538,48540,48548,48560,48568,48596,48597,48600,48604,48617,48624,48628,48632,48640,48643,48645,48652,48653,48656,48660,48668,48669,48671,48708,48709,48712,48716,48718,48724,48725,48727,48729,48730,48731,48736,48737,48740,54011,54012,54013,54014,54015,54018,54020,54022,54023,54024,54025,54026,54027,54031,54033,54034,54035,54037,54039,54040,54041,54042,54043,54046,54050,54051,null,null,null,null,null,null,54052,54054,54055,54058,54059,54061,54062,54063,54065,54066,54067,54068,54069,54070,54071,54074,54078,54079,54080,54081,54082,54083,54086,54087,54088,54089,null,null,null,null,null,null,54090,54091,54092,54093,54094,54095,54096,54097,54098,54099,54100,54101,54102,54103,54104,54105,54106,54107,54108,54109,54110,54111,54112,54113,54114,54115,54116,54117,54118,54119,54120,54121,48744,48746,48752,48753,48755,48756,48757,48763,48764,48765,48768,48772,48780,48781,48783,48784,48785,48792,48793,48808,48848,48849,48852,48855,48856,48864,48867,48868,48869,48876,48897,48904,48905,48920,48921,48923,48924,48925,48960,48961,48964,48968,48976,48977,48981,49044,49072,49093,49100,49101,49104,49108,49116,49119,49121,49212,49233,49240,49244,49248,49256,49257,49296,49297,49300,49304,49312,49313,49315,49317,49324,49325,49327,49328,49331,49332,49333,49334,49340,49341,49343,49344,49345,49349,49352,49353,49356,49360,49368,49369,49371,49372,49373,49380,54122,54123,54124,54125,54126,54127,54128,54129,54130,54131,54132,54133,54134,54135,54136,54137,54138,54139,54142,54143,54145,54146,54147,54149,54150,54151,null,null,null,null,null,null,54152,54153,54154,54155,54158,54162,54163,54164,54165,54166,54167,54170,54171,54173,54174,54175,54177,54178,54179,54180,54181,54182,54183,54186,54188,54190,null,null,null,null,null,null,54191,54192,54193,54194,54195,54197,54198,54199,54201,54202,54203,54205,54206,54207,54208,54209,54210,54211,54214,54215,54218,54219,54220,54221,54222,54223,54225,54226,54227,54228,54229,54230,49381,49384,49388,49396,49397,49399,49401,49408,49412,49416,49424,49429,49436,49437,49438,49439,49440,49443,49444,49446,49447,49452,49453,49455,49456,49457,49462,49464,49465,49468,49472,49480,49481,49483,49484,49485,49492,49493,49496,49500,49508,49509,49511,49512,49513,49520,49524,49528,49541,49548,49549,49550,49552,49556,49558,49564,49565,49567,49569,49573,49576,49577,49580,49584,49597,49604,49608,49612,49620,49623,49624,49632,49636,49640,49648,49649,49651,49660,49661,49664,49668,49676,49677,49679,49681,49688,49689,49692,49695,49696,49704,49705,49707,49709,54231,54233,54234,54235,54236,54237,54238,54239,54240,54242,54244,54245,54246,54247,54248,54249,54250,54251,54254,54255,54257,54258,54259,54261,54262,54263,null,null,null,null,null,null,54264,54265,54266,54267,54270,54272,54274,54275,54276,54277,54278,54279,54281,54282,54283,54284,54285,54286,54287,54288,54289,54290,54291,54292,54293,54294,null,null,null,null,null,null,54295,54296,54297,54298,54299,54300,54302,54303,54304,54305,54306,54307,54308,54309,54310,54311,54312,54313,54314,54315,54316,54317,54318,54319,54320,54321,54322,54323,54324,54325,54326,54327,49711,49713,49714,49716,49736,49744,49745,49748,49752,49760,49765,49772,49773,49776,49780,49788,49789,49791,49793,49800,49801,49808,49816,49819,49821,49828,49829,49832,49836,49837,49844,49845,49847,49849,49884,49885,49888,49891,49892,49899,49900,49901,49903,49905,49910,49912,49913,49915,49916,49920,49928,49929,49932,49933,49939,49940,49941,49944,49948,49956,49957,49960,49961,49989,50024,50025,50028,50032,50034,50040,50041,50044,50045,50052,50056,50060,50112,50136,50137,50140,50143,50144,50146,50152,50153,50157,50164,50165,50168,50184,50192,50212,50220,50224,54328,54329,54330,54331,54332,54333,54334,54335,54337,54338,54339,54341,54342,54343,54344,54345,54346,54347,54348,54349,54350,54351,54352,54353,54354,54355,null,null,null,null,null,null,54356,54357,54358,54359,54360,54361,54362,54363,54365,54366,54367,54369,54370,54371,54373,54374,54375,54376,54377,54378,54379,54380,54382,54384,54385,54386,null,null,null,null,null,null,54387,54388,54389,54390,54391,54394,54395,54397,54398,54401,54403,54404,54405,54406,54407,54410,54412,54414,54415,54416,54417,54418,54419,54421,54422,54423,54424,54425,54426,54427,54428,54429,50228,50236,50237,50248,50276,50277,50280,50284,50292,50293,50297,50304,50324,50332,50360,50364,50409,50416,50417,50420,50424,50426,50431,50432,50433,50444,50448,50452,50460,50472,50473,50476,50480,50488,50489,50491,50493,50500,50501,50504,50505,50506,50508,50509,50510,50515,50516,50517,50519,50520,50521,50525,50526,50528,50529,50532,50536,50544,50545,50547,50548,50549,50556,50557,50560,50564,50567,50572,50573,50575,50577,50581,50583,50584,50588,50592,50601,50612,50613,50616,50617,50619,50620,50621,50622,50628,50629,50630,50631,50632,50633,50634,50636,50638,54430,54431,54432,54433,54434,54435,54436,54437,54438,54439,54440,54442,54443,54444,54445,54446,54447,54448,54449,54450,54451,54452,54453,54454,54455,54456,null,null,null,null,null,null,54457,54458,54459,54460,54461,54462,54463,54464,54465,54466,54467,54468,54469,54470,54471,54472,54473,54474,54475,54477,54478,54479,54481,54482,54483,54485,null,null,null,null,null,null,54486,54487,54488,54489,54490,54491,54493,54494,54496,54497,54498,54499,54500,54501,54502,54503,54505,54506,54507,54509,54510,54511,54513,54514,54515,54516,54517,54518,54519,54521,54522,54524,50640,50641,50644,50648,50656,50657,50659,50661,50668,50669,50670,50672,50676,50678,50679,50684,50685,50686,50687,50688,50689,50693,50694,50695,50696,50700,50704,50712,50713,50715,50716,50724,50725,50728,50732,50733,50734,50736,50739,50740,50741,50743,50745,50747,50752,50753,50756,50760,50768,50769,50771,50772,50773,50780,50781,50784,50796,50799,50801,50808,50809,50812,50816,50824,50825,50827,50829,50836,50837,50840,50844,50852,50853,50855,50857,50864,50865,50868,50872,50873,50874,50880,50881,50883,50885,50892,50893,50896,50900,50908,50909,50912,50913,50920,54526,54527,54528,54529,54530,54531,54533,54534,54535,54537,54538,54539,54541,54542,54543,54544,54545,54546,54547,54550,54552,54553,54554,54555,54556,54557,null,null,null,null,null,null,54558,54559,54560,54561,54562,54563,54564,54565,54566,54567,54568,54569,54570,54571,54572,54573,54574,54575,54576,54577,54578,54579,54580,54581,54582,54583,null,null,null,null,null,null,54584,54585,54586,54587,54590,54591,54593,54594,54595,54597,54598,54599,54600,54601,54602,54603,54606,54608,54610,54611,54612,54613,54614,54615,54618,54619,54621,54622,54623,54625,54626,54627,50921,50924,50928,50936,50937,50941,50948,50949,50952,50956,50964,50965,50967,50969,50976,50977,50980,50984,50992,50993,50995,50997,50999,51004,51005,51008,51012,51018,51020,51021,51023,51025,51026,51027,51028,51029,51030,51031,51032,51036,51040,51048,51051,51060,51061,51064,51068,51069,51070,51075,51076,51077,51079,51080,51081,51082,51086,51088,51089,51092,51094,51095,51096,51098,51104,51105,51107,51108,51109,51110,51116,51117,51120,51124,51132,51133,51135,51136,51137,51144,51145,51148,51150,51152,51160,51165,51172,51176,51180,51200,51201,51204,51208,51210,54628,54630,54631,54634,54636,54638,54639,54640,54641,54642,54643,54646,54647,54649,54650,54651,54653,54654,54655,54656,54657,54658,54659,54662,54666,54667,null,null,null,null,null,null,54668,54669,54670,54671,54673,54674,54675,54676,54677,54678,54679,54680,54681,54682,54683,54684,54685,54686,54687,54688,54689,54690,54691,54692,54694,54695,null,null,null,null,null,null,54696,54697,54698,54699,54700,54701,54702,54703,54704,54705,54706,54707,54708,54709,54710,54711,54712,54713,54714,54715,54716,54717,54718,54719,54720,54721,54722,54723,54724,54725,54726,54727,51216,51217,51219,51221,51222,51228,51229,51232,51236,51244,51245,51247,51249,51256,51260,51264,51272,51273,51276,51277,51284,51312,51313,51316,51320,51322,51328,51329,51331,51333,51334,51335,51339,51340,51341,51348,51357,51359,51361,51368,51388,51389,51396,51400,51404,51412,51413,51415,51417,51424,51425,51428,51445,51452,51453,51456,51460,51461,51462,51468,51469,51471,51473,51480,51500,51508,51536,51537,51540,51544,51552,51553,51555,51564,51568,51572,51580,51592,51593,51596,51600,51608,51609,51611,51613,51648,51649,51652,51655,51656,51658,51664,51665,51667,54730,54731,54733,54734,54735,54737,54739,54740,54741,54742,54743,54746,54748,54750,54751,54752,54753,54754,54755,54758,54759,54761,54762,54763,54765,54766,null,null,null,null,null,null,54767,54768,54769,54770,54771,54774,54776,54778,54779,54780,54781,54782,54783,54786,54787,54789,54790,54791,54793,54794,54795,54796,54797,54798,54799,54802,null,null,null,null,null,null,54806,54807,54808,54809,54810,54811,54813,54814,54815,54817,54818,54819,54821,54822,54823,54824,54825,54826,54827,54828,54830,54831,54832,54833,54834,54835,54836,54837,54838,54839,54842,54843,51669,51670,51673,51674,51676,51677,51680,51682,51684,51687,51692,51693,51695,51696,51697,51704,51705,51708,51712,51720,51721,51723,51724,51725,51732,51736,51753,51788,51789,51792,51796,51804,51805,51807,51808,51809,51816,51837,51844,51864,51900,51901,51904,51908,51916,51917,51919,51921,51923,51928,51929,51936,51948,51956,51976,51984,51988,51992,52000,52001,52033,52040,52041,52044,52048,52056,52057,52061,52068,52088,52089,52124,52152,52180,52196,52199,52201,52236,52237,52240,52244,52252,52253,52257,52258,52263,52264,52265,52268,52270,52272,52280,52281,52283,54845,54846,54847,54849,54850,54851,54852,54854,54855,54858,54860,54862,54863,54864,54866,54867,54870,54871,54873,54874,54875,54877,54878,54879,54880,54881,null,null,null,null,null,null,54882,54883,54884,54885,54886,54888,54890,54891,54892,54893,54894,54895,54898,54899,54901,54902,54903,54904,54905,54906,54907,54908,54909,54910,54911,54912,null,null,null,null,null,null,54913,54914,54916,54918,54919,54920,54921,54922,54923,54926,54927,54929,54930,54931,54933,54934,54935,54936,54937,54938,54939,54940,54942,54944,54946,54947,54948,54949,54950,54951,54953,54954,52284,52285,52286,52292,52293,52296,52300,52308,52309,52311,52312,52313,52320,52324,52326,52328,52336,52341,52376,52377,52380,52384,52392,52393,52395,52396,52397,52404,52405,52408,52412,52420,52421,52423,52425,52432,52436,52452,52460,52464,52481,52488,52489,52492,52496,52504,52505,52507,52509,52516,52520,52524,52537,52572,52576,52580,52588,52589,52591,52593,52600,52616,52628,52629,52632,52636,52644,52645,52647,52649,52656,52676,52684,52688,52712,52716,52720,52728,52729,52731,52733,52740,52744,52748,52756,52761,52768,52769,52772,52776,52784,52785,52787,52789,54955,54957,54958,54959,54961,54962,54963,54964,54965,54966,54967,54968,54970,54972,54973,54974,54975,54976,54977,54978,54979,54982,54983,54985,54986,54987,null,null,null,null,null,null,54989,54990,54991,54992,54994,54995,54997,54998,55000,55002,55003,55004,55005,55006,55007,55009,55010,55011,55013,55014,55015,55017,55018,55019,55020,55021,null,null,null,null,null,null,55022,55023,55025,55026,55027,55028,55030,55031,55032,55033,55034,55035,55038,55039,55041,55042,55043,55045,55046,55047,55048,55049,55050,55051,55052,55053,55054,55055,55056,55058,55059,55060,52824,52825,52828,52831,52832,52833,52840,52841,52843,52845,52852,52853,52856,52860,52868,52869,52871,52873,52880,52881,52884,52888,52896,52897,52899,52900,52901,52908,52909,52929,52964,52965,52968,52971,52972,52980,52981,52983,52984,52985,52992,52993,52996,53000,53008,53009,53011,53013,53020,53024,53028,53036,53037,53039,53040,53041,53048,53076,53077,53080,53084,53092,53093,53095,53097,53104,53105,53108,53112,53120,53125,53132,53153,53160,53168,53188,53216,53217,53220,53224,53232,53233,53235,53237,53244,53248,53252,53265,53272,53293,53300,53301,53304,53308,55061,55062,55063,55066,55067,55069,55070,55071,55073,55074,55075,55076,55077,55078,55079,55082,55084,55086,55087,55088,55089,55090,55091,55094,55095,55097,null,null,null,null,null,null,55098,55099,55101,55102,55103,55104,55105,55106,55107,55109,55110,55112,55114,55115,55116,55117,55118,55119,55122,55123,55125,55130,55131,55132,55133,55134,null,null,null,null,null,null,55135,55138,55140,55142,55143,55144,55146,55147,55149,55150,55151,55153,55154,55155,55157,55158,55159,55160,55161,55162,55163,55166,55167,55168,55170,55171,55172,55173,55174,55175,55178,55179,53316,53317,53319,53321,53328,53332,53336,53344,53356,53357,53360,53364,53372,53373,53377,53412,53413,53416,53420,53428,53429,53431,53433,53440,53441,53444,53448,53449,53456,53457,53459,53460,53461,53468,53469,53472,53476,53484,53485,53487,53488,53489,53496,53517,53552,53553,53556,53560,53562,53568,53569,53571,53572,53573,53580,53581,53584,53588,53596,53597,53599,53601,53608,53612,53628,53636,53640,53664,53665,53668,53672,53680,53681,53683,53685,53690,53692,53696,53720,53748,53752,53767,53769,53776,53804,53805,53808,53812,53820,53821,53823,53825,53832,53852,55181,55182,55183,55185,55186,55187,55188,55189,55190,55191,55194,55196,55198,55199,55200,55201,55202,55203,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,53860,53888,53889,53892,53896,53904,53905,53909,53916,53920,53924,53932,53937,53944,53945,53948,53951,53952,53954,53960,53961,53963,53972,53976,53980,53988,53989,54000,54001,54004,54008,54016,54017,54019,54021,54028,54029,54030,54032,54036,54038,54044,54045,54047,54048,54049,54053,54056,54057,54060,54064,54072,54073,54075,54076,54077,54084,54085,54140,54141,54144,54148,54156,54157,54159,54160,54161,54168,54169,54172,54176,54184,54185,54187,54189,54196,54200,54204,54212,54213,54216,54217,54224,54232,54241,54243,54252,54253,54256,54260,54268,54269,54271,54273,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,54280,54301,54336,54340,54364,54368,54372,54381,54383,54392,54393,54396,54399,54400,54402,54408,54409,54411,54413,54420,54441,54476,54480,54484,54492,54495,54504,54508,54512,54520,54523,54525,54532,54536,54540,54548,54549,54551,54588,54589,54592,54596,54604,54605,54607,54609,54616,54617,54620,54624,54629,54632,54633,54635,54637,54644,54645,54648,54652,54660,54661,54663,54664,54665,54672,54693,54728,54729,54732,54736,54738,54744,54745,54747,54749,54756,54757,54760,54764,54772,54773,54775,54777,54784,54785,54788,54792,54800,54801,54803,54804,54805,54812,54816,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,54820,54829,54840,54841,54844,54848,54853,54856,54857,54859,54861,54865,54868,54869,54872,54876,54887,54889,54896,54897,54900,54915,54917,54924,54925,54928,54932,54941,54943,54945,54952,54956,54960,54969,54971,54980,54981,54984,54988,54993,54996,54999,55001,55008,55012,55016,55024,55029,55036,55037,55040,55044,55057,55064,55065,55068,55072,55080,55081,55083,55085,55092,55093,55096,55100,55108,55111,55113,55120,55121,55124,55126,55127,55128,55129,55136,55137,55139,55141,55145,55148,55152,55156,55164,55165,55169,55176,55177,55180,55184,55192,55193,55195,55197,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20285,20339,20551,20729,21152,21487,21621,21733,22025,23233,23478,26247,26550,26551,26607,27468,29634,30146,31292,33499,33540,34903,34952,35382,36040,36303,36603,36838,39381,21051,21364,21508,24682,24932,27580,29647,33050,35258,35282,38307,20355,21002,22718,22904,23014,24178,24185,25031,25536,26438,26604,26751,28567,30286,30475,30965,31240,31487,31777,32925,33390,33393,35563,38291,20075,21917,26359,28212,30883,31469,33883,35088,34638,38824,21208,22350,22570,23884,24863,25022,25121,25954,26577,27204,28187,29976,30131,30435,30640,32058,37039,37969,37970,40853,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21283,23724,30002,32987,37440,38296,21083,22536,23004,23713,23831,24247,24378,24394,24951,27743,30074,30086,31968,32115,32177,32652,33108,33313,34193,35137,35611,37628,38477,40007,20171,20215,20491,20977,22607,24887,24894,24936,25913,27114,28433,30117,30342,30422,31623,33445,33995,63744,37799,38283,21888,23458,22353,63745,31923,32697,37301,20520,21435,23621,24040,25298,25454,25818,25831,28192,28844,31067,36317,36382,63746,36989,37445,37624,20094,20214,20581,24062,24314,24838,26967,33137,34388,36423,37749,39467,20062,20625,26480,26688,20745,21133,21138,27298,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,30652,37392,40660,21163,24623,36850,20552,25001,25581,25802,26684,27268,28608,33160,35233,38548,22533,29309,29356,29956,32121,32365,32937,35211,35700,36963,40273,25225,27770,28500,32080,32570,35363,20860,24906,31645,35609,37463,37772,20140,20435,20510,20670,20742,21185,21197,21375,22384,22659,24218,24465,24950,25004,25806,25964,26223,26299,26356,26775,28039,28805,28913,29855,29861,29898,30169,30828,30956,31455,31478,32069,32147,32789,32831,33051,33686,35686,36629,36885,37857,38915,38968,39514,39912,20418,21843,22586,22865,23395,23622,24760,25106,26690,26800,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26856,28330,30028,30328,30926,31293,31995,32363,32380,35336,35489,35903,38542,40388,21476,21481,21578,21617,22266,22993,23396,23611,24235,25335,25911,25925,25970,26272,26543,27073,27837,30204,30352,30590,31295,32660,32771,32929,33167,33510,33533,33776,34241,34865,34996,35493,63747,36764,37678,38599,39015,39640,40723,21741,26011,26354,26767,31296,35895,40288,22256,22372,23825,26118,26801,26829,28414,29736,34974,39908,27752,63748,39592,20379,20844,20849,21151,23380,24037,24656,24685,25329,25511,25915,29657,31354,34467,36002,38799,20018,23521,25096,26524,29916,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31185,33747,35463,35506,36328,36942,37707,38982,24275,27112,34303,37101,63749,20896,23448,23532,24931,26874,27454,28748,29743,29912,31649,32592,33733,35264,36011,38364,39208,21038,24669,25324,36866,20362,20809,21281,22745,24291,26336,27960,28826,29378,29654,31568,33009,37979,21350,25499,32619,20054,20608,22602,22750,24618,24871,25296,27088,39745,23439,32024,32945,36703,20132,20689,21676,21932,23308,23968,24039,25898,25934,26657,27211,29409,30350,30703,32094,32761,33184,34126,34527,36611,36686,37066,39171,39509,39851,19992,20037,20061,20167,20465,20855,21246,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21312,21475,21477,21646,22036,22389,22434,23495,23943,24272,25084,25304,25937,26552,26601,27083,27472,27590,27628,27714,28317,28792,29399,29590,29699,30655,30697,31350,32127,32777,33276,33285,33290,33503,34914,35635,36092,36544,36881,37041,37476,37558,39378,39493,40169,40407,40860,22283,23616,33738,38816,38827,40628,21531,31384,32676,35033,36557,37089,22528,23624,25496,31391,23470,24339,31353,31406,33422,36524,20518,21048,21240,21367,22280,25331,25458,27402,28099,30519,21413,29527,34152,36470,38357,26426,27331,28528,35437,36556,39243,63750,26231,27512,36020,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,39740,63751,21483,22317,22862,25542,27131,29674,30789,31418,31429,31998,33909,35215,36211,36917,38312,21243,22343,30023,31584,33740,37406,63752,27224,20811,21067,21127,25119,26840,26997,38553,20677,21156,21220,25027,26020,26681,27135,29822,31563,33465,33771,35250,35641,36817,39241,63753,20170,22935,25810,26129,27278,29748,31105,31165,33449,34942,34943,35167,63754,37670,20235,21450,24613,25201,27762,32026,32102,20120,20834,30684,32943,20225,20238,20854,20864,21980,22120,22331,22522,22524,22804,22855,22931,23492,23696,23822,24049,24190,24524,25216,26071,26083,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26398,26399,26462,26827,26820,27231,27450,27683,27773,27778,28103,29592,29734,29738,29826,29859,30072,30079,30849,30959,31041,31047,31048,31098,31637,32000,32186,32648,32774,32813,32908,35352,35663,35912,36215,37665,37668,39138,39249,39438,39439,39525,40594,32202,20342,21513,25326,26708,37329,21931,20794,63755,63756,23068,25062,63757,25295,25343,63758,63759,63760,63761,63762,63763,37027,63764,63765,63766,63767,63768,35582,63769,63770,63771,63772,26262,63773,29014,63774,63775,38627,63776,25423,25466,21335,63777,26511,26976,28275,63778,30007,63779,63780,63781,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32013,63782,63783,34930,22218,23064,63784,63785,63786,63787,63788,20035,63789,20839,22856,26608,32784,63790,22899,24180,25754,31178,24565,24684,25288,25467,23527,23511,21162,63791,22900,24361,24594,63792,63793,63794,29785,63795,63796,63797,63798,63799,63800,39377,63801,63802,63803,63804,63805,63806,63807,63808,63809,63810,63811,28611,63812,63813,33215,36786,24817,63814,63815,33126,63816,63817,23615,63818,63819,63820,63821,63822,63823,63824,63825,23273,35365,26491,32016,63826,63827,63828,63829,63830,63831,33021,63832,63833,23612,27877,21311,28346,22810,33590,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20025,20150,20294,21934,22296,22727,24406,26039,26086,27264,27573,28237,30701,31471,31774,32222,34507,34962,37170,37723,25787,28606,29562,30136,36948,21846,22349,25018,25812,26311,28129,28251,28525,28601,30192,32835,33213,34113,35203,35527,35674,37663,27795,30035,31572,36367,36957,21776,22530,22616,24162,25095,25758,26848,30070,31958,34739,40680,20195,22408,22382,22823,23565,23729,24118,24453,25140,25825,29619,33274,34955,36024,38538,40667,23429,24503,24755,20498,20992,21040,22294,22581,22615,23566,23648,23798,23947,24230,24466,24764,25361,25481,25623,26691,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26873,27330,28120,28193,28372,28644,29182,30428,30585,31153,31291,33796,35241,36077,36339,36424,36867,36884,36947,37117,37709,38518,38876,27602,28678,29272,29346,29544,30563,31167,31716,32411,35712,22697,24775,25958,26109,26302,27788,28958,29129,35930,38931,20077,31361,20189,20908,20941,21205,21516,24999,26481,26704,26847,27934,28540,30140,30643,31461,33012,33891,37509,20828,26007,26460,26515,30168,31431,33651,63834,35910,36887,38957,23663,33216,33434,36929,36975,37389,24471,23965,27225,29128,30331,31561,34276,35588,37159,39472,21895,25078,63835,30313,32645,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,34367,34746,35064,37007,63836,27931,28889,29662,32097,33853,63837,37226,39409,63838,20098,21365,27396,27410,28734,29211,34349,40478,21068,36771,23888,25829,25900,27414,28651,31811,32412,34253,35172,35261,25289,33240,34847,24266,26391,28010,29436,29701,29807,34690,37086,20358,23821,24480,33802,20919,25504,30053,20142,20486,20841,20937,26753,27153,31918,31921,31975,33391,35538,36635,37327,20406,20791,21237,21570,24300,24942,25150,26053,27354,28670,31018,34268,34851,38317,39522,39530,40599,40654,21147,26310,27511,28701,31019,36706,38722,24976,25088,25891,28451,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,29001,29833,32244,32879,34030,36646,36899,37706,20925,21015,21155,27916,28872,35010,24265,25986,27566,28610,31806,29557,20196,20278,22265,63839,23738,23994,24604,29618,31533,32666,32718,32838,36894,37428,38646,38728,38936,40801,20363,28583,31150,37300,38583,21214,63840,25736,25796,27347,28510,28696,29200,30439,32769,34310,34396,36335,36613,38706,39791,40442,40565,30860,31103,32160,33737,37636,40575,40595,35542,22751,24324,26407,28711,29903,31840,32894,20769,28712,29282,30922,36034,36058,36084,38647,20102,20698,23534,24278,26009,29134,30274,30637,32842,34044,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36988,39719,40845,22744,23105,23650,27155,28122,28431,30267,32047,32311,34078,35128,37860,38475,21129,26066,26611,27060,27969,28316,28687,29705,29792,30041,30244,30827,35628,39006,20845,25134,38520,20374,20523,23833,28138,32184,36650,24459,24900,26647,63841,38534,21202,32907,20956,20940,26974,31260,32190,33777,38517,20442,21033,21400,21519,21774,23653,24743,26446,26792,28012,29313,29432,29702,29827,63842,30178,31852,32633,32696,33673,35023,35041,37324,37328,38626,39881,21533,28542,29136,29848,34298,36522,38563,40023,40607,26519,28107,29747,33256,38678,30764,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31435,31520,31890,25705,29802,30194,30908,30952,39340,39764,40635,23518,24149,28448,33180,33707,37000,19975,21325,23081,24018,24398,24930,25405,26217,26364,28415,28459,28771,30622,33836,34067,34875,36627,39237,39995,21788,25273,26411,27819,33545,35178,38778,20129,22916,24536,24537,26395,32178,32596,33426,33579,33725,36638,37017,22475,22969,23186,23504,26151,26522,26757,27599,29028,32629,36023,36067,36993,39749,33032,35978,38476,39488,40613,23391,27667,29467,30450,30431,33804,20906,35219,20813,20885,21193,26825,27796,30468,30496,32191,32236,38754,40629,28357,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,34065,20901,21517,21629,26126,26269,26919,28319,30399,30609,33559,33986,34719,37225,37528,40180,34946,20398,20882,21215,22982,24125,24917,25720,25721,26286,26576,27169,27597,27611,29279,29281,29761,30520,30683,32791,33468,33541,35584,35624,35980,26408,27792,29287,30446,30566,31302,40361,27519,27794,22818,26406,33945,21359,22675,22937,24287,25551,26164,26483,28218,29483,31447,33495,37672,21209,24043,25006,25035,25098,25287,25771,26080,26969,27494,27595,28961,29687,30045,32326,33310,33538,34154,35491,36031,38695,40289,22696,40664,20497,21006,21563,21839,25991,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,27766,32010,32011,32862,34442,38272,38639,21247,27797,29289,21619,23194,23614,23883,24396,24494,26410,26806,26979,28220,28228,30473,31859,32654,34183,35598,36855,38753,40692,23735,24758,24845,25003,25935,26107,26108,27665,27887,29599,29641,32225,38292,23494,34588,35600,21085,21338,25293,25615,25778,26420,27192,27850,29632,29854,31636,31893,32283,33162,33334,34180,36843,38649,39361,20276,21322,21453,21467,25292,25644,25856,26001,27075,27886,28504,29677,30036,30242,30436,30460,30928,30971,31020,32070,33324,34784,36820,38930,39151,21187,25300,25765,28196,28497,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,30332,36299,37297,37474,39662,39747,20515,20621,22346,22952,23592,24135,24439,25151,25918,26041,26049,26121,26507,27036,28354,30917,32033,32938,33152,33323,33459,33953,34444,35370,35607,37030,38450,40848,20493,20467,63843,22521,24472,25308,25490,26479,28227,28953,30403,32972,32986,35060,35061,35097,36064,36649,37197,38506,20271,20336,24091,26575,26658,30333,30334,39748,24161,27146,29033,29140,30058,63844,32321,34115,34281,39132,20240,31567,32624,38309,20961,24070,26805,27710,27726,27867,29359,31684,33539,27861,29754,20731,21128,22721,25816,27287,29863,30294,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,30887,34327,38370,38713,63845,21342,24321,35722,36776,36783,37002,21029,30629,40009,40712,19993,20482,20853,23643,24183,26142,26170,26564,26821,28851,29953,30149,31177,31453,36647,39200,39432,20445,22561,22577,23542,26222,27493,27921,28282,28541,29668,29995,33769,35036,35091,35676,36628,20239,20693,21264,21340,23443,24489,26381,31119,33145,33583,34068,35079,35206,36665,36667,39333,39954,26412,20086,20472,22857,23553,23791,23792,25447,26834,28925,29090,29739,32299,34028,34562,36898,37586,40179,19981,20184,20463,20613,21078,21103,21542,21648,22496,22827,23142,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,23386,23413,23500,24220,63846,25206,25975,26023,28014,28325,29238,31526,31807,32566,33104,33105,33178,33344,33433,33705,35331,36000,36070,36091,36212,36282,37096,37340,38428,38468,39385,40167,21271,20998,21545,22132,22707,22868,22894,24575,24996,25198,26128,27774,28954,30406,31881,31966,32027,33452,36033,38640,63847,20315,24343,24447,25282,23849,26379,26842,30844,32323,40300,19989,20633,21269,21290,21329,22915,23138,24199,24754,24970,25161,25209,26000,26503,27047,27604,27606,27607,27608,27832,63848,29749,30202,30738,30865,31189,31192,31875,32203,32737,32933,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,33086,33218,33778,34586,35048,35513,35692,36027,37145,38750,39131,40763,22188,23338,24428,25996,27315,27567,27996,28657,28693,29277,29613,36007,36051,38971,24977,27703,32856,39425,20045,20107,20123,20181,20282,20284,20351,20447,20735,21490,21496,21766,21987,22235,22763,22882,23057,23531,23546,23556,24051,24107,24473,24605,25448,26012,26031,26614,26619,26797,27515,27801,27863,28195,28681,29509,30722,31038,31040,31072,31169,31721,32023,32114,32902,33293,33678,34001,34503,35039,35408,35422,35613,36060,36198,36781,37034,39164,39391,40605,21066,63849,26388,63850,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20632,21034,23665,25955,27733,29642,29987,30109,31639,33948,37240,38704,20087,25746,27578,29022,34217,19977,63851,26441,26862,28183,33439,34072,34923,25591,28545,37394,39087,19978,20663,20687,20767,21830,21930,22039,23360,23577,23776,24120,24202,24224,24258,24819,26705,27233,28248,29245,29248,29376,30456,31077,31665,32724,35059,35316,35443,35937,36062,38684,22622,29885,36093,21959,63852,31329,32034,33394,29298,29983,29989,63853,31513,22661,22779,23996,24207,24246,24464,24661,25234,25471,25933,26257,26329,26360,26646,26866,29312,29790,31598,32110,32214,32626,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32997,33298,34223,35199,35475,36893,37604,40653,40736,22805,22893,24109,24796,26132,26227,26512,27728,28101,28511,30707,30889,33990,37323,37675,20185,20682,20808,21892,23307,23459,25159,25982,26059,28210,29053,29697,29764,29831,29887,30316,31146,32218,32341,32680,33146,33203,33337,34330,34796,35445,36323,36984,37521,37925,39245,39854,21352,23633,26964,27844,27945,28203,33292,34203,35131,35373,35498,38634,40807,21089,26297,27570,32406,34814,36109,38275,38493,25885,28041,29166,63854,22478,22995,23468,24615,24826,25104,26143,26207,29481,29689,30427,30465,31596,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32854,32882,33125,35488,37266,19990,21218,27506,27927,31237,31545,32048,63855,36016,21484,22063,22609,23477,23567,23569,24034,25152,25475,25620,26157,26803,27836,28040,28335,28703,28836,29138,29990,30095,30094,30233,31505,31712,31787,32032,32057,34092,34157,34311,35380,36877,36961,37045,37559,38902,39479,20439,23660,26463,28049,31903,32396,35606,36118,36895,23403,24061,25613,33984,36956,39137,29575,23435,24730,26494,28126,35359,35494,36865,38924,21047,63856,28753,30862,37782,34928,37335,20462,21463,22013,22234,22402,22781,23234,23432,23723,23744,24101,24833,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,25101,25163,25480,25628,25910,25976,27193,27530,27700,27929,28465,29159,29417,29560,29703,29874,30246,30561,31168,31319,31466,31929,32143,32172,32353,32670,33065,33585,33936,34010,34282,34966,35504,35728,36664,36930,36995,37228,37526,37561,38539,38567,38568,38614,38656,38920,39318,39635,39706,21460,22654,22809,23408,23487,28113,28506,29087,29729,29881,32901,33789,24033,24455,24490,24642,26092,26642,26991,27219,27529,27957,28147,29667,30462,30636,31565,32020,33059,33308,33600,34036,34147,35426,35524,37255,37662,38918,39348,25100,34899,36848,37477,23815,23847,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,23913,29791,33181,34664,28629,25342,32722,35126,35186,19998,20056,20711,21213,21319,25215,26119,32361,34821,38494,20365,21273,22070,22987,23204,23608,23630,23629,24066,24337,24643,26045,26159,26178,26558,26612,29468,30690,31034,32709,33940,33997,35222,35430,35433,35553,35925,35962,22516,23508,24335,24687,25325,26893,27542,28252,29060,31698,34645,35672,36606,39135,39166,20280,20353,20449,21627,23072,23480,24892,26032,26216,29180,30003,31070,32051,33102,33251,33688,34218,34254,34563,35338,36523,36763,63857,36805,22833,23460,23526,24713,23529,23563,24515,27777,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63858,28145,28683,29978,33455,35574,20160,21313,63859,38617,27663,20126,20420,20818,21854,23077,23784,25105,29273,33469,33706,34558,34905,35357,38463,38597,39187,40201,40285,22538,23731,23997,24132,24801,24853,25569,27138,28197,37122,37716,38990,39952,40823,23433,23736,25353,26191,26696,30524,38593,38797,38996,39839,26017,35585,36555,38332,21813,23721,24022,24245,26263,30284,33780,38343,22739,25276,29390,40232,20208,22830,24591,26171,27523,31207,40230,21395,21696,22467,23830,24859,26326,28079,30861,33406,38552,38724,21380,25212,25494,28082,32266,33099,38989,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,27387,32588,40367,40474,20063,20539,20918,22812,24825,25590,26928,29242,32822,63860,37326,24369,63861,63862,32004,33509,33903,33979,34277,36493,63863,20335,63864,63865,22756,23363,24665,25562,25880,25965,26264,63866,26954,27171,27915,28673,29036,30162,30221,31155,31344,63867,32650,63868,35140,63869,35731,37312,38525,63870,39178,22276,24481,26044,28417,30208,31142,35486,39341,39770,40812,20740,25014,25233,27277,33222,20547,22576,24422,28937,35328,35578,23420,34326,20474,20796,22196,22852,25513,28153,23978,26989,20870,20104,20313,63871,63872,63873,22914,63874,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63875,27487,27741,63876,29877,30998,63877,33287,33349,33593,36671,36701,63878,39192,63879,63880,63881,20134,63882,22495,24441,26131,63883,63884,30123,32377,35695,63885,36870,39515,22181,22567,23032,23071,23476,63886,24310,63887,63888,25424,25403,63889,26941,27783,27839,28046,28051,28149,28436,63890,28895,28982,29017,63891,29123,29141,63892,30799,30831,63893,31605,32227,63894,32303,63895,34893,36575,63896,63897,63898,37467,63899,40182,63900,63901,63902,24709,28037,63903,29105,63904,63905,38321,21421,63906,63907,63908,26579,63909,28814,28976,29744,33398,33490,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63910,38331,39653,40573,26308,63911,29121,33865,63912,63913,22603,63914,63915,23992,24433,63916,26144,26254,27001,27054,27704,27891,28214,28481,28634,28699,28719,29008,29151,29552,63917,29787,63918,29908,30408,31310,32403,63919,63920,33521,35424,36814,63921,37704,63922,38681,63923,63924,20034,20522,63925,21000,21473,26355,27757,28618,29450,30591,31330,33454,34269,34306,63926,35028,35427,35709,35947,63927,37555,63928,38675,38928,20116,20237,20425,20658,21320,21566,21555,21978,22626,22714,22887,23067,23524,24735,63929,25034,25942,26111,26212,26791,27738,28595,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,28879,29100,29522,31613,34568,35492,39986,40711,23627,27779,29508,29577,37434,28331,29797,30239,31337,32277,34314,20800,22725,25793,29934,29973,30320,32705,37013,38605,39252,28198,29926,31401,31402,33253,34521,34680,35355,23113,23436,23451,26785,26880,28003,29609,29715,29740,30871,32233,32747,33048,33109,33694,35916,38446,38929,26352,24448,26106,26505,27754,29579,20525,23043,27498,30702,22806,23916,24013,29477,30031,63930,63931,20709,20985,22575,22829,22934,23002,23525,63932,63933,23970,25303,25622,25747,25854,63934,26332,63935,27208,63936,29183,29796,63937,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31368,31407,32327,32350,32768,33136,63938,34799,35201,35616,36953,63939,36992,39250,24958,27442,28020,32287,35109,36785,20433,20653,20887,21191,22471,22665,23481,24248,24898,27029,28044,28263,28342,29076,29794,29992,29996,32883,33592,33993,36362,37780,37854,63940,20110,20305,20598,20778,21448,21451,21491,23431,23507,23588,24858,24962,26100,29275,29591,29760,30402,31056,31121,31161,32006,32701,33419,34261,34398,36802,36935,37109,37354,38533,38632,38633,21206,24423,26093,26161,26671,29020,31286,37057,38922,20113,63941,27218,27550,28560,29065,32792,33464,34131,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36939,38549,38642,38907,34074,39729,20112,29066,38596,20803,21407,21729,22291,22290,22435,23195,23236,23491,24616,24895,25588,27781,27961,28274,28304,29232,29503,29783,33489,34945,36677,36960,63942,38498,39000,40219,26376,36234,37470,20301,20553,20702,21361,22285,22996,23041,23561,24944,26256,28205,29234,29771,32239,32963,33806,33894,34111,34655,34907,35096,35586,36949,38859,39759,20083,20369,20754,20842,63943,21807,21929,23418,23461,24188,24189,24254,24736,24799,24840,24841,25540,25912,26377,63944,26580,26586,63945,26977,26978,27833,27943,63946,28216,63947,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,28641,29494,29495,63948,29788,30001,63949,30290,63950,63951,32173,33278,33848,35029,35480,35547,35565,36400,36418,36938,36926,36986,37193,37321,37742,63952,63953,22537,63954,27603,32905,32946,63955,63956,20801,22891,23609,63957,63958,28516,29607,32996,36103,63959,37399,38287,63960,63961,63962,63963,32895,25102,28700,32104,34701,63964,22432,24681,24903,27575,35518,37504,38577,20057,21535,28139,34093,38512,38899,39150,25558,27875,37009,20957,25033,33210,40441,20381,20506,20736,23452,24847,25087,25836,26885,27589,30097,30691,32681,33380,34191,34811,34915,35516,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,35696,37291,20108,20197,20234,63965,63966,22839,23016,63967,24050,24347,24411,24609,63968,63969,63970,63971,29246,29669,63972,30064,30157,63973,31227,63974,32780,32819,32900,33505,33617,63975,63976,36029,36019,36999,63977,63978,39156,39180,63979,63980,28727,30410,32714,32716,32764,35610,20154,20161,20995,21360,63981,21693,22240,23035,23493,24341,24525,28270,63982,63983,32106,33589,63984,34451,35469,63985,38765,38775,63986,63987,19968,20314,20350,22777,26085,28322,36920,37808,39353,20219,22764,22922,23001,24641,63988,63989,31252,63990,33615,36035,20837,21316,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63991,63992,63993,20173,21097,23381,33471,20180,21050,21672,22985,23039,23376,23383,23388,24675,24904,28363,28825,29038,29574,29943,30133,30913,32043,32773,33258,33576,34071,34249,35566,36039,38604,20316,21242,22204,26027,26152,28796,28856,29237,32189,33421,37196,38592,40306,23409,26855,27544,28538,30430,23697,26283,28507,31668,31786,34870,38620,19976,20183,21280,22580,22715,22767,22892,23559,24115,24196,24373,25484,26290,26454,27167,27299,27404,28479,29254,63994,29520,29835,31456,31911,33144,33247,33255,33674,33900,34083,34196,34255,35037,36115,37292,38263,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,38556,20877,21705,22312,23472,25165,26448,26685,26771,28221,28371,28797,32289,35009,36001,36617,40779,40782,29229,31631,35533,37658,20295,20302,20786,21632,22992,24213,25269,26485,26990,27159,27822,28186,29401,29482,30141,31672,32053,33511,33785,33879,34295,35419,36015,36487,36889,37048,38606,40799,21219,21514,23265,23490,25688,25973,28404,29380,63995,30340,31309,31515,31821,32318,32735,33659,35627,36042,36196,36321,36447,36842,36857,36969,37841,20291,20346,20659,20840,20856,21069,21098,22625,22652,22880,23560,23637,24283,24731,25136,26643,27583,27656,28593,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,29006,29728,30000,30008,30033,30322,31564,31627,31661,31686,32399,35438,36670,36681,37439,37523,37666,37931,38651,39002,39019,39198,20999,25130,25240,27993,30308,31434,31680,32118,21344,23742,24215,28472,28857,31896,38673,39822,40670,25509,25722,34678,19969,20117,20141,20572,20597,21576,22979,23450,24128,24237,24311,24449,24773,25402,25919,25972,26060,26230,26232,26622,26984,27273,27491,27712,28096,28136,28191,28254,28702,28833,29582,29693,30010,30555,30855,31118,31243,31357,31934,32142,33351,35330,35562,35998,37165,37194,37336,37478,37580,37664,38662,38742,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,38748,38914,40718,21046,21137,21884,22564,24093,24351,24716,25552,26799,28639,31085,31532,33229,34234,35069,35576,36420,37261,38500,38555,38717,38988,40778,20430,20806,20939,21161,22066,24340,24427,25514,25805,26089,26177,26362,26361,26397,26781,26839,27133,28437,28526,29031,29157,29226,29866,30522,31062,31066,31199,31264,31381,31895,31967,32068,32368,32903,34299,34468,35412,35519,36249,36481,36896,36973,37347,38459,38613,40165,26063,31751,36275,37827,23384,23562,21330,25305,29469,20519,23447,24478,24752,24939,26837,28121,29742,31278,32066,32156,32305,33131,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36394,36405,37758,37912,20304,22352,24038,24231,25387,32618,20027,20303,20367,20570,23005,32964,21610,21608,22014,22863,23449,24030,24282,26205,26417,26609,26666,27880,27954,28234,28557,28855,29664,30087,31820,32002,32044,32162,33311,34523,35387,35461,36208,36490,36659,36913,37198,37202,37956,39376,31481,31909,20426,20737,20934,22472,23535,23803,26201,27197,27994,28310,28652,28940,30063,31459,34850,36897,36981,38603,39423,33537,20013,20210,34886,37325,21373,27355,26987,27713,33914,22686,24974,26366,25327,28893,29969,30151,32338,33976,35657,36104,20043,21482,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21675,22320,22336,24535,25345,25351,25711,25903,26088,26234,26525,26547,27490,27744,27802,28460,30693,30757,31049,31063,32025,32930,33026,33267,33437,33463,34584,35468,63996,36100,36286,36978,30452,31257,31287,32340,32887,21767,21972,22645,25391,25634,26185,26187,26733,27035,27524,27941,28337,29645,29800,29857,30043,30137,30433,30494,30603,31206,32265,32285,33275,34095,34967,35386,36049,36587,36784,36914,37805,38499,38515,38663,20356,21489,23018,23241,24089,26702,29894,30142,31209,31378,33187,34541,36074,36300,36845,26015,26389,63997,22519,28503,32221,36655,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,37878,38598,24501,25074,28548,19988,20376,20511,21449,21983,23919,24046,27425,27492,30923,31642,63998,36425,36554,36974,25417,25662,30528,31364,37679,38015,40810,25776,28591,29158,29864,29914,31428,31762,32386,31922,32408,35738,36106,38013,39184,39244,21049,23519,25830,26413,32046,20717,21443,22649,24920,24921,25082,26028,31449,35730,35734,20489,20513,21109,21809,23100,24288,24432,24884,25950,26124,26166,26274,27085,28356,28466,29462,30241,31379,33081,33369,33750,33980,20661,22512,23488,23528,24425,25505,30758,32181,33756,34081,37319,37365,20874,26613,31574,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36012,20932,22971,24765,34389,20508,63999,21076,23610,24957,25114,25299,25842,26021,28364,30240,33034,36448,38495,38587,20191,21315,21912,22825,24029,25797,27849,28154,29588,31359,33307,34214,36068,36368,36983,37351,38369,38433,38854,20984,21746,21894,24505,25764,28552,32180,36639,36685,37941,20681,23574,27838,28155,29979,30651,31805,31844,35449,35522,22558,22974,24086,25463,29266,30090,30571,35548,36028,36626,24307,26228,28152,32893,33729,35531,38737,39894,64000,21059,26367,28053,28399,32224,35558,36910,36958,39636,21021,21119,21736,24980,25220,25307,26786,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26898,26970,27189,28818,28966,30813,30977,30990,31186,31245,32918,33400,33493,33609,34121,35970,36229,37218,37259,37294,20419,22225,29165,30679,34560,35320,23544,24534,26449,37032,21474,22618,23541,24740,24961,25696,32317,32880,34085,37507,25774,20652,23828,26368,22684,25277,25512,26894,27000,27166,28267,30394,31179,33467,33833,35535,36264,36861,37138,37195,37276,37648,37656,37786,38619,39478,39949,19985,30044,31069,31482,31569,31689,32302,33988,36441,36468,36600,36880,26149,26943,29763,20986,26414,40668,20805,24544,27798,34802,34909,34935,24756,33205,33795,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36101,21462,21561,22068,23094,23601,28810,32736,32858,33030,33261,36259,37257,39519,40434,20596,20164,21408,24827,28204,23652,20360,20516,21988,23769,24159,24677,26772,27835,28100,29118,30164,30196,30305,31258,31305,32199,32251,32622,33268,34473,36636,38601,39347,40786,21063,21189,39149,35242,19971,26578,28422,20405,23522,26517,27784,28024,29723,30759,37341,37756,34756,31204,31281,24555,20182,21668,21822,22702,22949,24816,25171,25302,26422,26965,33333,38464,39345,39389,20524,21331,21828,22396,64001,25176,64002,25826,26219,26589,28609,28655,29730,29752,35351,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,37944,21585,22022,22374,24392,24986,27470,28760,28845,32187,35477,22890,33067,25506,30472,32829,36010,22612,25645,27067,23445,24081,28271,64003,34153,20812,21488,22826,24608,24907,27526,27760,27888,31518,32974,33492,36294,37040,39089,64004,25799,28580,25745,25860,20814,21520,22303,35342,24927,26742,64005,30171,31570,32113,36890,22534,27084,33151,35114,36864,38969,20600,22871,22956,25237,36879,39722,24925,29305,38358,22369,23110,24052,25226,25773,25850,26487,27874,27966,29228,29750,30772,32631,33453,36315,38935,21028,22338,26495,29256,29923,36009,36774,37393,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,38442,20843,21485,25420,20329,21764,24726,25943,27803,28031,29260,29437,31255,35207,35997,24429,28558,28921,33192,24846,20415,20559,25153,29255,31687,32232,32745,36941,38829,39449,36022,22378,24179,26544,33805,35413,21536,23318,24163,24290,24330,25987,32954,34109,38281,38491,20296,21253,21261,21263,21638,21754,22275,24067,24598,25243,25265,25429,64006,27873,28006,30129,30770,32990,33071,33502,33889,33970,34957,35090,36875,37610,39165,39825,24133,26292,26333,28689,29190,64007,20469,21117,24426,24915,26451,27161,28418,29922,31080,34920,35961,39111,39108,39491,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21697,31263,26963,35575,35914,39080,39342,24444,25259,30130,30382,34987,36991,38466,21305,24380,24517,27852,29644,30050,30091,31558,33534,39325,20047,36924,19979,20309,21414,22799,24264,26160,27827,29781,33655,34662,36032,36944,38686,39957,22737,23416,34384,35604,40372,23506,24680,24717,26097,27735,28450,28579,28698,32597,32752,38289,38290,38480,38867,21106,36676,20989,21547,21688,21859,21898,27323,28085,32216,33382,37532,38519,40569,21512,21704,30418,34532,38308,38356,38492,20130,20233,23022,23270,24055,24658,25239,26477,26689,27782,28207,32568,32923,33322,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,64008,64009,38917,20133,20565,21683,22419,22874,23401,23475,25032,26999,28023,28707,34809,35299,35442,35559,36994,39405,39608,21182,26680,20502,24184,26447,33607,34892,20139,21521,22190,29670,37141,38911,39177,39255,39321,22099,22687,34395,35377,25010,27382,29563,36562,27463,38570,39511,22869,29184,36203,38761,20436,23796,24358,25080,26203,27883,28843,29572,29625,29694,30505,30541,32067,32098,32291,33335,34898,64010,36066,37449,39023,23377,31348,34880,38913,23244,20448,21332,22846,23805,25406,28025,29433,33029,33031,33698,37583,38960,20136,20804,21009,22411,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,24418,27842,28366,28677,28752,28847,29074,29673,29801,33610,34722,34913,36872,37026,37795,39336,20846,24407,24800,24935,26291,34137,36426,37295,38795,20046,20114,21628,22741,22778,22909,23733,24359,25142,25160,26122,26215,27627,28009,28111,28246,28408,28564,28640,28649,28765,29392,29733,29786,29920,30355,31068,31946,32286,32993,33446,33899,33983,34382,34399,34676,35703,35946,37804,38912,39013,24785,25110,37239,23130,26127,28151,28222,29759,39746,24573,24794,31503,21700,24344,27742,27859,27946,28888,32005,34425,35340,40251,21270,21644,23301,27194,28779,30069,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31117,31166,33457,33775,35441,35649,36008,38772,64011,25844,25899,30906,30907,31339,20024,21914,22864,23462,24187,24739,25563,27489,26213,26707,28185,29029,29872,32008,36996,39529,39973,27963,28369,29502,35905,38346,20976,24140,24488,24653,24822,24880,24908,26179,26180,27045,27841,28255,28361,28514,29004,29852,30343,31681,31783,33618,34647,36945,38541,40643,21295,22238,24315,24458,24674,24724,25079,26214,26371,27292,28142,28590,28784,29546,32362,33214,33588,34516,35496,36036,21123,29554,23446,27243,37892,21742,22150,23389,25928,25989,26313,26783,28045,28102,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,29243,32948,37237,39501,20399,20505,21402,21518,21564,21897,21957,24127,24460,26429,29030,29661,36869,21211,21235,22628,22734,28932,29071,29179,34224,35347,26248,34216,21927,26244,29002,33841,21321,21913,27585,24409,24509,25582,26249,28999,35569,36637,40638,20241,25658,28875,30054,34407,24676,35662,40440,20807,20982,21256,27958,33016,40657,26133,27427,28824,30165,21507,23673,32007,35350,27424,27453,27462,21560,24688,27965,32725,33288,20694,20958,21916,22123,22221,23020,23305,24076,24985,24984,25137,26206,26342,29081,29113,29114,29351,31143,31232,32690,35440,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null] diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-decode-big5-hkscs.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-decode-big5-hkscs.html new file mode 100644 index 00000000000..e3344f69a48 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-decode-big5-hkscs.html @@ -0,0 +1,63 @@ + + + + +big5-hkscs decoding + + + + + + + + + + + + + + + + +
        + + + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-decode-cn-big5.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-decode-cn-big5.html new file mode 100644 index 00000000000..998b8a49cf0 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-decode-cn-big5.html @@ -0,0 +1,63 @@ + + + + +cn-big5 decoding + + + + + + + + + + + + + + + + +
        + + + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-decode-csbig5.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-decode-csbig5.html new file mode 100644 index 00000000000..d107eccf843 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-decode-csbig5.html @@ -0,0 +1,63 @@ + + + + +csbig5 decoding + + + + + + + + + + + + + + + + +
        + + + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-decode-errors.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-decode-errors.html new file mode 100644 index 00000000000..45d6abd2702 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-decode-errors.html @@ -0,0 +1,102 @@ + + + + +Big5 decoding errors + + + + + + + + + + + + + +
        + + + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-decode-extra.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-decode-extra.html new file mode 100644 index 00000000000..7c5b0f9848e --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-decode-extra.html @@ -0,0 +1,62 @@ + + + + +Big5 decoding (extra) + + + + + + + + + + + + + + + +
        + + + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-decode-x-x-big5.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-decode-x-x-big5.html new file mode 100644 index 00000000000..31aec04e08a --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-decode-x-x-big5.html @@ -0,0 +1,63 @@ + + + + +x-x-big5 decoding + + + + + + + + + + + + + + + + +
        + + + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-decode.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-decode.html new file mode 100644 index 00000000000..5a00717834d --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-decode.html @@ -0,0 +1,62 @@ + + + + +Big5 decoding + + + + + + + + + + + + + + + +
        + + + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-decoder.js b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-decoder.js new file mode 100644 index 00000000000..39e3147f72f --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-decoder.js @@ -0,0 +1,87 @@ +function dec2char(n) { + // converts a decimal number to a Unicode character + // n: the dec codepoint value to be converted + if (n <= 0xffff) { + out = String.fromCharCode(n); + } else if (n <= 0x10ffff) { + n -= 0x10000; + out = + String.fromCharCode(0xd800 | (n >> 10)) + + String.fromCharCode(0xdc00 | (n & 0x3ff)); + } else out = "dec2char error: Code point out of range: " + n; + return out; +} + +function big5Decoder(stream) { + stream = stream.replace(/%/g, " "); + stream = stream.replace(/[\s]+/g, " ").trim(); + var bytes = stream.split(" "); + for (i = 0; i < bytes.length; i++) bytes[i] = parseInt(bytes[i], 16); + var out = ""; + var lead, byte, offset, ptr, cp; + var big5lead = 0x00; + var endofstream = 2000000; + var finished = false; + + while (!finished) { + if (bytes.length == 0) byte = endofstream; + else byte = bytes.shift(); + + if (byte == endofstream && big5lead != 0x00) { + big5lead = 0x00; + out += "�"; + continue; + } + if (byte == endofstream && big5lead == 0x00) { + finished = true; + continue; + } + + if (big5lead != 0x00) { + lead = big5lead; + ptr = null; + big5lead = 0x00; + if (byte < 0x7f) offset = 0x40; + else offset = 0x62; + if ((byte >= 0x40 && byte <= 0x7e) || (byte >= 0xa1 && byte <= 0xfe)) + ptr = (lead - 0x81) * 157 + (byte - offset); + // "If there is a row in the table below whose first column is pointer, return the two code points listed in its second column" + switch (ptr) { + case "1133": + out += "Ê̄"; + continue; + case "1135": + out += "Ê̌"; + continue; + case "1164": + out += "ê̄"; + continue; + case "1166": + out += "ê̌"; + continue; + } + if (ptr == null) cp = null; + else cp = big5[ptr]; + if (cp == null && byte >= 0x00 && byte < 0x7f) { + bytes.unshift(byte); + continue; + } + if (cp == null) { + out += "�"; + continue; + } + out += dec2char(cp); + continue; + } + if (byte >= 0x00 && byte < 0x7f) { + out += dec2char(byte); + continue; + } + if (byte >= 0x81 && byte <= 0xfe) { + big5lead = byte; + continue; + } + out += "�"; + } + return out; +} diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-enc-ascii.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-enc-ascii.html new file mode 100644 index 00000000000..0065ab56a6d --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-enc-ascii.html @@ -0,0 +1,51 @@ + + + + +Big5 encoding ASCII + + + + + + + + +
        + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-enc-ascii.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-enc-ascii.html.headers new file mode 100644 index 00000000000..49773a44f8d --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-enc-ascii.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=big5 diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-big5-hkscs.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-big5-hkscs.html new file mode 100644 index 00000000000..9fbfed63583 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-big5-hkscs.html @@ -0,0 +1,149 @@ + + + + +big5-hkscs encoding (form) + + + + + + + + + + + + +
        + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-big5-hkscs.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-big5-hkscs.html.headers new file mode 100644 index 00000000000..952ae686109 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-big5-hkscs.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=big5-hkscs diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-cn-big5.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-cn-big5.html new file mode 100644 index 00000000000..04db127dd86 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-cn-big5.html @@ -0,0 +1,149 @@ + + + + +cn-big5 encoding (form) + + + + + + + + + + + + +
        + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-cn-big5.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-cn-big5.html.headers new file mode 100644 index 00000000000..4c1d435b139 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-cn-big5.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=cn-big5 diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-csbig5.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-csbig5.html new file mode 100644 index 00000000000..410fa50d684 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-csbig5.html @@ -0,0 +1,149 @@ + + + + +csbig5 encoding (form) + + + + + + + + + + + + +
        + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-csbig5.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-csbig5.html.headers new file mode 100644 index 00000000000..c4d711e2d30 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-csbig5.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=csbig5 diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBa.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBa.html new file mode 100644 index 00000000000..10e33168e44 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBa.html @@ -0,0 +1,153 @@ + + + + +Big5 encoding errors (form, extB, part1) + + + + + + + + + + + +
        + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBa.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBa.html.headers new file mode 100644 index 00000000000..49773a44f8d --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBa.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=big5 diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBb.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBb.html new file mode 100644 index 00000000000..9db97dca7e2 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBb.html @@ -0,0 +1,153 @@ + + + + +Big5 encoding errors (form, extB, part2) + + + + + + + + + + + +
        + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBb.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBb.html.headers new file mode 100644 index 00000000000..49773a44f8d --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBb.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=big5 diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-han.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-han.html new file mode 100644 index 00000000000..25e20e8de33 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-han.html @@ -0,0 +1,195 @@ + + + + +Big5 encoding errors (form, han) + + + + + + + + + + + +
        + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-han.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-han.html.headers new file mode 100644 index 00000000000..49773a44f8d --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-han.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=big5 diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-hangul.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-hangul.html new file mode 100644 index 00000000000..be9cfa41625 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-hangul.html @@ -0,0 +1,152 @@ + + + + +Big5 encoding errors (form, hangul) + + + + + + + + + + + +
        + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-hangul.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-hangul.html.headers new file mode 100644 index 00000000000..49773a44f8d --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-hangul.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=big5 diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-misc.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-misc.html new file mode 100644 index 00000000000..9ad9b63472b --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-misc.html @@ -0,0 +1,192 @@ + + + + +Big5 encoding errors (form, misc) + + + + + + + + + + + +
        + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-misc.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-misc.html.headers new file mode 100644 index 00000000000..49773a44f8d --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-misc.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=big5 diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-pua.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-pua.html new file mode 100644 index 00000000000..d60363b25a9 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-pua.html @@ -0,0 +1,152 @@ + + + + +Big5 encoding errors (form, pua) + + + + + + + + + + + +
        + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-x-x-big5.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-x-x-big5.html new file mode 100644 index 00000000000..79d297529f0 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-x-x-big5.html @@ -0,0 +1,149 @@ + + + + +x-x-big5 encoding (form) + + + + + + + + + + + + +
        + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-x-x-big5.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-x-x-big5.html.headers new file mode 100644 index 00000000000..b550e991dde --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form-x-x-big5.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=x-x-big5 diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form.html new file mode 100644 index 00000000000..b374fe52288 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form.html @@ -0,0 +1,148 @@ + + + + +Big5 encoding (form) + + + + + + + + + + + +
        + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form.html.headers new file mode 100644 index 00000000000..49773a44f8d --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-form.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=big5 diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-han.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-han.html new file mode 100644 index 00000000000..c7b1a2d4f4b --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-han.html @@ -0,0 +1,100 @@ + + + + +Big5 encoding errors (href, han) + + + + + + + + + + + +
        + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-han.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-han.html.headers new file mode 100644 index 00000000000..49773a44f8d --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-han.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=big5 diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-hangul.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-hangul.html new file mode 100644 index 00000000000..ed4033d1f11 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-hangul.html @@ -0,0 +1,65 @@ + + + + +Big5 encoding errors (href, hangul) + + + + + + + + + + + +
        + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-hangul.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-hangul.html.headers new file mode 100644 index 00000000000..49773a44f8d --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-hangul.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=big5 diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-misc.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-misc.html new file mode 100644 index 00000000000..488eec5ea6d --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-misc.html @@ -0,0 +1,108 @@ + + + + +Big5 encoding errors (href, misc) + + + + + + + + + + + +
        + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-misc.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-misc.html.headers new file mode 100644 index 00000000000..49773a44f8d --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-misc.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=big5 diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-href.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-href.html new file mode 100644 index 00000000000..fb8824c2151 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-href.html @@ -0,0 +1,62 @@ + + + + +Big5 encoding (href) + + + + + + + + + + + +
        + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-href.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-href.html.headers new file mode 100644 index 00000000000..49773a44f8d --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encode-href.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=big5 diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encoder.js b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encoder.js new file mode 100644 index 00000000000..4c9a41bb3f4 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5-encoder.js @@ -0,0 +1,122 @@ +var big5CPs = []; // index is unicode cp, value is pointer +for (var p = 5024; p < big5.length; p++) { + // "Let index be index jis0208 excluding all pointers in the range 8272 to 8835, inclusive." + if (big5[p] != null && big5CPs[big5[p]] == null) { + big5CPs[big5[p]] = p; + } +} +// If code point is U+2550, U+255E, U+2561, U+256A, U+5341, or U+5345, return the last pointer corresponding to code point in index. +big5CPs[0x2550] = 18991; +big5CPs[0x255e] = 18975; +big5CPs[0x2561] = 18977; +big5CPs[0x256a] = 18976; +big5CPs[0x5341] = 5512; +big5CPs[0x5345] = 5599; + +function chars2cps(chars) { + // this is needed because of javascript's handling of supplementary characters + // char: a string of unicode characters + // returns an array of decimal code point values + var haut = 0; + var out = []; + for (var i = 0; i < chars.length; i++) { + var b = chars.charCodeAt(i); + if (b < 0 || b > 0xffff) { + alert("Error in chars2cps: byte out of range " + b.toString(16) + "!"); + } + if (haut != 0) { + if (0xdc00 <= b && b <= 0xdfff) { + out.push(0x10000 + ((haut - 0xd800) << 10) + (b - 0xdc00)); + haut = 0; + continue; + } else { + alert( + "Error in chars2cps: surrogate out of range " + + haut.toString(16) + + "!" + ); + haut = 0; + } + } + if (0xd800 <= b && b <= 0xdbff) { + haut = b; + } else { + out.push(b); + } + } + return out; +} + +function big5Encoder(stream) { + var cps = chars2cps(stream); + var out = ""; + var cp; + var finished = false; + var endofstream = 2000000; + + while (!finished) { + if (cps.length == 0) cp = endofstream; + else cp = cps.shift(); + + var cpx = 0; + + if (cp == endofstream) { + finished = true; + continue; + } + if (cp >= 0x00 && cp <= 0x7f) { + // ASCII + out += " " + cp.toString(16).toUpperCase(); + continue; + } + var ptr = big5CPs[cp]; + if (ptr == null) { + return null; + // out += ' &#'+cp+';' + // continue + } + var lead = Math.floor(ptr / 157) + 0x81; + var trail = ptr % 157; + var offset; + if (trail < 0x3f) offset = 0x40; + else { + offset = 0x62; + } + var end = trail + offset; + out += + " " + + lead.toString(16).toUpperCase() + + " " + + end.toString(16).toUpperCase(); + } + + return out.trim(); +} + +function convertToHex(str) { + // converts a string of ASCII characters to hex byte codes + var out = ""; + var result; + for (var c = 0; c < str.length; c++) { + result = str.charCodeAt(c).toString(16).toUpperCase() + " "; + out += result; + } + return out; +} + +function normalizeStr(str) { + var out = ""; + for (var c = 0; c < str.length; c++) { + if (str.charAt(c) == "%") { + out += String.fromCodePoint( + parseInt(str.charAt(c + 1) + str.charAt(c + 2), 16) + ); + c += 2; + } else out += str.charAt(c); + } + var result = ""; + for (var o = 0; o < out.length; o++) { + result += "%" + out.charCodeAt(o).toString(16).toUpperCase(); + } + return result.replace(/%1B%28%42$/, ""); +} diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_chars-big5-hkscs.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_chars-big5-hkscs.html new file mode 100755 index 00000000000..2b5660961d8 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_chars-big5-hkscs.html @@ -0,0 +1 @@ +big5-hkscs characters X P D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u [ V X L K E J K Ƶ ƶ Ʒ Ƹ ƹ ƺ ƻ Ƽ ƽ ƾ w x v A ơ Ƣ ƣ Ƥ ƥ Ʀ Ƨ ƨ Ʃ ƪ ƫ Ƭ ƭ Ʈ Ư ư Ʊ Ʋ Ƴ ƴ w x z { | } u t s r q ~ Z b c d e f g h i p o n m l k j v y @ B C q r m n u v y z i j E e f @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ ǡ Ǣ ǣ Ǥ ǥ Ǧ ǧ Ǩ ǩ Ǫ ǫ Ǭ ǭ Ǯ ǯ ǰ DZ Dz dz Ǵ ǵ Ƕ Ƿ Ǹ ǹ Ǻ ǻ Ǽ ǽ Ǿ ǿ t u v w x y z { | } ~ y U V P Q R T W S O h p z ^ f H e } d x l k B d J I L S ] a I Y e j M n E P ~ z K J V } C @ B C E V T W U F O M B A @ C X P c ˱ ƿ Y D d @ D [ G \ E G F A { A E ^ ] K ܱ ܲ F G H _ Q E ` F G ܳ H R T S J K L M I P j f Q a h N O H e g ɰ ɺ ɮ ɲ ɱ ɵ ɹ ɶ ɳ ɫ ɻ ɸ ɯ ɬ ɴ ɷ ɭ f B g D [ ` h d G ] ˽ C b ^ Z e E H @ F c A i \ _ a ˿ ˹ ˸ ˼ ˳ ˵ ˶ ˻ ˴ ˷ ˺ ˾ ˲ W V J I Q ] K Y P X T [ N W M U R Z O \ S L H Y [ c W \ b U Y R V g Q f X S O ] P N Z ` a [ ^ M _ d L T e ^ W _ U X Y V ] S R Q \ Z T V ܷ ܽ ܺ ܿ ܴ ܵ ܾ ܼ ܸ ܶ ܻ ܹ r g i v w u x _ l k I a S R J I K ^ Y Z \ [ ` o ] ^ J q K @ L N Ȣ T U A j ` _ U a V B ɼ } G M N ~ k h a @ L Z z B Y W X M N } b ɾ Z k F ɿ D E ɽ G C l m n P O S Q R c h d g f e b i k j l A B Z @ A B D C O \ [ H U V T W o p l k i j n m C D E y U c V ] ^ I q m c b P _ C l ` K J X o E Q d c b m n R e d r W g f L M s Y Z o D t u p p d e F F X h S e q O f j y t o n u s l z m i x w v k r q { p Y S Y U [ X N Q T P W Z O R V \ ~ { g | [ ] u p m ʥ } _ a ʤ h x t v \ m D v s d n o w l j k q ʡ ^ r ʣ f c z b ʦ e i ` ʢ y O P I K M L E A D I R C F H Q M S J G B @ N H K x t } r C O y E B w J | L s ~ { @ F G z v u D N D @ B C A C F B @ G ԡ E D A w ԧ | Ԣ v { z ԥ Ԩ s ԩ ~ B Ԧ Ԫ t Ԥ u x } y ԣ q r j u x q F n v { o f s m y z l r t h w g G i p _ U Q K T N P S H I L J O H M R G M G D G S T J B L R O F I H H C E K A k T O U N P @ E B A C D @ Q F { } ~ z | P ` V Q A Y @ X W Z m o n I } | _ ^ ] y ʩ ʨ w z \ ʧ [ x W T Z H I E F Ԭ ԫ | I H G k g Y n o b f d c e a ` } ʪ d v ʫ ` ʭ { ʮ ʬ ~ | ʯ Y [ Z @ X W V \ A U T Z g X ^ U Y [ ] W V Q R S \ P S R W N Q P T X G J O U I J Ժ V M H L Ա ԯ Խ Կ g Դ Լ Ծ Թ Բ ئ ԰ Է ԭ Ե Գ i Ի Զ K Ը Ԯ ء ت ة آ ؤ ب l أ إ } ز ر خ K ث ح ~ ذ د س ج ا n ] c _ f W \ U [ d Z ` e V ^ b h X a g Y Y K W V M R N Q \ [ o J P Z O L X M O J L N P I K S R r a b q c B [ h _ t i S Z ʰ B ` Y L B i ~ p g h ] { j [ q i j ʱ a C _ ` ^ Z a b M N O ش j ] k l o n q p m k ʶ ʹ ʸ ʵ ʳ ʴ ʻ ʷ ʲ ʺ g o O H p S D K f E d L P c Q J M r i T R n l I k G F j h q m e N o g c s b l p V v d f m q u r k n h j i t e \ b [ ` P U _ \ a Q [ T R c S W X Z Y ] ^ d @ C D B A @ ػ ظ ؽ B G C ض A D غ ط s ع ؾ ؼ E ؿ ص B @ C D @ F A A B E n z p v k y x | u t m { o r w q l s U a X W Z \ _ V T ] [ Y _ ^ c ^ ` b ` W V U X Q R Z S \ [ T Y T \ ] C l m n r s s U u t V ] e E G F } ^ p r y s v t u w ʼ ʽ W X v x z w { y f w } h g c _ ` b d a f e J I H G K F I K H J H I J ~ f g e d ] d _ o x u i g N M L L M p \ t y | K q ʾ ʿ N L r u Y ~ Z } x j h k i j ^ P Q O h i a K s w v z h b ] e c \ i l g ` f a d [ _ k ^ j Ϋ Τ Ϊ Σ Υ } { ά Ω y Χ Ψ Φ | z ΢ ~ Ρ έ o n l k n p o s q p ή r m l m q r S R T X A Z V ^ [ U C W B \ ] Y D @ Q R O O P S V N P U T C R D M Q e g k h c b l j j m d i k f a f ` e ^ h d i c _ g j b X r D E ` r q t { _ u t W v w x ί S y ] x | n m o γ ΰ α β δ t s v u b F a c ` U E V W T Z \ E [ Y X q o m p n l m k l n n z ~ } F X y z θ η ι ζ κ y u w w x x v ε G J K H g f d e I h Z [ \ ] _ a H G Y ` ^ p s r t q t u o s s q p r o f F G U @ A C { λ | F I } q r s p μ z z y i L j M L ] b u v t s t ν k J U Q { m C n l ^ v T L w v u ξ } | { O o r p N u q P t s a W a _ ` K d L c w x w u @ H I { x y ̯ ̢ ~ ̮ ̩ ̪ ̭ ̬ ̣ | ̥ ̰ ̦ ̨ { ̧ z ̫ a } ̤ ̡ ο ѡ ~ } | ~ v Ѥ Ѧ Ѩ S Ѭ ѣ x Q Ѯ R ѥ ѩ ѫ Ѫ ѭ ѧ k y Ѣ w l z U ^ d m | e ` V ~ T b e I c ] a { d Y b W X [ _ \ d f c Z } k o @ Q m D q e F S i l G H N s T J O C ^ U r A P ] p N M t E j B K M R g L P h \ p h l n k [ j _ Z @ q v X i m O f g A W Y V o } G F | E C D t z n { H y B z y ~ y | ~ x x v } w | { z ~ | y { } V g j i h a J b A t | ̱ ѯ u r ` a t v u I W ̲ Ѱ v Q ~ } ̾ ̷ ̳ ̺ ̼ ̿ ̻ ̴ ̸ ̽ ̶ ̹ ̵ Q A @ ѱ C B E Ѳ D Ѿ Ѵ f ѷ Ѻ } ѽ ѿ Ѹ ѵ Ѷ Ѽ ѻ ѳ g y u r զ w ա { j գ i բ s h x ե q t դ R o x n l ~ w | p m z v T S k d z j Y g w } k n | \ m l ~ U y i _ p h q f e c ] ѹ V ݷ W { y X o x ` [ a ^ p | ݱ ݶ ݪ l ݻ i z { b k ݤ n o ݥ ݲ ݸ j d ݣ } ݺ ݨ ݩ ~ ݴ ݫ ݵ ݭ e h f ݹ ݰ ݬ ݡ S ݯ m ݧ ݦ g c ݳ ݮ ݢ Q L K O b R T N P U J Z M Y X ^ \ ] Z k [ B E F D G l C N d M L K c e u r F G է v u x s w t q ݼ V H y ݽ z { r W H | s _ I ը } ~ ݾ Y X J I O ^ J @ P M c S K N Q L O R լ ի խ ժ ծ թ ٧ ٢ ٥ ٨ ٦ ٣ ١ ٤ y b ݿ v w u { x t z \ Z R [ S M P ` n K m Q R f P T ٩ | B A կ z a g P C G B E @ A A @ F D W C M N F X H S I V Q O J P D R U E L T G K M [ \ i ^ V L b J [ E e R A D Q a ` F X _ ` c Z K S f Y a m V X C j c ] @ l g I k P H d \ T ^ b G Z Y O _ U W h ] N M B ^ W U O D մ յ չ վ ս հ ձ ղ ճ պ | ռ շ ջ ն տ J E ٽ ٫ ٳ ٭ ٻ ٶ ٰ ٵ ٯ ٱ ٺ ٷ ٴ H G j ٬ ټ پ ٪ ٲ ٹ ٸ ٮ Q ո N ~ ٿ D J H ^ F X } _ B ] R G U d ] [ @ Z o Q a m I ^ K Y g D k a M C W h ` e S f E P L N ` _ n O b T c l j A V i b R \ A W B { Z E A H I D J @ G \ C F B c h i b f e g d _ Q N W V T O r P q S p X R M o L V U U h Y Z T X S W v V b Y d e p c e q d K j Y w B Z [ n f k \ e o f p f g h L l Z _ q g i j ` C H r h s i q j o B A C @ @ A A B @ k M [ ] a ~ I J ^ t k l D B r ɡ r ɤ ɣ D ɢ @ v E [ Y L Q S L M U b R O Q V Z X Z K x M \ T W E G ^ U N J Y V H I C O P [ ] P N S \ W R ] F T K X D j z q K b e B m o v h f g u G p n s J u y c I M O @ l k } r u x | A F ~ w i _ d ` N { t a L | ϡ Ϥ w ϧ Ϫ Ϭ t v { I ϥ ϭ { s d ~ Ϣ x z } } p Ϩ ϫ z m x ϩ o ^ H | w v n ϣ y q r Ϧ y ~ L C U [ W J M F G J V _ E @ N B O Y D h H H E f Z g a S b \ e c I T A G ` F Q C i P K K X ] e R P G [ U G D g d X c N O I E @ Q Y B D ^ F \ S H F J h b _ ] f a R ` A E W V T L K C M A Z I M D J C U V H D B S K Q ~ W A G E B C O L T @ F G F E P N R @ a ` F _ I J h ^ C R H K c j b W i U L Y e h T M P Z d G Q [ N E S g V l X f O D ] d \ } n w m q s u S } o u ~ | | v t z w x z ~ p y x { t s r { P y v D N M Y K O F R T C ^ W [ ` U I L H _ a V \ J E A Z B @ X Q P ] G I @ A H C O B D F E D J G F E B @ A N C Q S Y W Z R V U [ T X P q o p m n s r x _ e y \ v s g w t ^ a b c f ] u d h ` ] j ` k h _ \ ^ b e d g [ i c f i a x y W e l A ^ _ b _ ` a X Z U R T c V S P W Q Y ϯ ϳ ϶ ϲ ϱ ϴ ϵ Ϯ ϰ w x y P L n v { Q l r k u q M O z j m s t | p N m N P L X J W i H [ R l S V Z O T j k Y M I [ Q U K H I e O Y b X L ` ^ _ J c \ Z K ] a M d p w y ޡ k z ޢ } m ~ l x ޣ q | o v r n u N { s t g d p j l f n m k q h o c e b r i J Q U S K I L M H U V G V Q O L P N R R M N O P K T S W X T \ b ` ^ a ] _ w t u v l m z k j i { l j k A D y G R n b H Ϸ } ϸ Ϲ f P ޤ K L | g B e d c ` [ Ϻ Ͻ ϻ ϼ Ң ҡ ~ S ] ^ o \ _ R p Q Q k j h i l ަ ޥ ީ ި ާ s t Y Z r } q p n o l ɥ ɦ C D f b a e g c f g d _ Ͼ ] d e a b \ ^ c ` Ͽ Ҩ ҥ ҧ X W U Ҥ ҩ T V Ҧ g ң Ҫ b f e n y h c m t s a d u r q ` i p w T v s X V R S u Y o q t r U x S ޭ ެ ު ޮ ޫ ް ޯ v u ~ } { z w x y | _ \ ] W [ a ` ^ d e c y x ~ á m n m z Y v j ɧ E l j k h h i m k g j f i [ l h ү ^ Z Ҵ ҫ Ҷ Ү ҹ Һ Ҭ Ҹ ҵ ҳ ҷ _ ] ұ t ҭ Ұ һ Ҳ ^ Z \ F x m k h l s t p { u r o y n w z q y [ x w v | i ~ E ڡ ` ڧ ک ڢ Z ڦ ڥ [ a b ڨ X } { ڣ z _ | ڤ ڪ Y ^ \ ] l W ޷ ޻ ޱ ޼ s _ ޲ ޳ ޽ ޺ ޸ ޹ ޵ ޴ ޾ ޶ q w y u @ b A | i f e g f Z c X \ [ d h Y q m z j h k n l g B E u @ o F â D { A C G v t ã s n n Ҽ ҽ } ޿ ] ä { o ` Ҿ ҿ ~ ګ i ^ _ r o p q I H | w c d F j i ڬ k l n m r p q ` d c b a { z f e ڮ ڭ B j s æ å | s o p t h i n l k j e m f g ֡ ֢ | ~ ֤ ֣ } ڶ k j ڰ h ڳ l ڴ m ڱ g i ڵ ڲ گ E C H I F G D l k s m r o ` q a b p n t w u v M ¡ N } O ~ L P J ç x è o K p ~ } n o G q m ֦ o ֥ ڸ q ڷ p J x Q q p u p r K t R r q r s ֧ ڹ s L d u c y S s n x w v y u v ְ w t ֪ ֩ ֫ ֬ ֮ ֭ ֲ ֨ ֱ ֯ ڼ ھ ں ڻ ڿ ڽ t C F D E A B @ N Q O M P } ~ v z y w f g e x { | h @ { A | z ~ } U ¤ ¥ ¢ £ T { é y z t w u v f o x u G B | x ͡ z | ~ } { | ֹ z y } ~ { O ֺ ֳ ֵ ַ ָ ֶ ֻ ִ v w x N Q M L H O P J K I T X V S U R Y W j l i k F V E C D V G Z W ¦ [ ] \ X Y ê ~ } z } y q { | ~ r t s r ͣ ͢ ּ ֽ ־ ֿ i R S T A C B @ m H I _ ^ § ë š ɨ V r q p ͤ } | z { y A Z X @ W \ [ Y I H D G F ^ _ [ ] Z \ p E r q n o J ` ª ¨ © í ì H s ͥ ͦ @ ~ D ] ^ C B J K L a ` s K « ¬ u A E M v ͧ B C @ B D G E F C H A a P S G L F c J H b O N K M I R _ Q ] X N P U T W R Q S Y [ V O i \ b c e ` h d f g v j t x Q y w { z O N L P M u c a g ° e d ² j ± k h ® i b ¯ ­ f l ò ð ñ î ï ó x w y ţ Ţ X Y m ~ ͨ E F D G H I I O M K L N J V d T e U f a ^ ` _ k a | } W S X T V R U ³ z { A @ t ͩ L J K Z S Y R X V U T Q P W l h ] _ a e [ Y j ` d \ X W b Z ^ k i f g c r j x t x e u b w f v p c q s h g d l i m y n o k p y u r v l t s w q n z r m { o ~ _ Y i a ] d g \ e ` Z h c ^ b [ f n t ¹ w ´ µ o v q º · m s u ¸ r p ÷ ø ô õ ú ö ~ } ġ B @ B A l o j » Ģ C I u M ` [ _ ] ^ \ @ i j n o h k g m @ p z | } ù D O N b a B C A s m l n r q ~ y x û ý ü P e d c D o p ~ C A B { | } k z { ¼ ½ l ģ Q A R S @ B T f A @ q s ͪ C U h g C B D F G E t u E D p o m n q | ¿ ¾ ť Ť w v F ɩ ͫ v w w t v y u { z x x ͭ Ͱ ͬ | ͯ ͮ [ G H ] W Z c a I g L d \ Y I b D e V _ F K ` O M X J ^ N E f j l k i n H o m N E G H P L J M Q F O K I Q O J ߡ N K P M G L w u { s ߢ x r { } v ~ | ~ y x y } | t z L H M J K I A D C @ B t x z w v u s r y } ~ þ Ĥ E Ŧ C D R N { S P T U V O h p W P | R Q E ߣ R ͱ i Q r w q W T V S U X Y Z ߦ ߧ ߥ ߨ ߤ S J F I K H G ĥ F } } X [ A J K M N L ˢ ˣ { ˡ | z y } ~ ~ j Ͷ ͵ ͷ ͼ Ͳ ͹ Ϳ ʹ ͺ ; ͸ ͽ ͻ ͳ b \ d a q t ] k V ` c e Т w U С Y W R o ~ s v Х M f } ^ x Ф u y | m У { l p _ Z S X T g n ӥ [ z A Ө v ӣ } Ӳ Ӫ ~ ө x | ӵ ӭ Ӥ ӳ t Ӭ s ӫ r \ Ӧ z { ӡ u ӯ Ӯ Ӷ Ӵ Ӱ ӧ Ӣ w ӱ y U ^ ` e y ] h o u b i @ w r n j \ a Y f c s d z l k Z _ p v A [ g m x q t v l ` } ۧ ۪ h ۣ i w s t ] ۤ ۡ u ۬ p ۯ n z r ۭ k d o c a ۥ j ۨ ۩ ~ v f ^ ۢ ۫ e ۰ q m | x y g { b ۦ l ۮ _ u U ߵ ߿ ߪ ߲ ߶ ߱ ߫ ߹ ߸ ߼ ߾ ߰ ߴ ߻ ߺ ߬ ߭ ߷ ߳ ߯ ߮ ` X [ Y Z ] a U ^ W V T c \ b _ s t g f b v u ߩ _ c ] p a w Z X d n i O m ߽ [ R U { \ S Q N e ` h x | W k o T y L r V j P ^ Y l } z q M I @ C E A G D L F U O F J T Q D H B V S P W M K N S @ E R D A M O Q I P B R J G U H T K L V C N ~ ÿ ħ ĩ Ħ Ī Ĭ ĭ ī Ĩ J K I G H L E F G O h Ӹ ӷ @ B | { ~ X Z Y W Щ Ч Ц i k j Ш ӿ A F Ӽ ӽ C ӻ H Ӿ ӹ G D Ӻ E B L ץ K ר ׫ H F ~ ש ק פ ׬ ׭ ׯ װ } E ע ס ׮ G ף I D צ M J ת ۿ ۴ ۽ ۱ ۶ ۺ ۸ ۲ ۵ ۳ ۾ ۼ ۷ ۹ ۻ j e g h m i l f d k d z a k g e ` o \ h i _ ^ l b ] c n [ m j f Y ] Z a g \ p j _ k f m ^ ` n X l d c h [ b i e o Į į B E A C D Q O N @ P F M Z n Ъ G l Ы ױ N Ь Ю Э m I J N M K L P ײ U T ׸ R ׳ S ׿ ׻ ׽ ׷ ׾ O ׺ ׹ ׵ ׼ ״ ׶ Q t B A v @ n p r q s o u p | w y q u x { s t z r v r q w s t u x v İ I K H J Ũ R ŧ H I K J P n W V C F E D y { z ı T S [ Я o C A @ B D I G H } | } IJ L U ũ L q r а б p T R Q X P Y V S W U O _ Y ^ ` Z [ X ] \ D F E I C B @ G A H P M E J Q G O K N L F L x { N M } O K y | z ~ w J ~ ~ A O @ B C ķ ĵ ĸ Ĵ Ķ ij @ N M P Q A V [ Ū X W Z Y C B @ A @ M N g m R P D D Z a T S v b H V U W Q R F E ˤ \ [ I Y Z X G s t ] ^ h f c g e d J L Q S R U O K M T P N [ T S U H I J ĺ Ĺ R B S \ ū Ŭ E B j i \ ] в v u _ X W V _ b ` a e ^ f c d V L N K M T o w l k ` [ ^ Y l ] \ _ Z h o n p m r i k g j q s [ a Y b X ] c ` _ ^ W \ Z A C @ E B F D E A @ C B D R O S Q P T ļ ľ Ľ Ļ C E V D U a ŭ ` Ů ^ ] b c F _ \ Q P O p n ` U y x c a b m n C A E F L H J B I K D G b @ a c u w v { x t y z | g f d e M N I J K L H @ G F G H I X Y W V Z X Y W F d ů e H G d @ | G d A [ ˦ ˥ ж д | г ~ { } е z j g n i l h e k m f p z v ~ w | r o q } u x t y { s M e O g i N f j h G O ~ P E J C B M L K I N } D F H R C A S D B Q P O E U o R S Q T ˪ ˧ ˬ ˨ ˩ ˫ и м й л н п о к q p r з l V W T n S Y X k \ R [ P Z U m Q R n q i m l j p k h o Y H J V W U Q G Z T F I X K L M ] \ [ \ Z f Ű u t @ A s _ a ] ` o ^ p s U T S s u t r a ^ _ M ` [ \ J K ] L O P N R _ Q ^ Ŀ ] H I C ] q o V q B ^ x v z D y w C B @ C A m l j b q e o v n y u c i w h x z k r s w u t f r v t s d g p a W Y e Z \ f [ d b ^ c ` X g ] _ x z ~ | y { w v } R Z U g P O V e T q c d N X t y s o w u h b } W ~ x m k f A n { j z S v | r l Q p Y i D A C B @ @ C E E B A D U E K ` Y T c [ e U _ a W X ] b j g k ^ Z h j \ d f i S V s c q a l h r b e t y m p i d ` o k u g n z B f @ D A C E a f O h I d j N J K ` g M e L _ c b ^ i @ C ű m p l n o i j g k h Ų ų K M L N J D S R T _ U ^ V r u t h s r p q w D x v { E F } z y | { ~ { h [ \ M K I J F F N H L G n l m w x E G F P m l k ɪ X V Y W ˮ ˰ ˯ ˭ @ E F ~ | } I H K J G } ܣ ܢ | ~ ܡ j k i G H O I o A G L ܤ ܦ ܥ n o m l P J p t q u s y B ܨ ܧ s p r q ] ^ _ ` Q N K P S L R O M w v x ~ } z { | H I S n Q R o Ŵ ŵ q E G F W C t Q R D a S M ܩ ܫ ܪ u v X c b d V U T T A @ } { ~ | y @ z J K R p ŷ Ŷ O P H i C B q r W D X A L M T Q N ܬ z | w x { y g e [ f Y Z U [ Y X V Z W E J F I H G D B E C F @ A Q N O P r V U t s Ÿ j I ` X ܭ h G B u R S t s u H O ܮ ~ } i \ k j l a _ ^ ] ` \ K ^ ] _ N L M R K Q T S P O J H I C D X W U T Y v Ź w W v V w a Y P U ` W V L n q s r t p m o c f d c i h g b b a e d Z ^ [ ] \ Y _ b ` a @ X c M E F ` ^ ] c a \ Z [ _ b x ~ y [ Z } | Y { X z } ~ { Ż x | y z ź R S J v j k z l u e j m f d k N f d e \ ż b I h v w n q p o g h f e g O P G g i h Ž T U V K c x i J { r z y i S R Q ^ ] L | { } x v w s y t r u | j { z ~ j m l t o s q p n k C B D A u X W U T J K I H l o V m s q k v j r n u t ` _ ſ p ž Z \ _ [ ` Y W ] X ^ M Z \ [ y x w z s t ܯ } ~ o k p l m n z { ~ | v y } E F w Y Z [ M x O P N L } { | x ~ z w y a b d c i n d g k r e o s j c m l q p h b f N O a ] ^ ` _ b a | { x | } P Q G Q S R e c T t d H u r q L J K I \ f v w d } u ܰ x R e ~ ] g y ^ | { z M } f N ~ h i j T S g j i h s e t ȡ ȣ J J W Y [ _ ` c d g h k l o p s t w x { | \ M N O Q R S T } ~ B L M N I C H ] ^ A D G F H I @ @ A B C a U b F G D | z G _ T t c ` b j T e n @ v { m B { c r \ N s _ V K h j a c I k x L [ s Y N P s X ^ u ] A h g p N w Q p @ F \ K X [ i n | N y { p ~ C J | a ` x k L T t ~ } R I I n f o m e g b k ~ ] m Z F M ] u U f Z S x \ Ȥ p [ W U S @ J ` V O C ] r ` w diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_chars-big5-hkscs.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_chars-big5-hkscs.html.headers new file mode 100644 index 00000000000..952ae686109 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_chars-big5-hkscs.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=big5-hkscs diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_chars-cn-big5.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_chars-cn-big5.html new file mode 100755 index 00000000000..b960dd2075d --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_chars-cn-big5.html @@ -0,0 +1 @@ +cn-big5 characters X P D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u [ V X L K E J K Ƶ ƶ Ʒ Ƹ ƹ ƺ ƻ Ƽ ƽ ƾ w x v A ơ Ƣ ƣ Ƥ ƥ Ʀ Ƨ ƨ Ʃ ƪ ƫ Ƭ ƭ Ʈ Ư ư Ʊ Ʋ Ƴ ƴ w x z { | } u t s r q ~ Z b c d e f g h i p o n m l k j v y @ B C q r m n u v y z i j E e f @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ ǡ Ǣ ǣ Ǥ ǥ Ǧ ǧ Ǩ ǩ Ǫ ǫ Ǭ ǭ Ǯ ǯ ǰ DZ Dz dz Ǵ ǵ Ƕ Ƿ Ǹ ǹ Ǻ ǻ Ǽ ǽ Ǿ ǿ t u v w x y z { | } ~ y U V P Q R T W S O h p z ^ f H e } d x l k B d J I L S ] a I Y e j M n E P ~ z K J V } C @ B C E V T W U F O M B A @ C X P c ˱ ƿ Y D d @ D [ G \ E G F A { A E ^ ] K ܱ ܲ F G H _ Q E ` F G ܳ H R T S J K L M I P j f Q a h N O H e g ɰ ɺ ɮ ɲ ɱ ɵ ɹ ɶ ɳ ɫ ɻ ɸ ɯ ɬ ɴ ɷ ɭ f B g D [ ` h d G ] ˽ C b ^ Z e E H @ F c A i \ _ a ˿ ˹ ˸ ˼ ˳ ˵ ˶ ˻ ˴ ˷ ˺ ˾ ˲ W V J I Q ] K Y P X T [ N W M U R Z O \ S L H Y [ c W \ b U Y R V g Q f X S O ] P N Z ` a [ ^ M _ d L T e ^ W _ U X Y V ] S R Q \ Z T V ܷ ܽ ܺ ܿ ܴ ܵ ܾ ܼ ܸ ܶ ܻ ܹ r g i v w u x _ l k I a S R J I K ^ Y Z \ [ ` o ] ^ J q K @ L N Ȣ T U A j ` _ U a V B ɼ } G M N ~ k h a @ L Z z B Y W X M N } b ɾ Z k F ɿ D E ɽ G C l m n P O S Q R c h d g f e b i k j l A B Z @ A B D C O \ [ H U V T W o p l k i j n m C D E y U c V ] ^ I q m c b P _ C l ` K J X o E Q d c b m n R e d r W g f L M s Y Z o D t u p p d e F F X h S e q O f j y t o n u s l z m i x w v k r q { p Y S Y U [ X N Q T P W Z O R V \ ~ { g | [ ] u p m ʥ } _ a ʤ h x t v \ m D v s d n o w l j k q ʡ ^ r ʣ f c z b ʦ e i ` ʢ y O P I K M L E A D I R C F H Q M S J G B @ N H K x t } r C O y E B w J | L s ~ { @ F G z v u D N D @ B C A C F B @ G ԡ E D A w ԧ | Ԣ v { z ԥ Ԩ s ԩ ~ B Ԧ Ԫ t Ԥ u x } y ԣ q r j u x q F n v { o f s m y z l r t h w g G i p _ U Q K T N P S H I L J O H M R G M G D G S T J B L R O F I H H C E K A k T O U N P @ E B A C D @ Q F { } ~ z | P ` V Q A Y @ X W Z m o n I } | _ ^ ] y ʩ ʨ w z \ ʧ [ x W T Z H I E F Ԭ ԫ | I H G k g Y n o b f d c e a ` } ʪ d v ʫ ` ʭ { ʮ ʬ ~ | ʯ Y [ Z @ X W V \ A U T Z g X ^ U Y [ ] W V Q R S \ P S R W N Q P T X G J O U I J Ժ V M H L Ա ԯ Խ Կ g Դ Լ Ծ Թ Բ ئ ԰ Է ԭ Ե Գ i Ի Զ K Ը Ԯ ء ت ة آ ؤ ب l أ إ } ز ر خ K ث ح ~ ذ د س ج ا n ] c _ f W \ U [ d Z ` e V ^ b h X a g Y Y K W V M R N Q \ [ o J P Z O L X M O J L N P I K S R r a b q c B [ h _ t i S Z ʰ B ` Y L B i ~ p g h ] { j [ q i j ʱ a C _ ` ^ Z a b M N O ش j ] k l o n q p m k ʶ ʹ ʸ ʵ ʳ ʴ ʻ ʷ ʲ ʺ g o O H p S D K f E d L P c Q J M r i T R n l I k G F j h q m e N o g c s b l p V v d f m q u r k n h j i t e \ b [ ` P U _ \ a Q [ T R c S W X Z Y ] ^ d @ C D B A @ ػ ظ ؽ B G C ض A D غ ط s ع ؾ ؼ E ؿ ص B @ C D @ F A A B E n z p v k y x | u t m { o r w q l s U a X W Z \ _ V T ] [ Y _ ^ c ^ ` b ` W V U X Q R Z S \ [ T Y T \ ] C l m n r s s U u t V ] e E G F } ^ p r y s v t u w ʼ ʽ W X v x z w { y f w } h g c _ ` b d a f e J I H G K F I K H J H I J ~ f g e d ] d _ o x u i g N M L L M p \ t y | K q ʾ ʿ N L r u Y ~ Z } x j h k i j ^ P Q O h i a K s w v z h b ] e c \ i l g ` f a d [ _ k ^ j Ϋ Τ Ϊ Σ Υ } { ά Ω y Χ Ψ Φ | z ΢ ~ Ρ έ o n l k n p o s q p ή r m l m q r S R T X A Z V ^ [ U C W B \ ] Y D @ Q R O O P S V N P U T C R D M Q e g k h c b l j j m d i k f a f ` e ^ h d i c _ g j b X r D E ` r q t { _ u t W v w x ί S y ] x | n m o γ ΰ α β δ t s v u b F a c ` U E V W T Z \ E [ Y X q o m p n l m k l n n z ~ } F X y z θ η ι ζ κ y u w w x x v ε G J K H g f d e I h Z [ \ ] _ a H G Y ` ^ p s r t q t u o s s q p r o f F G U @ A C { λ | F I } q r s p μ z z y i L j M L ] b u v t s t ν k J U Q { m C n l ^ v T L w v u ξ } | { O o r p N u q P t s a W a _ ` K d L c w x w u @ H I { x y ̯ ̢ ~ ̮ ̩ ̪ ̭ ̬ ̣ | ̥ ̰ ̦ ̨ { ̧ z ̫ a } ̤ ̡ ο ѡ ~ } | ~ v Ѥ Ѧ Ѩ S Ѭ ѣ x Q Ѯ R ѥ ѩ ѫ Ѫ ѭ ѧ k y Ѣ w l z U ^ d m | e ` V ~ T b e I c ] a { d Y b W X [ _ \ d f c Z } k o @ Q m D q e F S i l G H N s T J O C ^ U r A P ] p N M t E j B K M R g L P h \ p h l n k [ j _ Z @ q v X i m O f g A W Y V o } G F | E C D t z n { H y B z y ~ y | ~ x x v } w | { z ~ | y { } V g j i h a J b A t | ̱ ѯ u r ` a t v u I W ̲ Ѱ v Q ~ } ̾ ̷ ̳ ̺ ̼ ̿ ̻ ̴ ̸ ̽ ̶ ̹ ̵ Q A @ ѱ C B E Ѳ D Ѿ Ѵ f ѷ Ѻ } ѽ ѿ Ѹ ѵ Ѷ Ѽ ѻ ѳ g y u r զ w ա { j գ i բ s h x ե q t դ R o x n l ~ w | p m z v T S k d z j Y g w } k n | \ m l ~ U y i _ p h q f e c ] ѹ V ݷ W { y X o x ` [ a ^ p | ݱ ݶ ݪ l ݻ i z { b k ݤ n o ݥ ݲ ݸ j d ݣ } ݺ ݨ ݩ ~ ݴ ݫ ݵ ݭ e h f ݹ ݰ ݬ ݡ S ݯ m ݧ ݦ g c ݳ ݮ ݢ Q L K O b R T N P U J Z M Y X ^ \ ] Z k [ B E F D G l C N d M L K c e u r F G է v u x s w t q ݼ V H y ݽ z { r W H | s _ I ը } ~ ݾ Y X J I O ^ J @ P M c S K N Q L O R լ ի խ ժ ծ թ ٧ ٢ ٥ ٨ ٦ ٣ ١ ٤ y b ݿ v w u { x t z \ Z R [ S M P ` n K m Q R f P T ٩ | B A կ z a g P C G B E @ A A @ F D W C M N F X H S I V Q O J P D R U E L T G K M [ \ i ^ V L b J [ E e R A D Q a ` F X _ ` c Z K S f Y a m V X C j c ] @ l g I k P H d \ T ^ b G Z Y O _ U W h ] N M B ^ W U O D մ յ չ վ ս հ ձ ղ ճ պ | ռ շ ջ ն տ J E ٽ ٫ ٳ ٭ ٻ ٶ ٰ ٵ ٯ ٱ ٺ ٷ ٴ H G j ٬ ټ پ ٪ ٲ ٹ ٸ ٮ Q ո N ~ ٿ D J H ^ F X } _ B ] R G U d ] [ @ Z o Q a m I ^ K Y g D k a M C W h ` e S f E P L N ` _ n O b T c l j A V i b R \ A W B { Z E A H I D J @ G \ C F B c h i b f e g d _ Q N W V T O r P q S p X R M o L V U U h Y Z T X S W v V b Y d e p c e q d K j Y w B Z [ n f k \ e o f p f g h L l Z _ q g i j ` C H r h s i q j o B A C @ @ A A B @ k M [ ] a ~ I J ^ t k l D B r ɡ r ɤ ɣ D ɢ @ v E [ Y L Q S L M U b R O Q V Z X Z K x M \ T W E G ^ U N J Y V H I C O P [ ] P N S \ W R ] F T K X D j z q K b e B m o v h f g u G p n s J u y c I M O @ l k } r u x | A F ~ w i _ d ` N { t a L | ϡ Ϥ w ϧ Ϫ Ϭ t v { I ϥ ϭ { s d ~ Ϣ x z } } p Ϩ ϫ z m x ϩ o ^ H | w v n ϣ y q r Ϧ y ~ L C U [ W J M F G J V _ E @ N B O Y D h H H E f Z g a S b \ e c I T A G ` F Q C i P K K X ] e R P G [ U G D g d X c N O I E @ Q Y B D ^ F \ S H F J h b _ ] f a R ` A E W V T L K C M A Z I M D J C U V H D B S K Q ~ W A G E B C O L T @ F G F E P N R @ a ` F _ I J h ^ C R H K c j b W i U L Y e h T M P Z d G Q [ N E S g V l X f O D ] d \ } n w m q s u S } o u ~ | | v t z w x z ~ p y x { t s r { P y v D N M Y K O F R T C ^ W [ ` U I L H _ a V \ J E A Z B @ X Q P ] G I @ A H C O B D F E D J G F E B @ A N C Q S Y W Z R V U [ T X P q o p m n s r x _ e y \ v s g w t ^ a b c f ] u d h ` ] j ` k h _ \ ^ b e d g [ i c f i a x y W e l A ^ _ b _ ` a X Z U R T c V S P W Q Y ϯ ϳ ϶ ϲ ϱ ϴ ϵ Ϯ ϰ w x y P L n v { Q l r k u q M O z j m s t | p N m N P L X J W i H [ R l S V Z O T j k Y M I [ Q U K H I e O Y b X L ` ^ _ J c \ Z K ] a M d p w y ޡ k z ޢ } m ~ l x ޣ q | o v r n u N { s t g d p j l f n m k q h o c e b r i J Q U S K I L M H U V G V Q O L P N R R M N O P K T S W X T \ b ` ^ a ] _ w t u v l m z k j i { l j k A D y G R n b H Ϸ } ϸ Ϲ f P ޤ K L | g B e d c ` [ Ϻ Ͻ ϻ ϼ Ң ҡ ~ S ] ^ o \ _ R p Q Q k j h i l ަ ޥ ީ ި ާ s t Y Z r } q p n o l ɥ ɦ C D f b a e g c f g d _ Ͼ ] d e a b \ ^ c ` Ͽ Ҩ ҥ ҧ X W U Ҥ ҩ T V Ҧ g ң Ҫ b f e n y h c m t s a d u r q ` i p w T v s X V R S u Y o q t r U x S ޭ ެ ު ޮ ޫ ް ޯ v u ~ } { z w x y | _ \ ] W [ a ` ^ d e c y x ~ á m n m z Y v j ɧ E l j k h h i m k g j f i [ l h ү ^ Z Ҵ ҫ Ҷ Ү ҹ Һ Ҭ Ҹ ҵ ҳ ҷ _ ] ұ t ҭ Ұ һ Ҳ ^ Z \ F x m k h l s t p { u r o y n w z q y [ x w v | i ~ E ڡ ` ڧ ک ڢ Z ڦ ڥ [ a b ڨ X } { ڣ z _ | ڤ ڪ Y ^ \ ] l W ޷ ޻ ޱ ޼ s _ ޲ ޳ ޽ ޺ ޸ ޹ ޵ ޴ ޾ ޶ q w y u @ b A | i f e g f Z c X \ [ d h Y q m z j h k n l g B E u @ o F â D { A C G v t ã s n n Ҽ ҽ } ޿ ] ä { o ` Ҿ ҿ ~ ګ i ^ _ r o p q I H | w c d F j i ڬ k l n m r p q ` d c b a { z f e ڮ ڭ B j s æ å | s o p t h i n l k j e m f g ֡ ֢ | ~ ֤ ֣ } ڶ k j ڰ h ڳ l ڴ m ڱ g i ڵ ڲ گ E C H I F G D l k s m r o ` q a b p n t w u v M ¡ N } O ~ L P J ç x è o K p ~ } n o G q m ֦ o ֥ ڸ q ڷ p J x Q q p u p r K t R r q r s ֧ ڹ s L d u c y S s n x w v y u v ְ w t ֪ ֩ ֫ ֬ ֮ ֭ ֲ ֨ ֱ ֯ ڼ ھ ں ڻ ڿ ڽ t C F D E A B @ N Q O M P } ~ v z y w f g e x { | h @ { A | z ~ } U ¤ ¥ ¢ £ T { é y z t w u v f o x u G B | x ͡ z | ~ } { | ֹ z y } ~ { O ֺ ֳ ֵ ַ ָ ֶ ֻ ִ v w x N Q M L H O P J K I T X V S U R Y W j l i k F V E C D V G Z W ¦ [ ] \ X Y ê ~ } z } y q { | ~ r t s r ͣ ͢ ּ ֽ ־ ֿ i R S T A C B @ m H I _ ^ § ë š ɨ V r q p ͤ } | z { y A Z X @ W \ [ Y I H D G F ^ _ [ ] Z \ p E r q n o J ` ª ¨ © í ì H s ͥ ͦ @ ~ D ] ^ C B J K L a ` s K « ¬ u A E M v ͧ B C @ B D G E F C H A a P S G L F c J H b O N K M I R _ Q ] X N P U T W R Q S Y [ V O i \ b c e ` h d f g v j t x Q y w { z O N L P M u c a g ° e d ² j ± k h ® i b ¯ ­ f l ò ð ñ î ï ó x w y ţ Ţ X Y m ~ ͨ E F D G H I I O M K L N J V d T e U f a ^ ` _ k a | } W S X T V R U ³ z { A @ t ͩ L J K Z S Y R X V U T Q P W l h ] _ a e [ Y j ` d \ X W b Z ^ k i f g c r j x t x e u b w f v p c q s h g d l i m y n o k p y u r v l t s w q n z r m { o ~ _ Y i a ] d g \ e ` Z h c ^ b [ f n t ¹ w ´ µ o v q º · m s u ¸ r p ÷ ø ô õ ú ö ~ } ġ B @ B A l o j » Ģ C I u M ` [ _ ] ^ \ @ i j n o h k g m @ p z | } ù D O N b a B C A s m l n r q ~ y x û ý ü P e d c D o p ~ C A B { | } k z { ¼ ½ l ģ Q A R S @ B T f A @ q s ͪ C U h g C B D F G E t u E D p o m n q | ¿ ¾ ť Ť w v F ɩ ͫ v w w t v y u { z x x ͭ Ͱ ͬ | ͯ ͮ [ G H ] W Z c a I g L d \ Y I b D e V _ F K ` O M X J ^ N E f j l k i n H o m N E G H P L J M Q F O K I Q O J ߡ N K P M G L w u { s ߢ x r { } v ~ | ~ y x y } | t z L H M J K I A D C @ B t x z w v u s r y } ~ þ Ĥ E Ŧ C D R N { S P T U V O h p W P | R Q E ߣ R ͱ i Q r w q W T V S U X Y Z ߦ ߧ ߥ ߨ ߤ S J F I K H G ĥ F } } X [ A J K M N L ˢ ˣ { ˡ | z y } ~ ~ j Ͷ ͵ ͷ ͼ Ͳ ͹ Ϳ ʹ ͺ ; ͸ ͽ ͻ ͳ b \ d a q t ] k V ` c e Т w U С Y W R o ~ s v Х M f } ^ x Ф u y | m У { l p _ Z S X T g n ӥ [ z A Ө v ӣ } Ӳ Ӫ ~ ө x | ӵ ӭ Ӥ ӳ t Ӭ s ӫ r \ Ӧ z { ӡ u ӯ Ӯ Ӷ Ӵ Ӱ ӧ Ӣ w ӱ y U ^ ` e y ] h o u b i @ w r n j \ a Y f c s d z l k Z _ p v A [ g m x q t v l ` } ۧ ۪ h ۣ i w s t ] ۤ ۡ u ۬ p ۯ n z r ۭ k d o c a ۥ j ۨ ۩ ~ v f ^ ۢ ۫ e ۰ q m | x y g { b ۦ l ۮ _ u U ߵ ߿ ߪ ߲ ߶ ߱ ߫ ߹ ߸ ߼ ߾ ߰ ߴ ߻ ߺ ߬ ߭ ߷ ߳ ߯ ߮ ` X [ Y Z ] a U ^ W V T c \ b _ s t g f b v u ߩ _ c ] p a w Z X d n i O m ߽ [ R U { \ S Q N e ` h x | W k o T y L r V j P ^ Y l } z q M I @ C E A G D L F U O F J T Q D H B V S P W M K N S @ E R D A M O Q I P B R J G U H T K L V C N ~ ÿ ħ ĩ Ħ Ī Ĭ ĭ ī Ĩ J K I G H L E F G O h Ӹ ӷ @ B | { ~ X Z Y W Щ Ч Ц i k j Ш ӿ A F Ӽ ӽ C ӻ H Ӿ ӹ G D Ӻ E B L ץ K ר ׫ H F ~ ש ק פ ׬ ׭ ׯ װ } E ע ס ׮ G ף I D צ M J ת ۿ ۴ ۽ ۱ ۶ ۺ ۸ ۲ ۵ ۳ ۾ ۼ ۷ ۹ ۻ j e g h m i l f d k d z a k g e ` o \ h i _ ^ l b ] c n [ m j f Y ] Z a g \ p j _ k f m ^ ` n X l d c h [ b i e o Į į B E A C D Q O N @ P F M Z n Ъ G l Ы ױ N Ь Ю Э m I J N M K L P ײ U T ׸ R ׳ S ׿ ׻ ׽ ׷ ׾ O ׺ ׹ ׵ ׼ ״ ׶ Q t B A v @ n p r q s o u p | w y q u x { s t z r v r q w s t u x v İ I K H J Ũ R ŧ H I K J P n W V C F E D y { z ı T S [ Я o C A @ B D I G H } | } IJ L U ũ L q r а б p T R Q X P Y V S W U O _ Y ^ ` Z [ X ] \ D F E I C B @ G A H P M E J Q G O K N L F L x { N M } O K y | z ~ w J ~ ~ A O @ B C ķ ĵ ĸ Ĵ Ķ ij @ N M P Q A V [ Ū X W Z Y C B @ A @ M N g m R P D D Z a T S v b H V U W Q R F E ˤ \ [ I Y Z X G s t ] ^ h f c g e d J L Q S R U O K M T P N [ T S U H I J ĺ Ĺ R B S \ ū Ŭ E B j i \ ] в v u _ X W V _ b ` a e ^ f c d V L N K M T o w l k ` [ ^ Y l ] \ _ Z h o n p m r i k g j q s [ a Y b X ] c ` _ ^ W \ Z A C @ E B F D E A @ C B D R O S Q P T ļ ľ Ľ Ļ C E V D U a ŭ ` Ů ^ ] b c F _ \ Q P O p n ` U y x c a b m n C A E F L H J B I K D G b @ a c u w v { x t y z | g f d e M N I J K L H @ G F G H I X Y W V Z X Y W F d ů e H G d @ | G d A [ ˦ ˥ ж д | г ~ { } е z j g n i l h e k m f p z v ~ w | r o q } u x t y { s M e O g i N f j h G O ~ P E J C B M L K I N } D F H R C A S D B Q P O E U o R S Q T ˪ ˧ ˬ ˨ ˩ ˫ и м й л н п о к q p r з l V W T n S Y X k \ R [ P Z U m Q R n q i m l j p k h o Y H J V W U Q G Z T F I X K L M ] \ [ \ Z f Ű u t @ A s _ a ] ` o ^ p s U T S s u t r a ^ _ M ` [ \ J K ] L O P N R _ Q ^ Ŀ ] H I C ] q o V q B ^ x v z D y w C B @ C A m l j b q e o v n y u c i w h x z k r s w u t f r v t s d g p a W Y e Z \ f [ d b ^ c ` X g ] _ x z ~ | y { w v } R Z U g P O V e T q c d N X t y s o w u h b } W ~ x m k f A n { j z S v | r l Q p Y i D A C B @ @ C E E B A D U E K ` Y T c [ e U _ a W X ] b j g k ^ Z h j \ d f i S V s c q a l h r b e t y m p i d ` o k u g n z B f @ D A C E a f O h I d j N J K ` g M e L _ c b ^ i @ C ű m p l n o i j g k h Ų ų K M L N J D S R T _ U ^ V r u t h s r p q w D x v { E F } z y | { ~ { h [ \ M K I J F F N H L G n l m w x E G F P m l k ɪ X V Y W ˮ ˰ ˯ ˭ @ E F ~ | } I H K J G } ܣ ܢ | ~ ܡ j k i G H O I o A G L ܤ ܦ ܥ n o m l P J p t q u s y B ܨ ܧ s p r q ] ^ _ ` Q N K P S L R O M w v x ~ } z { | H I S n Q R o Ŵ ŵ q E G F W C t Q R D a S M ܩ ܫ ܪ u v X c b d V U T T A @ } { ~ | y @ z J K R p ŷ Ŷ O P H i C B q r W D X A L M T Q N ܬ z | w x { y g e [ f Y Z U [ Y X V Z W E J F I H G D B E C F @ A Q N O P r V U t s Ÿ j I ` X ܭ h G B u R S t s u H O ܮ ~ } i \ k j l a _ ^ ] ` \ K ^ ] _ N L M R K Q T S P O J H I C D X W U T Y v Ź w W v V w a Y P U ` W V L n q s r t p m o c f d c i h g b b a e d Z ^ [ ] \ Y _ b ` a @ X c M E F ` ^ ] c a \ Z [ _ b x ~ y [ Z } | Y { X z } ~ { Ż x | y z ź R S J v j k z l u e j m f d k N f d e \ ż b I h v w n q p o g h f e g O P G g i h Ž T U V K c x i J { r z y i S R Q ^ ] L | { } x v w s y t r u | j { z ~ j m l t o s q p n k C B D A u X W U T J K I H l o V m s q k v j r n u t ` _ ſ p ž Z \ _ [ ` Y W ] X ^ M Z \ [ y x w z s t ܯ } ~ o k p l m n z { ~ | v y } E F w Y Z [ M x O P N L } { | x ~ z w y a b d c i n d g k r e o s j c m l q p h b f N O a ] ^ ` _ b a | { x | } P Q G Q S R e c T t d H u r q L J K I \ f v w d } u ܰ x R e ~ ] g y ^ | { z M } f N ~ h i j T S g j i h s e t ȡ ȣ J J W Y [ _ ` c d g h k l o p s t w x { | \ M N O Q R S T } ~ B L M N I C H ] ^ A D G F H I @ @ A B C a U b F G D | z G _ T t c ` b j T e n @ v { m B { c r \ N s _ V K h j a c I k x L [ s Y N P s X ^ u ] A h g p N w Q p @ F \ K X [ i n | N y { p ~ C J | a ` x k L T t ~ } R I I n f o m e g b k ~ ] m Z F M ] u U f Z S x \ Ȥ p [ W U S @ J ` V O C ] r ` w diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_chars-cn-big5.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_chars-cn-big5.html.headers new file mode 100644 index 00000000000..4c1d435b139 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_chars-cn-big5.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=cn-big5 diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_chars-csbig5.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_chars-csbig5.html new file mode 100755 index 00000000000..c4528fe0c5c --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_chars-csbig5.html @@ -0,0 +1 @@ +csbig5 characters X P D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u [ V X L K E J K Ƶ ƶ Ʒ Ƹ ƹ ƺ ƻ Ƽ ƽ ƾ w x v A ơ Ƣ ƣ Ƥ ƥ Ʀ Ƨ ƨ Ʃ ƪ ƫ Ƭ ƭ Ʈ Ư ư Ʊ Ʋ Ƴ ƴ w x z { | } u t s r q ~ Z b c d e f g h i p o n m l k j v y @ B C q r m n u v y z i j E e f @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ ǡ Ǣ ǣ Ǥ ǥ Ǧ ǧ Ǩ ǩ Ǫ ǫ Ǭ ǭ Ǯ ǯ ǰ DZ Dz dz Ǵ ǵ Ƕ Ƿ Ǹ ǹ Ǻ ǻ Ǽ ǽ Ǿ ǿ t u v w x y z { | } ~ y U V P Q R T W S O h p z ^ f H e } d x l k B d J I L S ] a I Y e j M n E P ~ z K J V } C @ B C E V T W U F O M B A @ C X P c ˱ ƿ Y D d @ D [ G \ E G F A { A E ^ ] K ܱ ܲ F G H _ Q E ` F G ܳ H R T S J K L M I P j f Q a h N O H e g ɰ ɺ ɮ ɲ ɱ ɵ ɹ ɶ ɳ ɫ ɻ ɸ ɯ ɬ ɴ ɷ ɭ f B g D [ ` h d G ] ˽ C b ^ Z e E H @ F c A i \ _ a ˿ ˹ ˸ ˼ ˳ ˵ ˶ ˻ ˴ ˷ ˺ ˾ ˲ W V J I Q ] K Y P X T [ N W M U R Z O \ S L H Y [ c W \ b U Y R V g Q f X S O ] P N Z ` a [ ^ M _ d L T e ^ W _ U X Y V ] S R Q \ Z T V ܷ ܽ ܺ ܿ ܴ ܵ ܾ ܼ ܸ ܶ ܻ ܹ r g i v w u x _ l k I a S R J I K ^ Y Z \ [ ` o ] ^ J q K @ L N Ȣ T U A j ` _ U a V B ɼ } G M N ~ k h a @ L Z z B Y W X M N } b ɾ Z k F ɿ D E ɽ G C l m n P O S Q R c h d g f e b i k j l A B Z @ A B D C O \ [ H U V T W o p l k i j n m C D E y U c V ] ^ I q m c b P _ C l ` K J X o E Q d c b m n R e d r W g f L M s Y Z o D t u p p d e F F X h S e q O f j y t o n u s l z m i x w v k r q { p Y S Y U [ X N Q T P W Z O R V \ ~ { g | [ ] u p m ʥ } _ a ʤ h x t v \ m D v s d n o w l j k q ʡ ^ r ʣ f c z b ʦ e i ` ʢ y O P I K M L E A D I R C F H Q M S J G B @ N H K x t } r C O y E B w J | L s ~ { @ F G z v u D N D @ B C A C F B @ G ԡ E D A w ԧ | Ԣ v { z ԥ Ԩ s ԩ ~ B Ԧ Ԫ t Ԥ u x } y ԣ q r j u x q F n v { o f s m y z l r t h w g G i p _ U Q K T N P S H I L J O H M R G M G D G S T J B L R O F I H H C E K A k T O U N P @ E B A C D @ Q F { } ~ z | P ` V Q A Y @ X W Z m o n I } | _ ^ ] y ʩ ʨ w z \ ʧ [ x W T Z H I E F Ԭ ԫ | I H G k g Y n o b f d c e a ` } ʪ d v ʫ ` ʭ { ʮ ʬ ~ | ʯ Y [ Z @ X W V \ A U T Z g X ^ U Y [ ] W V Q R S \ P S R W N Q P T X G J O U I J Ժ V M H L Ա ԯ Խ Կ g Դ Լ Ծ Թ Բ ئ ԰ Է ԭ Ե Գ i Ի Զ K Ը Ԯ ء ت ة آ ؤ ب l أ إ } ز ر خ K ث ح ~ ذ د س ج ا n ] c _ f W \ U [ d Z ` e V ^ b h X a g Y Y K W V M R N Q \ [ o J P Z O L X M O J L N P I K S R r a b q c B [ h _ t i S Z ʰ B ` Y L B i ~ p g h ] { j [ q i j ʱ a C _ ` ^ Z a b M N O ش j ] k l o n q p m k ʶ ʹ ʸ ʵ ʳ ʴ ʻ ʷ ʲ ʺ g o O H p S D K f E d L P c Q J M r i T R n l I k G F j h q m e N o g c s b l p V v d f m q u r k n h j i t e \ b [ ` P U _ \ a Q [ T R c S W X Z Y ] ^ d @ C D B A @ ػ ظ ؽ B G C ض A D غ ط s ع ؾ ؼ E ؿ ص B @ C D @ F A A B E n z p v k y x | u t m { o r w q l s U a X W Z \ _ V T ] [ Y _ ^ c ^ ` b ` W V U X Q R Z S \ [ T Y T \ ] C l m n r s s U u t V ] e E G F } ^ p r y s v t u w ʼ ʽ W X v x z w { y f w } h g c _ ` b d a f e J I H G K F I K H J H I J ~ f g e d ] d _ o x u i g N M L L M p \ t y | K q ʾ ʿ N L r u Y ~ Z } x j h k i j ^ P Q O h i a K s w v z h b ] e c \ i l g ` f a d [ _ k ^ j Ϋ Τ Ϊ Σ Υ } { ά Ω y Χ Ψ Φ | z ΢ ~ Ρ έ o n l k n p o s q p ή r m l m q r S R T X A Z V ^ [ U C W B \ ] Y D @ Q R O O P S V N P U T C R D M Q e g k h c b l j j m d i k f a f ` e ^ h d i c _ g j b X r D E ` r q t { _ u t W v w x ί S y ] x | n m o γ ΰ α β δ t s v u b F a c ` U E V W T Z \ E [ Y X q o m p n l m k l n n z ~ } F X y z θ η ι ζ κ y u w w x x v ε G J K H g f d e I h Z [ \ ] _ a H G Y ` ^ p s r t q t u o s s q p r o f F G U @ A C { λ | F I } q r s p μ z z y i L j M L ] b u v t s t ν k J U Q { m C n l ^ v T L w v u ξ } | { O o r p N u q P t s a W a _ ` K d L c w x w u @ H I { x y ̯ ̢ ~ ̮ ̩ ̪ ̭ ̬ ̣ | ̥ ̰ ̦ ̨ { ̧ z ̫ a } ̤ ̡ ο ѡ ~ } | ~ v Ѥ Ѧ Ѩ S Ѭ ѣ x Q Ѯ R ѥ ѩ ѫ Ѫ ѭ ѧ k y Ѣ w l z U ^ d m | e ` V ~ T b e I c ] a { d Y b W X [ _ \ d f c Z } k o @ Q m D q e F S i l G H N s T J O C ^ U r A P ] p N M t E j B K M R g L P h \ p h l n k [ j _ Z @ q v X i m O f g A W Y V o } G F | E C D t z n { H y B z y ~ y | ~ x x v } w | { z ~ | y { } V g j i h a J b A t | ̱ ѯ u r ` a t v u I W ̲ Ѱ v Q ~ } ̾ ̷ ̳ ̺ ̼ ̿ ̻ ̴ ̸ ̽ ̶ ̹ ̵ Q A @ ѱ C B E Ѳ D Ѿ Ѵ f ѷ Ѻ } ѽ ѿ Ѹ ѵ Ѷ Ѽ ѻ ѳ g y u r զ w ա { j գ i բ s h x ե q t դ R o x n l ~ w | p m z v T S k d z j Y g w } k n | \ m l ~ U y i _ p h q f e c ] ѹ V ݷ W { y X o x ` [ a ^ p | ݱ ݶ ݪ l ݻ i z { b k ݤ n o ݥ ݲ ݸ j d ݣ } ݺ ݨ ݩ ~ ݴ ݫ ݵ ݭ e h f ݹ ݰ ݬ ݡ S ݯ m ݧ ݦ g c ݳ ݮ ݢ Q L K O b R T N P U J Z M Y X ^ \ ] Z k [ B E F D G l C N d M L K c e u r F G է v u x s w t q ݼ V H y ݽ z { r W H | s _ I ը } ~ ݾ Y X J I O ^ J @ P M c S K N Q L O R լ ի խ ժ ծ թ ٧ ٢ ٥ ٨ ٦ ٣ ١ ٤ y b ݿ v w u { x t z \ Z R [ S M P ` n K m Q R f P T ٩ | B A կ z a g P C G B E @ A A @ F D W C M N F X H S I V Q O J P D R U E L T G K M [ \ i ^ V L b J [ E e R A D Q a ` F X _ ` c Z K S f Y a m V X C j c ] @ l g I k P H d \ T ^ b G Z Y O _ U W h ] N M B ^ W U O D մ յ չ վ ս հ ձ ղ ճ պ | ռ շ ջ ն տ J E ٽ ٫ ٳ ٭ ٻ ٶ ٰ ٵ ٯ ٱ ٺ ٷ ٴ H G j ٬ ټ پ ٪ ٲ ٹ ٸ ٮ Q ո N ~ ٿ D J H ^ F X } _ B ] R G U d ] [ @ Z o Q a m I ^ K Y g D k a M C W h ` e S f E P L N ` _ n O b T c l j A V i b R \ A W B { Z E A H I D J @ G \ C F B c h i b f e g d _ Q N W V T O r P q S p X R M o L V U U h Y Z T X S W v V b Y d e p c e q d K j Y w B Z [ n f k \ e o f p f g h L l Z _ q g i j ` C H r h s i q j o B A C @ @ A A B @ k M [ ] a ~ I J ^ t k l D B r ɡ r ɤ ɣ D ɢ @ v E [ Y L Q S L M U b R O Q V Z X Z K x M \ T W E G ^ U N J Y V H I C O P [ ] P N S \ W R ] F T K X D j z q K b e B m o v h f g u G p n s J u y c I M O @ l k } r u x | A F ~ w i _ d ` N { t a L | ϡ Ϥ w ϧ Ϫ Ϭ t v { I ϥ ϭ { s d ~ Ϣ x z } } p Ϩ ϫ z m x ϩ o ^ H | w v n ϣ y q r Ϧ y ~ L C U [ W J M F G J V _ E @ N B O Y D h H H E f Z g a S b \ e c I T A G ` F Q C i P K K X ] e R P G [ U G D g d X c N O I E @ Q Y B D ^ F \ S H F J h b _ ] f a R ` A E W V T L K C M A Z I M D J C U V H D B S K Q ~ W A G E B C O L T @ F G F E P N R @ a ` F _ I J h ^ C R H K c j b W i U L Y e h T M P Z d G Q [ N E S g V l X f O D ] d \ } n w m q s u S } o u ~ | | v t z w x z ~ p y x { t s r { P y v D N M Y K O F R T C ^ W [ ` U I L H _ a V \ J E A Z B @ X Q P ] G I @ A H C O B D F E D J G F E B @ A N C Q S Y W Z R V U [ T X P q o p m n s r x _ e y \ v s g w t ^ a b c f ] u d h ` ] j ` k h _ \ ^ b e d g [ i c f i a x y W e l A ^ _ b _ ` a X Z U R T c V S P W Q Y ϯ ϳ ϶ ϲ ϱ ϴ ϵ Ϯ ϰ w x y P L n v { Q l r k u q M O z j m s t | p N m N P L X J W i H [ R l S V Z O T j k Y M I [ Q U K H I e O Y b X L ` ^ _ J c \ Z K ] a M d p w y ޡ k z ޢ } m ~ l x ޣ q | o v r n u N { s t g d p j l f n m k q h o c e b r i J Q U S K I L M H U V G V Q O L P N R R M N O P K T S W X T \ b ` ^ a ] _ w t u v l m z k j i { l j k A D y G R n b H Ϸ } ϸ Ϲ f P ޤ K L | g B e d c ` [ Ϻ Ͻ ϻ ϼ Ң ҡ ~ S ] ^ o \ _ R p Q Q k j h i l ަ ޥ ީ ި ާ s t Y Z r } q p n o l ɥ ɦ C D f b a e g c f g d _ Ͼ ] d e a b \ ^ c ` Ͽ Ҩ ҥ ҧ X W U Ҥ ҩ T V Ҧ g ң Ҫ b f e n y h c m t s a d u r q ` i p w T v s X V R S u Y o q t r U x S ޭ ެ ު ޮ ޫ ް ޯ v u ~ } { z w x y | _ \ ] W [ a ` ^ d e c y x ~ á m n m z Y v j ɧ E l j k h h i m k g j f i [ l h ү ^ Z Ҵ ҫ Ҷ Ү ҹ Һ Ҭ Ҹ ҵ ҳ ҷ _ ] ұ t ҭ Ұ һ Ҳ ^ Z \ F x m k h l s t p { u r o y n w z q y [ x w v | i ~ E ڡ ` ڧ ک ڢ Z ڦ ڥ [ a b ڨ X } { ڣ z _ | ڤ ڪ Y ^ \ ] l W ޷ ޻ ޱ ޼ s _ ޲ ޳ ޽ ޺ ޸ ޹ ޵ ޴ ޾ ޶ q w y u @ b A | i f e g f Z c X \ [ d h Y q m z j h k n l g B E u @ o F â D { A C G v t ã s n n Ҽ ҽ } ޿ ] ä { o ` Ҿ ҿ ~ ګ i ^ _ r o p q I H | w c d F j i ڬ k l n m r p q ` d c b a { z f e ڮ ڭ B j s æ å | s o p t h i n l k j e m f g ֡ ֢ | ~ ֤ ֣ } ڶ k j ڰ h ڳ l ڴ m ڱ g i ڵ ڲ گ E C H I F G D l k s m r o ` q a b p n t w u v M ¡ N } O ~ L P J ç x è o K p ~ } n o G q m ֦ o ֥ ڸ q ڷ p J x Q q p u p r K t R r q r s ֧ ڹ s L d u c y S s n x w v y u v ְ w t ֪ ֩ ֫ ֬ ֮ ֭ ֲ ֨ ֱ ֯ ڼ ھ ں ڻ ڿ ڽ t C F D E A B @ N Q O M P } ~ v z y w f g e x { | h @ { A | z ~ } U ¤ ¥ ¢ £ T { é y z t w u v f o x u G B | x ͡ z | ~ } { | ֹ z y } ~ { O ֺ ֳ ֵ ַ ָ ֶ ֻ ִ v w x N Q M L H O P J K I T X V S U R Y W j l i k F V E C D V G Z W ¦ [ ] \ X Y ê ~ } z } y q { | ~ r t s r ͣ ͢ ּ ֽ ־ ֿ i R S T A C B @ m H I _ ^ § ë š ɨ V r q p ͤ } | z { y A Z X @ W \ [ Y I H D G F ^ _ [ ] Z \ p E r q n o J ` ª ¨ © í ì H s ͥ ͦ @ ~ D ] ^ C B J K L a ` s K « ¬ u A E M v ͧ B C @ B D G E F C H A a P S G L F c J H b O N K M I R _ Q ] X N P U T W R Q S Y [ V O i \ b c e ` h d f g v j t x Q y w { z O N L P M u c a g ° e d ² j ± k h ® i b ¯ ­ f l ò ð ñ î ï ó x w y ţ Ţ X Y m ~ ͨ E F D G H I I O M K L N J V d T e U f a ^ ` _ k a | } W S X T V R U ³ z { A @ t ͩ L J K Z S Y R X V U T Q P W l h ] _ a e [ Y j ` d \ X W b Z ^ k i f g c r j x t x e u b w f v p c q s h g d l i m y n o k p y u r v l t s w q n z r m { o ~ _ Y i a ] d g \ e ` Z h c ^ b [ f n t ¹ w ´ µ o v q º · m s u ¸ r p ÷ ø ô õ ú ö ~ } ġ B @ B A l o j » Ģ C I u M ` [ _ ] ^ \ @ i j n o h k g m @ p z | } ù D O N b a B C A s m l n r q ~ y x û ý ü P e d c D o p ~ C A B { | } k z { ¼ ½ l ģ Q A R S @ B T f A @ q s ͪ C U h g C B D F G E t u E D p o m n q | ¿ ¾ ť Ť w v F ɩ ͫ v w w t v y u { z x x ͭ Ͱ ͬ | ͯ ͮ [ G H ] W Z c a I g L d \ Y I b D e V _ F K ` O M X J ^ N E f j l k i n H o m N E G H P L J M Q F O K I Q O J ߡ N K P M G L w u { s ߢ x r { } v ~ | ~ y x y } | t z L H M J K I A D C @ B t x z w v u s r y } ~ þ Ĥ E Ŧ C D R N { S P T U V O h p W P | R Q E ߣ R ͱ i Q r w q W T V S U X Y Z ߦ ߧ ߥ ߨ ߤ S J F I K H G ĥ F } } X [ A J K M N L ˢ ˣ { ˡ | z y } ~ ~ j Ͷ ͵ ͷ ͼ Ͳ ͹ Ϳ ʹ ͺ ; ͸ ͽ ͻ ͳ b \ d a q t ] k V ` c e Т w U С Y W R o ~ s v Х M f } ^ x Ф u y | m У { l p _ Z S X T g n ӥ [ z A Ө v ӣ } Ӳ Ӫ ~ ө x | ӵ ӭ Ӥ ӳ t Ӭ s ӫ r \ Ӧ z { ӡ u ӯ Ӯ Ӷ Ӵ Ӱ ӧ Ӣ w ӱ y U ^ ` e y ] h o u b i @ w r n j \ a Y f c s d z l k Z _ p v A [ g m x q t v l ` } ۧ ۪ h ۣ i w s t ] ۤ ۡ u ۬ p ۯ n z r ۭ k d o c a ۥ j ۨ ۩ ~ v f ^ ۢ ۫ e ۰ q m | x y g { b ۦ l ۮ _ u U ߵ ߿ ߪ ߲ ߶ ߱ ߫ ߹ ߸ ߼ ߾ ߰ ߴ ߻ ߺ ߬ ߭ ߷ ߳ ߯ ߮ ` X [ Y Z ] a U ^ W V T c \ b _ s t g f b v u ߩ _ c ] p a w Z X d n i O m ߽ [ R U { \ S Q N e ` h x | W k o T y L r V j P ^ Y l } z q M I @ C E A G D L F U O F J T Q D H B V S P W M K N S @ E R D A M O Q I P B R J G U H T K L V C N ~ ÿ ħ ĩ Ħ Ī Ĭ ĭ ī Ĩ J K I G H L E F G O h Ӹ ӷ @ B | { ~ X Z Y W Щ Ч Ц i k j Ш ӿ A F Ӽ ӽ C ӻ H Ӿ ӹ G D Ӻ E B L ץ K ר ׫ H F ~ ש ק פ ׬ ׭ ׯ װ } E ע ס ׮ G ף I D צ M J ת ۿ ۴ ۽ ۱ ۶ ۺ ۸ ۲ ۵ ۳ ۾ ۼ ۷ ۹ ۻ j e g h m i l f d k d z a k g e ` o \ h i _ ^ l b ] c n [ m j f Y ] Z a g \ p j _ k f m ^ ` n X l d c h [ b i e o Į į B E A C D Q O N @ P F M Z n Ъ G l Ы ױ N Ь Ю Э m I J N M K L P ײ U T ׸ R ׳ S ׿ ׻ ׽ ׷ ׾ O ׺ ׹ ׵ ׼ ״ ׶ Q t B A v @ n p r q s o u p | w y q u x { s t z r v r q w s t u x v İ I K H J Ũ R ŧ H I K J P n W V C F E D y { z ı T S [ Я o C A @ B D I G H } | } IJ L U ũ L q r а б p T R Q X P Y V S W U O _ Y ^ ` Z [ X ] \ D F E I C B @ G A H P M E J Q G O K N L F L x { N M } O K y | z ~ w J ~ ~ A O @ B C ķ ĵ ĸ Ĵ Ķ ij @ N M P Q A V [ Ū X W Z Y C B @ A @ M N g m R P D D Z a T S v b H V U W Q R F E ˤ \ [ I Y Z X G s t ] ^ h f c g e d J L Q S R U O K M T P N [ T S U H I J ĺ Ĺ R B S \ ū Ŭ E B j i \ ] в v u _ X W V _ b ` a e ^ f c d V L N K M T o w l k ` [ ^ Y l ] \ _ Z h o n p m r i k g j q s [ a Y b X ] c ` _ ^ W \ Z A C @ E B F D E A @ C B D R O S Q P T ļ ľ Ľ Ļ C E V D U a ŭ ` Ů ^ ] b c F _ \ Q P O p n ` U y x c a b m n C A E F L H J B I K D G b @ a c u w v { x t y z | g f d e M N I J K L H @ G F G H I X Y W V Z X Y W F d ů e H G d @ | G d A [ ˦ ˥ ж д | г ~ { } е z j g n i l h e k m f p z v ~ w | r o q } u x t y { s M e O g i N f j h G O ~ P E J C B M L K I N } D F H R C A S D B Q P O E U o R S Q T ˪ ˧ ˬ ˨ ˩ ˫ и м й л н п о к q p r з l V W T n S Y X k \ R [ P Z U m Q R n q i m l j p k h o Y H J V W U Q G Z T F I X K L M ] \ [ \ Z f Ű u t @ A s _ a ] ` o ^ p s U T S s u t r a ^ _ M ` [ \ J K ] L O P N R _ Q ^ Ŀ ] H I C ] q o V q B ^ x v z D y w C B @ C A m l j b q e o v n y u c i w h x z k r s w u t f r v t s d g p a W Y e Z \ f [ d b ^ c ` X g ] _ x z ~ | y { w v } R Z U g P O V e T q c d N X t y s o w u h b } W ~ x m k f A n { j z S v | r l Q p Y i D A C B @ @ C E E B A D U E K ` Y T c [ e U _ a W X ] b j g k ^ Z h j \ d f i S V s c q a l h r b e t y m p i d ` o k u g n z B f @ D A C E a f O h I d j N J K ` g M e L _ c b ^ i @ C ű m p l n o i j g k h Ų ų K M L N J D S R T _ U ^ V r u t h s r p q w D x v { E F } z y | { ~ { h [ \ M K I J F F N H L G n l m w x E G F P m l k ɪ X V Y W ˮ ˰ ˯ ˭ @ E F ~ | } I H K J G } ܣ ܢ | ~ ܡ j k i G H O I o A G L ܤ ܦ ܥ n o m l P J p t q u s y B ܨ ܧ s p r q ] ^ _ ` Q N K P S L R O M w v x ~ } z { | H I S n Q R o Ŵ ŵ q E G F W C t Q R D a S M ܩ ܫ ܪ u v X c b d V U T T A @ } { ~ | y @ z J K R p ŷ Ŷ O P H i C B q r W D X A L M T Q N ܬ z | w x { y g e [ f Y Z U [ Y X V Z W E J F I H G D B E C F @ A Q N O P r V U t s Ÿ j I ` X ܭ h G B u R S t s u H O ܮ ~ } i \ k j l a _ ^ ] ` \ K ^ ] _ N L M R K Q T S P O J H I C D X W U T Y v Ź w W v V w a Y P U ` W V L n q s r t p m o c f d c i h g b b a e d Z ^ [ ] \ Y _ b ` a @ X c M E F ` ^ ] c a \ Z [ _ b x ~ y [ Z } | Y { X z } ~ { Ż x | y z ź R S J v j k z l u e j m f d k N f d e \ ż b I h v w n q p o g h f e g O P G g i h Ž T U V K c x i J { r z y i S R Q ^ ] L | { } x v w s y t r u | j { z ~ j m l t o s q p n k C B D A u X W U T J K I H l o V m s q k v j r n u t ` _ ſ p ž Z \ _ [ ` Y W ] X ^ M Z \ [ y x w z s t ܯ } ~ o k p l m n z { ~ | v y } E F w Y Z [ M x O P N L } { | x ~ z w y a b d c i n d g k r e o s j c m l q p h b f N O a ] ^ ` _ b a | { x | } P Q G Q S R e c T t d H u r q L J K I \ f v w d } u ܰ x R e ~ ] g y ^ | { z M } f N ~ h i j T S g j i h s e t ȡ ȣ J J W Y [ _ ` c d g h k l o p s t w x { | \ M N O Q R S T } ~ B L M N I C H ] ^ A D G F H I @ @ A B C a U b F G D | z G _ T t c ` b j T e n @ v { m B { c r \ N s _ V K h j a c I k x L [ s Y N P s X ^ u ] A h g p N w Q p @ F \ K X [ i n | N y { p ~ C J | a ` x k L T t ~ } R I I n f o m e g b k ~ ] m Z F M ] u U f Z S x \ Ȥ p [ W U S @ J ` V O C ] r ` w diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_chars-csbig5.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_chars-csbig5.html.headers new file mode 100644 index 00000000000..c4d711e2d30 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_chars-csbig5.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=csbig5 diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_chars-x-x-big5.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_chars-x-x-big5.html new file mode 100755 index 00000000000..c6727991f2e --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_chars-x-x-big5.html @@ -0,0 +1 @@ +x-x-big5 characters X P D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u [ V X L K E J K Ƶ ƶ Ʒ Ƹ ƹ ƺ ƻ Ƽ ƽ ƾ w x v A ơ Ƣ ƣ Ƥ ƥ Ʀ Ƨ ƨ Ʃ ƪ ƫ Ƭ ƭ Ʈ Ư ư Ʊ Ʋ Ƴ ƴ w x z { | } u t s r q ~ Z b c d e f g h i p o n m l k j v y @ B C q r m n u v y z i j E e f @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ ǡ Ǣ ǣ Ǥ ǥ Ǧ ǧ Ǩ ǩ Ǫ ǫ Ǭ ǭ Ǯ ǯ ǰ DZ Dz dz Ǵ ǵ Ƕ Ƿ Ǹ ǹ Ǻ ǻ Ǽ ǽ Ǿ ǿ t u v w x y z { | } ~ y U V P Q R T W S O h p z ^ f H e } d x l k B d J I L S ] a I Y e j M n E P ~ z K J V } C @ B C E V T W U F O M B A @ C X P c ˱ ƿ Y D d @ D [ G \ E G F A { A E ^ ] K ܱ ܲ F G H _ Q E ` F G ܳ H R T S J K L M I P j f Q a h N O H e g ɰ ɺ ɮ ɲ ɱ ɵ ɹ ɶ ɳ ɫ ɻ ɸ ɯ ɬ ɴ ɷ ɭ f B g D [ ` h d G ] ˽ C b ^ Z e E H @ F c A i \ _ a ˿ ˹ ˸ ˼ ˳ ˵ ˶ ˻ ˴ ˷ ˺ ˾ ˲ W V J I Q ] K Y P X T [ N W M U R Z O \ S L H Y [ c W \ b U Y R V g Q f X S O ] P N Z ` a [ ^ M _ d L T e ^ W _ U X Y V ] S R Q \ Z T V ܷ ܽ ܺ ܿ ܴ ܵ ܾ ܼ ܸ ܶ ܻ ܹ r g i v w u x _ l k I a S R J I K ^ Y Z \ [ ` o ] ^ J q K @ L N Ȣ T U A j ` _ U a V B ɼ } G M N ~ k h a @ L Z z B Y W X M N } b ɾ Z k F ɿ D E ɽ G C l m n P O S Q R c h d g f e b i k j l A B Z @ A B D C O \ [ H U V T W o p l k i j n m C D E y U c V ] ^ I q m c b P _ C l ` K J X o E Q d c b m n R e d r W g f L M s Y Z o D t u p p d e F F X h S e q O f j y t o n u s l z m i x w v k r q { p Y S Y U [ X N Q T P W Z O R V \ ~ { g | [ ] u p m ʥ } _ a ʤ h x t v \ m D v s d n o w l j k q ʡ ^ r ʣ f c z b ʦ e i ` ʢ y O P I K M L E A D I R C F H Q M S J G B @ N H K x t } r C O y E B w J | L s ~ { @ F G z v u D N D @ B C A C F B @ G ԡ E D A w ԧ | Ԣ v { z ԥ Ԩ s ԩ ~ B Ԧ Ԫ t Ԥ u x } y ԣ q r j u x q F n v { o f s m y z l r t h w g G i p _ U Q K T N P S H I L J O H M R G M G D G S T J B L R O F I H H C E K A k T O U N P @ E B A C D @ Q F { } ~ z | P ` V Q A Y @ X W Z m o n I } | _ ^ ] y ʩ ʨ w z \ ʧ [ x W T Z H I E F Ԭ ԫ | I H G k g Y n o b f d c e a ` } ʪ d v ʫ ` ʭ { ʮ ʬ ~ | ʯ Y [ Z @ X W V \ A U T Z g X ^ U Y [ ] W V Q R S \ P S R W N Q P T X G J O U I J Ժ V M H L Ա ԯ Խ Կ g Դ Լ Ծ Թ Բ ئ ԰ Է ԭ Ե Գ i Ի Զ K Ը Ԯ ء ت ة آ ؤ ب l أ إ } ز ر خ K ث ح ~ ذ د س ج ا n ] c _ f W \ U [ d Z ` e V ^ b h X a g Y Y K W V M R N Q \ [ o J P Z O L X M O J L N P I K S R r a b q c B [ h _ t i S Z ʰ B ` Y L B i ~ p g h ] { j [ q i j ʱ a C _ ` ^ Z a b M N O ش j ] k l o n q p m k ʶ ʹ ʸ ʵ ʳ ʴ ʻ ʷ ʲ ʺ g o O H p S D K f E d L P c Q J M r i T R n l I k G F j h q m e N o g c s b l p V v d f m q u r k n h j i t e \ b [ ` P U _ \ a Q [ T R c S W X Z Y ] ^ d @ C D B A @ ػ ظ ؽ B G C ض A D غ ط s ع ؾ ؼ E ؿ ص B @ C D @ F A A B E n z p v k y x | u t m { o r w q l s U a X W Z \ _ V T ] [ Y _ ^ c ^ ` b ` W V U X Q R Z S \ [ T Y T \ ] C l m n r s s U u t V ] e E G F } ^ p r y s v t u w ʼ ʽ W X v x z w { y f w } h g c _ ` b d a f e J I H G K F I K H J H I J ~ f g e d ] d _ o x u i g N M L L M p \ t y | K q ʾ ʿ N L r u Y ~ Z } x j h k i j ^ P Q O h i a K s w v z h b ] e c \ i l g ` f a d [ _ k ^ j Ϋ Τ Ϊ Σ Υ } { ά Ω y Χ Ψ Φ | z ΢ ~ Ρ έ o n l k n p o s q p ή r m l m q r S R T X A Z V ^ [ U C W B \ ] Y D @ Q R O O P S V N P U T C R D M Q e g k h c b l j j m d i k f a f ` e ^ h d i c _ g j b X r D E ` r q t { _ u t W v w x ί S y ] x | n m o γ ΰ α β δ t s v u b F a c ` U E V W T Z \ E [ Y X q o m p n l m k l n n z ~ } F X y z θ η ι ζ κ y u w w x x v ε G J K H g f d e I h Z [ \ ] _ a H G Y ` ^ p s r t q t u o s s q p r o f F G U @ A C { λ | F I } q r s p μ z z y i L j M L ] b u v t s t ν k J U Q { m C n l ^ v T L w v u ξ } | { O o r p N u q P t s a W a _ ` K d L c w x w u @ H I { x y ̯ ̢ ~ ̮ ̩ ̪ ̭ ̬ ̣ | ̥ ̰ ̦ ̨ { ̧ z ̫ a } ̤ ̡ ο ѡ ~ } | ~ v Ѥ Ѧ Ѩ S Ѭ ѣ x Q Ѯ R ѥ ѩ ѫ Ѫ ѭ ѧ k y Ѣ w l z U ^ d m | e ` V ~ T b e I c ] a { d Y b W X [ _ \ d f c Z } k o @ Q m D q e F S i l G H N s T J O C ^ U r A P ] p N M t E j B K M R g L P h \ p h l n k [ j _ Z @ q v X i m O f g A W Y V o } G F | E C D t z n { H y B z y ~ y | ~ x x v } w | { z ~ | y { } V g j i h a J b A t | ̱ ѯ u r ` a t v u I W ̲ Ѱ v Q ~ } ̾ ̷ ̳ ̺ ̼ ̿ ̻ ̴ ̸ ̽ ̶ ̹ ̵ Q A @ ѱ C B E Ѳ D Ѿ Ѵ f ѷ Ѻ } ѽ ѿ Ѹ ѵ Ѷ Ѽ ѻ ѳ g y u r զ w ա { j գ i բ s h x ե q t դ R o x n l ~ w | p m z v T S k d z j Y g w } k n | \ m l ~ U y i _ p h q f e c ] ѹ V ݷ W { y X o x ` [ a ^ p | ݱ ݶ ݪ l ݻ i z { b k ݤ n o ݥ ݲ ݸ j d ݣ } ݺ ݨ ݩ ~ ݴ ݫ ݵ ݭ e h f ݹ ݰ ݬ ݡ S ݯ m ݧ ݦ g c ݳ ݮ ݢ Q L K O b R T N P U J Z M Y X ^ \ ] Z k [ B E F D G l C N d M L K c e u r F G է v u x s w t q ݼ V H y ݽ z { r W H | s _ I ը } ~ ݾ Y X J I O ^ J @ P M c S K N Q L O R լ ի խ ժ ծ թ ٧ ٢ ٥ ٨ ٦ ٣ ١ ٤ y b ݿ v w u { x t z \ Z R [ S M P ` n K m Q R f P T ٩ | B A կ z a g P C G B E @ A A @ F D W C M N F X H S I V Q O J P D R U E L T G K M [ \ i ^ V L b J [ E e R A D Q a ` F X _ ` c Z K S f Y a m V X C j c ] @ l g I k P H d \ T ^ b G Z Y O _ U W h ] N M B ^ W U O D մ յ չ վ ս հ ձ ղ ճ պ | ռ շ ջ ն տ J E ٽ ٫ ٳ ٭ ٻ ٶ ٰ ٵ ٯ ٱ ٺ ٷ ٴ H G j ٬ ټ پ ٪ ٲ ٹ ٸ ٮ Q ո N ~ ٿ D J H ^ F X } _ B ] R G U d ] [ @ Z o Q a m I ^ K Y g D k a M C W h ` e S f E P L N ` _ n O b T c l j A V i b R \ A W B { Z E A H I D J @ G \ C F B c h i b f e g d _ Q N W V T O r P q S p X R M o L V U U h Y Z T X S W v V b Y d e p c e q d K j Y w B Z [ n f k \ e o f p f g h L l Z _ q g i j ` C H r h s i q j o B A C @ @ A A B @ k M [ ] a ~ I J ^ t k l D B r ɡ r ɤ ɣ D ɢ @ v E [ Y L Q S L M U b R O Q V Z X Z K x M \ T W E G ^ U N J Y V H I C O P [ ] P N S \ W R ] F T K X D j z q K b e B m o v h f g u G p n s J u y c I M O @ l k } r u x | A F ~ w i _ d ` N { t a L | ϡ Ϥ w ϧ Ϫ Ϭ t v { I ϥ ϭ { s d ~ Ϣ x z } } p Ϩ ϫ z m x ϩ o ^ H | w v n ϣ y q r Ϧ y ~ L C U [ W J M F G J V _ E @ N B O Y D h H H E f Z g a S b \ e c I T A G ` F Q C i P K K X ] e R P G [ U G D g d X c N O I E @ Q Y B D ^ F \ S H F J h b _ ] f a R ` A E W V T L K C M A Z I M D J C U V H D B S K Q ~ W A G E B C O L T @ F G F E P N R @ a ` F _ I J h ^ C R H K c j b W i U L Y e h T M P Z d G Q [ N E S g V l X f O D ] d \ } n w m q s u S } o u ~ | | v t z w x z ~ p y x { t s r { P y v D N M Y K O F R T C ^ W [ ` U I L H _ a V \ J E A Z B @ X Q P ] G I @ A H C O B D F E D J G F E B @ A N C Q S Y W Z R V U [ T X P q o p m n s r x _ e y \ v s g w t ^ a b c f ] u d h ` ] j ` k h _ \ ^ b e d g [ i c f i a x y W e l A ^ _ b _ ` a X Z U R T c V S P W Q Y ϯ ϳ ϶ ϲ ϱ ϴ ϵ Ϯ ϰ w x y P L n v { Q l r k u q M O z j m s t | p N m N P L X J W i H [ R l S V Z O T j k Y M I [ Q U K H I e O Y b X L ` ^ _ J c \ Z K ] a M d p w y ޡ k z ޢ } m ~ l x ޣ q | o v r n u N { s t g d p j l f n m k q h o c e b r i J Q U S K I L M H U V G V Q O L P N R R M N O P K T S W X T \ b ` ^ a ] _ w t u v l m z k j i { l j k A D y G R n b H Ϸ } ϸ Ϲ f P ޤ K L | g B e d c ` [ Ϻ Ͻ ϻ ϼ Ң ҡ ~ S ] ^ o \ _ R p Q Q k j h i l ަ ޥ ީ ި ާ s t Y Z r } q p n o l ɥ ɦ C D f b a e g c f g d _ Ͼ ] d e a b \ ^ c ` Ͽ Ҩ ҥ ҧ X W U Ҥ ҩ T V Ҧ g ң Ҫ b f e n y h c m t s a d u r q ` i p w T v s X V R S u Y o q t r U x S ޭ ެ ު ޮ ޫ ް ޯ v u ~ } { z w x y | _ \ ] W [ a ` ^ d e c y x ~ á m n m z Y v j ɧ E l j k h h i m k g j f i [ l h ү ^ Z Ҵ ҫ Ҷ Ү ҹ Һ Ҭ Ҹ ҵ ҳ ҷ _ ] ұ t ҭ Ұ һ Ҳ ^ Z \ F x m k h l s t p { u r o y n w z q y [ x w v | i ~ E ڡ ` ڧ ک ڢ Z ڦ ڥ [ a b ڨ X } { ڣ z _ | ڤ ڪ Y ^ \ ] l W ޷ ޻ ޱ ޼ s _ ޲ ޳ ޽ ޺ ޸ ޹ ޵ ޴ ޾ ޶ q w y u @ b A | i f e g f Z c X \ [ d h Y q m z j h k n l g B E u @ o F â D { A C G v t ã s n n Ҽ ҽ } ޿ ] ä { o ` Ҿ ҿ ~ ګ i ^ _ r o p q I H | w c d F j i ڬ k l n m r p q ` d c b a { z f e ڮ ڭ B j s æ å | s o p t h i n l k j e m f g ֡ ֢ | ~ ֤ ֣ } ڶ k j ڰ h ڳ l ڴ m ڱ g i ڵ ڲ گ E C H I F G D l k s m r o ` q a b p n t w u v M ¡ N } O ~ L P J ç x è o K p ~ } n o G q m ֦ o ֥ ڸ q ڷ p J x Q q p u p r K t R r q r s ֧ ڹ s L d u c y S s n x w v y u v ְ w t ֪ ֩ ֫ ֬ ֮ ֭ ֲ ֨ ֱ ֯ ڼ ھ ں ڻ ڿ ڽ t C F D E A B @ N Q O M P } ~ v z y w f g e x { | h @ { A | z ~ } U ¤ ¥ ¢ £ T { é y z t w u v f o x u G B | x ͡ z | ~ } { | ֹ z y } ~ { O ֺ ֳ ֵ ַ ָ ֶ ֻ ִ v w x N Q M L H O P J K I T X V S U R Y W j l i k F V E C D V G Z W ¦ [ ] \ X Y ê ~ } z } y q { | ~ r t s r ͣ ͢ ּ ֽ ־ ֿ i R S T A C B @ m H I _ ^ § ë š ɨ V r q p ͤ } | z { y A Z X @ W \ [ Y I H D G F ^ _ [ ] Z \ p E r q n o J ` ª ¨ © í ì H s ͥ ͦ @ ~ D ] ^ C B J K L a ` s K « ¬ u A E M v ͧ B C @ B D G E F C H A a P S G L F c J H b O N K M I R _ Q ] X N P U T W R Q S Y [ V O i \ b c e ` h d f g v j t x Q y w { z O N L P M u c a g ° e d ² j ± k h ® i b ¯ ­ f l ò ð ñ î ï ó x w y ţ Ţ X Y m ~ ͨ E F D G H I I O M K L N J V d T e U f a ^ ` _ k a | } W S X T V R U ³ z { A @ t ͩ L J K Z S Y R X V U T Q P W l h ] _ a e [ Y j ` d \ X W b Z ^ k i f g c r j x t x e u b w f v p c q s h g d l i m y n o k p y u r v l t s w q n z r m { o ~ _ Y i a ] d g \ e ` Z h c ^ b [ f n t ¹ w ´ µ o v q º · m s u ¸ r p ÷ ø ô õ ú ö ~ } ġ B @ B A l o j » Ģ C I u M ` [ _ ] ^ \ @ i j n o h k g m @ p z | } ù D O N b a B C A s m l n r q ~ y x û ý ü P e d c D o p ~ C A B { | } k z { ¼ ½ l ģ Q A R S @ B T f A @ q s ͪ C U h g C B D F G E t u E D p o m n q | ¿ ¾ ť Ť w v F ɩ ͫ v w w t v y u { z x x ͭ Ͱ ͬ | ͯ ͮ [ G H ] W Z c a I g L d \ Y I b D e V _ F K ` O M X J ^ N E f j l k i n H o m N E G H P L J M Q F O K I Q O J ߡ N K P M G L w u { s ߢ x r { } v ~ | ~ y x y } | t z L H M J K I A D C @ B t x z w v u s r y } ~ þ Ĥ E Ŧ C D R N { S P T U V O h p W P | R Q E ߣ R ͱ i Q r w q W T V S U X Y Z ߦ ߧ ߥ ߨ ߤ S J F I K H G ĥ F } } X [ A J K M N L ˢ ˣ { ˡ | z y } ~ ~ j Ͷ ͵ ͷ ͼ Ͳ ͹ Ϳ ʹ ͺ ; ͸ ͽ ͻ ͳ b \ d a q t ] k V ` c e Т w U С Y W R o ~ s v Х M f } ^ x Ф u y | m У { l p _ Z S X T g n ӥ [ z A Ө v ӣ } Ӳ Ӫ ~ ө x | ӵ ӭ Ӥ ӳ t Ӭ s ӫ r \ Ӧ z { ӡ u ӯ Ӯ Ӷ Ӵ Ӱ ӧ Ӣ w ӱ y U ^ ` e y ] h o u b i @ w r n j \ a Y f c s d z l k Z _ p v A [ g m x q t v l ` } ۧ ۪ h ۣ i w s t ] ۤ ۡ u ۬ p ۯ n z r ۭ k d o c a ۥ j ۨ ۩ ~ v f ^ ۢ ۫ e ۰ q m | x y g { b ۦ l ۮ _ u U ߵ ߿ ߪ ߲ ߶ ߱ ߫ ߹ ߸ ߼ ߾ ߰ ߴ ߻ ߺ ߬ ߭ ߷ ߳ ߯ ߮ ` X [ Y Z ] a U ^ W V T c \ b _ s t g f b v u ߩ _ c ] p a w Z X d n i O m ߽ [ R U { \ S Q N e ` h x | W k o T y L r V j P ^ Y l } z q M I @ C E A G D L F U O F J T Q D H B V S P W M K N S @ E R D A M O Q I P B R J G U H T K L V C N ~ ÿ ħ ĩ Ħ Ī Ĭ ĭ ī Ĩ J K I G H L E F G O h Ӹ ӷ @ B | { ~ X Z Y W Щ Ч Ц i k j Ш ӿ A F Ӽ ӽ C ӻ H Ӿ ӹ G D Ӻ E B L ץ K ר ׫ H F ~ ש ק פ ׬ ׭ ׯ װ } E ע ס ׮ G ף I D צ M J ת ۿ ۴ ۽ ۱ ۶ ۺ ۸ ۲ ۵ ۳ ۾ ۼ ۷ ۹ ۻ j e g h m i l f d k d z a k g e ` o \ h i _ ^ l b ] c n [ m j f Y ] Z a g \ p j _ k f m ^ ` n X l d c h [ b i e o Į į B E A C D Q O N @ P F M Z n Ъ G l Ы ױ N Ь Ю Э m I J N M K L P ײ U T ׸ R ׳ S ׿ ׻ ׽ ׷ ׾ O ׺ ׹ ׵ ׼ ״ ׶ Q t B A v @ n p r q s o u p | w y q u x { s t z r v r q w s t u x v İ I K H J Ũ R ŧ H I K J P n W V C F E D y { z ı T S [ Я o C A @ B D I G H } | } IJ L U ũ L q r а б p T R Q X P Y V S W U O _ Y ^ ` Z [ X ] \ D F E I C B @ G A H P M E J Q G O K N L F L x { N M } O K y | z ~ w J ~ ~ A O @ B C ķ ĵ ĸ Ĵ Ķ ij @ N M P Q A V [ Ū X W Z Y C B @ A @ M N g m R P D D Z a T S v b H V U W Q R F E ˤ \ [ I Y Z X G s t ] ^ h f c g e d J L Q S R U O K M T P N [ T S U H I J ĺ Ĺ R B S \ ū Ŭ E B j i \ ] в v u _ X W V _ b ` a e ^ f c d V L N K M T o w l k ` [ ^ Y l ] \ _ Z h o n p m r i k g j q s [ a Y b X ] c ` _ ^ W \ Z A C @ E B F D E A @ C B D R O S Q P T ļ ľ Ľ Ļ C E V D U a ŭ ` Ů ^ ] b c F _ \ Q P O p n ` U y x c a b m n C A E F L H J B I K D G b @ a c u w v { x t y z | g f d e M N I J K L H @ G F G H I X Y W V Z X Y W F d ů e H G d @ | G d A [ ˦ ˥ ж д | г ~ { } е z j g n i l h e k m f p z v ~ w | r o q } u x t y { s M e O g i N f j h G O ~ P E J C B M L K I N } D F H R C A S D B Q P O E U o R S Q T ˪ ˧ ˬ ˨ ˩ ˫ и м й л н п о к q p r з l V W T n S Y X k \ R [ P Z U m Q R n q i m l j p k h o Y H J V W U Q G Z T F I X K L M ] \ [ \ Z f Ű u t @ A s _ a ] ` o ^ p s U T S s u t r a ^ _ M ` [ \ J K ] L O P N R _ Q ^ Ŀ ] H I C ] q o V q B ^ x v z D y w C B @ C A m l j b q e o v n y u c i w h x z k r s w u t f r v t s d g p a W Y e Z \ f [ d b ^ c ` X g ] _ x z ~ | y { w v } R Z U g P O V e T q c d N X t y s o w u h b } W ~ x m k f A n { j z S v | r l Q p Y i D A C B @ @ C E E B A D U E K ` Y T c [ e U _ a W X ] b j g k ^ Z h j \ d f i S V s c q a l h r b e t y m p i d ` o k u g n z B f @ D A C E a f O h I d j N J K ` g M e L _ c b ^ i @ C ű m p l n o i j g k h Ų ų K M L N J D S R T _ U ^ V r u t h s r p q w D x v { E F } z y | { ~ { h [ \ M K I J F F N H L G n l m w x E G F P m l k ɪ X V Y W ˮ ˰ ˯ ˭ @ E F ~ | } I H K J G } ܣ ܢ | ~ ܡ j k i G H O I o A G L ܤ ܦ ܥ n o m l P J p t q u s y B ܨ ܧ s p r q ] ^ _ ` Q N K P S L R O M w v x ~ } z { | H I S n Q R o Ŵ ŵ q E G F W C t Q R D a S M ܩ ܫ ܪ u v X c b d V U T T A @ } { ~ | y @ z J K R p ŷ Ŷ O P H i C B q r W D X A L M T Q N ܬ z | w x { y g e [ f Y Z U [ Y X V Z W E J F I H G D B E C F @ A Q N O P r V U t s Ÿ j I ` X ܭ h G B u R S t s u H O ܮ ~ } i \ k j l a _ ^ ] ` \ K ^ ] _ N L M R K Q T S P O J H I C D X W U T Y v Ź w W v V w a Y P U ` W V L n q s r t p m o c f d c i h g b b a e d Z ^ [ ] \ Y _ b ` a @ X c M E F ` ^ ] c a \ Z [ _ b x ~ y [ Z } | Y { X z } ~ { Ż x | y z ź R S J v j k z l u e j m f d k N f d e \ ż b I h v w n q p o g h f e g O P G g i h Ž T U V K c x i J { r z y i S R Q ^ ] L | { } x v w s y t r u | j { z ~ j m l t o s q p n k C B D A u X W U T J K I H l o V m s q k v j r n u t ` _ ſ p ž Z \ _ [ ` Y W ] X ^ M Z \ [ y x w z s t ܯ } ~ o k p l m n z { ~ | v y } E F w Y Z [ M x O P N L } { | x ~ z w y a b d c i n d g k r e o s j c m l q p h b f N O a ] ^ ` _ b a | { x | } P Q G Q S R e c T t d H u r q L J K I \ f v w d } u ܰ x R e ~ ] g y ^ | { z M } f N ~ h i j T S g j i h s e t ȡ ȣ J J W Y [ _ ` c d g h k l o p s t w x { | \ M N O Q R S T } ~ B L M N I C H ] ^ A D G F H I @ @ A B C a U b F G D | z G _ T t c ` b j T e n @ v { m B { c r \ N s _ V K h j a c I k x L [ s Y N P s X ^ u ] A h g p N w Q p @ F \ K X [ i n | N y { p ~ C J | a ` x k L T t ~ } R I I n f o m e g b k ~ ] m Z F M ] u U f Z S x \ Ȥ p [ W U S @ J ` V O C ] r ` w diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_chars-x-x-big5.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_chars-x-x-big5.html.headers new file mode 100644 index 00000000000..b550e991dde --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_chars-x-x-big5.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=x-x-big5 diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_chars.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_chars.html new file mode 100755 index 00000000000..5d4e857e9b6 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_chars.html @@ -0,0 +1 @@ +big5 characters X P D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u [ V X L K E J K Ƶ ƶ Ʒ Ƹ ƹ ƺ ƻ Ƽ ƽ ƾ w x v A ơ Ƣ ƣ Ƥ ƥ Ʀ Ƨ ƨ Ʃ ƪ ƫ Ƭ ƭ Ʈ Ư ư Ʊ Ʋ Ƴ ƴ w x z { | } u t s r q ~ Z b c d e f g h i p o n m l k j v y @ B C q r m n u v y z i j E e f @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ ǡ Ǣ ǣ Ǥ ǥ Ǧ ǧ Ǩ ǩ Ǫ ǫ Ǭ ǭ Ǯ ǯ ǰ DZ Dz dz Ǵ ǵ Ƕ Ƿ Ǹ ǹ Ǻ ǻ Ǽ ǽ Ǿ ǿ t u v w x y z { | } ~ y U V P Q R T W S O h p z ^ f H e } d x l k B d J I L S ] a I Y e j M n E P ~ z K J V } C @ B C E V T W U F O M B A @ C X P c ˱ ƿ Y D d @ D [ G \ E G F A { A E ^ ] K ܱ ܲ F G H _ Q E ` F G ܳ H R T S J K L M I P j f Q a h N O H e g ɰ ɺ ɮ ɲ ɱ ɵ ɹ ɶ ɳ ɫ ɻ ɸ ɯ ɬ ɴ ɷ ɭ f B g D [ ` h d G ] ˽ C b ^ Z e E H @ F c A i \ _ a ˿ ˹ ˸ ˼ ˳ ˵ ˶ ˻ ˴ ˷ ˺ ˾ ˲ W V J I Q ] K Y P X T [ N W M U R Z O \ S L H Y [ c W \ b U Y R V g Q f X S O ] P N Z ` a [ ^ M _ d L T e ^ W _ U X Y V ] S R Q \ Z T V ܷ ܽ ܺ ܿ ܴ ܵ ܾ ܼ ܸ ܶ ܻ ܹ r g i v w u x _ l k I a S R J I K ^ Y Z \ [ ` o ] ^ J q K @ L N Ȣ T U A j ` _ U a V B ɼ } G M N ~ k h a @ L Z z B Y W X M N } b ɾ Z k F ɿ D E ɽ G C l m n P O S Q R c h d g f e b i k j l A B Z @ A B D C O \ [ H U V T W o p l k i j n m C D E y U c V ] ^ I q m c b P _ C l ` K J X o E Q d c b m n R e d r W g f L M s Y Z o D t u p p d e F F X h S e q O f j y t o n u s l z m i x w v k r q { p Y S Y U [ X N Q T P W Z O R V \ ~ { g | [ ] u p m ʥ } _ a ʤ h x t v \ m D v s d n o w l j k q ʡ ^ r ʣ f c z b ʦ e i ` ʢ y O P I K M L E A D I R C F H Q M S J G B @ N H K x t } r C O y E B w J | L s ~ { @ F G z v u D N D @ B C A C F B @ G ԡ E D A w ԧ | Ԣ v { z ԥ Ԩ s ԩ ~ B Ԧ Ԫ t Ԥ u x } y ԣ q r j u x q F n v { o f s m y z l r t h w g G i p _ U Q K T N P S H I L J O H M R G M G D G S T J B L R O F I H H C E K A k T O U N P @ E B A C D @ Q F { } ~ z | P ` V Q A Y @ X W Z m o n I } | _ ^ ] y ʩ ʨ w z \ ʧ [ x W T Z H I E F Ԭ ԫ | I H G k g Y n o b f d c e a ` } ʪ d v ʫ ` ʭ { ʮ ʬ ~ | ʯ Y [ Z @ X W V \ A U T Z g X ^ U Y [ ] W V Q R S \ P S R W N Q P T X G J O U I J Ժ V M H L Ա ԯ Խ Կ g Դ Լ Ծ Թ Բ ئ ԰ Է ԭ Ե Գ i Ի Զ K Ը Ԯ ء ت ة آ ؤ ب l أ إ } ز ر خ K ث ح ~ ذ د س ج ا n ] c _ f W \ U [ d Z ` e V ^ b h X a g Y Y K W V M R N Q \ [ o J P Z O L X M O J L N P I K S R r a b q c B [ h _ t i S Z ʰ B ` Y L B i ~ p g h ] { j [ q i j ʱ a C _ ` ^ Z a b M N O ش j ] k l o n q p m k ʶ ʹ ʸ ʵ ʳ ʴ ʻ ʷ ʲ ʺ g o O H p S D K f E d L P c Q J M r i T R n l I k G F j h q m e N o g c s b l p V v d f m q u r k n h j i t e \ b [ ` P U _ \ a Q [ T R c S W X Z Y ] ^ d @ C D B A @ ػ ظ ؽ B G C ض A D غ ط s ع ؾ ؼ E ؿ ص B @ C D @ F A A B E n z p v k y x | u t m { o r w q l s U a X W Z \ _ V T ] [ Y _ ^ c ^ ` b ` W V U X Q R Z S \ [ T Y T \ ] C l m n r s s U u t V ] e E G F } ^ p r y s v t u w ʼ ʽ W X v x z w { y f w } h g c _ ` b d a f e J I H G K F I K H J H I J ~ f g e d ] d _ o x u i g N M L L M p \ t y | K q ʾ ʿ N L r u Y ~ Z } x j h k i j ^ P Q O h i a K s w v z h b ] e c \ i l g ` f a d [ _ k ^ j Ϋ Τ Ϊ Σ Υ } { ά Ω y Χ Ψ Φ | z ΢ ~ Ρ έ o n l k n p o s q p ή r m l m q r S R T X A Z V ^ [ U C W B \ ] Y D @ Q R O O P S V N P U T C R D M Q e g k h c b l j j m d i k f a f ` e ^ h d i c _ g j b X r D E ` r q t { _ u t W v w x ί S y ] x | n m o γ ΰ α β δ t s v u b F a c ` U E V W T Z \ E [ Y X q o m p n l m k l n n z ~ } F X y z θ η ι ζ κ y u w w x x v ε G J K H g f d e I h Z [ \ ] _ a H G Y ` ^ p s r t q t u o s s q p r o f F G U @ A C { λ | F I } q r s p μ z z y i L j M L ] b u v t s t ν k J U Q { m C n l ^ v T L w v u ξ } | { O o r p N u q P t s a W a _ ` K d L c w x w u @ H I { x y ̯ ̢ ~ ̮ ̩ ̪ ̭ ̬ ̣ | ̥ ̰ ̦ ̨ { ̧ z ̫ a } ̤ ̡ ο ѡ ~ } | ~ v Ѥ Ѧ Ѩ S Ѭ ѣ x Q Ѯ R ѥ ѩ ѫ Ѫ ѭ ѧ k y Ѣ w l z U ^ d m | e ` V ~ T b e I c ] a { d Y b W X [ _ \ d f c Z } k o @ Q m D q e F S i l G H N s T J O C ^ U r A P ] p N M t E j B K M R g L P h \ p h l n k [ j _ Z @ q v X i m O f g A W Y V o } G F | E C D t z n { H y B z y ~ y | ~ x x v } w | { z ~ | y { } V g j i h a J b A t | ̱ ѯ u r ` a t v u I W ̲ Ѱ v Q ~ } ̾ ̷ ̳ ̺ ̼ ̿ ̻ ̴ ̸ ̽ ̶ ̹ ̵ Q A @ ѱ C B E Ѳ D Ѿ Ѵ f ѷ Ѻ } ѽ ѿ Ѹ ѵ Ѷ Ѽ ѻ ѳ g y u r զ w ա { j գ i բ s h x ե q t դ R o x n l ~ w | p m z v T S k d z j Y g w } k n | \ m l ~ U y i _ p h q f e c ] ѹ V ݷ W { y X o x ` [ a ^ p | ݱ ݶ ݪ l ݻ i z { b k ݤ n o ݥ ݲ ݸ j d ݣ } ݺ ݨ ݩ ~ ݴ ݫ ݵ ݭ e h f ݹ ݰ ݬ ݡ S ݯ m ݧ ݦ g c ݳ ݮ ݢ Q L K O b R T N P U J Z M Y X ^ \ ] Z k [ B E F D G l C N d M L K c e u r F G է v u x s w t q ݼ V H y ݽ z { r W H | s _ I ը } ~ ݾ Y X J I O ^ J @ P M c S K N Q L O R լ ի խ ժ ծ թ ٧ ٢ ٥ ٨ ٦ ٣ ١ ٤ y b ݿ v w u { x t z \ Z R [ S M P ` n K m Q R f P T ٩ | B A կ z a g P C G B E @ A A @ F D W C M N F X H S I V Q O J P D R U E L T G K M [ \ i ^ V L b J [ E e R A D Q a ` F X _ ` c Z K S f Y a m V X C j c ] @ l g I k P H d \ T ^ b G Z Y O _ U W h ] N M B ^ W U O D մ յ չ վ ս հ ձ ղ ճ պ | ռ շ ջ ն տ J E ٽ ٫ ٳ ٭ ٻ ٶ ٰ ٵ ٯ ٱ ٺ ٷ ٴ H G j ٬ ټ پ ٪ ٲ ٹ ٸ ٮ Q ո N ~ ٿ D J H ^ F X } _ B ] R G U d ] [ @ Z o Q a m I ^ K Y g D k a M C W h ` e S f E P L N ` _ n O b T c l j A V i b R \ A W B { Z E A H I D J @ G \ C F B c h i b f e g d _ Q N W V T O r P q S p X R M o L V U U h Y Z T X S W v V b Y d e p c e q d K j Y w B Z [ n f k \ e o f p f g h L l Z _ q g i j ` C H r h s i q j o B A C @ @ A A B @ k M [ ] a ~ I J ^ t k l D B r ɡ r ɤ ɣ D ɢ @ v E [ Y L Q S L M U b R O Q V Z X Z K x M \ T W E G ^ U N J Y V H I C O P [ ] P N S \ W R ] F T K X D j z q K b e B m o v h f g u G p n s J u y c I M O @ l k } r u x | A F ~ w i _ d ` N { t a L | ϡ Ϥ w ϧ Ϫ Ϭ t v { I ϥ ϭ { s d ~ Ϣ x z } } p Ϩ ϫ z m x ϩ o ^ H | w v n ϣ y q r Ϧ y ~ L C U [ W J M F G J V _ E @ N B O Y D h H H E f Z g a S b \ e c I T A G ` F Q C i P K K X ] e R P G [ U G D g d X c N O I E @ Q Y B D ^ F \ S H F J h b _ ] f a R ` A E W V T L K C M A Z I M D J C U V H D B S K Q ~ W A G E B C O L T @ F G F E P N R @ a ` F _ I J h ^ C R H K c j b W i U L Y e h T M P Z d G Q [ N E S g V l X f O D ] d \ } n w m q s u S } o u ~ | | v t z w x z ~ p y x { t s r { P y v D N M Y K O F R T C ^ W [ ` U I L H _ a V \ J E A Z B @ X Q P ] G I @ A H C O B D F E D J G F E B @ A N C Q S Y W Z R V U [ T X P q o p m n s r x _ e y \ v s g w t ^ a b c f ] u d h ` ] j ` k h _ \ ^ b e d g [ i c f i a x y W e l A ^ _ b _ ` a X Z U R T c V S P W Q Y ϯ ϳ ϶ ϲ ϱ ϴ ϵ Ϯ ϰ w x y P L n v { Q l r k u q M O z j m s t | p N m N P L X J W i H [ R l S V Z O T j k Y M I [ Q U K H I e O Y b X L ` ^ _ J c \ Z K ] a M d p w y ޡ k z ޢ } m ~ l x ޣ q | o v r n u N { s t g d p j l f n m k q h o c e b r i J Q U S K I L M H U V G V Q O L P N R R M N O P K T S W X T \ b ` ^ a ] _ w t u v l m z k j i { l j k A D y G R n b H Ϸ } ϸ Ϲ f P ޤ K L | g B e d c ` [ Ϻ Ͻ ϻ ϼ Ң ҡ ~ S ] ^ o \ _ R p Q Q k j h i l ަ ޥ ީ ި ާ s t Y Z r } q p n o l ɥ ɦ C D f b a e g c f g d _ Ͼ ] d e a b \ ^ c ` Ͽ Ҩ ҥ ҧ X W U Ҥ ҩ T V Ҧ g ң Ҫ b f e n y h c m t s a d u r q ` i p w T v s X V R S u Y o q t r U x S ޭ ެ ު ޮ ޫ ް ޯ v u ~ } { z w x y | _ \ ] W [ a ` ^ d e c y x ~ á m n m z Y v j ɧ E l j k h h i m k g j f i [ l h ү ^ Z Ҵ ҫ Ҷ Ү ҹ Һ Ҭ Ҹ ҵ ҳ ҷ _ ] ұ t ҭ Ұ һ Ҳ ^ Z \ F x m k h l s t p { u r o y n w z q y [ x w v | i ~ E ڡ ` ڧ ک ڢ Z ڦ ڥ [ a b ڨ X } { ڣ z _ | ڤ ڪ Y ^ \ ] l W ޷ ޻ ޱ ޼ s _ ޲ ޳ ޽ ޺ ޸ ޹ ޵ ޴ ޾ ޶ q w y u @ b A | i f e g f Z c X \ [ d h Y q m z j h k n l g B E u @ o F â D { A C G v t ã s n n Ҽ ҽ } ޿ ] ä { o ` Ҿ ҿ ~ ګ i ^ _ r o p q I H | w c d F j i ڬ k l n m r p q ` d c b a { z f e ڮ ڭ B j s æ å | s o p t h i n l k j e m f g ֡ ֢ | ~ ֤ ֣ } ڶ k j ڰ h ڳ l ڴ m ڱ g i ڵ ڲ گ E C H I F G D l k s m r o ` q a b p n t w u v M ¡ N } O ~ L P J ç x è o K p ~ } n o G q m ֦ o ֥ ڸ q ڷ p J x Q q p u p r K t R r q r s ֧ ڹ s L d u c y S s n x w v y u v ְ w t ֪ ֩ ֫ ֬ ֮ ֭ ֲ ֨ ֱ ֯ ڼ ھ ں ڻ ڿ ڽ t C F D E A B @ N Q O M P } ~ v z y w f g e x { | h @ { A | z ~ } U ¤ ¥ ¢ £ T { é y z t w u v f o x u G B | x ͡ z | ~ } { | ֹ z y } ~ { O ֺ ֳ ֵ ַ ָ ֶ ֻ ִ v w x N Q M L H O P J K I T X V S U R Y W j l i k F V E C D V G Z W ¦ [ ] \ X Y ê ~ } z } y q { | ~ r t s r ͣ ͢ ּ ֽ ־ ֿ i R S T A C B @ m H I _ ^ § ë š ɨ V r q p ͤ } | z { y A Z X @ W \ [ Y I H D G F ^ _ [ ] Z \ p E r q n o J ` ª ¨ © í ì H s ͥ ͦ @ ~ D ] ^ C B J K L a ` s K « ¬ u A E M v ͧ B C @ B D G E F C H A a P S G L F c J H b O N K M I R _ Q ] X N P U T W R Q S Y [ V O i \ b c e ` h d f g v j t x Q y w { z O N L P M u c a g ° e d ² j ± k h ® i b ¯ ­ f l ò ð ñ î ï ó x w y ţ Ţ X Y m ~ ͨ E F D G H I I O M K L N J V d T e U f a ^ ` _ k a | } W S X T V R U ³ z { A @ t ͩ L J K Z S Y R X V U T Q P W l h ] _ a e [ Y j ` d \ X W b Z ^ k i f g c r j x t x e u b w f v p c q s h g d l i m y n o k p y u r v l t s w q n z r m { o ~ _ Y i a ] d g \ e ` Z h c ^ b [ f n t ¹ w ´ µ o v q º · m s u ¸ r p ÷ ø ô õ ú ö ~ } ġ B @ B A l o j » Ģ C I u M ` [ _ ] ^ \ @ i j n o h k g m @ p z | } ù D O N b a B C A s m l n r q ~ y x û ý ü P e d c D o p ~ C A B { | } k z { ¼ ½ l ģ Q A R S @ B T f A @ q s ͪ C U h g C B D F G E t u E D p o m n q | ¿ ¾ ť Ť w v F ɩ ͫ v w w t v y u { z x x ͭ Ͱ ͬ | ͯ ͮ [ G H ] W Z c a I g L d \ Y I b D e V _ F K ` O M X J ^ N E f j l k i n H o m N E G H P L J M Q F O K I Q O J ߡ N K P M G L w u { s ߢ x r { } v ~ | ~ y x y } | t z L H M J K I A D C @ B t x z w v u s r y } ~ þ Ĥ E Ŧ C D R N { S P T U V O h p W P | R Q E ߣ R ͱ i Q r w q W T V S U X Y Z ߦ ߧ ߥ ߨ ߤ S J F I K H G ĥ F } } X [ A J K M N L ˢ ˣ { ˡ | z y } ~ ~ j Ͷ ͵ ͷ ͼ Ͳ ͹ Ϳ ʹ ͺ ; ͸ ͽ ͻ ͳ b \ d a q t ] k V ` c e Т w U С Y W R o ~ s v Х M f } ^ x Ф u y | m У { l p _ Z S X T g n ӥ [ z A Ө v ӣ } Ӳ Ӫ ~ ө x | ӵ ӭ Ӥ ӳ t Ӭ s ӫ r \ Ӧ z { ӡ u ӯ Ӯ Ӷ Ӵ Ӱ ӧ Ӣ w ӱ y U ^ ` e y ] h o u b i @ w r n j \ a Y f c s d z l k Z _ p v A [ g m x q t v l ` } ۧ ۪ h ۣ i w s t ] ۤ ۡ u ۬ p ۯ n z r ۭ k d o c a ۥ j ۨ ۩ ~ v f ^ ۢ ۫ e ۰ q m | x y g { b ۦ l ۮ _ u U ߵ ߿ ߪ ߲ ߶ ߱ ߫ ߹ ߸ ߼ ߾ ߰ ߴ ߻ ߺ ߬ ߭ ߷ ߳ ߯ ߮ ` X [ Y Z ] a U ^ W V T c \ b _ s t g f b v u ߩ _ c ] p a w Z X d n i O m ߽ [ R U { \ S Q N e ` h x | W k o T y L r V j P ^ Y l } z q M I @ C E A G D L F U O F J T Q D H B V S P W M K N S @ E R D A M O Q I P B R J G U H T K L V C N ~ ÿ ħ ĩ Ħ Ī Ĭ ĭ ī Ĩ J K I G H L E F G O h Ӹ ӷ @ B | { ~ X Z Y W Щ Ч Ц i k j Ш ӿ A F Ӽ ӽ C ӻ H Ӿ ӹ G D Ӻ E B L ץ K ר ׫ H F ~ ש ק פ ׬ ׭ ׯ װ } E ע ס ׮ G ף I D צ M J ת ۿ ۴ ۽ ۱ ۶ ۺ ۸ ۲ ۵ ۳ ۾ ۼ ۷ ۹ ۻ j e g h m i l f d k d z a k g e ` o \ h i _ ^ l b ] c n [ m j f Y ] Z a g \ p j _ k f m ^ ` n X l d c h [ b i e o Į į B E A C D Q O N @ P F M Z n Ъ G l Ы ױ N Ь Ю Э m I J N M K L P ײ U T ׸ R ׳ S ׿ ׻ ׽ ׷ ׾ O ׺ ׹ ׵ ׼ ״ ׶ Q t B A v @ n p r q s o u p | w y q u x { s t z r v r q w s t u x v İ I K H J Ũ R ŧ H I K J P n W V C F E D y { z ı T S [ Я o C A @ B D I G H } | } IJ L U ũ L q r а б p T R Q X P Y V S W U O _ Y ^ ` Z [ X ] \ D F E I C B @ G A H P M E J Q G O K N L F L x { N M } O K y | z ~ w J ~ ~ A O @ B C ķ ĵ ĸ Ĵ Ķ ij @ N M P Q A V [ Ū X W Z Y C B @ A @ M N g m R P D D Z a T S v b H V U W Q R F E ˤ \ [ I Y Z X G s t ] ^ h f c g e d J L Q S R U O K M T P N [ T S U H I J ĺ Ĺ R B S \ ū Ŭ E B j i \ ] в v u _ X W V _ b ` a e ^ f c d V L N K M T o w l k ` [ ^ Y l ] \ _ Z h o n p m r i k g j q s [ a Y b X ] c ` _ ^ W \ Z A C @ E B F D E A @ C B D R O S Q P T ļ ľ Ľ Ļ C E V D U a ŭ ` Ů ^ ] b c F _ \ Q P O p n ` U y x c a b m n C A E F L H J B I K D G b @ a c u w v { x t y z | g f d e M N I J K L H @ G F G H I X Y W V Z X Y W F d ů e H G d @ | G d A [ ˦ ˥ ж д | г ~ { } е z j g n i l h e k m f p z v ~ w | r o q } u x t y { s M e O g i N f j h G O ~ P E J C B M L K I N } D F H R C A S D B Q P O E U o R S Q T ˪ ˧ ˬ ˨ ˩ ˫ и м й л н п о к q p r з l V W T n S Y X k \ R [ P Z U m Q R n q i m l j p k h o Y H J V W U Q G Z T F I X K L M ] \ [ \ Z f Ű u t @ A s _ a ] ` o ^ p s U T S s u t r a ^ _ M ` [ \ J K ] L O P N R _ Q ^ Ŀ ] H I C ] q o V q B ^ x v z D y w C B @ C A m l j b q e o v n y u c i w h x z k r s w u t f r v t s d g p a W Y e Z \ f [ d b ^ c ` X g ] _ x z ~ | y { w v } R Z U g P O V e T q c d N X t y s o w u h b } W ~ x m k f A n { j z S v | r l Q p Y i D A C B @ @ C E E B A D U E K ` Y T c [ e U _ a W X ] b j g k ^ Z h j \ d f i S V s c q a l h r b e t y m p i d ` o k u g n z B f @ D A C E a f O h I d j N J K ` g M e L _ c b ^ i @ C ű m p l n o i j g k h Ų ų K M L N J D S R T _ U ^ V r u t h s r p q w D x v { E F } z y | { ~ { h [ \ M K I J F F N H L G n l m w x E G F P m l k ɪ X V Y W ˮ ˰ ˯ ˭ @ E F ~ | } I H K J G } ܣ ܢ | ~ ܡ j k i G H O I o A G L ܤ ܦ ܥ n o m l P J p t q u s y B ܨ ܧ s p r q ] ^ _ ` Q N K P S L R O M w v x ~ } z { | H I S n Q R o Ŵ ŵ q E G F W C t Q R D a S M ܩ ܫ ܪ u v X c b d V U T T A @ } { ~ | y @ z J K R p ŷ Ŷ O P H i C B q r W D X A L M T Q N ܬ z | w x { y g e [ f Y Z U [ Y X V Z W E J F I H G D B E C F @ A Q N O P r V U t s Ÿ j I ` X ܭ h G B u R S t s u H O ܮ ~ } i \ k j l a _ ^ ] ` \ K ^ ] _ N L M R K Q T S P O J H I C D X W U T Y v Ź w W v V w a Y P U ` W V L n q s r t p m o c f d c i h g b b a e d Z ^ [ ] \ Y _ b ` a @ X c M E F ` ^ ] c a \ Z [ _ b x ~ y [ Z } | Y { X z } ~ { Ż x | y z ź R S J v j k z l u e j m f d k N f d e \ ż b I h v w n q p o g h f e g O P G g i h Ž T U V K c x i J { r z y i S R Q ^ ] L | { } x v w s y t r u | j { z ~ j m l t o s q p n k C B D A u X W U T J K I H l o V m s q k v j r n u t ` _ ſ p ž Z \ _ [ ` Y W ] X ^ M Z \ [ y x w z s t ܯ } ~ o k p l m n z { ~ | v y } E F w Y Z [ M x O P N L } { | x ~ z w y a b d c i n d g k r e o s j c m l q p h b f N O a ] ^ ` _ b a | { x | } P Q G Q S R e c T t d H u r q L J K I \ f v w d } u ܰ x R e ~ ] g y ^ | { z M } f N ~ h i j T S g j i h s e t ȡ ȣ J J W Y [ _ ` c d g h k l o p s t w x { | \ M N O Q R S T } ~ B L M N I C H ] ^ A D G F H I @ @ A B C a U b F G D | z G _ T t c ` b j T e n @ v { m B { c r \ N s _ V K h j a c I k x L [ s Y N P s X ^ u ] A h g p N w Q p @ F \ K X [ i n | N y { p ~ C J | a ` x k L T t ~ } R I I n f o m e g b k ~ ] m Z F M ] u U f Z S x \ Ȥ p [ W U S @ J ` V O C ] r ` w diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_chars.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_chars.html.headers new file mode 100644 index 00000000000..49773a44f8d --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_chars.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=big5 diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_chars_extra.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_chars_extra.html new file mode 100755 index 00000000000..5ea8e5740da --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_chars_extra.html @@ -0,0 +1 @@ +big5 charactersY W ] [ f a _ j h o m s q w u { y V g Z l \ n p ^ t x X i r ` v z | } ~ k c e @ A B C D F I J M O P Q R T U w Y ] S n K F ~ h h j \ p E o \ E X V M [ Y W E S Q { ` K K d i g h z f R m n o p ` t t x Z H } } G Q x k o ~ y { D K R V I r k P D n c S y j ] c i p d o f a ] ~ i b c G u r Z m ] M W J ~ D @ F N s H K U N _ Y ` t U D V Y [ C g v Q s @ O z d n p S ^ \ ] d b d L T | U z v p T Q D C G X Y B ] E y L L M z W R g I d U | M H I P G U X A Z \ \ ` E X c I k n O F u y p x J o j _ A O N U y W Y s I [ X F V x { O r F W ~ o k g s N O x n o P f S p n l c @ s q h Q R Z R S U [ h T O o U V q L h } W X a z Y Z u V y G Z ] Q y X W A N j F H S ~ C R _ j b ` ^ l ~ T [ e s r } o A J B } e N T { w } ~ x \ ] ^ h _ ` L R t w T U ~ B Q \ L k x O q e [ P @ M r o A r w x r K u g T a H g b c s k m ] L D d M h X s H t u x ` a b @ Q e f T u i O N e z { j S Y a b k z l p Q | n f z k h q a [ @ M ~ r n t q P y x u v t w y y v Z z E u F w { | [ | L J K M [ M x E V C g ~ q d v Y r ~ R u Y } G P h } i V @ J j ~ F L l X ^ [ ^ p e c v B s O k G Z D A J M G E D g G p p o l ^ T F c p Q C Z ~ W Q I v S b I v _ U x V a W f i I L e u e J S \ s d N e Z m k n x z ] D y ^ j M m { v x q \ D Y \ w k O x n L P F Y h r A B D c j I L M s G P O I Q R L V M W G X \ S V O ^ j d Z ] P Q b R h a Y i ] f n d o S T p a r k @ { W _ s b X u r Z y x ~ z \ | } B v g B } U ` b a c v { p n o p q r s t u d e N h i k l m ] q e r \ f t v w y \ _ c g | } ~ [ a k l J v H R w A I T h J B Q F x S o c V W w X H n e b g ~ f n E ` b L _ m q i m r B w @ \ { v a p h ~ P V y I _ C a ^ | j | E R ` ] X y X | E K L z { H N d H @ Z J \ H I J W L M B x | } ~ ] Z P O T C E } ` [ y b U e h l j m h n q J p c q I [ P s u c w M x r @ z J K @ [ A B C Y D Q v E t E L z F y l X f G I H J d C j H K M N O Q N C R S t T P V W Y R f k [ f D F Q P ] z \ | ^ v t W ^ B b i D C A ` I J K d f g i j R M f { k l g l m j l w o U R S U ] q m s T q V m W j W _ ] [ \ ^ \ W e r ` ^ a ` d A i h t u m ` g v w x p o q c g z V ~ P ^ } H s z { w s k } T p m A J A i C m t H diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_chars_extra.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_chars_extra.html.headers new file mode 100644 index 00000000000..49773a44f8d --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_chars_extra.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=big5 diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_errors.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_errors.html new file mode 100755 index 00000000000..4affa9bf26d --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_errors.html @@ -0,0 +1,8 @@ + + + + +Big5 characters + + 1 + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_errors.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_errors.html.headers new file mode 100644 index 00000000000..49773a44f8d --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_errors.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=big5 diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_index.js b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_index.js new file mode 100644 index 00000000000..9ab1182ad72 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-tchinese/big5/big5_index.js @@ -0,0 +1,3 @@ +// index is Big5 index pointer, value is Unicode codepoint (dec) +// this is copy-pasted from the json version of the Big5 index belonging to the Encoding spec +var big5 = [null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,17392,19506,17923,17830,17784,160359,19831,17843,162993,19682,163013,15253,18230,18244,19527,19520,148159,144919,160594,159371,159954,19543,172881,18255,17882,19589,162924,19719,19108,18081,158499,29221,154196,137827,146950,147297,26189,22267,null,32149,22813,166841,15860,38708,162799,23515,138590,23204,13861,171696,23249,23479,23804,26478,34195,170309,29793,29853,14453,138579,145054,155681,16108,153822,15093,31484,40855,147809,166157,143850,133770,143966,17162,33924,40854,37935,18736,34323,22678,38730,37400,31184,31282,26208,27177,34973,29772,31685,26498,31276,21071,36934,13542,29636,155065,29894,40903,22451,18735,21580,16689,145038,22552,31346,162661,35727,18094,159368,16769,155033,31662,140476,40904,140481,140489,140492,40905,34052,144827,16564,40906,17633,175615,25281,28782,40907,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,12736,12737,12738,12739,12740,131340,12741,131281,131277,12742,12743,131275,139240,12744,131274,12745,12746,12747,12748,131342,12749,12750,256,193,461,192,274,201,282,200,332,211,465,210,null,7870,null,7872,202,257,225,462,224,593,275,233,283,232,299,237,464,236,333,243,466,242,363,250,468,249,470,472,474,476,252,null,7871,null,7873,234,609,9178,9179,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,172969,135493,null,25866,null,null,20029,28381,40270,37343,null,null,161589,25745,20250,20264,20392,20822,20852,20892,20964,21153,21160,21307,21326,21457,21464,22242,22768,22788,22791,22834,22836,23398,23454,23455,23706,24198,24635,25993,26622,26628,26725,27982,28860,30005,32420,32428,32442,32455,32463,32479,32518,32567,33402,33487,33647,35270,35774,35810,36710,36711,36718,29713,31996,32205,26950,31433,21031,null,null,null,null,37260,30904,37214,32956,null,36107,33014,133607,null,null,32927,40647,19661,40393,40460,19518,171510,159758,40458,172339,13761,null,28314,33342,29977,null,18705,39532,39567,40857,31111,164972,138698,132560,142054,20004,20097,20096,20103,20159,20203,20279,13388,20413,15944,20483,20616,13437,13459,13477,20870,22789,20955,20988,20997,20105,21113,21136,21287,13767,21417,13649,21424,13651,21442,21539,13677,13682,13953,21651,21667,21684,21689,21712,21743,21784,21795,21800,13720,21823,13733,13759,21975,13765,163204,21797,null,134210,134421,151851,21904,142534,14828,131905,36422,150968,169189,16467,164030,30586,142392,14900,18389,164189,158194,151018,25821,134524,135092,134357,135412,25741,36478,134806,134155,135012,142505,164438,148691,null,134470,170573,164073,18420,151207,142530,39602,14951,169460,16365,13574,152263,169940,161992,142660,40302,38933,null,17369,155813,25780,21731,142668,142282,135287,14843,135279,157402,157462,162208,25834,151634,134211,36456,139681,166732,132913,null,18443,131497,16378,22643,142733,null,148936,132348,155799,134988,134550,21881,16571,17338,null,19124,141926,135325,33194,39157,134556,25465,14846,141173,36288,22177,25724,15939,null,173569,134665,142031,142537,null,135368,145858,14738,14854,164507,13688,155209,139463,22098,134961,142514,169760,13500,27709,151099,null,null,161140,142987,139784,173659,167117,134778,134196,157724,32659,135375,141315,141625,13819,152035,134796,135053,134826,16275,134960,134471,135503,134732,null,134827,134057,134472,135360,135485,16377,140950,25650,135085,144372,161337,142286,134526,134527,142417,142421,14872,134808,135367,134958,173618,158544,167122,167321,167114,38314,21708,33476,21945,null,171715,39974,39606,161630,142830,28992,33133,33004,23580,157042,33076,14231,21343,164029,37302,134906,134671,134775,134907,13789,151019,13833,134358,22191,141237,135369,134672,134776,135288,135496,164359,136277,134777,151120,142756,23124,135197,135198,135413,135414,22428,134673,161428,164557,135093,134779,151934,14083,135094,135552,152280,172733,149978,137274,147831,164476,22681,21096,13850,153405,31666,23400,18432,19244,40743,18919,39967,39821,154484,143677,22011,13810,22153,20008,22786,138177,194680,38737,131206,20059,20155,13630,23587,24401,24516,14586,25164,25909,27514,27701,27706,28780,29227,20012,29357,149737,32594,31035,31993,32595,156266,13505,null,156491,32770,32896,157202,158033,21341,34916,35265,161970,35744,36125,38021,38264,38271,38376,167439,38886,39029,39118,39134,39267,170000,40060,40479,40644,27503,63751,20023,131207,38429,25143,38050,null,20539,28158,171123,40870,15817,34959,147790,28791,23797,19232,152013,13657,154928,24866,166450,36775,37366,29073,26393,29626,144001,172295,15499,137600,19216,30948,29698,20910,165647,16393,27235,172730,16931,34319,133743,31274,170311,166634,38741,28749,21284,139390,37876,30425,166371,40871,30685,20131,20464,20668,20015,20247,40872,21556,32139,22674,22736,138678,24210,24217,24514,141074,25995,144377,26905,27203,146531,27903,null,29184,148741,29580,16091,150035,23317,29881,35715,154788,153237,31379,31724,31939,32364,33528,34199,40873,34960,40874,36537,40875,36815,34143,39392,37409,40876,167353,136255,16497,17058,23066,null,null,null,39016,26475,17014,22333,null,34262,149883,33471,160013,19585,159092,23931,158485,159678,40877,40878,23446,40879,26343,32347,28247,31178,15752,17603,143958,141206,17306,17718,null,23765,146202,35577,23672,15634,144721,23928,40882,29015,17752,147692,138787,19575,14712,13386,131492,158785,35532,20404,131641,22975,33132,38998,170234,24379,134047,null,139713,166253,16642,18107,168057,16135,40883,172469,16632,14294,18167,158790,16764,165554,160767,17773,14548,152730,17761,17691,19849,19579,19830,17898,16328,150287,13921,17630,17597,16877,23870,23880,23894,15868,14351,23972,23993,14368,14392,24130,24253,24357,24451,14600,14612,14655,14669,24791,24893,23781,14729,25015,25017,25039,14776,25132,25232,25317,25368,14840,22193,14851,25570,25595,25607,25690,14923,25792,23829,22049,40863,14999,25990,15037,26111,26195,15090,26258,15138,26390,15170,26532,26624,15192,26698,26756,15218,15217,15227,26889,26947,29276,26980,27039,27013,15292,27094,15325,27237,27252,27249,27266,15340,27289,15346,27307,27317,27348,27382,27521,27585,27626,27765,27818,15563,27906,27910,27942,28033,15599,28068,28081,28181,28184,28201,28294,166336,28347,28386,28378,40831,28392,28393,28452,28468,15686,147265,28545,28606,15722,15733,29111,23705,15754,28716,15761,28752,28756,28783,28799,28809,131877,17345,13809,134872,147159,22462,159443,28990,153568,13902,27042,166889,23412,31305,153825,169177,31333,31357,154028,31419,31408,31426,31427,29137,156813,16842,31450,31453,31466,16879,21682,154625,31499,31573,31529,152334,154878,31650,31599,33692,154548,158847,31696,33825,31634,31672,154912,15789,154725,33938,31738,31750,31797,154817,31812,31875,149634,31910,26237,148856,31945,31943,31974,31860,31987,31989,31950,32359,17693,159300,32093,159446,29837,32137,32171,28981,32179,32210,147543,155689,32228,15635,32245,137209,32229,164717,32285,155937,155994,32366,32402,17195,37996,32295,32576,32577,32583,31030,156368,39393,32663,156497,32675,136801,131176,17756,145254,17667,164666,32762,156809,32773,32776,32797,32808,32815,172167,158915,32827,32828,32865,141076,18825,157222,146915,157416,26405,32935,166472,33031,33050,22704,141046,27775,156824,151480,25831,136330,33304,137310,27219,150117,150165,17530,33321,133901,158290,146814,20473,136445,34018,33634,158474,149927,144688,137075,146936,33450,26907,194964,16859,34123,33488,33562,134678,137140,14017,143741,144730,33403,33506,33560,147083,159139,158469,158615,144846,15807,33565,21996,33669,17675,159141,33708,33729,33747,13438,159444,27223,34138,13462,159298,143087,33880,154596,33905,15827,17636,27303,33866,146613,31064,33960,158614,159351,159299,34014,33807,33681,17568,33939,34020,154769,16960,154816,17731,34100,23282,159385,17703,34163,17686,26559,34326,165413,165435,34241,159880,34306,136578,159949,194994,17770,34344,13896,137378,21495,160666,34430,34673,172280,34798,142375,34737,34778,34831,22113,34412,26710,17935,34885,34886,161248,146873,161252,34910,34972,18011,34996,34997,25537,35013,30583,161551,35207,35210,35238,35241,35239,35260,166437,35303,162084,162493,35484,30611,37374,35472,162393,31465,162618,147343,18195,162616,29052,35596,35615,152624,152933,35647,35660,35661,35497,150138,35728,35739,35503,136927,17941,34895,35995,163156,163215,195028,14117,163155,36054,163224,163261,36114,36099,137488,36059,28764,36113,150729,16080,36215,36265,163842,135188,149898,15228,164284,160012,31463,36525,36534,36547,37588,36633,36653,164709,164882,36773,37635,172703,133712,36787,18730,166366,165181,146875,24312,143970,36857,172052,165564,165121,140069,14720,159447,36919,165180,162494,36961,165228,165387,37032,165651,37060,165606,37038,37117,37223,15088,37289,37316,31916,166195,138889,37390,27807,37441,37474,153017,37561,166598,146587,166668,153051,134449,37676,37739,166625,166891,28815,23235,166626,166629,18789,37444,166892,166969,166911,37747,37979,36540,38277,38310,37926,38304,28662,17081,140922,165592,135804,146990,18911,27676,38523,38550,16748,38563,159445,25050,38582,30965,166624,38589,21452,18849,158904,131700,156688,168111,168165,150225,137493,144138,38705,34370,38710,18959,17725,17797,150249,28789,23361,38683,38748,168405,38743,23370,168427,38751,37925,20688,143543,143548,38793,38815,38833,38846,38848,38866,38880,152684,38894,29724,169011,38911,38901,168989,162170,19153,38964,38963,38987,39014,15118,160117,15697,132656,147804,153350,39114,39095,39112,39111,19199,159015,136915,21936,39137,39142,39148,37752,39225,150057,19314,170071,170245,39413,39436,39483,39440,39512,153381,14020,168113,170965,39648,39650,170757,39668,19470,39700,39725,165376,20532,39732,158120,14531,143485,39760,39744,171326,23109,137315,39822,148043,39938,39935,39948,171624,40404,171959,172434,172459,172257,172323,172511,40318,40323,172340,40462,26760,40388,139611,172435,172576,137531,172595,40249,172217,172724,40592,40597,40606,40610,19764,40618,40623,148324,40641,15200,14821,15645,20274,14270,166955,40706,40712,19350,37924,159138,40727,40726,40761,22175,22154,40773,39352,168075,38898,33919,40802,40809,31452,40846,29206,19390,149877,149947,29047,150008,148296,150097,29598,166874,137466,31135,166270,167478,37737,37875,166468,37612,37761,37835,166252,148665,29207,16107,30578,31299,28880,148595,148472,29054,137199,28835,137406,144793,16071,137349,152623,137208,14114,136955,137273,14049,137076,137425,155467,14115,136896,22363,150053,136190,135848,136134,136374,34051,145062,34051,33877,149908,160101,146993,152924,147195,159826,17652,145134,170397,159526,26617,14131,15381,15847,22636,137506,26640,16471,145215,147681,147595,147727,158753,21707,22174,157361,22162,135135,134056,134669,37830,166675,37788,20216,20779,14361,148534,20156,132197,131967,20299,20362,153169,23144,131499,132043,14745,131850,132116,13365,20265,131776,167603,131701,35546,131596,20120,20685,20749,20386,20227,150030,147082,20290,20526,20588,20609,20428,20453,20568,20732,20825,20827,20829,20830,28278,144789,147001,147135,28018,137348,147081,20904,20931,132576,17629,132259,132242,132241,36218,166556,132878,21081,21156,133235,21217,37742,18042,29068,148364,134176,149932,135396,27089,134685,29817,16094,29849,29716,29782,29592,19342,150204,147597,21456,13700,29199,147657,21940,131909,21709,134086,22301,37469,38644,37734,22493,22413,22399,13886,22731,23193,166470,136954,137071,136976,23084,22968,37519,23166,23247,23058,153926,137715,137313,148117,14069,27909,29763,23073,155267,23169,166871,132115,37856,29836,135939,28933,18802,37896,166395,37821,14240,23582,23710,24158,24136,137622,137596,146158,24269,23375,137475,137476,14081,137376,14045,136958,14035,33066,166471,138682,144498,166312,24332,24334,137511,137131,23147,137019,23364,34324,161277,34912,24702,141408,140843,24539,16056,140719,140734,168072,159603,25024,131134,131142,140827,24985,24984,24693,142491,142599,149204,168269,25713,149093,142186,14889,142114,144464,170218,142968,25399,173147,25782,25393,25553,149987,142695,25252,142497,25659,25963,26994,15348,143502,144045,149897,144043,21773,144096,137433,169023,26318,144009,143795,15072,16784,152964,166690,152975,136956,152923,152613,30958,143619,137258,143924,13412,143887,143746,148169,26254,159012,26219,19347,26160,161904,138731,26211,144082,144097,26142,153714,14545,145466,145340,15257,145314,144382,29904,15254,26511,149034,26806,26654,15300,27326,14435,145365,148615,27187,27218,27337,27397,137490,25873,26776,27212,15319,27258,27479,147392,146586,37792,37618,166890,166603,37513,163870,166364,37991,28069,28427,149996,28007,147327,15759,28164,147516,23101,28170,22599,27940,30786,28987,148250,148086,28913,29264,29319,29332,149391,149285,20857,150180,132587,29818,147192,144991,150090,149783,155617,16134,16049,150239,166947,147253,24743,16115,29900,29756,37767,29751,17567,159210,17745,30083,16227,150745,150790,16216,30037,30323,173510,15129,29800,166604,149931,149902,15099,15821,150094,16127,149957,149747,37370,22322,37698,166627,137316,20703,152097,152039,30584,143922,30478,30479,30587,149143,145281,14942,149744,29752,29851,16063,150202,150215,16584,150166,156078,37639,152961,30750,30861,30856,30930,29648,31065,161601,153315,16654,31131,33942,31141,27181,147194,31290,31220,16750,136934,16690,37429,31217,134476,149900,131737,146874,137070,13719,21867,13680,13994,131540,134157,31458,23129,141045,154287,154268,23053,131675,30960,23082,154566,31486,16889,31837,31853,16913,154547,155324,155302,31949,150009,137136,31886,31868,31918,27314,32220,32263,32211,32590,156257,155996,162632,32151,155266,17002,158581,133398,26582,131150,144847,22468,156690,156664,149858,32733,31527,133164,154345,154947,31500,155150,39398,34373,39523,27164,144447,14818,150007,157101,39455,157088,33920,160039,158929,17642,33079,17410,32966,33033,33090,157620,39107,158274,33378,33381,158289,33875,159143,34320,160283,23174,16767,137280,23339,137377,23268,137432,34464,195004,146831,34861,160802,23042,34926,20293,34951,35007,35046,35173,35149,153219,35156,161669,161668,166901,166873,166812,166393,16045,33955,18165,18127,14322,35389,35356,169032,24397,37419,148100,26068,28969,28868,137285,40301,35999,36073,163292,22938,30659,23024,17262,14036,36394,36519,150537,36656,36682,17140,27736,28603,140065,18587,28537,28299,137178,39913,14005,149807,37051,37015,21873,18694,37307,37892,166475,16482,166652,37927,166941,166971,34021,35371,38297,38311,38295,38294,167220,29765,16066,149759,150082,148458,16103,143909,38543,167655,167526,167525,16076,149997,150136,147438,29714,29803,16124,38721,168112,26695,18973,168083,153567,38749,37736,166281,166950,166703,156606,37562,23313,35689,18748,29689,147995,38811,38769,39224,134950,24001,166853,150194,38943,169178,37622,169431,37349,17600,166736,150119,166756,39132,166469,16128,37418,18725,33812,39227,39245,162566,15869,39323,19311,39338,39516,166757,153800,27279,39457,23294,39471,170225,19344,170312,39356,19389,19351,37757,22642,135938,22562,149944,136424,30788,141087,146872,26821,15741,37976,14631,24912,141185,141675,24839,40015,40019,40059,39989,39952,39807,39887,171565,39839,172533,172286,40225,19630,147716,40472,19632,40204,172468,172269,172275,170287,40357,33981,159250,159711,158594,34300,17715,159140,159364,159216,33824,34286,159232,145367,155748,31202,144796,144960,18733,149982,15714,37851,37566,37704,131775,30905,37495,37965,20452,13376,36964,152925,30781,30804,30902,30795,137047,143817,149825,13978,20338,28634,28633,28702,28702,21524,147893,22459,22771,22410,40214,22487,28980,13487,147884,29163,158784,151447,23336,137141,166473,24844,23246,23051,17084,148616,14124,19323,166396,37819,37816,137430,134941,33906,158912,136211,148218,142374,148417,22932,146871,157505,32168,155995,155812,149945,149899,166394,37605,29666,16105,29876,166755,137375,16097,150195,27352,29683,29691,16086,150078,150164,137177,150118,132007,136228,149989,29768,149782,28837,149878,37508,29670,37727,132350,37681,166606,166422,37766,166887,153045,18741,166530,29035,149827,134399,22180,132634,134123,134328,21762,31172,137210,32254,136898,150096,137298,17710,37889,14090,166592,149933,22960,137407,137347,160900,23201,14050,146779,14000,37471,23161,166529,137314,37748,15565,133812,19094,14730,20724,15721,15692,136092,29045,17147,164376,28175,168164,17643,27991,163407,28775,27823,15574,147437,146989,28162,28428,15727,132085,30033,14012,13512,18048,16090,18545,22980,37486,18750,36673,166940,158656,22546,22472,14038,136274,28926,148322,150129,143331,135856,140221,26809,26983,136088,144613,162804,145119,166531,145366,144378,150687,27162,145069,158903,33854,17631,17614,159014,159057,158850,159710,28439,160009,33597,137018,33773,158848,159827,137179,22921,23170,137139,23137,23153,137477,147964,14125,23023,137020,14023,29070,37776,26266,148133,23150,23083,148115,27179,147193,161590,148571,148170,28957,148057,166369,20400,159016,23746,148686,163405,148413,27148,148054,135940,28838,28979,148457,15781,27871,194597,150095,32357,23019,23855,15859,24412,150109,137183,32164,33830,21637,146170,144128,131604,22398,133333,132633,16357,139166,172726,28675,168283,23920,29583,31955,166489,168992,20424,32743,29389,29456,162548,29496,29497,153334,29505,29512,16041,162584,36972,29173,149746,29665,33270,16074,30476,16081,27810,22269,29721,29726,29727,16098,16112,16116,16122,29907,16142,16211,30018,30061,30066,30093,16252,30152,30172,16320,30285,16343,30324,16348,30330,151388,29064,22051,35200,22633,16413,30531,16441,26465,16453,13787,30616,16490,16495,23646,30654,30667,22770,30744,28857,30748,16552,30777,30791,30801,30822,33864,152885,31027,26627,31026,16643,16649,31121,31129,36795,31238,36796,16743,31377,16818,31420,33401,16836,31439,31451,16847,20001,31586,31596,31611,31762,31771,16992,17018,31867,31900,17036,31928,17044,31981,36755,28864,134351,32207,32212,32208,32253,32686,32692,29343,17303,32800,32805,31545,32814,32817,32852,15820,22452,28832,32951,33001,17389,33036,29482,33038,33042,30048,33044,17409,15161,33110,33113,33114,17427,22586,33148,33156,17445,33171,17453,33189,22511,33217,33252,33364,17551,33446,33398,33482,33496,33535,17584,33623,38505,27018,33797,28917,33892,24803,33928,17668,33982,34017,34040,34064,34104,34130,17723,34159,34160,34272,17783,34418,34450,34482,34543,38469,34699,17926,17943,34990,35071,35108,35143,35217,162151,35369,35384,35476,35508,35921,36052,36082,36124,18328,22623,36291,18413,20206,36410,21976,22356,36465,22005,36528,18487,36558,36578,36580,36589,36594,36791,36801,36810,36812,36915,39364,18605,39136,37395,18718,37416,37464,37483,37553,37550,37567,37603,37611,37619,37620,37629,37699,37764,37805,18757,18769,40639,37911,21249,37917,37933,37950,18794,37972,38009,38189,38306,18855,38388,38451,18917,26528,18980,38720,18997,38834,38850,22100,19172,24808,39097,19225,39153,22596,39182,39193,20916,39196,39223,39234,39261,39266,19312,39365,19357,39484,39695,31363,39785,39809,39901,39921,39924,19565,39968,14191,138178,40265,39994,40702,22096,40339,40381,40384,40444,38134,36790,40571,40620,40625,40637,40646,38108,40674,40689,40696,31432,40772,131220,131767,132000,26906,38083,22956,132311,22592,38081,14265,132565,132629,132726,136890,22359,29043,133826,133837,134079,21610,194619,134091,21662,134139,134203,134227,134245,134268,24807,134285,22138,134325,134365,134381,134511,134578,134600,26965,39983,34725,134660,134670,134871,135056,134957,134771,23584,135100,24075,135260,135247,135286,26398,135291,135304,135318,13895,135359,135379,135471,135483,21348,33965,135907,136053,135990,35713,136567,136729,137155,137159,20088,28859,137261,137578,137773,137797,138282,138352,138412,138952,25283,138965,139029,29080,26709,139333,27113,14024,139900,140247,140282,141098,141425,141647,33533,141671,141715,142037,35237,142056,36768,142094,38840,142143,38983,39613,142412,null,142472,142519,154600,142600,142610,142775,142741,142914,143220,143308,143411,143462,144159,144350,24497,26184,26303,162425,144743,144883,29185,149946,30679,144922,145174,32391,131910,22709,26382,26904,146087,161367,155618,146961,147129,161278,139418,18640,19128,147737,166554,148206,148237,147515,148276,148374,150085,132554,20946,132625,22943,138920,15294,146687,148484,148694,22408,149108,14747,149295,165352,170441,14178,139715,35678,166734,39382,149522,149755,150037,29193,150208,134264,22885,151205,151430,132985,36570,151596,21135,22335,29041,152217,152601,147274,150183,21948,152646,152686,158546,37332,13427,152895,161330,152926,18200,152930,152934,153543,149823,153693,20582,13563,144332,24798,153859,18300,166216,154286,154505,154630,138640,22433,29009,28598,155906,162834,36950,156082,151450,35682,156674,156746,23899,158711,36662,156804,137500,35562,150006,156808,147439,156946,19392,157119,157365,141083,37989,153569,24981,23079,194765,20411,22201,148769,157436,20074,149812,38486,28047,158909,13848,35191,157593,157806,156689,157790,29151,157895,31554,168128,133649,157990,37124,158009,31301,40432,158202,39462,158253,13919,156777,131105,31107,158260,158555,23852,144665,33743,158621,18128,158884,30011,34917,159150,22710,14108,140685,159819,160205,15444,160384,160389,37505,139642,160395,37680,160486,149968,27705,38047,160848,134904,34855,35061,141606,164979,137137,28344,150058,137248,14756,14009,23568,31203,17727,26294,171181,170148,35139,161740,161880,22230,16607,136714,14753,145199,164072,136133,29101,33638,162269,168360,23143,19639,159919,166315,162301,162314,162571,163174,147834,31555,31102,163849,28597,172767,27139,164632,21410,159239,37823,26678,38749,164207,163875,158133,136173,143919,163912,23941,166960,163971,22293,38947,166217,23979,149896,26046,27093,21458,150181,147329,15377,26422,163984,164084,164142,139169,164175,164233,164271,164378,164614,164655,164746,13770,164968,165546,18682,25574,166230,30728,37461,166328,17394,166375,17375,166376,166726,166868,23032,166921,36619,167877,168172,31569,168208,168252,15863,168286,150218,36816,29327,22155,169191,169449,169392,169400,169778,170193,170313,170346,170435,170536,170766,171354,171419,32415,171768,171811,19620,38215,172691,29090,172799,19857,36882,173515,19868,134300,36798,21953,36794,140464,36793,150163,17673,32383,28502,27313,20202,13540,166700,161949,14138,36480,137205,163876,166764,166809,162366,157359,15851,161365,146615,153141,153942,20122,155265,156248,22207,134765,36366,23405,147080,150686,25566,25296,137206,137339,25904,22061,154698,21530,152337,15814,171416,19581,22050,22046,32585,155352,22901,146752,34672,19996,135146,134473,145082,33047,40286,36120,30267,40005,30286,30649,37701,21554,33096,33527,22053,33074,33816,32957,21994,31074,22083,21526,134813,13774,22021,22001,26353,164578,13869,30004,22000,21946,21655,21874,134209,134294,24272,151880,134774,142434,134818,40619,32090,21982,135285,25245,38765,21652,36045,29174,37238,25596,25529,25598,21865,142147,40050,143027,20890,13535,134567,20903,21581,21790,21779,30310,36397,157834,30129,32950,34820,34694,35015,33206,33820,135361,17644,29444,149254,23440,33547,157843,22139,141044,163119,147875,163187,159440,160438,37232,135641,37384,146684,173737,134828,134905,29286,138402,18254,151490,163833,135147,16634,40029,25887,142752,18675,149472,171388,135148,134666,24674,161187,135149,null,155720,135559,29091,32398,40272,19994,19972,13687,23309,27826,21351,13996,14812,21373,13989,149016,22682,150382,33325,21579,22442,154261,133497,null,14930,140389,29556,171692,19721,39917,146686,171824,19547,151465,169374,171998,33884,146870,160434,157619,145184,25390,32037,147191,146988,14890,36872,21196,15988,13946,17897,132238,30272,23280,134838,30842,163630,22695,16575,22140,39819,23924,30292,173108,40581,19681,30201,14331,24857,143578,148466,null,22109,135849,22439,149859,171526,21044,159918,13741,27722,40316,31830,39737,22494,137068,23635,25811,169168,156469,160100,34477,134440,159010,150242,134513,null,20990,139023,23950,38659,138705,40577,36940,31519,39682,23761,31651,25192,25397,39679,31695,39722,31870,39726,31810,31878,39957,31740,39689,40727,39963,149822,40794,21875,23491,20477,40600,20466,21088,15878,21201,22375,20566,22967,24082,38856,40363,36700,21609,38836,39232,38842,21292,24880,26924,21466,39946,40194,19515,38465,27008,20646,30022,137069,39386,21107,null,37209,38529,37212,null,37201,167575,25471,159011,27338,22033,37262,30074,25221,132092,29519,31856,154657,146685,null,149785,30422,39837,20010,134356,33726,34882,null,23626,27072,20717,22394,21023,24053,20174,27697,131570,20281,21660,21722,21146,36226,13822,24332,13811,null,27474,37244,40869,39831,38958,39092,39610,40616,40580,29050,31508,null,27642,34840,32632,null,22048,173642,36471,40787,null,36308,36431,40476,36353,25218,164733,36392,36469,31443,150135,31294,30936,27882,35431,30215,166490,40742,27854,34774,30147,172722,30803,194624,36108,29410,29553,35629,29442,29937,36075,150203,34351,24506,34976,17591,null,137275,159237,null,35454,140571,null,24829,30311,39639,40260,37742,39823,34805,null,34831,36087,29484,38689,39856,13782,29362,19463,31825,39242,155993,24921,19460,40598,24957,null,22367,24943,25254,25145,25294,14940,25058,21418,144373,25444,26626,13778,23895,166850,36826,167481,null,20697,138566,30982,21298,38456,134971,16485,null,30718,null,31938,155418,31962,31277,32870,32867,32077,29957,29938,35220,33306,26380,32866,160902,32859,29936,33027,30500,35209,157644,30035,159441,34729,34766,33224,34700,35401,36013,35651,30507,29944,34010,13877,27058,36262,null,35241,29800,28089,34753,147473,29927,15835,29046,24740,24988,15569,29026,24695,null,32625,166701,29264,24809,19326,21024,15384,146631,155351,161366,152881,137540,135934,170243,159196,159917,23745,156077,166415,145015,131310,157766,151310,17762,23327,156492,40784,40614,156267,12288,65292,12289,12290,65294,8231,65307,65306,65311,65281,65072,8230,8229,65104,65105,65106,183,65108,65109,65110,65111,65372,8211,65073,8212,65075,9588,65076,65103,65288,65289,65077,65078,65371,65373,65079,65080,12308,12309,65081,65082,12304,12305,65083,65084,12298,12299,65085,65086,12296,12297,65087,65088,12300,12301,65089,65090,12302,12303,65091,65092,65113,65114,65115,65116,65117,65118,8216,8217,8220,8221,12317,12318,8245,8242,65283,65286,65290,8251,167,12291,9675,9679,9651,9650,9678,9734,9733,9671,9670,9633,9632,9661,9660,12963,8453,175,65507,65343,717,65097,65098,65101,65102,65099,65100,65119,65120,65121,65291,65293,215,247,177,8730,65308,65310,65309,8806,8807,8800,8734,8786,8801,65122,65123,65124,65125,65126,65374,8745,8746,8869,8736,8735,8895,13266,13265,8747,8750,8757,8756,9792,9794,8853,8857,8593,8595,8592,8594,8598,8599,8601,8600,8741,8739,65295,65340,8725,65128,65284,65509,12306,65504,65505,65285,65312,8451,8457,65129,65130,65131,13269,13212,13213,13214,13262,13217,13198,13199,13252,176,20825,20827,20830,20829,20833,20835,21991,29929,31950,9601,9602,9603,9604,9605,9606,9607,9608,9615,9614,9613,9612,9611,9610,9609,9532,9524,9516,9508,9500,9620,9472,9474,9621,9484,9488,9492,9496,9581,9582,9584,9583,9552,9566,9578,9569,9698,9699,9701,9700,9585,9586,9587,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,12321,12322,12323,12324,12325,12326,12327,12328,12329,21313,21316,21317,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,12549,12550,12551,12552,12553,12554,12555,12556,12557,12558,12559,12560,12561,12562,12563,12564,12565,12566,12567,12568,12569,12570,12571,12572,12573,12574,12575,12576,12577,12578,12579,12580,12581,12582,12583,12584,12585,729,713,714,711,715,9216,9217,9218,9219,9220,9221,9222,9223,9224,9225,9226,9227,9228,9229,9230,9231,9232,9233,9234,9235,9236,9237,9238,9239,9240,9241,9242,9243,9244,9245,9246,9247,9249,8364,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,19968,20057,19969,19971,20035,20061,20102,20108,20154,20799,20837,20843,20960,20992,20993,21147,21269,21313,21340,21448,19977,19979,19976,19978,20011,20024,20961,20037,20040,20063,20062,20110,20129,20800,20995,21242,21315,21449,21475,22303,22763,22805,22823,22899,23376,23377,23379,23544,23567,23586,23608,23665,24029,24037,24049,24050,24051,24062,24178,24318,24331,24339,25165,19985,19984,19981,20013,20016,20025,20043,23609,20104,20113,20117,20114,20116,20130,20161,20160,20163,20166,20167,20173,20170,20171,20164,20803,20801,20839,20845,20846,20844,20887,20982,20998,20999,21000,21243,21246,21247,21270,21305,21320,21319,21317,21342,21380,21451,21450,21453,22764,22825,22827,22826,22829,23380,23569,23588,23610,23663,24052,24187,24319,24340,24341,24515,25096,25142,25163,25166,25903,25991,26007,26020,26041,26085,26352,26376,26408,27424,27490,27513,27595,27604,27611,27663,27700,28779,29226,29238,29243,29255,29273,29275,29356,29579,19993,19990,19989,19988,19992,20027,20045,20047,20046,20197,20184,20180,20181,20182,20183,20195,20196,20185,20190,20805,20804,20873,20874,20908,20985,20986,20984,21002,21152,21151,21253,21254,21271,21277,20191,21322,21321,21345,21344,21359,21358,21435,21487,21476,21491,21484,21486,21481,21480,21500,21496,21493,21483,21478,21482,21490,21489,21488,21477,21485,21499,22235,22234,22806,22830,22833,22900,22902,23381,23427,23612,24040,24039,24038,24066,24067,24179,24188,24321,24344,24343,24517,25098,25171,25172,25170,25169,26021,26086,26414,26412,26410,26411,26413,27491,27597,27665,27664,27704,27713,27712,27710,29359,29572,29577,29916,29926,29976,29983,29992,29993,30000,30001,30002,30003,30091,30333,30382,30399,30446,30683,30690,30707,31034,31166,31348,31435,19998,19999,20050,20051,20073,20121,20132,20134,20133,20223,20233,20249,20234,20245,20237,20240,20241,20239,20210,20214,20219,20208,20211,20221,20225,20235,20809,20807,20806,20808,20840,20849,20877,20912,21015,21009,21010,21006,21014,21155,21256,21281,21280,21360,21361,21513,21519,21516,21514,21520,21505,21515,21508,21521,21517,21512,21507,21518,21510,21522,22240,22238,22237,22323,22320,22312,22317,22316,22319,22313,22809,22810,22839,22840,22916,22904,22915,22909,22905,22914,22913,23383,23384,23431,23432,23429,23433,23546,23574,23673,24030,24070,24182,24180,24335,24347,24537,24534,25102,25100,25101,25104,25187,25179,25176,25910,26089,26088,26092,26093,26354,26355,26377,26429,26420,26417,26421,27425,27492,27515,27670,27741,27735,27737,27743,27744,27728,27733,27745,27739,27725,27726,28784,29279,29277,30334,31481,31859,31992,32566,32650,32701,32769,32771,32780,32786,32819,32895,32905,32907,32908,33251,33258,33267,33276,33292,33307,33311,33390,33394,33406,34411,34880,34892,34915,35199,38433,20018,20136,20301,20303,20295,20311,20318,20276,20315,20309,20272,20304,20305,20285,20282,20280,20291,20308,20284,20294,20323,20316,20320,20271,20302,20278,20313,20317,20296,20314,20812,20811,20813,20853,20918,20919,21029,21028,21033,21034,21032,21163,21161,21162,21164,21283,21363,21365,21533,21549,21534,21566,21542,21582,21543,21574,21571,21555,21576,21570,21531,21545,21578,21561,21563,21560,21550,21557,21558,21536,21564,21568,21553,21547,21535,21548,22250,22256,22244,22251,22346,22353,22336,22349,22343,22350,22334,22352,22351,22331,22767,22846,22941,22930,22952,22942,22947,22937,22934,22925,22948,22931,22922,22949,23389,23388,23386,23387,23436,23435,23439,23596,23616,23617,23615,23614,23696,23697,23700,23692,24043,24076,24207,24199,24202,24311,24324,24351,24420,24418,24439,24441,24536,24524,24535,24525,24561,24555,24568,24554,25106,25105,25220,25239,25238,25216,25206,25225,25197,25226,25212,25214,25209,25203,25234,25199,25240,25198,25237,25235,25233,25222,25913,25915,25912,26097,26356,26463,26446,26447,26448,26449,26460,26454,26462,26441,26438,26464,26451,26455,27493,27599,27714,27742,27801,27777,27784,27785,27781,27803,27754,27770,27792,27760,27788,27752,27798,27794,27773,27779,27762,27774,27764,27782,27766,27789,27796,27800,27778,28790,28796,28797,28792,29282,29281,29280,29380,29378,29590,29996,29995,30007,30008,30338,30447,30691,31169,31168,31167,31350,31995,32597,32918,32915,32925,32920,32923,32922,32946,33391,33426,33419,33421,35211,35282,35328,35895,35910,35925,35997,36196,36208,36275,36523,36554,36763,36784,36802,36806,36805,36804,24033,37009,37026,37034,37030,37027,37193,37318,37324,38450,38446,38449,38442,38444,20006,20054,20083,20107,20123,20126,20139,20140,20335,20381,20365,20339,20351,20332,20379,20363,20358,20355,20336,20341,20360,20329,20347,20374,20350,20367,20369,20346,20820,20818,20821,20841,20855,20854,20856,20925,20989,21051,21048,21047,21050,21040,21038,21046,21057,21182,21179,21330,21332,21331,21329,21350,21367,21368,21369,21462,21460,21463,21619,21621,21654,21624,21653,21632,21627,21623,21636,21650,21638,21628,21648,21617,21622,21644,21658,21602,21608,21643,21629,21646,22266,22403,22391,22378,22377,22369,22374,22372,22396,22812,22857,22855,22856,22852,22868,22974,22971,22996,22969,22958,22993,22982,22992,22989,22987,22995,22986,22959,22963,22994,22981,23391,23396,23395,23447,23450,23448,23452,23449,23451,23578,23624,23621,23622,23735,23713,23736,23721,23723,23729,23731,24088,24090,24086,24085,24091,24081,24184,24218,24215,24220,24213,24214,24310,24358,24359,24361,24448,24449,24447,24444,24541,24544,24573,24565,24575,24591,24596,24623,24629,24598,24618,24597,24609,24615,24617,24619,24603,25110,25109,25151,25150,25152,25215,25289,25292,25284,25279,25282,25273,25298,25307,25259,25299,25300,25291,25288,25256,25277,25276,25296,25305,25287,25293,25269,25306,25265,25304,25302,25303,25286,25260,25294,25918,26023,26044,26106,26132,26131,26124,26118,26114,26126,26112,26127,26133,26122,26119,26381,26379,26477,26507,26517,26481,26524,26483,26487,26503,26525,26519,26479,26480,26495,26505,26494,26512,26485,26522,26515,26492,26474,26482,27427,27494,27495,27519,27667,27675,27875,27880,27891,27825,27852,27877,27827,27837,27838,27836,27874,27819,27861,27859,27832,27844,27833,27841,27822,27863,27845,27889,27839,27835,27873,27867,27850,27820,27887,27868,27862,27872,28821,28814,28818,28810,28825,29228,29229,29240,29256,29287,29289,29376,29390,29401,29399,29392,29609,29608,29599,29611,29605,30013,30109,30105,30106,30340,30402,30450,30452,30693,30717,31038,31040,31041,31177,31176,31354,31353,31482,31998,32596,32652,32651,32773,32954,32933,32930,32945,32929,32939,32937,32948,32938,32943,33253,33278,33293,33459,33437,33433,33453,33469,33439,33465,33457,33452,33445,33455,33464,33443,33456,33470,33463,34382,34417,21021,34920,36555,36814,36820,36817,37045,37048,37041,37046,37319,37329,38263,38272,38428,38464,38463,38459,38468,38466,38585,38632,38738,38750,20127,20141,20142,20449,20405,20399,20415,20448,20433,20431,20445,20419,20406,20440,20447,20426,20439,20398,20432,20420,20418,20442,20430,20446,20407,20823,20882,20881,20896,21070,21059,21066,21069,21068,21067,21063,21191,21193,21187,21185,21261,21335,21371,21402,21467,21676,21696,21672,21710,21705,21688,21670,21683,21703,21698,21693,21674,21697,21700,21704,21679,21675,21681,21691,21673,21671,21695,22271,22402,22411,22432,22435,22434,22478,22446,22419,22869,22865,22863,22862,22864,23004,23000,23039,23011,23016,23043,23013,23018,23002,23014,23041,23035,23401,23459,23462,23460,23458,23461,23553,23630,23631,23629,23627,23769,23762,24055,24093,24101,24095,24189,24224,24230,24314,24328,24365,24421,24456,24453,24458,24459,24455,24460,24457,24594,24605,24608,24613,24590,24616,24653,24688,24680,24674,24646,24643,24684,24683,24682,24676,25153,25308,25366,25353,25340,25325,25345,25326,25341,25351,25329,25335,25327,25324,25342,25332,25361,25346,25919,25925,26027,26045,26082,26149,26157,26144,26151,26159,26143,26152,26161,26148,26359,26623,26579,26609,26580,26576,26604,26550,26543,26613,26601,26607,26564,26577,26548,26586,26597,26552,26575,26590,26611,26544,26585,26594,26589,26578,27498,27523,27526,27573,27602,27607,27679,27849,27915,27954,27946,27969,27941,27916,27953,27934,27927,27963,27965,27966,27958,27931,27893,27961,27943,27960,27945,27950,27957,27918,27947,28843,28858,28851,28844,28847,28845,28856,28846,28836,29232,29298,29295,29300,29417,29408,29409,29623,29642,29627,29618,29645,29632,29619,29978,29997,30031,30028,30030,30027,30123,30116,30117,30114,30115,30328,30342,30343,30344,30408,30406,30403,30405,30465,30457,30456,30473,30475,30462,30460,30471,30684,30722,30740,30732,30733,31046,31049,31048,31047,31161,31162,31185,31186,31179,31359,31361,31487,31485,31869,32002,32005,32000,32009,32007,32004,32006,32568,32654,32703,32772,32784,32781,32785,32822,32982,32997,32986,32963,32964,32972,32993,32987,32974,32990,32996,32989,33268,33314,33511,33539,33541,33507,33499,33510,33540,33509,33538,33545,33490,33495,33521,33537,33500,33492,33489,33502,33491,33503,33519,33542,34384,34425,34427,34426,34893,34923,35201,35284,35336,35330,35331,35998,36000,36212,36211,36276,36557,36556,36848,36838,36834,36842,36837,36845,36843,36836,36840,37066,37070,37057,37059,37195,37194,37325,38274,38480,38475,38476,38477,38754,38761,38859,38893,38899,38913,39080,39131,39135,39318,39321,20056,20147,20492,20493,20515,20463,20518,20517,20472,20521,20502,20486,20540,20511,20506,20498,20497,20474,20480,20500,20520,20465,20513,20491,20505,20504,20467,20462,20525,20522,20478,20523,20489,20860,20900,20901,20898,20941,20940,20934,20939,21078,21084,21076,21083,21085,21290,21375,21407,21405,21471,21736,21776,21761,21815,21756,21733,21746,21766,21754,21780,21737,21741,21729,21769,21742,21738,21734,21799,21767,21757,21775,22275,22276,22466,22484,22475,22467,22537,22799,22871,22872,22874,23057,23064,23068,23071,23067,23059,23020,23072,23075,23081,23077,23052,23049,23403,23640,23472,23475,23478,23476,23470,23477,23481,23480,23556,23633,23637,23632,23789,23805,23803,23786,23784,23792,23798,23809,23796,24046,24109,24107,24235,24237,24231,24369,24466,24465,24464,24665,24675,24677,24656,24661,24685,24681,24687,24708,24735,24730,24717,24724,24716,24709,24726,25159,25331,25352,25343,25422,25406,25391,25429,25410,25414,25423,25417,25402,25424,25405,25386,25387,25384,25421,25420,25928,25929,26009,26049,26053,26178,26185,26191,26179,26194,26188,26181,26177,26360,26388,26389,26391,26657,26680,26696,26694,26707,26681,26690,26708,26665,26803,26647,26700,26705,26685,26612,26704,26688,26684,26691,26666,26693,26643,26648,26689,27530,27529,27575,27683,27687,27688,27686,27684,27888,28010,28053,28040,28039,28006,28024,28023,27993,28051,28012,28041,28014,27994,28020,28009,28044,28042,28025,28037,28005,28052,28874,28888,28900,28889,28872,28879,29241,29305,29436,29433,29437,29432,29431,29574,29677,29705,29678,29664,29674,29662,30036,30045,30044,30042,30041,30142,30149,30151,30130,30131,30141,30140,30137,30146,30136,30347,30384,30410,30413,30414,30505,30495,30496,30504,30697,30768,30759,30776,30749,30772,30775,30757,30765,30752,30751,30770,31061,31056,31072,31071,31062,31070,31069,31063,31066,31204,31203,31207,31199,31206,31209,31192,31364,31368,31449,31494,31505,31881,32033,32023,32011,32010,32032,32034,32020,32016,32021,32026,32028,32013,32025,32027,32570,32607,32660,32709,32705,32774,32792,32789,32793,32791,32829,32831,33009,33026,33008,33029,33005,33012,33030,33016,33011,33032,33021,33034,33020,33007,33261,33260,33280,33296,33322,33323,33320,33324,33467,33579,33618,33620,33610,33592,33616,33609,33589,33588,33615,33586,33593,33590,33559,33600,33585,33576,33603,34388,34442,34474,34451,34468,34473,34444,34467,34460,34928,34935,34945,34946,34941,34937,35352,35344,35342,35340,35349,35338,35351,35347,35350,35343,35345,35912,35962,35961,36001,36002,36215,36524,36562,36564,36559,36785,36865,36870,36855,36864,36858,36852,36867,36861,36869,36856,37013,37089,37085,37090,37202,37197,37196,37336,37341,37335,37340,37337,38275,38498,38499,38497,38491,38493,38500,38488,38494,38587,39138,39340,39592,39640,39717,39730,39740,20094,20602,20605,20572,20551,20547,20556,20570,20553,20581,20598,20558,20565,20597,20596,20599,20559,20495,20591,20589,20828,20885,20976,21098,21103,21202,21209,21208,21205,21264,21263,21273,21311,21312,21310,21443,26364,21830,21866,21862,21828,21854,21857,21827,21834,21809,21846,21839,21845,21807,21860,21816,21806,21852,21804,21859,21811,21825,21847,22280,22283,22281,22495,22533,22538,22534,22496,22500,22522,22530,22581,22519,22521,22816,22882,23094,23105,23113,23142,23146,23104,23100,23138,23130,23110,23114,23408,23495,23493,23492,23490,23487,23494,23561,23560,23559,23648,23644,23645,23815,23814,23822,23835,23830,23842,23825,23849,23828,23833,23844,23847,23831,24034,24120,24118,24115,24119,24247,24248,24246,24245,24254,24373,24375,24407,24428,24425,24427,24471,24473,24478,24472,24481,24480,24476,24703,24739,24713,24736,24744,24779,24756,24806,24765,24773,24763,24757,24796,24764,24792,24789,24774,24799,24760,24794,24775,25114,25115,25160,25504,25511,25458,25494,25506,25509,25463,25447,25496,25514,25457,25513,25481,25475,25499,25451,25512,25476,25480,25497,25505,25516,25490,25487,25472,25467,25449,25448,25466,25949,25942,25937,25945,25943,21855,25935,25944,25941,25940,26012,26011,26028,26063,26059,26060,26062,26205,26202,26212,26216,26214,26206,26361,21207,26395,26753,26799,26786,26771,26805,26751,26742,26801,26791,26775,26800,26755,26820,26797,26758,26757,26772,26781,26792,26783,26785,26754,27442,27578,27627,27628,27691,28046,28092,28147,28121,28082,28129,28108,28132,28155,28154,28165,28103,28107,28079,28113,28078,28126,28153,28088,28151,28149,28101,28114,28186,28085,28122,28139,28120,28138,28145,28142,28136,28102,28100,28074,28140,28095,28134,28921,28937,28938,28925,28911,29245,29309,29313,29468,29467,29462,29459,29465,29575,29701,29706,29699,29702,29694,29709,29920,29942,29943,29980,29986,30053,30054,30050,30064,30095,30164,30165,30133,30154,30157,30350,30420,30418,30427,30519,30526,30524,30518,30520,30522,30827,30787,30798,31077,31080,31085,31227,31378,31381,31520,31528,31515,31532,31526,31513,31518,31534,31890,31895,31893,32070,32067,32113,32046,32057,32060,32064,32048,32051,32068,32047,32066,32050,32049,32573,32670,32666,32716,32718,32722,32796,32842,32838,33071,33046,33059,33067,33065,33072,33060,33282,33333,33335,33334,33337,33678,33694,33688,33656,33698,33686,33725,33707,33682,33674,33683,33673,33696,33655,33659,33660,33670,33703,34389,24426,34503,34496,34486,34500,34485,34502,34507,34481,34479,34505,34899,34974,34952,34987,34962,34966,34957,34955,35219,35215,35370,35357,35363,35365,35377,35373,35359,35355,35362,35913,35930,36009,36012,36011,36008,36010,36007,36199,36198,36286,36282,36571,36575,36889,36877,36890,36887,36899,36895,36893,36880,36885,36894,36896,36879,36898,36886,36891,36884,37096,37101,37117,37207,37326,37365,37350,37347,37351,37357,37353,38281,38506,38517,38515,38520,38512,38516,38518,38519,38508,38592,38634,38633,31456,31455,38914,38915,39770,40165,40565,40575,40613,40635,20642,20621,20613,20633,20625,20608,20630,20632,20634,26368,20977,21106,21108,21109,21097,21214,21213,21211,21338,21413,21883,21888,21927,21884,21898,21917,21912,21890,21916,21930,21908,21895,21899,21891,21939,21934,21919,21822,21938,21914,21947,21932,21937,21886,21897,21931,21913,22285,22575,22570,22580,22564,22576,22577,22561,22557,22560,22777,22778,22880,23159,23194,23167,23186,23195,23207,23411,23409,23506,23500,23507,23504,23562,23563,23601,23884,23888,23860,23879,24061,24133,24125,24128,24131,24190,24266,24257,24258,24260,24380,24429,24489,24490,24488,24785,24801,24754,24758,24800,24860,24867,24826,24853,24816,24827,24820,24936,24817,24846,24822,24841,24832,24850,25119,25161,25507,25484,25551,25536,25577,25545,25542,25549,25554,25571,25552,25569,25558,25581,25582,25462,25588,25578,25563,25682,25562,25593,25950,25958,25954,25955,26001,26000,26031,26222,26224,26228,26230,26223,26257,26234,26238,26231,26366,26367,26399,26397,26874,26837,26848,26840,26839,26885,26847,26869,26862,26855,26873,26834,26866,26851,26827,26829,26893,26898,26894,26825,26842,26990,26875,27454,27450,27453,27544,27542,27580,27631,27694,27695,27692,28207,28216,28244,28193,28210,28263,28234,28192,28197,28195,28187,28251,28248,28196,28246,28270,28205,28198,28271,28212,28237,28218,28204,28227,28189,28222,28363,28297,28185,28238,28259,28228,28274,28265,28255,28953,28954,28966,28976,28961,28982,29038,28956,29260,29316,29312,29494,29477,29492,29481,29754,29738,29747,29730,29733,29749,29750,29748,29743,29723,29734,29736,29989,29990,30059,30058,30178,30171,30179,30169,30168,30174,30176,30331,30332,30358,30355,30388,30428,30543,30701,30813,30828,30831,31245,31240,31243,31237,31232,31384,31383,31382,31461,31459,31561,31574,31558,31568,31570,31572,31565,31563,31567,31569,31903,31909,32094,32080,32104,32085,32043,32110,32114,32097,32102,32098,32112,32115,21892,32724,32725,32779,32850,32901,33109,33108,33099,33105,33102,33081,33094,33086,33100,33107,33140,33298,33308,33769,33795,33784,33805,33760,33733,33803,33729,33775,33777,33780,33879,33802,33776,33804,33740,33789,33778,33738,33848,33806,33796,33756,33799,33748,33759,34395,34527,34521,34541,34516,34523,34532,34512,34526,34903,35009,35010,34993,35203,35222,35387,35424,35413,35422,35388,35393,35412,35419,35408,35398,35380,35386,35382,35414,35937,35970,36015,36028,36019,36029,36033,36027,36032,36020,36023,36022,36031,36024,36234,36229,36225,36302,36317,36299,36314,36305,36300,36315,36294,36603,36600,36604,36764,36910,36917,36913,36920,36914,36918,37122,37109,37129,37118,37219,37221,37327,37396,37397,37411,37385,37406,37389,37392,37383,37393,38292,38287,38283,38289,38291,38290,38286,38538,38542,38539,38525,38533,38534,38541,38514,38532,38593,38597,38596,38598,38599,38639,38642,38860,38917,38918,38920,39143,39146,39151,39145,39154,39149,39342,39341,40643,40653,40657,20098,20653,20661,20658,20659,20677,20670,20652,20663,20667,20655,20679,21119,21111,21117,21215,21222,21220,21218,21219,21295,21983,21992,21971,21990,21966,21980,21959,21969,21987,21988,21999,21978,21985,21957,21958,21989,21961,22290,22291,22622,22609,22616,22615,22618,22612,22635,22604,22637,22602,22626,22610,22603,22887,23233,23241,23244,23230,23229,23228,23219,23234,23218,23913,23919,24140,24185,24265,24264,24338,24409,24492,24494,24858,24847,24904,24863,24819,24859,24825,24833,24840,24910,24908,24900,24909,24894,24884,24871,24845,24838,24887,25121,25122,25619,25662,25630,25642,25645,25661,25644,25615,25628,25620,25613,25654,25622,25623,25606,25964,26015,26032,26263,26249,26247,26248,26262,26244,26264,26253,26371,27028,26989,26970,26999,26976,26964,26997,26928,27010,26954,26984,26987,26974,26963,27001,27014,26973,26979,26971,27463,27506,27584,27583,27603,27645,28322,28335,28371,28342,28354,28304,28317,28359,28357,28325,28312,28348,28346,28331,28369,28310,28316,28356,28372,28330,28327,28340,29006,29017,29033,29028,29001,29031,29020,29036,29030,29004,29029,29022,28998,29032,29014,29242,29266,29495,29509,29503,29502,29807,29786,29781,29791,29790,29761,29759,29785,29787,29788,30070,30072,30208,30192,30209,30194,30193,30202,30207,30196,30195,30430,30431,30555,30571,30566,30558,30563,30585,30570,30572,30556,30565,30568,30562,30702,30862,30896,30871,30872,30860,30857,30844,30865,30867,30847,31098,31103,31105,33836,31165,31260,31258,31264,31252,31263,31262,31391,31392,31607,31680,31584,31598,31591,31921,31923,31925,32147,32121,32145,32129,32143,32091,32622,32617,32618,32626,32681,32680,32676,32854,32856,32902,32900,33137,33136,33144,33125,33134,33139,33131,33145,33146,33126,33285,33351,33922,33911,33853,33841,33909,33894,33899,33865,33900,33883,33852,33845,33889,33891,33897,33901,33862,34398,34396,34399,34553,34579,34568,34567,34560,34558,34555,34562,34563,34566,34570,34905,35039,35028,35033,35036,35032,35037,35041,35018,35029,35026,35228,35299,35435,35442,35443,35430,35433,35440,35463,35452,35427,35488,35441,35461,35437,35426,35438,35436,35449,35451,35390,35432,35938,35978,35977,36042,36039,36040,36036,36018,36035,36034,36037,36321,36319,36328,36335,36339,36346,36330,36324,36326,36530,36611,36617,36606,36618,36767,36786,36939,36938,36947,36930,36948,36924,36949,36944,36935,36943,36942,36941,36945,36926,36929,37138,37143,37228,37226,37225,37321,37431,37463,37432,37437,37440,37438,37467,37451,37476,37457,37428,37449,37453,37445,37433,37439,37466,38296,38552,38548,38549,38605,38603,38601,38602,38647,38651,38649,38646,38742,38772,38774,38928,38929,38931,38922,38930,38924,39164,39156,39165,39166,39347,39345,39348,39649,40169,40578,40718,40723,40736,20711,20718,20709,20694,20717,20698,20693,20687,20689,20721,20686,20713,20834,20979,21123,21122,21297,21421,22014,22016,22043,22039,22013,22036,22022,22025,22029,22030,22007,22038,22047,22024,22032,22006,22296,22294,22645,22654,22659,22675,22666,22649,22661,22653,22781,22821,22818,22820,22890,22889,23265,23270,23273,23255,23254,23256,23267,23413,23518,23527,23521,23525,23526,23528,23522,23524,23519,23565,23650,23940,23943,24155,24163,24149,24151,24148,24275,24278,24330,24390,24432,24505,24903,24895,24907,24951,24930,24931,24927,24922,24920,24949,25130,25735,25688,25684,25764,25720,25695,25722,25681,25703,25652,25709,25723,25970,26017,26071,26070,26274,26280,26269,27036,27048,27029,27073,27054,27091,27083,27035,27063,27067,27051,27060,27088,27085,27053,27084,27046,27075,27043,27465,27468,27699,28467,28436,28414,28435,28404,28457,28478,28448,28460,28431,28418,28450,28415,28399,28422,28465,28472,28466,28451,28437,28459,28463,28552,28458,28396,28417,28402,28364,28407,29076,29081,29053,29066,29060,29074,29246,29330,29334,29508,29520,29796,29795,29802,29808,29805,29956,30097,30247,30221,30219,30217,30227,30433,30435,30596,30589,30591,30561,30913,30879,30887,30899,30889,30883,31118,31119,31117,31278,31281,31402,31401,31469,31471,31649,31637,31627,31605,31639,31645,31636,31631,31672,31623,31620,31929,31933,31934,32187,32176,32156,32189,32190,32160,32202,32180,32178,32177,32186,32162,32191,32181,32184,32173,32210,32199,32172,32624,32736,32737,32735,32862,32858,32903,33104,33152,33167,33160,33162,33151,33154,33255,33274,33287,33300,33310,33355,33993,33983,33990,33988,33945,33950,33970,33948,33995,33976,33984,34003,33936,33980,34001,33994,34623,34588,34619,34594,34597,34612,34584,34645,34615,34601,35059,35074,35060,35065,35064,35069,35048,35098,35055,35494,35468,35486,35491,35469,35489,35475,35492,35498,35493,35496,35480,35473,35482,35495,35946,35981,35980,36051,36049,36050,36203,36249,36245,36348,36628,36626,36629,36627,36771,36960,36952,36956,36963,36953,36958,36962,36957,36955,37145,37144,37150,37237,37240,37239,37236,37496,37504,37509,37528,37526,37499,37523,37532,37544,37500,37521,38305,38312,38313,38307,38309,38308,38553,38556,38555,38604,38610,38656,38780,38789,38902,38935,38936,39087,39089,39171,39173,39180,39177,39361,39599,39600,39654,39745,39746,40180,40182,40179,40636,40763,40778,20740,20736,20731,20725,20729,20738,20744,20745,20741,20956,21127,21128,21129,21133,21130,21232,21426,22062,22075,22073,22066,22079,22068,22057,22099,22094,22103,22132,22070,22063,22064,22656,22687,22686,22707,22684,22702,22697,22694,22893,23305,23291,23307,23285,23308,23304,23534,23532,23529,23531,23652,23653,23965,23956,24162,24159,24161,24290,24282,24287,24285,24291,24288,24392,24433,24503,24501,24950,24935,24942,24925,24917,24962,24956,24944,24939,24958,24999,24976,25003,24974,25004,24986,24996,24980,25006,25134,25705,25711,25721,25758,25778,25736,25744,25776,25765,25747,25749,25769,25746,25774,25773,25771,25754,25772,25753,25762,25779,25973,25975,25976,26286,26283,26292,26289,27171,27167,27112,27137,27166,27161,27133,27169,27155,27146,27123,27138,27141,27117,27153,27472,27470,27556,27589,27590,28479,28540,28548,28497,28518,28500,28550,28525,28507,28536,28526,28558,28538,28528,28516,28567,28504,28373,28527,28512,28511,29087,29100,29105,29096,29270,29339,29518,29527,29801,29835,29827,29822,29824,30079,30240,30249,30239,30244,30246,30241,30242,30362,30394,30436,30606,30599,30604,30609,30603,30923,30917,30906,30922,30910,30933,30908,30928,31295,31292,31296,31293,31287,31291,31407,31406,31661,31665,31684,31668,31686,31687,31681,31648,31692,31946,32224,32244,32239,32251,32216,32236,32221,32232,32227,32218,32222,32233,32158,32217,32242,32249,32629,32631,32687,32745,32806,33179,33180,33181,33184,33178,33176,34071,34109,34074,34030,34092,34093,34067,34065,34083,34081,34068,34028,34085,34047,34054,34690,34676,34678,34656,34662,34680,34664,34649,34647,34636,34643,34907,34909,35088,35079,35090,35091,35093,35082,35516,35538,35527,35524,35477,35531,35576,35506,35529,35522,35519,35504,35542,35533,35510,35513,35547,35916,35918,35948,36064,36062,36070,36068,36076,36077,36066,36067,36060,36074,36065,36205,36255,36259,36395,36368,36381,36386,36367,36393,36383,36385,36382,36538,36637,36635,36639,36649,36646,36650,36636,36638,36645,36969,36974,36968,36973,36983,37168,37165,37159,37169,37255,37257,37259,37251,37573,37563,37559,37610,37548,37604,37569,37555,37564,37586,37575,37616,37554,38317,38321,38660,38662,38663,38665,38752,38797,38795,38799,38945,38955,38940,39091,39178,39187,39186,39192,39389,39376,39391,39387,39377,39381,39378,39385,39607,39662,39663,39719,39749,39748,39799,39791,40198,40201,40195,40617,40638,40654,22696,40786,20754,20760,20756,20752,20757,20864,20906,20957,21137,21139,21235,22105,22123,22137,22121,22116,22136,22122,22120,22117,22129,22127,22124,22114,22134,22721,22718,22727,22725,22894,23325,23348,23416,23536,23566,24394,25010,24977,25001,24970,25037,25014,25022,25034,25032,25136,25797,25793,25803,25787,25788,25818,25796,25799,25794,25805,25791,25810,25812,25790,25972,26310,26313,26297,26308,26311,26296,27197,27192,27194,27225,27243,27224,27193,27204,27234,27233,27211,27207,27189,27231,27208,27481,27511,27653,28610,28593,28577,28611,28580,28609,28583,28595,28608,28601,28598,28582,28576,28596,29118,29129,29136,29138,29128,29141,29113,29134,29145,29148,29123,29124,29544,29852,29859,29848,29855,29854,29922,29964,29965,30260,30264,30266,30439,30437,30624,30622,30623,30629,30952,30938,30956,30951,31142,31309,31310,31302,31308,31307,31418,31705,31761,31689,31716,31707,31713,31721,31718,31957,31958,32266,32273,32264,32283,32291,32286,32285,32265,32272,32633,32690,32752,32753,32750,32808,33203,33193,33192,33275,33288,33368,33369,34122,34137,34120,34152,34153,34115,34121,34157,34154,34142,34691,34719,34718,34722,34701,34913,35114,35122,35109,35115,35105,35242,35238,35558,35578,35563,35569,35584,35548,35559,35566,35582,35585,35586,35575,35565,35571,35574,35580,35947,35949,35987,36084,36420,36401,36404,36418,36409,36405,36667,36655,36664,36659,36776,36774,36981,36980,36984,36978,36988,36986,37172,37266,37664,37686,37624,37683,37679,37666,37628,37675,37636,37658,37648,37670,37665,37653,37678,37657,38331,38567,38568,38570,38613,38670,38673,38678,38669,38675,38671,38747,38748,38758,38808,38960,38968,38971,38967,38957,38969,38948,39184,39208,39198,39195,39201,39194,39405,39394,39409,39608,39612,39675,39661,39720,39825,40213,40227,40230,40232,40210,40219,40664,40660,40845,40860,20778,20767,20769,20786,21237,22158,22144,22160,22149,22151,22159,22741,22739,22737,22734,23344,23338,23332,23418,23607,23656,23996,23994,23997,23992,24171,24396,24509,25033,25026,25031,25062,25035,25138,25140,25806,25802,25816,25824,25840,25830,25836,25841,25826,25837,25986,25987,26329,26326,27264,27284,27268,27298,27292,27355,27299,27262,27287,27280,27296,27484,27566,27610,27656,28632,28657,28639,28640,28635,28644,28651,28655,28544,28652,28641,28649,28629,28654,28656,29159,29151,29166,29158,29157,29165,29164,29172,29152,29237,29254,29552,29554,29865,29872,29862,29864,30278,30274,30284,30442,30643,30634,30640,30636,30631,30637,30703,30967,30970,30964,30959,30977,31143,31146,31319,31423,31751,31757,31742,31735,31756,31712,31968,31964,31966,31970,31967,31961,31965,32302,32318,32326,32311,32306,32323,32299,32317,32305,32325,32321,32308,32313,32328,32309,32319,32303,32580,32755,32764,32881,32882,32880,32879,32883,33222,33219,33210,33218,33216,33215,33213,33225,33214,33256,33289,33393,34218,34180,34174,34204,34193,34196,34223,34203,34183,34216,34186,34407,34752,34769,34739,34770,34758,34731,34747,34746,34760,34763,35131,35126,35140,35128,35133,35244,35598,35607,35609,35611,35594,35616,35613,35588,35600,35905,35903,35955,36090,36093,36092,36088,36091,36264,36425,36427,36424,36426,36676,36670,36674,36677,36671,36991,36989,36996,36993,36994,36992,37177,37283,37278,37276,37709,37762,37672,37749,37706,37733,37707,37656,37758,37740,37723,37744,37722,37716,38346,38347,38348,38344,38342,38577,38584,38614,38684,38686,38816,38867,38982,39094,39221,39425,39423,39854,39851,39850,39853,40251,40255,40587,40655,40670,40668,40669,40667,40766,40779,21474,22165,22190,22745,22744,23352,24413,25059,25139,25844,25842,25854,25862,25850,25851,25847,26039,26332,26406,27315,27308,27331,27323,27320,27330,27310,27311,27487,27512,27567,28681,28683,28670,28678,28666,28689,28687,29179,29180,29182,29176,29559,29557,29863,29887,29973,30294,30296,30290,30653,30655,30651,30652,30990,31150,31329,31330,31328,31428,31429,31787,31783,31786,31774,31779,31777,31975,32340,32341,32350,32346,32353,32338,32345,32584,32761,32763,32887,32886,33229,33231,33290,34255,34217,34253,34256,34249,34224,34234,34233,34214,34799,34796,34802,34784,35206,35250,35316,35624,35641,35628,35627,35920,36101,36441,36451,36454,36452,36447,36437,36544,36681,36685,36999,36995,37000,37291,37292,37328,37780,37770,37782,37794,37811,37806,37804,37808,37784,37786,37783,38356,38358,38352,38357,38626,38620,38617,38619,38622,38692,38819,38822,38829,38905,38989,38991,38988,38990,38995,39098,39230,39231,39229,39214,39333,39438,39617,39683,39686,39759,39758,39757,39882,39881,39933,39880,39872,40273,40285,40288,40672,40725,40748,20787,22181,22750,22751,22754,23541,40848,24300,25074,25079,25078,25077,25856,25871,26336,26333,27365,27357,27354,27347,28699,28703,28712,28698,28701,28693,28696,29190,29197,29272,29346,29560,29562,29885,29898,29923,30087,30086,30303,30305,30663,31001,31153,31339,31337,31806,31807,31800,31805,31799,31808,32363,32365,32377,32361,32362,32645,32371,32694,32697,32696,33240,34281,34269,34282,34261,34276,34277,34295,34811,34821,34829,34809,34814,35168,35167,35158,35166,35649,35676,35672,35657,35674,35662,35663,35654,35673,36104,36106,36476,36466,36487,36470,36460,36474,36468,36692,36686,36781,37002,37003,37297,37294,37857,37841,37855,37827,37832,37852,37853,37846,37858,37837,37848,37860,37847,37864,38364,38580,38627,38698,38695,38753,38876,38907,39006,39000,39003,39100,39237,39241,39446,39449,39693,39912,39911,39894,39899,40329,40289,40306,40298,40300,40594,40599,40595,40628,21240,22184,22199,22198,22196,22204,22756,23360,23363,23421,23542,24009,25080,25082,25880,25876,25881,26342,26407,27372,28734,28720,28722,29200,29563,29903,30306,30309,31014,31018,31020,31019,31431,31478,31820,31811,31821,31983,31984,36782,32381,32380,32386,32588,32768,33242,33382,34299,34297,34321,34298,34310,34315,34311,34314,34836,34837,35172,35258,35320,35696,35692,35686,35695,35679,35691,36111,36109,36489,36481,36485,36482,37300,37323,37912,37891,37885,38369,38704,39108,39250,39249,39336,39467,39472,39479,39477,39955,39949,40569,40629,40680,40751,40799,40803,40801,20791,20792,22209,22208,22210,22804,23660,24013,25084,25086,25885,25884,26005,26345,27387,27396,27386,27570,28748,29211,29351,29910,29908,30313,30675,31824,32399,32396,32700,34327,34349,34330,34851,34850,34849,34847,35178,35180,35261,35700,35703,35709,36115,36490,36493,36491,36703,36783,37306,37934,37939,37941,37946,37944,37938,37931,38370,38712,38713,38706,38911,39015,39013,39255,39493,39491,39488,39486,39631,39764,39761,39981,39973,40367,40372,40386,40376,40605,40687,40729,40796,40806,40807,20796,20795,22216,22218,22217,23423,24020,24018,24398,25087,25892,27402,27489,28753,28760,29568,29924,30090,30318,30316,31155,31840,31839,32894,32893,33247,35186,35183,35324,35712,36118,36119,36497,36499,36705,37192,37956,37969,37970,38717,38718,38851,38849,39019,39253,39509,39501,39634,39706,40009,39985,39998,39995,40403,40407,40756,40812,40810,40852,22220,24022,25088,25891,25899,25898,26348,27408,29914,31434,31844,31843,31845,32403,32406,32404,33250,34360,34367,34865,35722,37008,37007,37987,37984,37988,38760,39023,39260,39514,39515,39511,39635,39636,39633,40020,40023,40022,40421,40607,40692,22225,22761,25900,28766,30321,30322,30679,32592,32648,34870,34873,34914,35731,35730,35734,33399,36123,37312,37994,38722,38728,38724,38854,39024,39519,39714,39768,40031,40441,40442,40572,40573,40711,40823,40818,24307,27414,28771,31852,31854,34875,35264,36513,37313,38002,38000,39025,39262,39638,39715,40652,28772,30682,35738,38007,38857,39522,39525,32412,35740,36522,37317,38013,38014,38012,40055,40056,40695,35924,38015,40474,29224,39530,39729,40475,40478,31858,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,20022,20031,20101,20128,20866,20886,20907,21241,21304,21353,21430,22794,23424,24027,12083,24191,24308,24400,24417,25908,26080,30098,30326,36789,38582,168,710,12541,12542,12445,12446,12291,20189,12293,12294,12295,12540,65339,65341,10045,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,8679,8632,8633,12751,131276,20058,131210,20994,17553,40880,20872,40881,161287,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,65506,65508,65287,65282,12849,8470,8481,12443,12444,11904,11908,11910,11911,11912,11914,11916,11917,11925,11932,11933,11941,11943,11946,11948,11950,11958,11964,11966,11974,11978,11980,11981,11983,11990,11991,11998,12003,null,null,null,643,592,603,596,629,339,248,331,650,618,20034,20060,20981,21274,21378,19975,19980,20039,20109,22231,64012,23662,24435,19983,20871,19982,20014,20115,20162,20169,20168,20888,21244,21356,21433,22304,22787,22828,23568,24063,26081,27571,27596,27668,29247,20017,20028,20200,20188,20201,20193,20189,20186,21004,21276,21324,22306,22307,22807,22831,23425,23428,23570,23611,23668,23667,24068,24192,24194,24521,25097,25168,27669,27702,27715,27711,27707,29358,29360,29578,31160,32906,38430,20238,20248,20268,20213,20244,20209,20224,20215,20232,20253,20226,20229,20258,20243,20228,20212,20242,20913,21011,21001,21008,21158,21282,21279,21325,21386,21511,22241,22239,22318,22314,22324,22844,22912,22908,22917,22907,22910,22903,22911,23382,23573,23589,23676,23674,23675,23678,24031,24181,24196,24322,24346,24436,24533,24532,24527,25180,25182,25188,25185,25190,25186,25177,25184,25178,25189,26095,26094,26430,26425,26424,26427,26426,26431,26428,26419,27672,27718,27730,27740,27727,27722,27732,27723,27724,28785,29278,29364,29365,29582,29994,30335,31349,32593,33400,33404,33408,33405,33407,34381,35198,37017,37015,37016,37019,37012,38434,38436,38432,38435,20310,20283,20322,20297,20307,20324,20286,20327,20306,20319,20289,20312,20269,20275,20287,20321,20879,20921,21020,21022,21025,21165,21166,21257,21347,21362,21390,21391,21552,21559,21546,21588,21573,21529,21532,21541,21528,21565,21583,21569,21544,21540,21575,22254,22247,22245,22337,22341,22348,22345,22347,22354,22790,22848,22950,22936,22944,22935,22926,22946,22928,22927,22951,22945,23438,23442,23592,23594,23693,23695,23688,23691,23689,23698,23690,23686,23699,23701,24032,24074,24078,24203,24201,24204,24200,24205,24325,24349,24440,24438,24530,24529,24528,24557,24552,24558,24563,24545,24548,24547,24570,24559,24567,24571,24576,24564,25146,25219,25228,25230,25231,25236,25223,25201,25211,25210,25200,25217,25224,25207,25213,25202,25204,25911,26096,26100,26099,26098,26101,26437,26439,26457,26453,26444,26440,26461,26445,26458,26443,27600,27673,27674,27768,27751,27755,27780,27787,27791,27761,27759,27753,27802,27757,27783,27797,27804,27750,27763,27749,27771,27790,28788,28794,29283,29375,29373,29379,29382,29377,29370,29381,29589,29591,29587,29588,29586,30010,30009,30100,30101,30337,31037,32820,32917,32921,32912,32914,32924,33424,33423,33413,33422,33425,33427,33418,33411,33412,35960,36809,36799,37023,37025,37029,37022,37031,37024,38448,38440,38447,38445,20019,20376,20348,20357,20349,20352,20359,20342,20340,20361,20356,20343,20300,20375,20330,20378,20345,20353,20344,20368,20380,20372,20382,20370,20354,20373,20331,20334,20894,20924,20926,21045,21042,21043,21062,21041,21180,21258,21259,21308,21394,21396,21639,21631,21633,21649,21634,21640,21611,21626,21630,21605,21612,21620,21606,21645,21615,21601,21600,21656,21603,21607,21604,22263,22265,22383,22386,22381,22379,22385,22384,22390,22400,22389,22395,22387,22388,22370,22376,22397,22796,22853,22965,22970,22991,22990,22962,22988,22977,22966,22972,22979,22998,22961,22973,22976,22984,22964,22983,23394,23397,23443,23445,23620,23623,23726,23716,23712,23733,23727,23720,23724,23711,23715,23725,23714,23722,23719,23709,23717,23734,23728,23718,24087,24084,24089,24360,24354,24355,24356,24404,24450,24446,24445,24542,24549,24621,24614,24601,24626,24587,24628,24586,24599,24627,24602,24606,24620,24610,24589,24592,24622,24595,24593,24588,24585,24604,25108,25149,25261,25268,25297,25278,25258,25270,25290,25262,25267,25263,25275,25257,25264,25272,25917,26024,26043,26121,26108,26116,26130,26120,26107,26115,26123,26125,26117,26109,26129,26128,26358,26378,26501,26476,26510,26514,26486,26491,26520,26502,26500,26484,26509,26508,26490,26527,26513,26521,26499,26493,26497,26488,26489,26516,27429,27520,27518,27614,27677,27795,27884,27883,27886,27865,27830,27860,27821,27879,27831,27856,27842,27834,27843,27846,27885,27890,27858,27869,27828,27786,27805,27776,27870,27840,27952,27853,27847,27824,27897,27855,27881,27857,28820,28824,28805,28819,28806,28804,28817,28822,28802,28826,28803,29290,29398,29387,29400,29385,29404,29394,29396,29402,29388,29393,29604,29601,29613,29606,29602,29600,29612,29597,29917,29928,30015,30016,30014,30092,30104,30383,30451,30449,30448,30453,30712,30716,30713,30715,30714,30711,31042,31039,31173,31352,31355,31483,31861,31997,32821,32911,32942,32931,32952,32949,32941,33312,33440,33472,33451,33434,33432,33435,33461,33447,33454,33468,33438,33466,33460,33448,33441,33449,33474,33444,33475,33462,33442,34416,34415,34413,34414,35926,36818,36811,36819,36813,36822,36821,36823,37042,37044,37039,37043,37040,38457,38461,38460,38458,38467,20429,20421,20435,20402,20425,20427,20417,20436,20444,20441,20411,20403,20443,20423,20438,20410,20416,20409,20460,21060,21065,21184,21186,21309,21372,21399,21398,21401,21400,21690,21665,21677,21669,21711,21699,33549,21687,21678,21718,21686,21701,21702,21664,21616,21692,21666,21694,21618,21726,21680,22453,22430,22431,22436,22412,22423,22429,22427,22420,22424,22415,22425,22437,22426,22421,22772,22797,22867,23009,23006,23022,23040,23025,23005,23034,23037,23036,23030,23012,23026,23031,23003,23017,23027,23029,23008,23038,23028,23021,23464,23628,23760,23768,23756,23767,23755,23771,23774,23770,23753,23751,23754,23766,23763,23764,23759,23752,23750,23758,23775,23800,24057,24097,24098,24099,24096,24100,24240,24228,24226,24219,24227,24229,24327,24366,24406,24454,24631,24633,24660,24690,24670,24645,24659,24647,24649,24667,24652,24640,24642,24671,24612,24644,24664,24678,24686,25154,25155,25295,25357,25355,25333,25358,25347,25323,25337,25359,25356,25336,25334,25344,25363,25364,25338,25365,25339,25328,25921,25923,26026,26047,26166,26145,26162,26165,26140,26150,26146,26163,26155,26170,26141,26164,26169,26158,26383,26384,26561,26610,26568,26554,26588,26555,26616,26584,26560,26551,26565,26603,26596,26591,26549,26573,26547,26615,26614,26606,26595,26562,26553,26574,26599,26608,26546,26620,26566,26605,26572,26542,26598,26587,26618,26569,26570,26563,26602,26571,27432,27522,27524,27574,27606,27608,27616,27680,27681,27944,27956,27949,27935,27964,27967,27922,27914,27866,27955,27908,27929,27962,27930,27921,27904,27933,27970,27905,27928,27959,27907,27919,27968,27911,27936,27948,27912,27938,27913,27920,28855,28831,28862,28849,28848,28833,28852,28853,28841,29249,29257,29258,29292,29296,29299,29294,29386,29412,29416,29419,29407,29418,29414,29411,29573,29644,29634,29640,29637,29625,29622,29621,29620,29675,29631,29639,29630,29635,29638,29624,29643,29932,29934,29998,30023,30024,30119,30122,30329,30404,30472,30467,30468,30469,30474,30455,30459,30458,30695,30696,30726,30737,30738,30725,30736,30735,30734,30729,30723,30739,31050,31052,31051,31045,31044,31189,31181,31183,31190,31182,31360,31358,31441,31488,31489,31866,31864,31865,31871,31872,31873,32003,32008,32001,32600,32657,32653,32702,32775,32782,32783,32788,32823,32984,32967,32992,32977,32968,32962,32976,32965,32995,32985,32988,32970,32981,32969,32975,32983,32998,32973,33279,33313,33428,33497,33534,33529,33543,33512,33536,33493,33594,33515,33494,33524,33516,33505,33522,33525,33548,33531,33526,33520,33514,33508,33504,33530,33523,33517,34423,34420,34428,34419,34881,34894,34919,34922,34921,35283,35332,35335,36210,36835,36833,36846,36832,37105,37053,37055,37077,37061,37054,37063,37067,37064,37332,37331,38484,38479,38481,38483,38474,38478,20510,20485,20487,20499,20514,20528,20507,20469,20468,20531,20535,20524,20470,20471,20503,20508,20512,20519,20533,20527,20529,20494,20826,20884,20883,20938,20932,20933,20936,20942,21089,21082,21074,21086,21087,21077,21090,21197,21262,21406,21798,21730,21783,21778,21735,21747,21732,21786,21759,21764,21768,21739,21777,21765,21745,21770,21755,21751,21752,21728,21774,21763,21771,22273,22274,22476,22578,22485,22482,22458,22470,22461,22460,22456,22454,22463,22471,22480,22457,22465,22798,22858,23065,23062,23085,23086,23061,23055,23063,23050,23070,23091,23404,23463,23469,23468,23555,23638,23636,23788,23807,23790,23793,23799,23808,23801,24105,24104,24232,24238,24234,24236,24371,24368,24423,24669,24666,24679,24641,24738,24712,24704,24722,24705,24733,24707,24725,24731,24727,24711,24732,24718,25113,25158,25330,25360,25430,25388,25412,25413,25398,25411,25572,25401,25419,25418,25404,25385,25409,25396,25432,25428,25433,25389,25415,25395,25434,25425,25400,25431,25408,25416,25930,25926,26054,26051,26052,26050,26186,26207,26183,26193,26386,26387,26655,26650,26697,26674,26675,26683,26699,26703,26646,26673,26652,26677,26667,26669,26671,26702,26692,26676,26653,26642,26644,26662,26664,26670,26701,26682,26661,26656,27436,27439,27437,27441,27444,27501,32898,27528,27622,27620,27624,27619,27618,27623,27685,28026,28003,28004,28022,27917,28001,28050,27992,28002,28013,28015,28049,28045,28143,28031,28038,27998,28007,28000,28055,28016,28028,27999,28034,28056,27951,28008,28043,28030,28032,28036,27926,28035,28027,28029,28021,28048,28892,28883,28881,28893,28875,32569,28898,28887,28882,28894,28896,28884,28877,28869,28870,28871,28890,28878,28897,29250,29304,29303,29302,29440,29434,29428,29438,29430,29427,29435,29441,29651,29657,29669,29654,29628,29671,29667,29673,29660,29650,29659,29652,29661,29658,29655,29656,29672,29918,29919,29940,29941,29985,30043,30047,30128,30145,30139,30148,30144,30143,30134,30138,30346,30409,30493,30491,30480,30483,30482,30499,30481,30485,30489,30490,30498,30503,30755,30764,30754,30773,30767,30760,30766,30763,30753,30761,30771,30762,30769,31060,31067,31055,31068,31059,31058,31057,31211,31212,31200,31214,31213,31210,31196,31198,31197,31366,31369,31365,31371,31372,31370,31367,31448,31504,31492,31507,31493,31503,31496,31498,31502,31497,31506,31876,31889,31882,31884,31880,31885,31877,32030,32029,32017,32014,32024,32022,32019,32031,32018,32015,32012,32604,32609,32606,32608,32605,32603,32662,32658,32707,32706,32704,32790,32830,32825,33018,33010,33017,33013,33025,33019,33024,33281,33327,33317,33587,33581,33604,33561,33617,33573,33622,33599,33601,33574,33564,33570,33602,33614,33563,33578,33544,33596,33613,33558,33572,33568,33591,33583,33577,33607,33605,33612,33619,33566,33580,33611,33575,33608,34387,34386,34466,34472,34454,34445,34449,34462,34439,34455,34438,34443,34458,34437,34469,34457,34465,34471,34453,34456,34446,34461,34448,34452,34883,34884,34925,34933,34934,34930,34944,34929,34943,34927,34947,34942,34932,34940,35346,35911,35927,35963,36004,36003,36214,36216,36277,36279,36278,36561,36563,36862,36853,36866,36863,36859,36868,36860,36854,37078,37088,37081,37082,37091,37087,37093,37080,37083,37079,37084,37092,37200,37198,37199,37333,37346,37338,38492,38495,38588,39139,39647,39727,20095,20592,20586,20577,20574,20576,20563,20555,20573,20594,20552,20557,20545,20571,20554,20578,20501,20549,20575,20585,20587,20579,20580,20550,20544,20590,20595,20567,20561,20944,21099,21101,21100,21102,21206,21203,21293,21404,21877,21878,21820,21837,21840,21812,21802,21841,21858,21814,21813,21808,21842,21829,21772,21810,21861,21838,21817,21832,21805,21819,21824,21835,22282,22279,22523,22548,22498,22518,22492,22516,22528,22509,22525,22536,22520,22539,22515,22479,22535,22510,22499,22514,22501,22508,22497,22542,22524,22544,22503,22529,22540,22513,22505,22512,22541,22532,22876,23136,23128,23125,23143,23134,23096,23093,23149,23120,23135,23141,23148,23123,23140,23127,23107,23133,23122,23108,23131,23112,23182,23102,23117,23097,23116,23152,23145,23111,23121,23126,23106,23132,23410,23406,23489,23488,23641,23838,23819,23837,23834,23840,23820,23848,23821,23846,23845,23823,23856,23826,23843,23839,23854,24126,24116,24241,24244,24249,24242,24243,24374,24376,24475,24470,24479,24714,24720,24710,24766,24752,24762,24787,24788,24783,24804,24793,24797,24776,24753,24795,24759,24778,24767,24771,24781,24768,25394,25445,25482,25474,25469,25533,25502,25517,25501,25495,25515,25486,25455,25479,25488,25454,25519,25461,25500,25453,25518,25468,25508,25403,25503,25464,25477,25473,25489,25485,25456,25939,26061,26213,26209,26203,26201,26204,26210,26392,26745,26759,26768,26780,26733,26734,26798,26795,26966,26735,26787,26796,26793,26741,26740,26802,26767,26743,26770,26748,26731,26738,26794,26752,26737,26750,26779,26774,26763,26784,26761,26788,26744,26747,26769,26764,26762,26749,27446,27443,27447,27448,27537,27535,27533,27534,27532,27690,28096,28075,28084,28083,28276,28076,28137,28130,28087,28150,28116,28160,28104,28128,28127,28118,28094,28133,28124,28125,28123,28148,28106,28093,28141,28144,28090,28117,28098,28111,28105,28112,28146,28115,28157,28119,28109,28131,28091,28922,28941,28919,28951,28916,28940,28912,28932,28915,28944,28924,28927,28934,28947,28928,28920,28918,28939,28930,28942,29310,29307,29308,29311,29469,29463,29447,29457,29464,29450,29448,29439,29455,29470,29576,29686,29688,29685,29700,29697,29693,29703,29696,29690,29692,29695,29708,29707,29684,29704,30052,30051,30158,30162,30159,30155,30156,30161,30160,30351,30345,30419,30521,30511,30509,30513,30514,30516,30515,30525,30501,30523,30517,30792,30802,30793,30797,30794,30796,30758,30789,30800,31076,31079,31081,31082,31075,31083,31073,31163,31226,31224,31222,31223,31375,31380,31376,31541,31559,31540,31525,31536,31522,31524,31539,31512,31530,31517,31537,31531,31533,31535,31538,31544,31514,31523,31892,31896,31894,31907,32053,32061,32056,32054,32058,32069,32044,32041,32065,32071,32062,32063,32074,32059,32040,32611,32661,32668,32669,32667,32714,32715,32717,32720,32721,32711,32719,32713,32799,32798,32795,32839,32835,32840,33048,33061,33049,33051,33069,33055,33068,33054,33057,33045,33063,33053,33058,33297,33336,33331,33338,33332,33330,33396,33680,33699,33704,33677,33658,33651,33700,33652,33679,33665,33685,33689,33653,33684,33705,33661,33667,33676,33693,33691,33706,33675,33662,33701,33711,33672,33687,33712,33663,33702,33671,33710,33654,33690,34393,34390,34495,34487,34498,34497,34501,34490,34480,34504,34489,34483,34488,34508,34484,34491,34492,34499,34493,34494,34898,34953,34965,34984,34978,34986,34970,34961,34977,34975,34968,34983,34969,34971,34967,34980,34988,34956,34963,34958,35202,35286,35289,35285,35376,35367,35372,35358,35897,35899,35932,35933,35965,36005,36221,36219,36217,36284,36290,36281,36287,36289,36568,36574,36573,36572,36567,36576,36577,36900,36875,36881,36892,36876,36897,37103,37098,37104,37108,37106,37107,37076,37099,37100,37097,37206,37208,37210,37203,37205,37356,37364,37361,37363,37368,37348,37369,37354,37355,37367,37352,37358,38266,38278,38280,38524,38509,38507,38513,38511,38591,38762,38916,39141,39319,20635,20629,20628,20638,20619,20643,20611,20620,20622,20637,20584,20636,20626,20610,20615,20831,20948,21266,21265,21412,21415,21905,21928,21925,21933,21879,22085,21922,21907,21896,21903,21941,21889,21923,21906,21924,21885,21900,21926,21887,21909,21921,21902,22284,22569,22583,22553,22558,22567,22563,22568,22517,22600,22565,22556,22555,22579,22591,22582,22574,22585,22584,22573,22572,22587,22881,23215,23188,23199,23162,23202,23198,23160,23206,23164,23205,23212,23189,23214,23095,23172,23178,23191,23171,23179,23209,23163,23165,23180,23196,23183,23187,23197,23530,23501,23499,23508,23505,23498,23502,23564,23600,23863,23875,23915,23873,23883,23871,23861,23889,23886,23893,23859,23866,23890,23869,23857,23897,23874,23865,23881,23864,23868,23858,23862,23872,23877,24132,24129,24408,24486,24485,24491,24777,24761,24780,24802,24782,24772,24852,24818,24842,24854,24837,24821,24851,24824,24828,24830,24769,24835,24856,24861,24848,24831,24836,24843,25162,25492,25521,25520,25550,25573,25576,25583,25539,25757,25587,25546,25568,25590,25557,25586,25589,25697,25567,25534,25565,25564,25540,25560,25555,25538,25543,25548,25547,25544,25584,25559,25561,25906,25959,25962,25956,25948,25960,25957,25996,26013,26014,26030,26064,26066,26236,26220,26235,26240,26225,26233,26218,26226,26369,26892,26835,26884,26844,26922,26860,26858,26865,26895,26838,26871,26859,26852,26870,26899,26896,26867,26849,26887,26828,26888,26992,26804,26897,26863,26822,26900,26872,26832,26877,26876,26856,26891,26890,26903,26830,26824,26845,26846,26854,26868,26833,26886,26836,26857,26901,26917,26823,27449,27451,27455,27452,27540,27543,27545,27541,27581,27632,27634,27635,27696,28156,28230,28231,28191,28233,28296,28220,28221,28229,28258,28203,28223,28225,28253,28275,28188,28211,28235,28224,28241,28219,28163,28206,28254,28264,28252,28257,28209,28200,28256,28273,28267,28217,28194,28208,28243,28261,28199,28280,28260,28279,28245,28281,28242,28262,28213,28214,28250,28960,28958,28975,28923,28974,28977,28963,28965,28962,28978,28959,28968,28986,28955,29259,29274,29320,29321,29318,29317,29323,29458,29451,29488,29474,29489,29491,29479,29490,29485,29478,29475,29493,29452,29742,29740,29744,29739,29718,29722,29729,29741,29745,29732,29731,29725,29737,29728,29746,29947,29999,30063,30060,30183,30170,30177,30182,30173,30175,30180,30167,30357,30354,30426,30534,30535,30532,30541,30533,30538,30542,30539,30540,30686,30700,30816,30820,30821,30812,30829,30833,30826,30830,30832,30825,30824,30814,30818,31092,31091,31090,31088,31234,31242,31235,31244,31236,31385,31462,31460,31562,31547,31556,31560,31564,31566,31552,31576,31557,31906,31902,31912,31905,32088,32111,32099,32083,32086,32103,32106,32079,32109,32092,32107,32082,32084,32105,32081,32095,32078,32574,32575,32613,32614,32674,32672,32673,32727,32849,32847,32848,33022,32980,33091,33098,33106,33103,33095,33085,33101,33082,33254,33262,33271,33272,33273,33284,33340,33341,33343,33397,33595,33743,33785,33827,33728,33768,33810,33767,33764,33788,33782,33808,33734,33736,33771,33763,33727,33793,33757,33765,33752,33791,33761,33739,33742,33750,33781,33737,33801,33807,33758,33809,33798,33730,33779,33749,33786,33735,33745,33770,33811,33731,33772,33774,33732,33787,33751,33762,33819,33755,33790,34520,34530,34534,34515,34531,34522,34538,34525,34539,34524,34540,34537,34519,34536,34513,34888,34902,34901,35002,35031,35001,35000,35008,35006,34998,35004,34999,35005,34994,35073,35017,35221,35224,35223,35293,35290,35291,35406,35405,35385,35417,35392,35415,35416,35396,35397,35410,35400,35409,35402,35404,35407,35935,35969,35968,36026,36030,36016,36025,36021,36228,36224,36233,36312,36307,36301,36295,36310,36316,36303,36309,36313,36296,36311,36293,36591,36599,36602,36601,36582,36590,36581,36597,36583,36584,36598,36587,36593,36588,36596,36585,36909,36916,36911,37126,37164,37124,37119,37116,37128,37113,37115,37121,37120,37127,37125,37123,37217,37220,37215,37218,37216,37377,37386,37413,37379,37402,37414,37391,37388,37376,37394,37375,37373,37382,37380,37415,37378,37404,37412,37401,37399,37381,37398,38267,38285,38284,38288,38535,38526,38536,38537,38531,38528,38594,38600,38595,38641,38640,38764,38768,38766,38919,39081,39147,40166,40697,20099,20100,20150,20669,20671,20678,20654,20676,20682,20660,20680,20674,20656,20673,20666,20657,20683,20681,20662,20664,20951,21114,21112,21115,21116,21955,21979,21964,21968,21963,21962,21981,21952,21972,21956,21993,21951,21970,21901,21967,21973,21986,21974,21960,22002,21965,21977,21954,22292,22611,22632,22628,22607,22605,22601,22639,22613,22606,22621,22617,22629,22619,22589,22627,22641,22780,23239,23236,23243,23226,23224,23217,23221,23216,23231,23240,23227,23238,23223,23232,23242,23220,23222,23245,23225,23184,23510,23512,23513,23583,23603,23921,23907,23882,23909,23922,23916,23902,23912,23911,23906,24048,24143,24142,24138,24141,24139,24261,24268,24262,24267,24263,24384,24495,24493,24823,24905,24906,24875,24901,24886,24882,24878,24902,24879,24911,24873,24896,25120,37224,25123,25125,25124,25541,25585,25579,25616,25618,25609,25632,25636,25651,25667,25631,25621,25624,25657,25655,25634,25635,25612,25638,25648,25640,25665,25653,25647,25610,25626,25664,25637,25639,25611,25575,25627,25646,25633,25614,25967,26002,26067,26246,26252,26261,26256,26251,26250,26265,26260,26232,26400,26982,26975,26936,26958,26978,26993,26943,26949,26986,26937,26946,26967,26969,27002,26952,26953,26933,26988,26931,26941,26981,26864,27000,26932,26985,26944,26991,26948,26998,26968,26945,26996,26956,26939,26955,26935,26972,26959,26961,26930,26962,26927,27003,26940,27462,27461,27459,27458,27464,27457,27547,64013,27643,27644,27641,27639,27640,28315,28374,28360,28303,28352,28319,28307,28308,28320,28337,28345,28358,28370,28349,28353,28318,28361,28343,28336,28365,28326,28367,28338,28350,28355,28380,28376,28313,28306,28302,28301,28324,28321,28351,28339,28368,28362,28311,28334,28323,28999,29012,29010,29027,29024,28993,29021,29026,29042,29048,29034,29025,28994,29016,28995,29003,29040,29023,29008,29011,28996,29005,29018,29263,29325,29324,29329,29328,29326,29500,29506,29499,29498,29504,29514,29513,29764,29770,29771,29778,29777,29783,29760,29775,29776,29774,29762,29766,29773,29780,29921,29951,29950,29949,29981,30073,30071,27011,30191,30223,30211,30199,30206,30204,30201,30200,30224,30203,30198,30189,30197,30205,30361,30389,30429,30549,30559,30560,30546,30550,30554,30569,30567,30548,30553,30573,30688,30855,30874,30868,30863,30852,30869,30853,30854,30881,30851,30841,30873,30848,30870,30843,31100,31106,31101,31097,31249,31256,31257,31250,31255,31253,31266,31251,31259,31248,31395,31394,31390,31467,31590,31588,31597,31604,31593,31602,31589,31603,31601,31600,31585,31608,31606,31587,31922,31924,31919,32136,32134,32128,32141,32127,32133,32122,32142,32123,32131,32124,32140,32148,32132,32125,32146,32621,32619,32615,32616,32620,32678,32677,32679,32731,32732,32801,33124,33120,33143,33116,33129,33115,33122,33138,26401,33118,33142,33127,33135,33092,33121,33309,33353,33348,33344,33346,33349,34033,33855,33878,33910,33913,33935,33933,33893,33873,33856,33926,33895,33840,33869,33917,33882,33881,33908,33907,33885,34055,33886,33847,33850,33844,33914,33859,33912,33842,33861,33833,33753,33867,33839,33858,33837,33887,33904,33849,33870,33868,33874,33903,33989,33934,33851,33863,33846,33843,33896,33918,33860,33835,33888,33876,33902,33872,34571,34564,34551,34572,34554,34518,34549,34637,34552,34574,34569,34561,34550,34573,34565,35030,35019,35021,35022,35038,35035,35034,35020,35024,35205,35227,35295,35301,35300,35297,35296,35298,35292,35302,35446,35462,35455,35425,35391,35447,35458,35460,35445,35459,35457,35444,35450,35900,35915,35914,35941,35940,35942,35974,35972,35973,36044,36200,36201,36241,36236,36238,36239,36237,36243,36244,36240,36242,36336,36320,36332,36337,36334,36304,36329,36323,36322,36327,36338,36331,36340,36614,36607,36609,36608,36613,36615,36616,36610,36619,36946,36927,36932,36937,36925,37136,37133,37135,37137,37142,37140,37131,37134,37230,37231,37448,37458,37424,37434,37478,37427,37477,37470,37507,37422,37450,37446,37485,37484,37455,37472,37479,37487,37430,37473,37488,37425,37460,37475,37456,37490,37454,37459,37452,37462,37426,38303,38300,38302,38299,38546,38547,38545,38551,38606,38650,38653,38648,38645,38771,38775,38776,38770,38927,38925,38926,39084,39158,39161,39343,39346,39344,39349,39597,39595,39771,40170,40173,40167,40576,40701,20710,20692,20695,20712,20723,20699,20714,20701,20708,20691,20716,20720,20719,20707,20704,20952,21120,21121,21225,21227,21296,21420,22055,22037,22028,22034,22012,22031,22044,22017,22035,22018,22010,22045,22020,22015,22009,22665,22652,22672,22680,22662,22657,22655,22644,22667,22650,22663,22673,22670,22646,22658,22664,22651,22676,22671,22782,22891,23260,23278,23269,23253,23274,23258,23277,23275,23283,23266,23264,23259,23276,23262,23261,23257,23272,23263,23415,23520,23523,23651,23938,23936,23933,23942,23930,23937,23927,23946,23945,23944,23934,23932,23949,23929,23935,24152,24153,24147,24280,24273,24279,24270,24284,24277,24281,24274,24276,24388,24387,24431,24502,24876,24872,24897,24926,24945,24947,24914,24915,24946,24940,24960,24948,24916,24954,24923,24933,24891,24938,24929,24918,25129,25127,25131,25643,25677,25691,25693,25716,25718,25714,25715,25725,25717,25702,25766,25678,25730,25694,25692,25675,25683,25696,25680,25727,25663,25708,25707,25689,25701,25719,25971,26016,26273,26272,26271,26373,26372,26402,27057,27062,27081,27040,27086,27030,27056,27052,27068,27025,27033,27022,27047,27021,27049,27070,27055,27071,27076,27069,27044,27092,27065,27082,27034,27087,27059,27027,27050,27041,27038,27097,27031,27024,27074,27061,27045,27078,27466,27469,27467,27550,27551,27552,27587,27588,27646,28366,28405,28401,28419,28453,28408,28471,28411,28462,28425,28494,28441,28442,28455,28440,28475,28434,28397,28426,28470,28531,28409,28398,28461,28480,28464,28476,28469,28395,28423,28430,28483,28421,28413,28406,28473,28444,28412,28474,28447,28429,28446,28424,28449,29063,29072,29065,29056,29061,29058,29071,29051,29062,29057,29079,29252,29267,29335,29333,29331,29507,29517,29521,29516,29794,29811,29809,29813,29810,29799,29806,29952,29954,29955,30077,30096,30230,30216,30220,30229,30225,30218,30228,30392,30593,30588,30597,30594,30574,30592,30575,30590,30595,30898,30890,30900,30893,30888,30846,30891,30878,30885,30880,30892,30882,30884,31128,31114,31115,31126,31125,31124,31123,31127,31112,31122,31120,31275,31306,31280,31279,31272,31270,31400,31403,31404,31470,31624,31644,31626,31633,31632,31638,31629,31628,31643,31630,31621,31640,21124,31641,31652,31618,31931,31935,31932,31930,32167,32183,32194,32163,32170,32193,32192,32197,32157,32206,32196,32198,32203,32204,32175,32185,32150,32188,32159,32166,32174,32169,32161,32201,32627,32738,32739,32741,32734,32804,32861,32860,33161,33158,33155,33159,33165,33164,33163,33301,33943,33956,33953,33951,33978,33998,33986,33964,33966,33963,33977,33972,33985,33997,33962,33946,33969,34000,33949,33959,33979,33954,33940,33991,33996,33947,33961,33967,33960,34006,33944,33974,33999,33952,34007,34004,34002,34011,33968,33937,34401,34611,34595,34600,34667,34624,34606,34590,34593,34585,34587,34627,34604,34625,34622,34630,34592,34610,34602,34605,34620,34578,34618,34609,34613,34626,34598,34599,34616,34596,34586,34608,34577,35063,35047,35057,35058,35066,35070,35054,35068,35062,35067,35056,35052,35051,35229,35233,35231,35230,35305,35307,35304,35499,35481,35467,35474,35471,35478,35901,35944,35945,36053,36047,36055,36246,36361,36354,36351,36365,36349,36362,36355,36359,36358,36357,36350,36352,36356,36624,36625,36622,36621,37155,37148,37152,37154,37151,37149,37146,37156,37153,37147,37242,37234,37241,37235,37541,37540,37494,37531,37498,37536,37524,37546,37517,37542,37530,37547,37497,37527,37503,37539,37614,37518,37506,37525,37538,37501,37512,37537,37514,37510,37516,37529,37543,37502,37511,37545,37533,37515,37421,38558,38561,38655,38744,38781,38778,38782,38787,38784,38786,38779,38788,38785,38783,38862,38861,38934,39085,39086,39170,39168,39175,39325,39324,39363,39353,39355,39354,39362,39357,39367,39601,39651,39655,39742,39743,39776,39777,39775,40177,40178,40181,40615,20735,20739,20784,20728,20742,20743,20726,20734,20747,20748,20733,20746,21131,21132,21233,21231,22088,22082,22092,22069,22081,22090,22089,22086,22104,22106,22080,22067,22077,22060,22078,22072,22058,22074,22298,22699,22685,22705,22688,22691,22703,22700,22693,22689,22783,23295,23284,23293,23287,23286,23299,23288,23298,23289,23297,23303,23301,23311,23655,23961,23959,23967,23954,23970,23955,23957,23968,23964,23969,23962,23966,24169,24157,24160,24156,32243,24283,24286,24289,24393,24498,24971,24963,24953,25009,25008,24994,24969,24987,24979,25007,25005,24991,24978,25002,24993,24973,24934,25011,25133,25710,25712,25750,25760,25733,25751,25756,25743,25739,25738,25740,25763,25759,25704,25777,25752,25974,25978,25977,25979,26034,26035,26293,26288,26281,26290,26295,26282,26287,27136,27142,27159,27109,27128,27157,27121,27108,27168,27135,27116,27106,27163,27165,27134,27175,27122,27118,27156,27127,27111,27200,27144,27110,27131,27149,27132,27115,27145,27140,27160,27173,27151,27126,27174,27143,27124,27158,27473,27557,27555,27554,27558,27649,27648,27647,27650,28481,28454,28542,28551,28614,28562,28557,28553,28556,28514,28495,28549,28506,28566,28534,28524,28546,28501,28530,28498,28496,28503,28564,28563,28509,28416,28513,28523,28541,28519,28560,28499,28555,28521,28543,28565,28515,28535,28522,28539,29106,29103,29083,29104,29088,29082,29097,29109,29085,29093,29086,29092,29089,29098,29084,29095,29107,29336,29338,29528,29522,29534,29535,29536,29533,29531,29537,29530,29529,29538,29831,29833,29834,29830,29825,29821,29829,29832,29820,29817,29960,29959,30078,30245,30238,30233,30237,30236,30243,30234,30248,30235,30364,30365,30366,30363,30605,30607,30601,30600,30925,30907,30927,30924,30929,30926,30932,30920,30915,30916,30921,31130,31137,31136,31132,31138,31131,27510,31289,31410,31412,31411,31671,31691,31678,31660,31694,31663,31673,31690,31669,31941,31944,31948,31947,32247,32219,32234,32231,32215,32225,32259,32250,32230,32246,32241,32240,32238,32223,32630,32684,32688,32685,32749,32747,32746,32748,32742,32744,32868,32871,33187,33183,33182,33173,33186,33177,33175,33302,33359,33363,33362,33360,33358,33361,34084,34107,34063,34048,34089,34062,34057,34061,34079,34058,34087,34076,34043,34091,34042,34056,34060,34036,34090,34034,34069,34039,34027,34035,34044,34066,34026,34025,34070,34046,34088,34077,34094,34050,34045,34078,34038,34097,34086,34023,34024,34032,34031,34041,34072,34080,34096,34059,34073,34095,34402,34646,34659,34660,34679,34785,34675,34648,34644,34651,34642,34657,34650,34641,34654,34669,34666,34640,34638,34655,34653,34671,34668,34682,34670,34652,34661,34639,34683,34677,34658,34663,34665,34906,35077,35084,35092,35083,35095,35096,35097,35078,35094,35089,35086,35081,35234,35236,35235,35309,35312,35308,35535,35526,35512,35539,35537,35540,35541,35515,35543,35518,35520,35525,35544,35523,35514,35517,35545,35902,35917,35983,36069,36063,36057,36072,36058,36061,36071,36256,36252,36257,36251,36384,36387,36389,36388,36398,36373,36379,36374,36369,36377,36390,36391,36372,36370,36376,36371,36380,36375,36378,36652,36644,36632,36634,36640,36643,36630,36631,36979,36976,36975,36967,36971,37167,37163,37161,37162,37170,37158,37166,37253,37254,37258,37249,37250,37252,37248,37584,37571,37572,37568,37593,37558,37583,37617,37599,37592,37609,37591,37597,37580,37615,37570,37608,37578,37576,37582,37606,37581,37589,37577,37600,37598,37607,37585,37587,37557,37601,37574,37556,38268,38316,38315,38318,38320,38564,38562,38611,38661,38664,38658,38746,38794,38798,38792,38864,38863,38942,38941,38950,38953,38952,38944,38939,38951,39090,39176,39162,39185,39188,39190,39191,39189,39388,39373,39375,39379,39380,39374,39369,39382,39384,39371,39383,39372,39603,39660,39659,39667,39666,39665,39750,39747,39783,39796,39793,39782,39798,39797,39792,39784,39780,39788,40188,40186,40189,40191,40183,40199,40192,40185,40187,40200,40197,40196,40579,40659,40719,40720,20764,20755,20759,20762,20753,20958,21300,21473,22128,22112,22126,22131,22118,22115,22125,22130,22110,22135,22300,22299,22728,22717,22729,22719,22714,22722,22716,22726,23319,23321,23323,23329,23316,23315,23312,23318,23336,23322,23328,23326,23535,23980,23985,23977,23975,23989,23984,23982,23978,23976,23986,23981,23983,23988,24167,24168,24166,24175,24297,24295,24294,24296,24293,24395,24508,24989,25000,24982,25029,25012,25030,25025,25036,25018,25023,25016,24972,25815,25814,25808,25807,25801,25789,25737,25795,25819,25843,25817,25907,25983,25980,26018,26312,26302,26304,26314,26315,26319,26301,26299,26298,26316,26403,27188,27238,27209,27239,27186,27240,27198,27229,27245,27254,27227,27217,27176,27226,27195,27199,27201,27242,27236,27216,27215,27220,27247,27241,27232,27196,27230,27222,27221,27213,27214,27206,27477,27476,27478,27559,27562,27563,27592,27591,27652,27651,27654,28589,28619,28579,28615,28604,28622,28616,28510,28612,28605,28574,28618,28584,28676,28581,28590,28602,28588,28586,28623,28607,28600,28578,28617,28587,28621,28591,28594,28592,29125,29122,29119,29112,29142,29120,29121,29131,29140,29130,29127,29135,29117,29144,29116,29126,29146,29147,29341,29342,29545,29542,29543,29548,29541,29547,29546,29823,29850,29856,29844,29842,29845,29857,29963,30080,30255,30253,30257,30269,30259,30268,30261,30258,30256,30395,30438,30618,30621,30625,30620,30619,30626,30627,30613,30617,30615,30941,30953,30949,30954,30942,30947,30939,30945,30946,30957,30943,30944,31140,31300,31304,31303,31414,31416,31413,31409,31415,31710,31715,31719,31709,31701,31717,31706,31720,31737,31700,31722,31714,31708,31723,31704,31711,31954,31956,31959,31952,31953,32274,32289,32279,32268,32287,32288,32275,32270,32284,32277,32282,32290,32267,32271,32278,32269,32276,32293,32292,32579,32635,32636,32634,32689,32751,32810,32809,32876,33201,33190,33198,33209,33205,33195,33200,33196,33204,33202,33207,33191,33266,33365,33366,33367,34134,34117,34155,34125,34131,34145,34136,34112,34118,34148,34113,34146,34116,34129,34119,34147,34110,34139,34161,34126,34158,34165,34133,34151,34144,34188,34150,34141,34132,34149,34156,34403,34405,34404,34715,34703,34711,34707,34706,34696,34689,34710,34712,34681,34695,34723,34693,34704,34705,34717,34692,34708,34716,34714,34697,35102,35110,35120,35117,35118,35111,35121,35106,35113,35107,35119,35116,35103,35313,35552,35554,35570,35572,35573,35549,35604,35556,35551,35568,35528,35550,35553,35560,35583,35567,35579,35985,35986,35984,36085,36078,36081,36080,36083,36204,36206,36261,36263,36403,36414,36408,36416,36421,36406,36412,36413,36417,36400,36415,36541,36662,36654,36661,36658,36665,36663,36660,36982,36985,36987,36998,37114,37171,37173,37174,37267,37264,37265,37261,37263,37671,37662,37640,37663,37638,37647,37754,37688,37692,37659,37667,37650,37633,37702,37677,37646,37645,37579,37661,37626,37669,37651,37625,37623,37684,37634,37668,37631,37673,37689,37685,37674,37652,37644,37643,37630,37641,37632,37627,37654,38332,38349,38334,38329,38330,38326,38335,38325,38333,38569,38612,38667,38674,38672,38809,38807,38804,38896,38904,38965,38959,38962,39204,39199,39207,39209,39326,39406,39404,39397,39396,39408,39395,39402,39401,39399,39609,39615,39604,39611,39670,39674,39673,39671,39731,39808,39813,39815,39804,39806,39803,39810,39827,39826,39824,39802,39829,39805,39816,40229,40215,40224,40222,40212,40233,40221,40216,40226,40208,40217,40223,40584,40582,40583,40622,40621,40661,40662,40698,40722,40765,20774,20773,20770,20772,20768,20777,21236,22163,22156,22157,22150,22148,22147,22142,22146,22143,22145,22742,22740,22735,22738,23341,23333,23346,23331,23340,23335,23334,23343,23342,23419,23537,23538,23991,24172,24170,24510,24507,25027,25013,25020,25063,25056,25061,25060,25064,25054,25839,25833,25827,25835,25828,25832,25985,25984,26038,26074,26322,27277,27286,27265,27301,27273,27295,27291,27297,27294,27271,27283,27278,27285,27267,27304,27300,27281,27263,27302,27290,27269,27276,27282,27483,27565,27657,28620,28585,28660,28628,28643,28636,28653,28647,28646,28638,28658,28637,28642,28648,29153,29169,29160,29170,29156,29168,29154,29555,29550,29551,29847,29874,29867,29840,29866,29869,29873,29861,29871,29968,29969,29970,29967,30084,30275,30280,30281,30279,30372,30441,30645,30635,30642,30647,30646,30644,30641,30632,30704,30963,30973,30978,30971,30972,30962,30981,30969,30974,30980,31147,31144,31324,31323,31318,31320,31316,31322,31422,31424,31425,31749,31759,31730,31744,31743,31739,31758,31732,31755,31731,31746,31753,31747,31745,31736,31741,31750,31728,31729,31760,31754,31976,32301,32316,32322,32307,38984,32312,32298,32329,32320,32327,32297,32332,32304,32315,32310,32324,32314,32581,32639,32638,32637,32756,32754,32812,33211,33220,33228,33226,33221,33223,33212,33257,33371,33370,33372,34179,34176,34191,34215,34197,34208,34187,34211,34171,34212,34202,34206,34167,34172,34185,34209,34170,34168,34135,34190,34198,34182,34189,34201,34205,34177,34210,34178,34184,34181,34169,34166,34200,34192,34207,34408,34750,34730,34733,34757,34736,34732,34745,34741,34748,34734,34761,34755,34754,34764,34743,34735,34756,34762,34740,34742,34751,34744,34749,34782,34738,35125,35123,35132,35134,35137,35154,35127,35138,35245,35247,35246,35314,35315,35614,35608,35606,35601,35589,35595,35618,35599,35602,35605,35591,35597,35592,35590,35612,35603,35610,35919,35952,35954,35953,35951,35989,35988,36089,36207,36430,36429,36435,36432,36428,36423,36675,36672,36997,36990,37176,37274,37282,37275,37273,37279,37281,37277,37280,37793,37763,37807,37732,37718,37703,37756,37720,37724,37750,37705,37712,37713,37728,37741,37775,37708,37738,37753,37719,37717,37714,37711,37745,37751,37755,37729,37726,37731,37735,37760,37710,37721,38343,38336,38345,38339,38341,38327,38574,38576,38572,38688,38687,38680,38685,38681,38810,38817,38812,38814,38813,38869,38868,38897,38977,38980,38986,38985,38981,38979,39205,39211,39212,39210,39219,39218,39215,39213,39217,39216,39320,39331,39329,39426,39418,39412,39415,39417,39416,39414,39419,39421,39422,39420,39427,39614,39678,39677,39681,39676,39752,39834,39848,39838,39835,39846,39841,39845,39844,39814,39842,39840,39855,40243,40257,40295,40246,40238,40239,40241,40248,40240,40261,40258,40259,40254,40247,40256,40253,32757,40237,40586,40585,40589,40624,40648,40666,40699,40703,40740,40739,40738,40788,40864,20785,20781,20782,22168,22172,22167,22170,22173,22169,22896,23356,23657,23658,24000,24173,24174,25048,25055,25069,25070,25073,25066,25072,25067,25046,25065,25855,25860,25853,25848,25857,25859,25852,26004,26075,26330,26331,26328,27333,27321,27325,27361,27334,27322,27318,27319,27335,27316,27309,27486,27593,27659,28679,28684,28685,28673,28677,28692,28686,28671,28672,28667,28710,28668,28663,28682,29185,29183,29177,29187,29181,29558,29880,29888,29877,29889,29886,29878,29883,29890,29972,29971,30300,30308,30297,30288,30291,30295,30298,30374,30397,30444,30658,30650,30975,30988,30995,30996,30985,30992,30994,30993,31149,31148,31327,31772,31785,31769,31776,31775,31789,31773,31782,31784,31778,31781,31792,32348,32336,32342,32355,32344,32354,32351,32337,32352,32343,32339,32693,32691,32759,32760,32885,33233,33234,33232,33375,33374,34228,34246,34240,34243,34242,34227,34229,34237,34247,34244,34239,34251,34254,34248,34245,34225,34230,34258,34340,34232,34231,34238,34409,34791,34790,34786,34779,34795,34794,34789,34783,34803,34788,34772,34780,34771,34797,34776,34787,34724,34775,34777,34817,34804,34792,34781,35155,35147,35151,35148,35142,35152,35153,35145,35626,35623,35619,35635,35632,35637,35655,35631,35644,35646,35633,35621,35639,35622,35638,35630,35620,35643,35645,35642,35906,35957,35993,35992,35991,36094,36100,36098,36096,36444,36450,36448,36439,36438,36446,36453,36455,36443,36442,36449,36445,36457,36436,36678,36679,36680,36683,37160,37178,37179,37182,37288,37285,37287,37295,37290,37813,37772,37778,37815,37787,37789,37769,37799,37774,37802,37790,37798,37781,37768,37785,37791,37773,37809,37777,37810,37796,37800,37812,37795,37797,38354,38355,38353,38579,38615,38618,24002,38623,38616,38621,38691,38690,38693,38828,38830,38824,38827,38820,38826,38818,38821,38871,38873,38870,38872,38906,38992,38993,38994,39096,39233,39228,39226,39439,39435,39433,39437,39428,39441,39434,39429,39431,39430,39616,39644,39688,39684,39685,39721,39733,39754,39756,39755,39879,39878,39875,39871,39873,39861,39864,39891,39862,39876,39865,39869,40284,40275,40271,40266,40283,40267,40281,40278,40268,40279,40274,40276,40287,40280,40282,40590,40588,40671,40705,40704,40726,40741,40747,40746,40745,40744,40780,40789,20788,20789,21142,21239,21428,22187,22189,22182,22183,22186,22188,22746,22749,22747,22802,23357,23358,23359,24003,24176,24511,25083,25863,25872,25869,25865,25868,25870,25988,26078,26077,26334,27367,27360,27340,27345,27353,27339,27359,27356,27344,27371,27343,27341,27358,27488,27568,27660,28697,28711,28704,28694,28715,28705,28706,28707,28713,28695,28708,28700,28714,29196,29194,29191,29186,29189,29349,29350,29348,29347,29345,29899,29893,29879,29891,29974,30304,30665,30666,30660,30705,31005,31003,31009,31004,30999,31006,31152,31335,31336,31795,31804,31801,31788,31803,31980,31978,32374,32373,32376,32368,32375,32367,32378,32370,32372,32360,32587,32586,32643,32646,32695,32765,32766,32888,33239,33237,33380,33377,33379,34283,34289,34285,34265,34273,34280,34266,34263,34284,34290,34296,34264,34271,34275,34268,34257,34288,34278,34287,34270,34274,34816,34810,34819,34806,34807,34825,34828,34827,34822,34812,34824,34815,34826,34818,35170,35162,35163,35159,35169,35164,35160,35165,35161,35208,35255,35254,35318,35664,35656,35658,35648,35667,35670,35668,35659,35669,35665,35650,35666,35671,35907,35959,35958,35994,36102,36103,36105,36268,36266,36269,36267,36461,36472,36467,36458,36463,36475,36546,36690,36689,36687,36688,36691,36788,37184,37183,37296,37293,37854,37831,37839,37826,37850,37840,37881,37868,37836,37849,37801,37862,37834,37844,37870,37859,37845,37828,37838,37824,37842,37863,38269,38362,38363,38625,38697,38699,38700,38696,38694,38835,38839,38838,38877,38878,38879,39004,39001,39005,38999,39103,39101,39099,39102,39240,39239,39235,39334,39335,39450,39445,39461,39453,39460,39451,39458,39456,39463,39459,39454,39452,39444,39618,39691,39690,39694,39692,39735,39914,39915,39904,39902,39908,39910,39906,39920,39892,39895,39916,39900,39897,39909,39893,39905,39898,40311,40321,40330,40324,40328,40305,40320,40312,40326,40331,40332,40317,40299,40308,40309,40304,40297,40325,40307,40315,40322,40303,40313,40319,40327,40296,40596,40593,40640,40700,40749,40768,40769,40781,40790,40791,40792,21303,22194,22197,22195,22755,23365,24006,24007,24302,24303,24512,24513,25081,25879,25878,25877,25875,26079,26344,26339,26340,27379,27376,27370,27368,27385,27377,27374,27375,28732,28725,28719,28727,28724,28721,28738,28728,28735,28730,28729,28736,28731,28723,28737,29203,29204,29352,29565,29564,29882,30379,30378,30398,30445,30668,30670,30671,30669,30706,31013,31011,31015,31016,31012,31017,31154,31342,31340,31341,31479,31817,31816,31818,31815,31813,31982,32379,32382,32385,32384,32698,32767,32889,33243,33241,33291,33384,33385,34338,34303,34305,34302,34331,34304,34294,34308,34313,34309,34316,34301,34841,34832,34833,34839,34835,34838,35171,35174,35257,35319,35680,35690,35677,35688,35683,35685,35687,35693,36270,36486,36488,36484,36697,36694,36695,36693,36696,36698,37005,37187,37185,37303,37301,37298,37299,37899,37907,37883,37920,37903,37908,37886,37909,37904,37928,37913,37901,37877,37888,37879,37895,37902,37910,37906,37882,37897,37880,37898,37887,37884,37900,37878,37905,37894,38366,38368,38367,38702,38703,38841,38843,38909,38910,39008,39010,39011,39007,39105,39106,39248,39246,39257,39244,39243,39251,39474,39476,39473,39468,39466,39478,39465,39470,39480,39469,39623,39626,39622,39696,39698,39697,39947,39944,39927,39941,39954,39928,40000,39943,39950,39942,39959,39956,39945,40351,40345,40356,40349,40338,40344,40336,40347,40352,40340,40348,40362,40343,40353,40346,40354,40360,40350,40355,40383,40361,40342,40358,40359,40601,40603,40602,40677,40676,40679,40678,40752,40750,40795,40800,40798,40797,40793,40849,20794,20793,21144,21143,22211,22205,22206,23368,23367,24011,24015,24305,25085,25883,27394,27388,27395,27384,27392,28739,28740,28746,28744,28745,28741,28742,29213,29210,29209,29566,29975,30314,30672,31021,31025,31023,31828,31827,31986,32394,32391,32392,32395,32390,32397,32589,32699,32816,33245,34328,34346,34342,34335,34339,34332,34329,34343,34350,34337,34336,34345,34334,34341,34857,34845,34843,34848,34852,34844,34859,34890,35181,35177,35182,35179,35322,35705,35704,35653,35706,35707,36112,36116,36271,36494,36492,36702,36699,36701,37190,37188,37189,37305,37951,37947,37942,37929,37949,37948,37936,37945,37930,37943,37932,37952,37937,38373,38372,38371,38709,38714,38847,38881,39012,39113,39110,39104,39256,39254,39481,39485,39494,39492,39490,39489,39482,39487,39629,39701,39703,39704,39702,39738,39762,39979,39965,39964,39980,39971,39976,39977,39972,39969,40375,40374,40380,40385,40391,40394,40399,40382,40389,40387,40379,40373,40398,40377,40378,40364,40392,40369,40365,40396,40371,40397,40370,40570,40604,40683,40686,40685,40731,40728,40730,40753,40782,40805,40804,40850,20153,22214,22213,22219,22897,23371,23372,24021,24017,24306,25889,25888,25894,25890,27403,27400,27401,27661,28757,28758,28759,28754,29214,29215,29353,29567,29912,29909,29913,29911,30317,30381,31029,31156,31344,31345,31831,31836,31833,31835,31834,31988,31985,32401,32591,32647,33246,33387,34356,34357,34355,34348,34354,34358,34860,34856,34854,34858,34853,35185,35263,35262,35323,35710,35716,35714,35718,35717,35711,36117,36501,36500,36506,36498,36496,36502,36503,36704,36706,37191,37964,37968,37962,37963,37967,37959,37957,37960,37961,37958,38719,38883,39018,39017,39115,39252,39259,39502,39507,39508,39500,39503,39496,39498,39497,39506,39504,39632,39705,39723,39739,39766,39765,40006,40008,39999,40004,39993,39987,40001,39996,39991,39988,39986,39997,39990,40411,40402,40414,40410,40395,40400,40412,40401,40415,40425,40409,40408,40406,40437,40405,40413,40630,40688,40757,40755,40754,40770,40811,40853,40866,20797,21145,22760,22759,22898,23373,24024,34863,24399,25089,25091,25092,25897,25893,26006,26347,27409,27410,27407,27594,28763,28762,29218,29570,29569,29571,30320,30676,31847,31846,32405,33388,34362,34368,34361,34364,34353,34363,34366,34864,34866,34862,34867,35190,35188,35187,35326,35724,35726,35723,35720,35909,36121,36504,36708,36707,37308,37986,37973,37981,37975,37982,38852,38853,38912,39510,39513,39710,39711,39712,40018,40024,40016,40010,40013,40011,40021,40025,40012,40014,40443,40439,40431,40419,40427,40440,40420,40438,40417,40430,40422,40434,40432,40418,40428,40436,40435,40424,40429,40642,40656,40690,40691,40710,40732,40760,40759,40758,40771,40783,40817,40816,40814,40815,22227,22221,23374,23661,25901,26349,26350,27411,28767,28769,28765,28768,29219,29915,29925,30677,31032,31159,31158,31850,32407,32649,33389,34371,34872,34871,34869,34891,35732,35733,36510,36511,36512,36509,37310,37309,37314,37995,37992,37993,38629,38726,38723,38727,38855,38885,39518,39637,39769,40035,40039,40038,40034,40030,40032,40450,40446,40455,40451,40454,40453,40448,40449,40457,40447,40445,40452,40608,40734,40774,40820,40821,40822,22228,25902,26040,27416,27417,27415,27418,28770,29222,29354,30680,30681,31033,31849,31851,31990,32410,32408,32411,32409,33248,33249,34374,34375,34376,35193,35194,35196,35195,35327,35736,35737,36517,36516,36515,37998,37997,37999,38001,38003,38729,39026,39263,40040,40046,40045,40459,40461,40464,40463,40466,40465,40609,40693,40713,40775,40824,40827,40826,40825,22302,28774,31855,34876,36274,36518,37315,38004,38008,38006,38005,39520,40052,40051,40049,40053,40468,40467,40694,40714,40868,28776,28773,31991,34410,34878,34877,34879,35742,35996,36521,36553,38731,39027,39028,39116,39265,39339,39524,39526,39527,39716,40469,40471,40776,25095,27422,29223,34380,36520,38018,38016,38017,39529,39528,39726,40473,29225,34379,35743,38019,40057,40631,30325,39531,40058,40477,28777,28778,40612,40830,40777,40856,30849,37561,35023,22715,24658,31911,23290,9556,9574,9559,9568,9580,9571,9562,9577,9565,9554,9572,9557,9566,9578,9569,9560,9575,9563,9555,9573,9558,9567,9579,9570,9561,9576,9564,9553,9552,9581,9582,9584,9583,65517,132423,37595,132575,147397,34124,17077,29679,20917,13897,149826,166372,37700,137691,33518,146632,30780,26436,25311,149811,166314,131744,158643,135941,20395,140525,20488,159017,162436,144896,150193,140563,20521,131966,24484,131968,131911,28379,132127,20605,20737,13434,20750,39020,14147,33814,149924,132231,20832,144308,20842,134143,139516,131813,140592,132494,143923,137603,23426,34685,132531,146585,20914,20920,40244,20937,20943,20945,15580,20947,150182,20915,20962,21314,20973,33741,26942,145197,24443,21003,21030,21052,21173,21079,21140,21177,21189,31765,34114,21216,34317,158483,21253,166622,21833,28377,147328,133460,147436,21299,21316,134114,27851,136998,26651,29653,24650,16042,14540,136936,29149,17570,21357,21364,165547,21374,21375,136598,136723,30694,21395,166555,21408,21419,21422,29607,153458,16217,29596,21441,21445,27721,20041,22526,21465,15019,134031,21472,147435,142755,21494,134263,21523,28793,21803,26199,27995,21613,158547,134516,21853,21647,21668,18342,136973,134877,15796,134477,166332,140952,21831,19693,21551,29719,21894,21929,22021,137431,147514,17746,148533,26291,135348,22071,26317,144010,26276,26285,22093,22095,30961,22257,38791,21502,22272,22255,22253,166758,13859,135759,22342,147877,27758,28811,22338,14001,158846,22502,136214,22531,136276,148323,22566,150517,22620,22698,13665,22752,22748,135740,22779,23551,22339,172368,148088,37843,13729,22815,26790,14019,28249,136766,23076,21843,136850,34053,22985,134478,158849,159018,137180,23001,137211,137138,159142,28017,137256,136917,23033,159301,23211,23139,14054,149929,23159,14088,23190,29797,23251,159649,140628,15749,137489,14130,136888,24195,21200,23414,25992,23420,162318,16388,18525,131588,23509,24928,137780,154060,132517,23539,23453,19728,23557,138052,23571,29646,23572,138405,158504,23625,18653,23685,23785,23791,23947,138745,138807,23824,23832,23878,138916,23738,24023,33532,14381,149761,139337,139635,33415,14390,15298,24110,27274,24181,24186,148668,134355,21414,20151,24272,21416,137073,24073,24308,164994,24313,24315,14496,24316,26686,37915,24333,131521,194708,15070,18606,135994,24378,157832,140240,24408,140401,24419,38845,159342,24434,37696,166454,24487,23990,15711,152144,139114,159992,140904,37334,131742,166441,24625,26245,137335,14691,15815,13881,22416,141236,31089,15936,24734,24740,24755,149890,149903,162387,29860,20705,23200,24932,33828,24898,194726,159442,24961,20980,132694,24967,23466,147383,141407,25043,166813,170333,25040,14642,141696,141505,24611,24924,25886,25483,131352,25285,137072,25301,142861,25452,149983,14871,25656,25592,136078,137212,25744,28554,142902,38932,147596,153373,25825,25829,38011,14950,25658,14935,25933,28438,150056,150051,25989,25965,25951,143486,26037,149824,19255,26065,16600,137257,26080,26083,24543,144384,26136,143863,143864,26180,143780,143781,26187,134773,26215,152038,26227,26228,138813,143921,165364,143816,152339,30661,141559,39332,26370,148380,150049,15147,27130,145346,26462,26471,26466,147917,168173,26583,17641,26658,28240,37436,26625,144358,159136,26717,144495,27105,27147,166623,26995,26819,144845,26881,26880,15666,14849,144956,15232,26540,26977,166474,17148,26934,27032,15265,132041,33635,20624,27129,144985,139562,27205,145155,27293,15347,26545,27336,168348,15373,27421,133411,24798,27445,27508,141261,28341,146139,132021,137560,14144,21537,146266,27617,147196,27612,27703,140427,149745,158545,27738,33318,27769,146876,17605,146877,147876,149772,149760,146633,14053,15595,134450,39811,143865,140433,32655,26679,159013,159137,159211,28054,27996,28284,28420,149887,147589,159346,34099,159604,20935,27804,28189,33838,166689,28207,146991,29779,147330,31180,28239,23185,143435,28664,14093,28573,146992,28410,136343,147517,17749,37872,28484,28508,15694,28532,168304,15675,28575,147780,28627,147601,147797,147513,147440,147380,147775,20959,147798,147799,147776,156125,28747,28798,28839,28801,28876,28885,28886,28895,16644,15848,29108,29078,148087,28971,28997,23176,29002,29038,23708,148325,29007,37730,148161,28972,148570,150055,150050,29114,166888,28861,29198,37954,29205,22801,37955,29220,37697,153093,29230,29248,149876,26813,29269,29271,15957,143428,26637,28477,29314,29482,29483,149539,165931,18669,165892,29480,29486,29647,29610,134202,158254,29641,29769,147938,136935,150052,26147,14021,149943,149901,150011,29687,29717,26883,150054,29753,132547,16087,29788,141485,29792,167602,29767,29668,29814,33721,29804,14128,29812,37873,27180,29826,18771,150156,147807,150137,166799,23366,166915,137374,29896,137608,29966,29929,29982,167641,137803,23511,167596,37765,30029,30026,30055,30062,151426,16132,150803,30094,29789,30110,30132,30210,30252,30289,30287,30319,30326,156661,30352,33263,14328,157969,157966,30369,30373,30391,30412,159647,33890,151709,151933,138780,30494,30502,30528,25775,152096,30552,144044,30639,166244,166248,136897,30708,30729,136054,150034,26826,30895,30919,30931,38565,31022,153056,30935,31028,30897,161292,36792,34948,166699,155779,140828,31110,35072,26882,31104,153687,31133,162617,31036,31145,28202,160038,16040,31174,168205,31188] diff --git a/tests/wpt/web-platform-tests/encrypted-media/resources/drm-retrieve-persistent-license.html b/tests/wpt/web-platform-tests/encrypted-media/resources/drm-retrieve-persistent-license.html index 6f3ed80ffa5..3b7da8e9570 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/resources/drm-retrieve-persistent-license.html +++ b/tests/wpt/web-platform-tests/encrypted-media/resources/drm-retrieve-persistent-license.html @@ -43,8 +43,14 @@ function onTimeupdate(event) { if ( config.video.currentTime > ( config.duration || 1 ) ) { + config.video.removeEventListener('timeupdate', onTimeupdate); config.video.pause(); + + _mediaKeySession.closed + .then(onComplete) + .catch(onFailure); _mediaKeySession.close() + .catch(onFailure); } } @@ -53,9 +59,8 @@ return access.createMediaKeys(); }).then(function(mediaKeys) { config.video.setMediaKeys(mediaKeys); - config.video.addEventListener('timeupdate', onTimeupdate, true); + config.video.addEventListener('timeupdate', onTimeupdate); _mediaKeySession = mediaKeys.createSession( 'persistent-license' ); - _mediaKeySession.closed.then(onComplete); return _mediaKeySession.load(event.data.sessionId); }).then(function( success ) { if ( !success ) throw new DOMException( 'Could not load session' ); diff --git a/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-persistent-license-events.js b/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-persistent-license-events.js index d5049a5f1b3..2d99f679f4c 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-persistent-license-events.js +++ b/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-persistent-license-events.js @@ -20,8 +20,15 @@ function runTest(config,qualifier) { _startedReleaseSequence = false, _events = [ ]; - function recordEventFunc( eventType ) { - return function() { _events.push( eventType ); }; + function recordEventFunc(eventType) { + return function() { _events.push(eventType); }; + } + + function recordEventFuncAndCheckExpirationForNaN(eventType) { + return function() { + _events.push(eventType); + assert_equals(_mediaKeySession.expiration, NaN); + }; } function onFailure(error) { @@ -47,20 +54,28 @@ function runTest(config,qualifier) { _events.push(event.messageType + '-response'); return _mediaKeySession.update(response); }).then(test.step_func(function() { - _events.push('update-resolved'); + _events.push(event.messageType + '-response-resolved'); if (event.messageType === 'license-release') { - checkEventSequence( _events, - ['generaterequest', - ['license-request', 'license-request-response', 'update-resolved'], // potentially repeating - 'keystatuseschange', - 'playing', - 'remove-resolved', - 'keystatuseschange', - 'license-release', - 'license-release-response', - 'closed-attribute-resolved', - 'update-resolved' ]); - test.done(); + test.step_timeout(function() { + checkEventSequence(_events, [ + 'generaterequest', + [ // potentially repeating + 'license-request', + 'license-request-response', + 'license-request-response-resolved' + ], + 'keystatuseschange-usablekey', + 'playing', + 'remove-resolved', + 'keystatuseschange-allkeysreleased', + 'license-release', + 'license-release-response', + 'closed-attribute-resolved', + 'license-release-response-resolved', + 'keystatuseschange-empty' + ]); + test.done(); + }, 100); } })).catch(onFailure); } @@ -69,7 +84,21 @@ function runTest(config,qualifier) { assert_equals(event.target, _mediaKeySession); assert_true(event instanceof window.Event); assert_equals(event.type, 'keystatuseschange'); - _events.push('keystatuseschange'); + var hasKeys = false, + usableKey = false; // true if any key usable. + _mediaKeySession.keyStatuses.forEach(function(value, keyid) { + assert_in_array(value, ['usable', 'released']); + hasKeys = true; + usableKey = usableKey || (value === 'usable'); + }); + + if (!hasKeys) { + _events.push('keystatuseschange-empty'); + } else if (usableKey) { + _events.push('keystatuseschange-usablekey'); + } else { + _events.push('keystatuseschange-allkeysreleased'); + } } function onEncrypted(event) { @@ -90,7 +119,9 @@ function runTest(config,qualifier) { _video.load(); _startedReleaseSequence = true; - _mediaKeySession.remove().then(recordEventFunc('remove-resolved')).catch(onFailure); + _mediaKeySession.remove() + .then(recordEventFuncAndCheckExpirationForNaN('remove-resolved')) + .catch(onFailure); } } @@ -112,7 +143,9 @@ function runTest(config,qualifier) { _mediaKeySession = _mediaKeys.createSession( 'persistent-license' ); waitForEventAndRunStep('keystatuseschange', _mediaKeySession, onKeyStatusesChange, test); waitForEventAndRunStep('message', _mediaKeySession, onMessage, test); - _mediaKeySession.closed.then( recordEventFunc( 'closed-attribute-resolved' ) ); + _mediaKeySession.closed + .then(recordEventFuncAndCheckExpirationForNaN('closed-attribute-resolved')) + .catch(onFailure); return testmediasource(config); }).then(function(source) { _mediaSource = source; diff --git a/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-retrieve-persistent-license.js b/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-retrieve-persistent-license.js index 03b6b53ac1b..e8d9d02be30 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-retrieve-persistent-license.js +++ b/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-retrieve-persistent-license.js @@ -49,7 +49,7 @@ function runTest(config,qualifier) { function onPlaying(event) { // Not using waitForEventAndRunStep() to avoid too many // EVENT(onTimeUpdate) logs. - _video.addEventListener('timeupdate', onTimeupdate, true); + _video.addEventListener('timeupdate', onTimeupdate); } function onTimeupdate(event) { @@ -57,16 +57,20 @@ function runTest(config,qualifier) { _video.removeEventListener('timeupdate', onTimeupdate); _video.pause(); _video.removeAttribute('src'); - _video.load() + _video.load(); - _mediaKeySession.closed.then(test.step_func(onClosed)); - _mediaKeySession.close(); + _mediaKeySession.closed + .then(test.step_func(onClosed)) + .catch(onFailure); + _mediaKeySession.close() + .catch(onFailure); } } function onClosed() { // Open a new window in which we will attempt to play with the persisted license var win = window.open(config.windowscript); + assert_not_equals(win, null, "Popup windows not allowed?"); // Lisen for an event from the new window containing its test assertions window.addEventListener('message', test.step_func(function(messageEvent) { diff --git a/tests/wpt/web-platform-tests/encrypted-media/scripts/requestmediakeysystemaccess.js b/tests/wpt/web-platform-tests/encrypted-media/scripts/requestmediakeysystemaccess.js index a739d38f543..a6b0a968017 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/scripts/requestmediakeysystemaccess.js +++ b/tests/wpt/web-platform-tests/encrypted-media/scripts/requestmediakeysystemaccess.js @@ -84,7 +84,7 @@ function runTest(config, qualifier) { // Tests for trivial configurations. expect_error(config.keysystem, [], 'TypeError', 'Empty supportedConfigurations'); - expect_config(config.keysystem, [{}], {}, 'Empty configuration'); + expect_error(config.keysystem, [{}], 'NotSupportedError', 'Empty configuration'); // Various combinations of supportedConfigurations. expect_config(config.keysystem, [{ @@ -155,15 +155,28 @@ function runTest(config, qualifier) { ], }], 'NotSupportedError', 'Mismatched audio container/codec (%audiocontenttype)'); - expect_config(config.keysystem, [ - {initDataTypes: ['fakeidt']}, - {initDataTypes: [config.initDataType]} - ], {initDataTypes: [config.initDataType]}, 'Two configurations, one supported'); + expect_config(config.keysystem, [{ + initDataTypes: ['fakeidt'], + videoCapabilities: [{contentType: config.videoType}] + }, { + initDataTypes: [config.initDataType], + videoCapabilities: [{contentType: config.videoType}] + } + ], { + initDataTypes: [config.initDataType], + videoCapabilities: [{contentType: config.videoType}] + }, 'Two configurations, one supported'); - expect_config(config.keysystem, [ - {initDataTypes: [config.initDataType]}, - {} - ], {initDataTypes: [config.initDataType]}, 'Two configurations, both supported'); + expect_config(config.keysystem, [{ + initDataTypes: [config.initDataType], + videoCapabilities: [{contentType: config.videoType}] + }, { + videoCapabilities: [{contentType: config.videoType}] + } + ], { + initDataTypes: [config.initDataType], + videoCapabilities: [{contentType: config.videoType}] + }, 'Two configurations, both supported'); // Audio MIME type does not support video codecs. expect_error(config.keysystem, [{ diff --git a/tests/wpt/web-platform-tests/eventsource/eventsource-cross-origin.htm b/tests/wpt/web-platform-tests/eventsource/eventsource-cross-origin.htm index b753bad7d98..c1c310eea37 100644 --- a/tests/wpt/web-platform-tests/eventsource/eventsource-cross-origin.htm +++ b/tests/wpt/web-platform-tests/eventsource/eventsource-cross-origin.htm @@ -10,17 +10,17 @@
        diff --git a/tests/wpt/web-platform-tests/fetch/api/request/request-consume-empty.html b/tests/wpt/web-platform-tests/fetch/api/request/request-consume-empty.html index c3ca8383a95..c84d2cecd37 100644 --- a/tests/wpt/web-platform-tests/fetch/api/request/request-consume-empty.html +++ b/tests/wpt/web-platform-tests/fetch/api/request/request-consume-empty.html @@ -11,14 +11,14 @@ + + + + diff --git a/tests/wpt/web-platform-tests/fetch/security/embedded-credentials.tentative.sub.html b/tests/wpt/web-platform-tests/fetch/security/embedded-credentials.tentative.sub.html new file mode 100644 index 00000000000..ca5ee1c87bd --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/security/embedded-credentials.tentative.sub.html @@ -0,0 +1,89 @@ + + + + + diff --git a/tests/wpt/web-platform-tests/fetch/security/support/embedded-credential-window.sub.html b/tests/wpt/web-platform-tests/fetch/security/support/embedded-credential-window.sub.html new file mode 100644 index 00000000000..20d307e9188 --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/security/support/embedded-credential-window.sub.html @@ -0,0 +1,19 @@ + + diff --git a/tests/wpt/web-platform-tests/fonts/CanvasTest.sfd b/tests/wpt/web-platform-tests/fonts/CanvasTest.sfd deleted file mode 100644 index 6dbe8e287fd..00000000000 --- a/tests/wpt/web-platform-tests/fonts/CanvasTest.sfd +++ /dev/null @@ -1,321 +0,0 @@ -SplineFontDB: 3.0 -FontName: CanvasTest -FullName: CanvasTest -FamilyName: CanvasTest -Weight: Medium -Copyright: Copyright (c) 2010 Philip Taylor.\n\nReleased under the MIT License: http://www.opensource.org/licenses/mit-license.php -UComments: "2010-2-26: Created." -Version: 001.000 -ItalicAngle: 0 -UnderlinePosition: -102 -UnderlineWidth: 51 -Ascent: 768 -Descent: 256 -LayerCount: 2 -Layer: 0 0 "Back" 1 -Layer: 1 0 "Fore" 0 -NeedsXUIDChange: 1 -XUID: [1021 923 651290676 15069128] -BaseHoriz: 4 'hang' 'ideo' 'math' 'romn' -BaseScript: 'DFLT' 3 512 128 384 0 -FSType: 0 -OS2Version: 0 -OS2_WeightWidthSlopeOnly: 0 -OS2_UseTypoMetrics: 1 -CreationTime: 1267213266 -ModificationTime: 1267289643 -OS2TypoAscent: 0 -OS2TypoAOffset: 1 -OS2TypoDescent: 0 -OS2TypoDOffset: 1 -OS2TypoLinegap: 92 -OS2WinAscent: 0 -OS2WinAOffset: 1 -OS2WinDescent: 0 -OS2WinDOffset: 1 -HheadAscent: 0 -HheadAOffset: 1 -HheadDescent: 0 -HheadDOffset: 1 -DEI: 91125 -LangName: 1033 -Encoding: ISO8859-1 -UnicodeInterp: none -NameList: Adobe Glyph List -DisplaySize: -24 -AntiAlias: 1 -FitToEm: 1 -WinInfo: 0 39 15 -BeginChars: 256 11 - -StartChar: A -Encoding: 65 65 0 -Width: 1024 -VWidth: 0 -Flags: H -LayerCount: 2 -Fore -SplineSet -0 768 m 25 - 1024 768 l 25 - 1024 0 l 29 - 0 0 l 25 - 0 768 l 25 -EndSplineSet -Validated: 1 -EndChar - -StartChar: B -Encoding: 66 66 1 -Width: 1024 -VWidth: 0 -Flags: H -LayerCount: 2 -Fore -SplineSet -0 0 m 29 - 1024 0 l 25 - 1024 -256 l 25 - 0 -256 l 25 - 0 0 l 29 -EndSplineSet -Validated: 1 -EndChar - -StartChar: C -Encoding: 67 67 2 -Width: 1024 -VWidth: 0 -Flags: H -LayerCount: 2 -Fore -SplineSet -280 1640 m 1 - 350 1735 l 1 - 493 1594 l 1 - 620 1745 l 1 - 705 1660 l 1 - 577 1511 l 1 - 715 1375 l 1 - 635 1280 l 1 - 498 1418 l 1 - 380 1280 l 1 - 305 1370 l 1 - 416 1502 l 1 - 280 1640 l 1 -0 768 m 25 - 1024 768 l 25 - 1024 -256 l 25 - 0 -256 l 25 - 0 768 l 25 -620 -340 m 1 - 705 -425 l 1 - 577 -574 l 1 - 715 -710 l 1 - 635 -805 l 1 - 498 -667 l 1 - 380 -805 l 1 - 305 -715 l 1 - 416 -583 l 1 - 280 -445 l 1 - 350 -350 l 1 - 493 -491 l 1 - 620 -340 l 1 -EndSplineSet -Validated: 1 -EndChar - -StartChar: D -Encoding: 68 68 3 -Width: 1024 -VWidth: 0 -Flags: HW -LayerCount: 2 -Fore -SplineSet --1003 450 m 1 - -933 545 l 1 - -790 404 l 1 - -663 555 l 1 - -578 470 l 1 - -706 321 l 1 - -568 185 l 1 - -648 90 l 1 - -785 228 l 1 - -903 90 l 1 - -978 180 l 1 - -867 312 l 1 - -1003 450 l 1 -0 768 m 25 - 1024 768 l 25 - 1024 -256 l 25 - 0 -256 l 29 - 0 768 l 25 -1485 591 m 1 - 1570 506 l 1 - 1442 357 l 1 - 1580 221 l 1 - 1500 126 l 1 - 1363 264 l 1 - 1245 126 l 1 - 1170 216 l 1 - 1281 348 l 1 - 1145 486 l 1 - 1215 581 l 1 - 1358 440 l 1 - 1485 591 l 1 -EndSplineSet -Validated: 1 -EndChar - -StartChar: space -Encoding: 32 32 4 -Width: 1024 -VWidth: 0 -Flags: HW -LayerCount: 2 -EndChar - -StartChar: E -Encoding: 69 69 5 -Width: 1024 -VWidth: 0 -Flags: HW -LayerCount: 2 -Fore -SplineSet -0 768 m 25 - 1024 768 l 25 - 1024 -256 l 25 - 0 -256 l 25 - 0 768 l 25 -EndSplineSet -Validated: 1 -EndChar - -StartChar: uni000B -Encoding: 11 11 6 -Width: 1024 -VWidth: 0 -Flags: HW -LayerCount: 2 -Fore -SplineSet -28 644 m 1 - 98 739 l 1 - 241 598 l 1 - 368 749 l 1 - 453 664 l 1 - 325 515 l 1 - 463 379 l 1 - 383 284 l 1 - 246 422 l 1 - 128 284 l 1 - 53 374 l 1 - 164 506 l 1 - 28 644 l 1 -EndSplineSet -Validated: 1 -EndChar - -StartChar: uni000C -Encoding: 12 12 7 -Width: 1024 -VWidth: 0 -Flags: HW -LayerCount: 2 -Fore -SplineSet -28 644 m 1 - 98 739 l 1 - 241 598 l 1 - 368 749 l 1 - 453 664 l 1 - 325 515 l 1 - 463 379 l 1 - 383 284 l 1 - 246 422 l 1 - 128 284 l 1 - 53 374 l 1 - 164 506 l 1 - 28 644 l 1 -EndSplineSet -Validated: 1 -EndChar - -StartChar: uni000D -Encoding: 13 13 8 -Width: 1024 -VWidth: 0 -Flags: HW -LayerCount: 2 -Fore -SplineSet -28 644 m 1 - 98 739 l 1 - 241 598 l 1 - 368 749 l 1 - 453 664 l 1 - 325 515 l 1 - 463 379 l 1 - 383 284 l 1 - 246 422 l 1 - 128 284 l 1 - 53 374 l 1 - 164 506 l 1 - 28 644 l 1 -EndSplineSet -Validated: 1 -EndChar - -StartChar: uni000A -Encoding: 10 10 9 -Width: 1024 -VWidth: 0 -Flags: HW -LayerCount: 2 -Fore -SplineSet -28 644 m 1 - 98 739 l 1 - 241 598 l 1 - 368 749 l 1 - 453 664 l 1 - 325 515 l 1 - 463 379 l 1 - 383 284 l 1 - 246 422 l 1 - 128 284 l 1 - 53 374 l 1 - 164 506 l 1 - 28 644 l 1 -EndSplineSet -Validated: 1 -EndChar - -StartChar: uni0009 -Encoding: 9 9 10 -Width: 1024 -VWidth: 0 -Flags: HW -LayerCount: 2 -Fore -SplineSet -28 644 m 1 - 98 739 l 1 - 241 598 l 1 - 368 749 l 1 - 453 664 l 1 - 325 515 l 1 - 463 379 l 1 - 383 284 l 1 - 246 422 l 1 - 128 284 l 1 - 53 374 l 1 - 164 506 l 1 - 28 644 l 1 -EndSplineSet -Validated: 1 -EndChar -EndChars -EndSplineFont diff --git a/tests/wpt/web-platform-tests/fullscreen/api/document-exit-fullscreen-manual.html b/tests/wpt/web-platform-tests/fullscreen/api/document-exit-fullscreen-manual.html index a3ac2ff1cab..ebe7ea2f1ca 100644 --- a/tests/wpt/web-platform-tests/fullscreen/api/document-exit-fullscreen-manual.html +++ b/tests/wpt/web-platform-tests/fullscreen/api/document-exit-fullscreen-manual.html @@ -7,16 +7,18 @@ + +
        + + 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 8305fc5ee5c..40ca3ce8427 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 @@ -16,7 +16,7 @@ async_test(t => { count++; assert_between_inclusive(count, 1, 4, 'number of fullscreenchange events'); const expected = { - target: count == 1 || count == 4 ? document : iframeDoc, + target: count == 1 || count == 4 ? iframe : iframeBody, outerFullscreenElement: count <= 2 ? iframe : null, innerFullscreenElement: count <= 2 ? iframeBody : null, }; @@ -27,7 +27,7 @@ async_test(t => { iframeDoc.exitFullscreen(); } else if (count == 4) { // Done, but set timeout to fail on extra events. - setTimeout(t.step_func_done()); + step_timeout(t.step_func_done()); } }); document.onfullscreenerror = t.unreached_func('fullscreenerror event'); diff --git a/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-and-move-to-iframe-manual.html b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-and-move-to-iframe-manual.html index 28832824d9d..67922627978 100644 --- a/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-and-move-to-iframe-manual.html +++ b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-and-move-to-iframe-manual.html @@ -15,8 +15,9 @@ async_test(t => { iframeDoc.onfullscreenerror = t.unreached_func("fullscreenerror event in iframe"); document.onfullscreenchange = t.unreached_func("fullscreenchange event"); document.onfullscreenerror = t.step_func_done(() => { - assert_equals(document.fullscreenElement, null); - assert_equals(iframeDoc.fullscreenElement, null); + assert_equals(document.fullscreenElement, null, "outer fullscreen element"); + assert_equals(iframeDoc.fullscreenElement, null, "inner fullscreen element"); + assert_equals(event.target, document, "event target"); }); trusted_click(t, () => { diff --git a/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-and-remove-iframe-manual.html b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-and-remove-iframe-manual.html index 198ae737b66..327fc3d21d6 100644 --- a/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-and-remove-iframe-manual.html +++ b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-and-remove-iframe-manual.html @@ -19,7 +19,7 @@ async_test(t => { iframeDocument.body.requestFullscreen(); iframe.remove(); // No events will be fired, end test after 100ms. - setTimeout(t.step_func_done(() => { + step_timeout(t.step_func_done(() => { assert_equals(document.fullscreenElement, null); assert_equals(iframeDocument.fullscreenElement, null); }), 100); diff --git a/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-and-remove-manual.html b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-and-remove-manual.html index 03c38cc06aa..89e77b5ff95 100644 --- a/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-and-remove-manual.html +++ b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-and-remove-manual.html @@ -10,8 +10,9 @@ async_test(t => { const target = document.getElementById("target"); document.onfullscreenchange = t.unreached_func("fullscreenchange event"); - document.onfullscreenerror = t.step_func_done(() => { - assert_equals(document.fullscreenElement, null); + document.onfullscreenerror = t.step_func_done(event => { + assert_equals(document.fullscreenElement, null, "fullscreen element"); + assert_equals(event.target, document, "event target"); }); trusted_click(t, () => { diff --git a/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-manual.html b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-manual.html index 12f0a322d31..7563790efca 100644 --- a/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-manual.html +++ b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-manual.html @@ -11,9 +11,10 @@ async_test(function(t) document.addEventListener("fullscreenchange", t.step_func(function(event) { - assert_equals(event.target, document, "event.target"); - assert_false(event.bubbles, "event.bubbles"); + assert_equals(event.target, div, "event.target"); + assert_true(event.bubbles, "event.bubbles"); assert_false(event.cancelable, "event.cancelable"); + assert_true(event.composed, "event.composed"); t.done(); })); diff --git a/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-not-allowed.html b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-not-allowed.html index 041a458ac70..eb9e23b85f9 100644 --- a/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-not-allowed.html +++ b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-not-allowed.html @@ -8,9 +8,10 @@ async_test(t => { const div = document.querySelector("div"); document.addEventListener("fullscreenerror", t.step_func_done(event => { - assert_equals(event.target, document, "event.target"); - assert_false(event.bubbles, "event.bubbles"); + assert_equals(event.target, div, "event.target"); + assert_true(event.bubbles, "event.bubbles"); assert_false(event.cancelable, "event.cancelable"); + assert_true(event.composed, "event.composed"); })); div.requestFullscreen(); diff --git a/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-timing-manual.html b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-timing-manual.html index 14fe5f70c1c..792cb0fe4d7 100644 --- a/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-timing-manual.html +++ b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-timing-manual.html @@ -15,7 +15,7 @@ async_test(t => { const callback = t.step_func(event => { events.push(event.type); if (event.type == 'fullscreenchange') { - setTimeout(t.unreached_func('timer callback')); + step_timeout(t.unreached_func('timer callback')); requestAnimationFrame(t.step_func_done(() => { assert_array_equals(events, ['resize', 'fullscreenchange'], 'event order'); })); @@ -30,7 +30,7 @@ async_test(t => { // If fullscreenerror is an animation frame event, then animation frame // callbacks should be run after it is fired, before the timer callback. document.onfullscreenerror = t.step_func(() => { - setTimeout(t.unreached_func('timer callback')); + step_timeout(t.unreached_func('timer callback')); requestAnimationFrame(t.step_func_done()); }); }, 'Timing of fullscreenerror event'); diff --git a/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-twice-manual.html b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-twice-manual.html index 2b28983ba83..06641deb48b 100644 --- a/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-twice-manual.html +++ b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-twice-manual.html @@ -12,7 +12,7 @@ async_test(t => { assert_equals(document.fullscreenElement, div); // Done, but ensure that there's only one fullscreenchange event. document.onfullscreenchange = t.unreached_func("second fullscreenchange event"); - setTimeout(t.step_func_done(), 0); + step_timeout(t.step_func_done()); }); document.onfullscreenerror = t.unreached_func("fullscreenerror event"); diff --git a/tests/wpt/web-platform-tests/fullscreen/interfaces.html b/tests/wpt/web-platform-tests/fullscreen/interfaces.html new file mode 100644 index 00000000000..79174cd2233 --- /dev/null +++ b/tests/wpt/web-platform-tests/fullscreen/interfaces.html @@ -0,0 +1,31 @@ + +Fullscreen IDL tests + + + + + diff --git a/tests/wpt/web-platform-tests/fullscreen/model/move-to-iframe-manual.html b/tests/wpt/web-platform-tests/fullscreen/model/move-to-iframe-manual.html new file mode 100644 index 00000000000..1d388ea2739 --- /dev/null +++ b/tests/wpt/web-platform-tests/fullscreen/model/move-to-iframe-manual.html @@ -0,0 +1,29 @@ + +Move the fullscreen element to another document + + + +
        + + diff --git a/tests/wpt/web-platform-tests/fullscreen/model/remove-first-manual.html b/tests/wpt/web-platform-tests/fullscreen/model/remove-first-manual.html index 861dc69b59e..16ef298f32e 100644 --- a/tests/wpt/web-platform-tests/fullscreen/model/remove-first-manual.html +++ b/tests/wpt/web-platform-tests/fullscreen/model/remove-first-manual.html @@ -12,19 +12,21 @@ async_test(function(t) { var first = document.getElementById("first"); trusted_request(t, first); - document.onfullscreenchange = t.step_func(function() + document.onfullscreenchange = t.step_func(function(event) { assert_equals(document.fullscreenElement, first); + assert_equals(event.target, first); var last = document.getElementById("last"); trusted_request(t, last); - document.onfullscreenchange = t.step_func(function() + document.onfullscreenchange = t.step_func(function(event) { assert_equals(document.fullscreenElement, last); + assert_equals(event.target, last); first.remove(); - document.onfullscreenchange = t.step_func(function() + document.onfullscreenchange = t.step_func_done(function(event) { assert_equals(document.fullscreenElement, null); - t.done(); + assert_equals(event.target, document); }); }); }); diff --git a/tests/wpt/web-platform-tests/fullscreen/model/remove-last-manual.html b/tests/wpt/web-platform-tests/fullscreen/model/remove-last-manual.html index 3837439d80c..a7c54b68e7c 100644 --- a/tests/wpt/web-platform-tests/fullscreen/model/remove-last-manual.html +++ b/tests/wpt/web-platform-tests/fullscreen/model/remove-last-manual.html @@ -12,19 +12,21 @@ async_test(function(t) { var first = document.getElementById("first"); trusted_request(t, first); - document.onfullscreenchange = t.step_func(function() + document.onfullscreenchange = t.step_func(function(event) { assert_equals(document.fullscreenElement, first); + assert_equals(event.target, first); var last = document.getElementById("last"); trusted_request(t, last); - document.onfullscreenchange = t.step_func(function() + document.onfullscreenchange = t.step_func(function(event) { assert_equals(document.fullscreenElement, last); + assert_equals(event.target, last); last.remove(); - document.onfullscreenchange = t.step_func(function() + document.onfullscreenchange = t.step_func_done(function(event) { assert_equals(document.fullscreenElement, first); - t.done(); + assert_equals(event.target, document); }); }); }); diff --git a/tests/wpt/web-platform-tests/fullscreen/model/remove-parent-manual.html b/tests/wpt/web-platform-tests/fullscreen/model/remove-parent-manual.html index a284fc692bf..01796f3aeaa 100644 --- a/tests/wpt/web-platform-tests/fullscreen/model/remove-parent-manual.html +++ b/tests/wpt/web-platform-tests/fullscreen/model/remove-parent-manual.html @@ -12,14 +12,15 @@ async_test(function(t) { var child = document.getElementById("child"); trusted_request(t, child); - document.onfullscreenchange = t.step_func(function() + document.onfullscreenchange = t.step_func(function(event) { assert_equals(document.fullscreenElement, child); + assert_equals(event.target, child); child.parentNode.remove(); - document.onfullscreenchange = t.step_func(function() + document.onfullscreenchange = t.step_func_done(function(event) { assert_equals(document.fullscreenElement, null); - t.done(); + assert_equals(event.target, document); }); }); }); diff --git a/tests/wpt/web-platform-tests/fullscreen/model/remove-single-manual.html b/tests/wpt/web-platform-tests/fullscreen/model/remove-single-manual.html index 9a57d9360e8..ed0a6b7ff16 100644 --- a/tests/wpt/web-platform-tests/fullscreen/model/remove-single-manual.html +++ b/tests/wpt/web-platform-tests/fullscreen/model/remove-single-manual.html @@ -9,14 +9,15 @@ async_test(function(t) { var single = document.getElementById("single"); - document.onfullscreenchange = t.step_func(function() + document.onfullscreenchange = t.step_func(function(event) { assert_equals(document.fullscreenElement, single); + assert_equals(event.target, single); single.remove(); - document.onfullscreenchange = t.step_func(function() + document.onfullscreenchange = t.step_func_done(function(event) { assert_equals(document.fullscreenElement, null); - t.done(); + assert_equals(event.target, document); }); }); trusted_request(t, single); diff --git a/tests/wpt/web-platform-tests/generic-sensor/generic-sensor-tests.js b/tests/wpt/web-platform-tests/generic-sensor/generic-sensor-tests.js new file mode 100644 index 00000000000..222bde9539f --- /dev/null +++ b/tests/wpt/web-platform-tests/generic-sensor/generic-sensor-tests.js @@ -0,0 +1,186 @@ +let unreached = event => { + assert_unreached(event.error.name + ":" + event.error.message); +}; + +let properties = { + 'AmbientLightSensor' : ['timestamp', 'illuminance'], + 'Accelerometer' : ['timestamp', 'x', 'y', 'z'], + 'Gyroscope' : ['timestamp', 'x', 'y', 'z'], + 'Magnetometer' : ['timestamp', 'x', 'y', 'z'] +}; + +function assert_reading_not_null(sensor) { + for (let property in properties[sensor.constructor.name]) { + let propertyName = properties[sensor.constructor.name][property]; + assert_not_equals(sensor[propertyName], null); + } +} + +function assert_reading_null(sensor) { + for (let property in properties[sensor.constructor.name]) { + let propertyName = properties[sensor.constructor.name][property]; + assert_equals(sensor[propertyName], null); + } +} + +function reading_to_array(sensor) { + let arr = new Array(); + for (let property in properties[sensor.constructor.name]) { + let propertyName = properties[sensor.constructor.name][property]; + arr[property] = sensor[propertyName]; + } + return arr; +} + +function runGenericSensorTests(sensorType) { + async_test(t => { + let sensor = new sensorType(); + sensor.onchange = t.step_func_done(() => { + assert_reading_not_null(sensor); + sensor.stop(); + assert_reading_null(sensor); + }); + sensor.onerror = t.step_func_done(unreached); + sensor.start(); + }, "Test that 'onchange' is called and sensor reading is valid"); + + async_test(t => { + let sensor1 = new sensorType(); + let sensor2 = new sensorType(); + sensor1.onactivate = t.step_func_done(() => { + // Reading values are correct for both sensors. + assert_reading_not_null(sensor1); + assert_reading_not_null(sensor2); + + //After first sensor stops its reading values are null, + //reading values for the second sensor remains + sensor1.stop(); + assert_reading_null(sensor1); + assert_reading_not_null(sensor2); + sensor2.stop(); + assert_reading_null(sensor2); + }); + sensor1.onerror = t.step_func_done(unreached); + sensor2.onerror = t.step_func_done(unreached); + sensor1.start(); + sensor2.start(); + }, "sensor reading is correct"); + + async_test(t => { + let sensor = new sensorType(); + let cachedTimeStamp1; + sensor.onactivate = () => { + cachedTimeStamp1 = sensor.timestamp; + }; + sensor.onerror = t.step_func_done(unreached); + sensor.start(); + t.step_timeout(() => { + sensor.onchange = t.step_func_done(() => { + //sensor.timestamp changes. + let cachedTimeStamp2 = sensor.timestamp; + assert_greater_than(cachedTimeStamp2, cachedTimeStamp1); + sensor.stop(); + }); + }, 1000); + }, "sensor timestamp is updated when time passes"); + + async_test(t => { + let sensor = new sensorType(); + sensor.onerror = t.step_func_done(unreached); + assert_false(sensor.activated); + sensor.onchange = t.step_func_done(() => { + assert_true(sensor.activated); + sensor.stop(); + assert_false(sensor.activated); + }); + sensor.start(); + assert_false(sensor.activated); + }, "Test that sensor can be successfully created and its states are correct."); + + test(() => { + let sensor, start_return; + sensor = new sensorType(); + sensor.onerror = unreached; + start_return = sensor.start(); + assert_equals(start_return, undefined); + sensor.stop(); + }, "sensor.start() returns undefined"); + + test(() => { + try { + let sensor = new sensorType(); + sensor.onerror = unreached; + sensor.start(); + sensor.start(); + assert_false(sensor.activated); + sensor.stop(); + } catch (e) { + assert_unreached(e.name + ": " + e.message); + } + }, "no exception is thrown when calling start() on already started sensor"); + + test(() => { + let sensor, stop_return; + sensor = new sensorType(); + sensor.onerror = unreached; + sensor.start(); + stop_return = sensor.stop(); + assert_equals(stop_return, undefined); + }, "sensor.stop() returns undefined"); + + test(() => { + try { + let sensor = new sensorType(); + sensor.onerror = unreached; + sensor.start(); + sensor.stop(); + sensor.stop(); + assert_false(sensor.activated); + } catch (e) { + assert_unreached(e.name + ": " + e.message); + } + }, "no exception is thrown when calling stop() on already stopped sensor"); + + async_test(t => { + window.onmessage = t.step_func(e => { + assert_equals(e.data, "SecurityError"); + t.done(); + }); + }, "throw a 'SecurityError' when firing sensor readings within iframes"); + + async_test(t => { + let sensor = new sensorType(); + sensor.onactivate = t.step_func(() => { + assert_reading_not_null(sensor); + let cachedSensor1 = reading_to_array(sensor); + let win = window.open('', '_blank'); + t.step_timeout(() => { + let cachedSensor2 = reading_to_array(sensor); + win.close(); + sensor.stop(); + assert_array_equals(cachedSensor1, cachedSensor2); + t.done(); + }, 1000); + }); + sensor.onerror = t.step_func_done(unreached); + sensor.start(); + }, "sensor readings can not be fired on the background tab"); +} + +function runGenericSensorInsecureContext(sensorType) { + test(() => { + assert_throws('SecurityError', () => { new sensorType(); }); + }, "throw a 'SecurityError' when construct sensor in an insecure context"); +} + +function runGenericSensorOnerror(sensorType) { + async_test(t => { + let sensor = new sensorType(); + sensor.onactivate = t.step_func_done(assert_unreached); + sensor.onerror = t.step_func_done(event => { + assert_false(sensor.activated); + assert_equals(event.error.name, 'NotReadableError'); + }); + sensor.start(); + }, "'onerror' event is fired when sensor is not supported"); +} diff --git a/tests/wpt/web-platform-tests/geolocation-API/OWNERS b/tests/wpt/web-platform-tests/geolocation-API/OWNERS index 64e2488b4ba..9bebfbaa6e8 100644 --- a/tests/wpt/web-platform-tests/geolocation-API/OWNERS +++ b/tests/wpt/web-platform-tests/geolocation-API/OWNERS @@ -1,2 +1,3 @@ -@zqzhang @jdm +@mcasas +@zqzhang diff --git a/tests/wpt/web-platform-tests/geolocation-API/PositionOptions.https.html b/tests/wpt/web-platform-tests/geolocation-API/PositionOptions.https.html index 9d4985eb779..6aaf56d633e 100644 --- a/tests/wpt/web-platform-tests/geolocation-API/PositionOptions.https.html +++ b/tests/wpt/web-platform-tests/geolocation-API/PositionOptions.https.html @@ -43,12 +43,9 @@ test(function() { try { geo.getCurrentPosition( - t86.step_func(function(pos) { - assert_unreached('A success callback was invoked unexpectedly'); - }), - t86.step_func(function(err) { + t86.unreached_func('A success callback was invoked unexpectedly'), + t86.step_func_done(function(err) { assert_equals(err.code, err.TIMEOUT); - t86.done(); }), {timeout: 0, maximumAge: 0} ); @@ -60,12 +57,9 @@ test(function() { try { geo.watchPosition( - t88.step_func(function(pos) { - assert_unreached('A success callback was invoked unexpectedly'); - }), - t88.step_func(function(err) { + t88.unreached_func('A success callback was invoked unexpectedly'), + t88.step_func_done(function(err) { assert_equals(err.code, err.TIMEOUT); - t88.done(); }), {timeout: 0, maximumAge: 0} ); @@ -77,12 +71,9 @@ test(function() { try { geo.getCurrentPosition( - t91.step_func(function(pos) { - assert_unreached('A success callback was invoked unexpectedly'); - }), - t91.step_func(function(err) { + t91.unreached_func('A success callback was invoked unexpectedly'), + t91.step_func_done(function(err) { assert_equals(err.code, err.TIMEOUT); - t91.done(); }), {timeout:-1, maximumAge: 0} ); @@ -94,13 +85,9 @@ test(function() { try { geo.watchPosition( - t92.step_func(function(pos) { - assert_unreached('A success callback was invoked unexpectedly'); - done(); - }), - t92.step_func(function(err) { + t92.unreached_func('A success callback was invoked unexpectedly'), + t92.step_func_done(function(err) { assert_equals(err.code, err.TIMEOUT); - done(); }), {timeout: -1, maximumAge: 0} ); diff --git a/tests/wpt/web-platform-tests/geolocation-API/clearWatch_TypeError.html b/tests/wpt/web-platform-tests/geolocation-API/clearWatch_TypeError.html index d752ebac1c9..14b861bfc0a 100644 --- a/tests/wpt/web-platform-tests/geolocation-API/clearWatch_TypeError.html +++ b/tests/wpt/web-platform-tests/geolocation-API/clearWatch_TypeError.html @@ -18,6 +18,5 @@ test(function() { } catch(e) { assert_unreached('An exception was thrown unexpectedly: ' + e.message); } - done(); }, 'Test that calling clearWatch with invalid watch IDs does not cause an exception'); diff --git a/tests/wpt/web-platform-tests/geolocation-API/getCurrentPosition_permission_allow.https.html b/tests/wpt/web-platform-tests/geolocation-API/getCurrentPosition_permission_allow.https.html index dfadcb09d19..95171099159 100644 --- a/tests/wpt/web-platform-tests/geolocation-API/getCurrentPosition_permission_allow.https.html +++ b/tests/wpt/web-platform-tests/geolocation-API/getCurrentPosition_permission_allow.https.html @@ -14,31 +14,21 @@ var t = async_test('User allows access, check that success callback is called or error callback is called with correct code.'), onSuccess, onError, hasMethodReturned = false; -onSuccess = t.step_func(function(pos) { - // Rewrite http://dev.w3.org/geo/api/test-suite/t.html?00031 - test(function() { +t.step(function() { + onSuccess = t.step_func_done(function(pos) { + // Rewrite http://dev.w3.org/geo/api/test-suite/t.html?00031 assert_true(hasMethodReturned); - }, 'Check that getCurrentPosition returns synchronously before any callbacks are invoked.'); + }); - done(); -}); - -onError = t.step_func(function(err) { - // Rewrite http://dev.w3.org/geo/api/test-suite/t.html?00031 - test(function() { + onError = t.step_func_done(function(err) { + // Rewrite http://dev.w3.org/geo/api/test-suite/t.html?00031 assert_true(hasMethodReturned); - }, 'Check that getCurrentPosition returns synchronously before any callbacks are invoked.'); + assert_false(isUsingPreemptivePermission); + assert_equals(err.code, err.POSITION_UNAVAILABLE, errorToString(err)); + }); - assert_true(!isUsingPreemptivePermission && err.code === err.POSITION_UNAVAILABLE); - done(); -}); - -try { geo.getCurrentPosition(onSuccess, onError); hasMethodReturned = true; -} catch(e) { - t.step(function() { - assert_unreached('An exception was thrown unexpectedly: ' + e.message); - }); -} +}); + diff --git a/tests/wpt/web-platform-tests/geolocation-API/getCurrentPosition_permission_deny.https.html b/tests/wpt/web-platform-tests/geolocation-API/getCurrentPosition_permission_deny.https.html index 26fe8899eda..50129608ac7 100644 --- a/tests/wpt/web-platform-tests/geolocation-API/getCurrentPosition_permission_deny.https.html +++ b/tests/wpt/web-platform-tests/geolocation-API/getCurrentPosition_permission_deny.https.html @@ -15,20 +15,18 @@ var t = async_test('User denies access, check that error callback is called with onSuccess, onError, hasMethodReturned = false; t.step(function() { - onSuccess = t.step_func(function(pos) { + onSuccess = t.step_func_done(function(pos) { assert_unreached('A success callback was invoked unexpectedly with position ' + positionToString(pos)); }); - onError = t.step_func(function(err) { + onError = t.step_func_done(function(err) { // http://dev.w3.org/geo/api/test-suite/t.html?00031 assert_true(hasMethodReturned, 'Check that getCurrentPosition returns synchronously before any callbacks are invoked'); - assert_equals(err.code, err.PERMISSION_DENIED, - 'PossitionError code: ' + err.code, + ', message: ' + err.message); - done(); + assert_equals(err.code, err.PERMISSION_DENIED, errorToString(err)); }); geo.getCurrentPosition(onSuccess, onError); hasMethodReturned = true; }); - + diff --git a/tests/wpt/web-platform-tests/geolocation-API/support.js b/tests/wpt/web-platform-tests/geolocation-API/support.js index c85b5c87f91..960b5721c37 100644 --- a/tests/wpt/web-platform-tests/geolocation-API/support.js +++ b/tests/wpt/web-platform-tests/geolocation-API/support.js @@ -2,7 +2,7 @@ var geo; setup(function() { geo = navigator.geolocation; -}, {explicit_done: true}); +}); // The spec states that an implementation SHOULD acquire user permission before // beggining the position acquisition steps. If an implementation follows this diff --git a/tests/wpt/web-platform-tests/geolocation-API/watchPosition_permission_deny.https.html b/tests/wpt/web-platform-tests/geolocation-API/watchPosition_permission_deny.https.html index 831a1544fdf..1e2a3c4bf4c 100644 --- a/tests/wpt/web-platform-tests/geolocation-API/watchPosition_permission_deny.https.html +++ b/tests/wpt/web-platform-tests/geolocation-API/watchPosition_permission_deny.https.html @@ -14,18 +14,15 @@ var t = async_test('Check that watchPosition returns synchronously before any callbacks are invoked.'), id, checkMethodHasReturned, hasMethodReturned = false; -checkMethodHasReturned = t.step_func(function() { +checkMethodHasReturned = t.step_func_done(function() { assert_true(hasMethodReturned); - done(); }); try { id = geo.watchPosition(checkMethodHasReturned, checkMethodHasReturned); hasMethodReturned = true; } catch(e) { - t.step(function() { - assert_unreached('An exception was thrown unexpectedly: ' + e.message); - }); + t.unreached_func('An exception was thrown unexpectedly: ' + e.message); } // Rewrite http://dev.w3.org/geo/api/test-suite/t.html?00151 diff --git a/tests/wpt/web-platform-tests/gyroscope/Gyroscope.https.html b/tests/wpt/web-platform-tests/gyroscope/Gyroscope.https.html new file mode 100644 index 00000000000..8435912fb07 --- /dev/null +++ b/tests/wpt/web-platform-tests/gyroscope/Gyroscope.https.html @@ -0,0 +1,16 @@ + + +Gyroscope Test + + + + + +
        + + diff --git a/tests/wpt/web-platform-tests/gyroscope/Gyroscope_insecure_context.html b/tests/wpt/web-platform-tests/gyroscope/Gyroscope_insecure_context.html new file mode 100644 index 00000000000..f772b0a2540 --- /dev/null +++ b/tests/wpt/web-platform-tests/gyroscope/Gyroscope_insecure_context.html @@ -0,0 +1,20 @@ + + +Gyroscope Test: insecure context + + + + + +
        +

        Precondition

        +
          +
        1. + Run test in an insecure context, e.g. http://example.com/. +
        2. +
        + diff --git a/tests/wpt/web-platform-tests/gyroscope/Gyroscope_onerror-manual.https.html b/tests/wpt/web-platform-tests/gyroscope/Gyroscope_onerror-manual.https.html new file mode 100644 index 00000000000..f0126151a24 --- /dev/null +++ b/tests/wpt/web-platform-tests/gyroscope/Gyroscope_onerror-manual.https.html @@ -0,0 +1,20 @@ + + +Gyroscope Test: onerror + + + + + +
        +

        Precondition

        +
          +
        1. + Disable the Gyroscope Sensor or run test on a device without Gyroscope Sensor. +
        2. +
        + diff --git a/tests/wpt/web-platform-tests/gyroscope/idlharness.https.html b/tests/wpt/web-platform-tests/gyroscope/idlharness.https.html index 53d3b81cce6..da1f67b6583 100644 --- a/tests/wpt/web-platform-tests/gyroscope/idlharness.https.html +++ b/tests/wpt/web-platform-tests/gyroscope/idlharness.https.html @@ -2,7 +2,8 @@ Gyroscope Sensor IDL tests - + + @@ -18,24 +19,24 @@ interface Event { }; -interface EventTarget { -}; - -interface EventHandler { -}; - interface Error { }; dictionary EventInit { }; + +interface EventTarget { +}; + +interface EventHandler { +};
         [SecureContext]
         interface Sensor : EventTarget {
        -  readonly attribute SensorState state;
        -  readonly attribute SensorReading? reading;
        +  readonly attribute boolean activated;
        +  readonly attribute DOMHighResTimeStamp? timestamp;
           void start();
           void stop();
           attribute EventHandler onchange;
        @@ -47,18 +48,6 @@ dictionary SensorOptions {
           double? frequency;
         };
         
        -enum SensorState {
        -  "idle",
        -  "activating",
        -  "activated",
        -  "errored"
        -};
        -
        -[SecureContext]
        -interface SensorReading {
        -  readonly attribute DOMHighResTimeStamp timeStamp;
        -};
        -
         [SecureContext, Constructor(DOMString type, SensorErrorEventInit errorEventInitDict)]
         interface SensorErrorEvent : Event {
           readonly attribute Error error;
        @@ -67,42 +56,31 @@ interface SensorErrorEvent : Event {
         dictionary SensorErrorEventInit : EventInit {
           required Error error;
         };
        -
         
         [Constructor(optional SensorOptions sensorOptions)]
         interface Gyroscope : Sensor {
        -  readonly attribute GyroscopeReading? reading;
        -};
        -
        -[Constructor(GyroscopeReadingInit GyroscopeReadingInit)]
        -interface GyroscopeReading : SensorReading {
        -    readonly attribute unrestricted double x;
        -    readonly attribute unrestricted double y;
        -    readonly attribute unrestricted double z;
        -};
        -
        -dictionary GyroscopeReadingInit {
        -    unrestricted double x = 0;
        -    unrestricted double y = 0;
        -    unrestricted double z = 0;
        +  readonly attribute unrestricted double? x;
        +  readonly attribute unrestricted double? y;
        +  readonly attribute unrestricted double? z;
         };
         
        diff --git a/tests/wpt/web-platform-tests/gyroscope/support-iframe.html b/tests/wpt/web-platform-tests/gyroscope/support-iframe.html new file mode 100644 index 00000000000..5efbbcd54cf --- /dev/null +++ b/tests/wpt/web-platform-tests/gyroscope/support-iframe.html @@ -0,0 +1,10 @@ + + + diff --git a/tests/wpt/web-platform-tests/html-media-capture/capture_image_environment-manual.html b/tests/wpt/web-platform-tests/html-media-capture/capture_image_environment-manual.html index 78ff3ac73b3..b974222713d 100644 --- a/tests/wpt/web-platform-tests/html-media-capture/capture_image_environment-manual.html +++ b/tests/wpt/web-platform-tests/html-media-capture/capture_image_environment-manual.html @@ -13,6 +13,8 @@

        After hitting the button below, the camera must be launched with viewing the environment mode.

        +

        (Note: If the user agent is unable to support the preferred facing mode, it can fall back to the implementation-specific default facing mode.)

        +

        Capture an image and then confirm the capturing.

        Note: All the actions need to be done in 60 seconds, otherwise it will get TIMEOUT.

        diff --git a/tests/wpt/web-platform-tests/html-media-capture/capture_image_user-manual.html b/tests/wpt/web-platform-tests/html-media-capture/capture_image_user-manual.html index 26c99575b17..a2d8c0ecca3 100644 --- a/tests/wpt/web-platform-tests/html-media-capture/capture_image_user-manual.html +++ b/tests/wpt/web-platform-tests/html-media-capture/capture_image_user-manual.html @@ -13,6 +13,8 @@

        After hitting the button below, the camera must be launched with self-view mode.

        +

        (Note: If the user agent is unable to support the preferred facing mode, it can fall back to the implementation-specific default facing mode.)

        +

        Capture an image and then confirm the capturing.

        Note: All the actions need to be done in 60 seconds, otherwise it will get TIMEOUT.

        diff --git a/tests/wpt/web-platform-tests/html-media-capture/capture_video_environment-manual.html b/tests/wpt/web-platform-tests/html-media-capture/capture_video_environment-manual.html index e439ec5425e..03a691e8a61 100644 --- a/tests/wpt/web-platform-tests/html-media-capture/capture_video_environment-manual.html +++ b/tests/wpt/web-platform-tests/html-media-capture/capture_video_environment-manual.html @@ -13,6 +13,8 @@

        After hitting the button below, the camera must be launched with viewing the environment mode.

        +

        (Note: If the user agent is unable to support the preferred facing mode, it can fall back to the implementation-specific default facing mode.)

        +

        Capture a video and then confirm the capturing.

        Note: All the actions need to be done in 60 seconds, otherwise it will get TIMEOUT.

        diff --git a/tests/wpt/web-platform-tests/html-media-capture/capture_video_user-manual.html b/tests/wpt/web-platform-tests/html-media-capture/capture_video_user-manual.html index 2a6c9690236..47a6732ecf5 100644 --- a/tests/wpt/web-platform-tests/html-media-capture/capture_video_user-manual.html +++ b/tests/wpt/web-platform-tests/html-media-capture/capture_video_user-manual.html @@ -13,6 +13,8 @@

        After hitting the button below, the camera must be launched with self-view mode.

        +

        (Note: If the user agent is unable to support the preferred facing mode, it can fall back to the implementation-specific default facing mode.)

        +

        Capture a video and then confirm the capturing.

        Note: All the actions need to be done in 60 seconds, otherwise it will get TIMEOUT.

        diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/scroll-restoration-fragment-scrolling-cross-origin.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/scroll-restoration-fragment-scrolling-cross-origin.html index e3da59e3900..4594a1ed954 100644 --- a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/scroll-restoration-fragment-scrolling-cross-origin.html +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/scroll-restoration-fragment-scrolling-cross-origin.html @@ -47,12 +47,11 @@ }, function() { // coming back from history, scrollRestoration should be set to manual and respected assert_equals(iframe.contentWindow.location.href, baseURL + '/resources/page-with-fragment.html#fragment', 'should be back on page-with-fragment page'); - iframe.contentWindow.requestAnimationFrame(function() { + iframe.contentWindow.requestAnimationFrame(t.step_func_done(function() { assert_equals(iframe.contentWindow.history.scrollRestoration, 'manual', 'navigating back should retain scrollRestoration value'); assert_equals(iframe.contentWindow.scrollX, 0, 'should not scroll to fragment'); assert_equals(iframe.contentWindow.scrollY, 0, 'should not scroll to fragment'); - t.done(); - }); + })); } ]; @@ -64,4 +63,4 @@ iframe.onload = next; next(); }, 'Manual scroll restoration should take precedent over scrolling to fragment in cross origin navigation'); - \ No newline at end of file + diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/location-origin-idna.sub.window.js b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/location-origin-idna.sub.window.js new file mode 100644 index 00000000000..83b030f8865 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/location-origin-idna.sub.window.js @@ -0,0 +1,11 @@ +async_test(t => { + const frame = document.createElement("iframe"), + asciiOrigin = location.protocol + "//{{domains[天気の良い日]}}:" + location.port, + path = new URL("resources/post-your-origin.html", location).pathname; + frame.src = asciiOrigin + path; + self.onmessage = t.step_func_done(e => { + assert_equals(e.data.origin, asciiOrigin); + }); + document.body.appendChild(frame); + t.add_cleanup(() => frame.remove()); +}, "Test that location.origin returns ASCII"); diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/per-global.window.js b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/per-global.window.js new file mode 100644 index 00000000000..b2956fd21ff --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/per-global.window.js @@ -0,0 +1,3 @@ +// META: script=/common/object-association.js + +testIsPerWindow("location"); diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/resources/post-your-origin.html b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/resources/post-your-origin.html new file mode 100644 index 00000000000..a8a614c182b --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/resources/post-your-origin.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_setter_null.tentative.html b/tests/wpt/web-platform-tests/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_setter_null.tentative.html new file mode 100644 index 00000000000..314a7035d00 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_setter_null.tentative.html @@ -0,0 +1,82 @@ + + + + + + + + diff --git a/tests/wpt/web-platform-tests/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_setter_srcdoc.html b/tests/wpt/web-platform-tests/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_setter_srcdoc.html new file mode 100644 index 00000000000..65a7f5c8981 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_setter_srcdoc.html @@ -0,0 +1,84 @@ + + + + + + + + diff --git a/tests/wpt/web-platform-tests/html/browsers/origin/relaxing-the-same-origin-restriction/support/document_domain_frame.html b/tests/wpt/web-platform-tests/html/browsers/origin/relaxing-the-same-origin-restriction/support/document_domain_frame.html new file mode 100644 index 00000000000..42e8137db2c --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/origin/relaxing-the-same-origin-restriction/support/document_domain_frame.html @@ -0,0 +1,21 @@ + + diff --git a/tests/wpt/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-noopener.html b/tests/wpt/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-noopener.html index 55e8b44d5df..cac23648ade 100644 --- a/tests/wpt/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-noopener.html +++ b/tests/wpt/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-noopener.html @@ -64,7 +64,7 @@ test (t => { 'noopener,=', 'noopener foo', // => ('noopener', ''), ('foo', '') 'foo noopener=1', // => ('foo', ''), ('noopener', '1') - 'foo=\u000Cnoopener' // => ('foo', ''), ('noopener', '') + 'foo=\u000Cbar\u000Cnoopener' // => ('foo', 'bar'), ('noopener', '') ]; featureVariants.forEach(feature => { var win = window.open(windowURL, '', feature); @@ -139,7 +139,8 @@ test (t => { 'no\nopener', // => ('no', ''), ('opener', '') 'no,opener', // => ('no', ''), ('opener', '') '\0noopener', // => ('\0noopener', '') - 'noopener\u0000=yes' // => ('noopener\0', 'yes') + 'noopener\u0000=yes', // => ('noopener\0', 'yes') + 'foo=\u000Cnoopener' // => ('foo', 'noopener') ]; invalidFeatureVariants.forEach(feature => { var win = window.open(windowURL, '', feature); diff --git a/tests/wpt/web-platform-tests/html/browsers/the-window-object/historical.window.js b/tests/wpt/web-platform-tests/html/browsers/the-window-object/historical.window.js new file mode 100644 index 00000000000..653f12b4646 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/the-window-object/historical.window.js @@ -0,0 +1,4 @@ +test(() => { + assert_false("showModalDialog" in window) + assert_false("showModalDialog" in Window.prototype) +}, "showModalDialog() has been removed from the platform") diff --git a/tests/wpt/web-platform-tests/html/browsers/the-window-object/security-window/window-security.html b/tests/wpt/web-platform-tests/html/browsers/the-window-object/security-window/window-security.html index 9a9ef358ec1..8b067da8c67 100644 --- a/tests/wpt/web-platform-tests/html/browsers/the-window-object/security-window/window-security.html +++ b/tests/wpt/web-platform-tests/html/browsers/the-window-object/security-window/window-security.html @@ -136,7 +136,6 @@ function fr_load() { {name: "scrollBy", isMethod: true, args:[10, 10]}, {name: "setInterval", isMethod: true, args:[function () {}, 1]}, {name: "setTimeout", isMethod: true, args:[function () {}, 1]}, - {name: "showModalDialog", isMethod: true, args:["auto:blank", "dialog"]}, {name: "stop", isMethod: true}, ].forEach(function (item) { test(function () { diff --git a/tests/wpt/web-platform-tests/html/browsers/the-window-object/window-indexed-properties-strict.html b/tests/wpt/web-platform-tests/html/browsers/the-window-object/window-indexed-properties-strict.html index 610941fc879..e059b122616 100644 --- a/tests/wpt/web-platform-tests/html/browsers/the-window-object/window-indexed-properties-strict.html +++ b/tests/wpt/web-platform-tests/html/browsers/the-window-object/window-indexed-properties-strict.html @@ -23,15 +23,24 @@ test(function() { assert_throws(new TypeError(), function() { window[0] = "foo"; }); + assert_throws(new TypeError(), () => Object.defineProperty(window, 0, { value: "bar" })) + assert_throws(new TypeError(), () => Object.defineProperty(window, 0, { get() { return "baz" } })) + assert_throws(new TypeError(), () => Object.defineProperty(window, 0, { set(v) { return "qux" } })) assert_equals(window[0], document.getElementsByTagName("iframe")[0].contentWindow); + assert_throws(new TypeError(), () => delete window[0]); }); test(function() { "use strict"; assert_throws(new TypeError(), function() { window[1] = "foo"; }); + assert_throws(new TypeError(), () => Object.defineProperty(window, 1, { value: "bar" })) + assert_throws(new TypeError(), () => Object.defineProperty(window, 1, { get() { return "baz" } })) + assert_throws(new TypeError(), () => Object.defineProperty(window, 1, { set(v) { return "qux" } })) assert_equals(window[1], undefined); + assert_equals(Object.getOwnPropertyDescriptor(window, 1), undefined); + assert_equals(delete window[1], true); }); test(function() { "use strict"; diff --git a/tests/wpt/web-platform-tests/html/browsers/the-window-object/window-indexed-properties.html b/tests/wpt/web-platform-tests/html/browsers/the-window-object/window-indexed-properties.html index 9577ab8fbce..17d0eb729ae 100644 --- a/tests/wpt/web-platform-tests/html/browsers/the-window-object/window-indexed-properties.html +++ b/tests/wpt/web-platform-tests/html/browsers/the-window-object/window-indexed-properties.html @@ -19,12 +19,21 @@ test(function() { }); test(function() { window[0] = "foo"; + assert_throws(new TypeError(), () => Object.defineProperty(window, 0, { value: "bar" })) + assert_throws(new TypeError(), () => Object.defineProperty(window, 0, { get() { return "baz" } })) + assert_throws(new TypeError(), () => Object.defineProperty(window, 0, { set() { return "quz" } })) assert_equals(window[0], document.getElementsByTagName("iframe")[0].contentWindow); + assert_equals(delete window[0], false); }); test(function() { window[1] = "foo"; + assert_throws(new TypeError(), () => Object.defineProperty(window, 1, { value: "bar" })) + assert_throws(new TypeError(), () => Object.defineProperty(window, 1, { get() { return "baz" } })) + assert_throws(new TypeError(), () => Object.defineProperty(window, 1, { set(v) { return "quz" } })) assert_equals(window[1], undefined); + assert_equals(Object.getOwnPropertyDescriptor(window, 1), undefined); + assert_equals(delete window[1], true); }); test(function() { var proto = Window.prototype; diff --git a/tests/wpt/web-platform-tests/html/browsers/the-window-object/window-properties.html b/tests/wpt/web-platform-tests/html/browsers/the-window-object/window-properties.html index 3316bf5316f..5ad6335c82a 100644 --- a/tests/wpt/web-platform-tests/html/browsers/the-window-object/window-properties.html +++ b/tests/wpt/web-platform-tests/html/browsers/the-window-object/window-properties.html @@ -80,7 +80,6 @@ var methods = [ "confirm", "prompt", "print", - // See below: "showModalDialog", "postMessage", // WindowBase64 @@ -106,12 +105,6 @@ var methods = [ "scrollBy" ]; -// We would like to remove showModalDialog from the platform, -// see . -if ("showModalDialog" in window) { - methods.push("showModalDialog"); -} - var readonlyAttributes = [ "history", "frameElement", diff --git a/tests/wpt/web-platform-tests/html/browsers/windows/noreferrer-window-name.html b/tests/wpt/web-platform-tests/html/browsers/windows/noreferrer-window-name.html index c13bae9de42..f9cacd5ec54 100644 --- a/tests/wpt/web-platform-tests/html/browsers/windows/noreferrer-window-name.html +++ b/tests/wpt/web-platform-tests/html/browsers/windows/noreferrer-window-name.html @@ -36,5 +36,50 @@ hyperlink1.click() hyperlink2.click() - }) + }, "Following a noreferrer link with a named target should not cause creation of a window that can be targeted by another noreferrer link with the same named target"); + + async_test(function(t) { + var ifr = document.createElement("iframe"); + ifr.name = "sufficientlyrandomwindownameamiright2"; + ifr.onload = t.step_func(function() { + var hyperlink = document.body.appendChild(document.createElement("a")); + t.add_cleanup(function() { + hyperlink.remove(); + }); + hyperlink.rel = "noreferrer"; + hyperlink.href = URL.createObjectURL(new Blob(["hello subframe"], + { type: "text/html"})); + hyperlink.target = "sufficientlyrandomwindownameamiright2"; + ifr.onload = t.step_func_done(function() { + assert_equals(ifr.contentDocument.documentElement.textContent, + "hello subframe"); + }); + hyperlink.click(); + }); + document.body.appendChild(ifr); + t.add_cleanup(function() { + ifr.remove(); + }); + }, "Targeting a rel=noreferrer link at an existing named subframe should work"); + + async_test(function(t) { + var win = window.open("", "sufficientlyrandomwindownameamiright3"); + t.add_cleanup(function() { + win.close(); + }); + + var hyperlink = document.body.appendChild(document.createElement("a")); + t.add_cleanup(function() { + hyperlink.remove(); + }); + hyperlink.rel = "noreferrer"; + hyperlink.href = URL.createObjectURL(new Blob(["hello window"], + { type: "text/html"})); + hyperlink.target = "sufficientlyrandomwindownameamiright3"; + win.onload = t.step_func_done(function() { + assert_equals(win.document.documentElement.textContent, + "hello window"); + }); + hyperlink.click(); + }, "Targeting a rel=noreferrer link at an existing named window should work"); diff --git a/tests/wpt/web-platform-tests/html/dom/documents/dom-tree-accessors/nameditem-07.html b/tests/wpt/web-platform-tests/html/dom/documents/dom-tree-accessors/nameditem-07.html new file mode 100644 index 00000000000..fc3f06c01b9 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/dom/documents/dom-tree-accessors/nameditem-07.html @@ -0,0 +1,109 @@ + + +Named items: objects + + + +
        +
        + + + + + + + + + + + + + + + + + + + +
        + diff --git a/tests/wpt/web-platform-tests/html/dom/documents/dom-tree-accessors/nameditem-08.html b/tests/wpt/web-platform-tests/html/dom/documents/dom-tree-accessors/nameditem-08.html new file mode 100644 index 00000000000..a5c26f39eed --- /dev/null +++ b/tests/wpt/web-platform-tests/html/dom/documents/dom-tree-accessors/nameditem-08.html @@ -0,0 +1,42 @@ + + +Named items: duplicate id attributes for applet, object and img + + + +
        +
        +
        + + +
        + + +
        + +
        + diff --git a/tests/wpt/web-platform-tests/html/dom/elements-metadata.js b/tests/wpt/web-platform-tests/html/dom/elements-metadata.js index 73cbfc1a454..1b23a27a330 100644 --- a/tests/wpt/web-platform-tests/html/dom/elements-metadata.js +++ b/tests/wpt/web-platform-tests/html/dom/elements-metadata.js @@ -12,7 +12,12 @@ var metadataElements = { crossOrigin: {type: "enum", keywords: ["anonymous", "use-credentials"], nonCanon:{"": "anonymous"}, isNullable: true, defaultVal: null, invalidVal: "anonymous"}, rel: "string", relList: {type: "tokenlist", domAttrName: "rel"}, - // as: {}, XXX TODO: reflecting IDL attribute is an IDL enumeration + as: { + type: "enum", + keywords: ["fetch", "audio", "document", "embed", "font", "image", "manifest", "object", "report", "script", "serviceworker", "sharedworker", "style", "track", "video", "worker", "xslt"], + defaultVal: "", + invalidVal: "" + }, media: "string", nonce: "string", integrity: "string", diff --git a/tests/wpt/web-platform-tests/html/dom/elements-misc.js b/tests/wpt/web-platform-tests/html/dom/elements-misc.js index 2dfd824b17b..eb68e10936f 100644 --- a/tests/wpt/web-platform-tests/html/dom/elements-misc.js +++ b/tests/wpt/web-platform-tests/html/dom/elements-misc.js @@ -40,23 +40,9 @@ var miscElements = { }, summary: {}, menu: { - // Conforming - //TODO: check that missing value default is context if parent's type is context - type: {type: "enum", keywords:["context", "toolbar"], defaultVal: "toolbar"}, - label: "string", - // Obsolete compact: "boolean", }, - menuitem: { - type: {type: "enum", keywords: ["command", "checkbox", "radio"], defaultVal: "command"}, - label: "string", - icon: "url", - disabled: "boolean", - checked: "boolean", - radiogroup: "string", - "default": "boolean", - }, dialog: { open: "boolean", }, diff --git a/tests/wpt/web-platform-tests/html/dom/elements-tabular.js b/tests/wpt/web-platform-tests/html/dom/elements-tabular.js index bb54ade3056..db7683c79e0 100644 --- a/tests/wpt/web-platform-tests/html/dom/elements-tabular.js +++ b/tests/wpt/web-platform-tests/html/dom/elements-tabular.js @@ -17,7 +17,7 @@ var tabularElements = { align: "string", }, colgroup: { - span: {type: "limited unsigned long with fallback", defaultVal: 1}, + span: {type: "clamped unsigned long", defaultVal: 1, min: 1, max: 1000}, // Obsolete align: "string", @@ -28,7 +28,7 @@ var tabularElements = { }, col: { // Conforming - span: {type: "limited unsigned long with fallback", defaultVal: 1}, + span: {type: "clamped unsigned long", defaultVal: 1, min: 1, max: 1000}, // Obsolete align: "string", @@ -68,8 +68,8 @@ var tabularElements = { }, td: { // HTMLTableCellElement (Conforming) - colSpan: {type: "unsigned long", defaultVal: 1}, - rowSpan: {type: "unsigned long", defaultVal: 1}, + colSpan: {type: "clamped unsigned long", defaultVal: 1, min: 1, max: 1000}, + rowSpan: {type: "clamped unsigned long", defaultVal: 1, min: 0, max: 65534}, headers: "settable tokenlist", scope: {type: "enum", keywords: ["row", "col", "rowgroup", "colgroup"]}, abbr: "string", @@ -87,8 +87,8 @@ var tabularElements = { }, th: { // HTMLTableCellElement (Conforming) - colSpan: {type: "unsigned long", defaultVal: 1}, - rowSpan: {type: "unsigned long", defaultVal: 1}, + colSpan: {type: "clamped unsigned long", defaultVal: 1, min: 1, max: 1000}, + rowSpan: {type: "clamped unsigned long", defaultVal: 1, min: 0, max: 65534}, headers: "settable tokenlist", scope: {type: "enum", keywords: ["row", "col", "rowgroup", "colgroup"]}, abbr: "string", diff --git a/tests/wpt/web-platform-tests/html/dom/elements/elements-in-the-dom/historical.html b/tests/wpt/web-platform-tests/html/dom/elements/elements-in-the-dom/historical.html index 469ff08ca5b..078ce29cc02 100644 --- a/tests/wpt/web-platform-tests/html/dom/elements/elements-in-the-dom/historical.html +++ b/tests/wpt/web-platform-tests/html/dom/elements/elements-in-the-dom/historical.html @@ -15,8 +15,6 @@ "commandTriggers", // https://github.com/whatwg/html/pull/2402 "dropzone", - // https://github.com/whatwg/html/commit/5ddfc78b1f82e86cc202d72ccc752a0e15f1e4ad - "inert", ].forEach(function(member) { test(function() { assert_false(member in document.body); diff --git a/tests/wpt/web-platform-tests/html/dom/interfaces.html b/tests/wpt/web-platform-tests/html/dom/interfaces.html index dc751e0f2dc..84406156e8a 100644 --- a/tests/wpt/web-platform-tests/html/dom/interfaces.html +++ b/tests/wpt/web-platform-tests/html/dom/interfaces.html @@ -30,10 +30,10 @@ function createInput(type) { return input; } -function doTest([untested, tested]) { +function doTest([html, dom, cssom, uievents, touchevents]) { var idlArray = new IdlArray(); - idlArray.add_untested_idls(untested); - idlArray.add_idls(tested); + idlArray.add_untested_idls(dom + cssom + uievents + touchevents); + idlArray.add_idls(html); idlArray.add_objects({ NodeList: ['document.getElementsByName("name")'], @@ -227,8 +227,11 @@ function waitForLoad() { promise_test(function() { // Have to wait for onload - return Promise.all([fetchData("resources/untested-interfaces.idl"), - fetchData("resources/interfaces.idl"), + return Promise.all([fetchData("/interfaces/html.idl"), + fetchData("/interfaces/dom.idl"), + fetchData("/interfaces/cssom.idl"), + fetchData("/interfaces/touchevents.idl"), + fetchData("/interfaces/uievents.idl"), waitForLoad()]) .then(doTest); }, "Test driver"); diff --git a/tests/wpt/web-platform-tests/html/dom/reflection.js b/tests/wpt/web-platform-tests/html/dom/reflection.js index e3ff41574c4..d1b3abe8a89 100644 --- a/tests/wpt/web-platform-tests/html/dom/reflection.js +++ b/tests/wpt/web-platform-tests/html/dom/reflection.js @@ -454,6 +454,37 @@ ReflectionTests.typeMap = { "idlTests": [0, 1, maxInt, maxInt + 1, maxUnsigned], "idlDomExpected": [null, 1, maxInt, null, null] }, + /** + * "If a reflecting IDL attribute has an unsigned integer type (unsigned + * long) that is clamped to the range [min, max], then on getting, the + * content attribute must first be parsed according to the rules for + * parsing non-negative integers, and if that is successful, and the value + * is between min and max inclusive, the resulting value must be returned. + * If it fails, the default value must be returned. If it succeeds but the + * value is less than min, min must be returned. If it succeeds but the + * value is greater than max, max must be returned. On setting, it behaves + * the same as a regular reflected unsigned integer." + * + * The data object passed to reflects must contain the keys defaultVal, + * min, and max. As with enum, domExpected is generated later once we have + * access to the min and max. + */ + "clamped unsigned long": { + "jsType": "number", + "domTests": [minInt - 1, minInt, -36, -1, 0, 1, maxInt, + maxInt + 1, maxUnsigned, maxUnsigned + 1, "", "-1", "-0", "0", "1", + "\u00097", "\u000B7", "\u000C7", "\u00207", "\u00A07", "\uFEFF7", + "\u000A7", "\u000D7", "\u20287", "\u20297", "\u16807", "\u180E7", + "\u20007", "\u20017", "\u20027", "\u20037", "\u20047", "\u20057", + "\u20067", "\u20077", "\u20087", "\u20097", "\u200A7", "\u202F7", + "\u30007", + " " + binaryString + " foo ", undefined, 1.5, true, false, + {"test": 6}, NaN, +Infinity, -Infinity, "\0", + {toString:function() {return 2;}, valueOf: null}, + {valueOf:function() {return 3;}}], + "idlTests": [0, 1, 257, maxInt, "-0", maxInt + 1, maxUnsigned], + "idlDomExpected": [0, 1, 257, maxInt, 0, null, null], + }, /** * "If a reflecting IDL attribute is a floating point number type (double), * then, on getting, the content attribute must be parsed according to the @@ -644,6 +675,10 @@ ReflectionTests.reflects = function(data, idlName, idlObj, domName, domObj) { domTests.push(data.keywords[i].toUpperCase()); idlTests.push(data.keywords[i].toUpperCase()); } + if (data.keywords[i] != data.keywords[i].replace(/k/g, "\u212A")) { + domTests.push(data.keywords[i].replace(/k/g, "\u212A")); + idlTests.push(data.keywords[i].replace(/k/g, "\u212A")); + } } // Per spec, the expected DOM values are the same as the value we set @@ -681,6 +716,54 @@ ReflectionTests.reflects = function(data, idlName, idlObj, domName, domObj) { } } break; + + case "clamped unsigned long": + [data.min - 1, data.min, data.max, data.max + 1].forEach(function(val) { + if (domTests.indexOf(val) == -1) { + domTests.push(val); + } + if (idlTests.indexOf(val) == -1 && 0 <= val && val <= maxUnsigned) { + idlTests.push(val); + if (typeof val != "number") { + val = ReflectionTests.parseNonneg(val); + } + idlDomExpected.push(val > maxInt ? null : val); + } + }); + + // Rewrite expected values + domExpected = domTests.map(function(val) { + var parsed = ReflectionTests.parseNonneg(String(val)); + if (parsed === false) { + return defaultVal; + } + if (parsed < data.min) { + return data.min; + } + if (parsed > data.max) { + return data.max; + } + return parsed; + }); + idlIdlExpected = idlTests.map(function(val) { + if (typeof val != "number") { + val = ReflectionTests.parseNonneg(val); + } + if (val < 0 || val > maxUnsigned) { + throw "Test bug: val should be an unsigned long"; + } + if (val > maxInt) { + return defaultVal; + } + if (val < data.min) { + return data.min; + } + if (val > data.max) { + return data.max; + } + return val; + }); + break; } if (domObj.tagName.toLowerCase() == "canvas" && (domName == "width" || domName == "height")) { // Opera tries to allocate a canvas with the given width and height, so @@ -742,6 +825,10 @@ ReflectionTests.reflects = function(data, idlName, idlObj, domName, domObj) { } }; +function toASCIILowerCase(str) { + return str.replace(/[A-Z]/g, function(m) { return m.toLowerCase(); }); +} + /** * If we have an enumerated attribute limited to the array of values in * keywords, with nonCanon being a map of non-canonical values to their @@ -752,7 +839,7 @@ ReflectionTests.reflects = function(data, idlName, idlObj, domName, domObj) { ReflectionTests.enumExpected = function(keywords, nonCanon, invalidVal, contentVal) { var ret = invalidVal; for (var i = 0; i < keywords.length; i++) { - if (String(contentVal).toLowerCase() == keywords[i].toLowerCase()) { + if (toASCIILowerCase(String(contentVal)) === toASCIILowerCase(keywords[i])) { ret = keywords[i]; break; } diff --git a/tests/wpt/web-platform-tests/html/dom/resources/untested-interfaces.idl b/tests/wpt/web-platform-tests/html/dom/resources/untested-interfaces.idl deleted file mode 100644 index 75428f83ebe..00000000000 --- a/tests/wpt/web-platform-tests/html/dom/resources/untested-interfaces.idl +++ /dev/null @@ -1,830 +0,0 @@ -// DOM IDLs -[Constructor(DOMString type, optional EventInit eventInitDict), - Exposed=(Window,Worker)] -interface Event { - readonly attribute DOMString type; - readonly attribute EventTarget? target; - readonly attribute EventTarget? currentTarget; - - const unsigned short NONE = 0; - const unsigned short CAPTURING_PHASE = 1; - const unsigned short AT_TARGET = 2; - const unsigned short BUBBLING_PHASE = 3; - readonly attribute unsigned short eventPhase; - - void stopPropagation(); - void stopImmediatePropagation(); - - readonly attribute boolean bubbles; - readonly attribute boolean cancelable; - void preventDefault(); - readonly attribute boolean defaultPrevented; - - [Unforgeable] readonly attribute boolean isTrusted; - readonly attribute DOMTimeStamp timeStamp; - - void initEvent(DOMString type, boolean bubbles, boolean cancelable); -}; - -dictionary EventInit { - boolean bubbles = false; - boolean cancelable = false; -}; - -[Constructor(DOMString type, optional CustomEventInit eventInitDict), - Exposed=(Window,Worker)] -interface CustomEvent : Event { - readonly attribute any detail; - - void initCustomEvent(DOMString type, boolean bubbles, boolean cancelable, any detail); -}; - -dictionary CustomEventInit : EventInit { - any detail = null; -}; - -[Exposed=(Window,Worker)] -interface EventTarget { - void addEventListener(DOMString type, EventListener? callback, optional boolean capture = false); - void removeEventListener(DOMString type, EventListener? callback, optional boolean capture = false); - boolean dispatchEvent(Event event); -}; - -callback interface EventListener { - void handleEvent(Event event); -}; - -[NoInterfaceObject] -interface NonElementParentNode { - Element? getElementById(DOMString elementId); -}; -Document implements NonElementParentNode; -DocumentFragment implements NonElementParentNode; - -[NoInterfaceObject] -interface ParentNode { - [SameObject] readonly attribute HTMLCollection children; - readonly attribute Element? firstElementChild; - readonly attribute Element? lastElementChild; - readonly attribute unsigned long childElementCount; - - [Unscopable] void prepend((Node or DOMString)... nodes); - [Unscopable] void append((Node or DOMString)... nodes); - - Element? querySelector(DOMString selectors); - [NewObject] NodeList querySelectorAll(DOMString selectors); -}; -Document implements ParentNode; -DocumentFragment implements ParentNode; -Element implements ParentNode; - -[NoInterfaceObject] -interface NonDocumentTypeChildNode { - readonly attribute Element? previousElementSibling; - readonly attribute Element? nextElementSibling; -}; -Element implements NonDocumentTypeChildNode; -CharacterData implements NonDocumentTypeChildNode; - -[NoInterfaceObject] -interface ChildNode { - [Unscopable] void before((Node or DOMString)... nodes); - [Unscopable] void after((Node or DOMString)... nodes); - [Unscopable] void replaceWith((Node or DOMString)... nodes); - [Unscopable] void remove(); -}; -DocumentType implements ChildNode; -Element implements ChildNode; -CharacterData implements ChildNode; - -// XXX unrecognized tokens "class", "extends" -// https://www.w3.org/Bugs/Public/show_bug.cgi?id=20020 -// https://www.w3.org/Bugs/Public/show_bug.cgi?id=23225 -//class Elements extends Array { -// Element? query(DOMString relativeSelectors); -// Elements queryAll(DOMString relativeSelectors); -//}; - -interface NodeList { - getter Node? item(unsigned long index); - readonly attribute unsigned long length; -// iterable; -}; - -interface HTMLCollection { - readonly attribute unsigned long length; - getter Element? item(unsigned long index); - getter Element? namedItem(DOMString name); -}; - -[Constructor(MutationCallback callback)] -interface MutationObserver { - void observe(Node target, MutationObserverInit options); - void disconnect(); - sequence takeRecords(); -}; - -callback MutationCallback = void (sequence mutations, MutationObserver observer); - -dictionary MutationObserverInit { - boolean childList = false; - boolean attributes; - boolean characterData; - boolean subtree = false; - boolean attributeOldValue; - boolean characterDataOldValue; - sequence attributeFilter; -}; - -interface MutationRecord { - readonly attribute DOMString type; - readonly attribute Node target; - [SameObject] readonly attribute NodeList addedNodes; - [SameObject] readonly attribute NodeList removedNodes; - readonly attribute Node? previousSibling; - readonly attribute Node? nextSibling; - readonly attribute DOMString? attributeName; - readonly attribute DOMString? attributeNamespace; - readonly attribute DOMString? oldValue; -}; - -interface Node : EventTarget { - const unsigned short ELEMENT_NODE = 1; - const unsigned short ATTRIBUTE_NODE = 2; // historical - const unsigned short TEXT_NODE = 3; - const unsigned short CDATA_SECTION_NODE = 4; - const unsigned short ENTITY_REFERENCE_NODE = 5; // historical - const unsigned short ENTITY_NODE = 6; // historical - const unsigned short PROCESSING_INSTRUCTION_NODE = 7; - const unsigned short COMMENT_NODE = 8; - const unsigned short DOCUMENT_NODE = 9; - const unsigned short DOCUMENT_TYPE_NODE = 10; - const unsigned short DOCUMENT_FRAGMENT_NODE = 11; - const unsigned short NOTATION_NODE = 12; // historical - readonly attribute unsigned short nodeType; - readonly attribute DOMString nodeName; - - readonly attribute DOMString? baseURI; - - readonly attribute Document? ownerDocument; - readonly attribute Node? parentNode; - readonly attribute Element? parentElement; - boolean hasChildNodes(); - [SameObject] readonly attribute NodeList childNodes; - readonly attribute Node? firstChild; - readonly attribute Node? lastChild; - readonly attribute Node? previousSibling; - readonly attribute Node? nextSibling; - - attribute DOMString? nodeValue; - attribute DOMString? textContent; - void normalize(); - - [NewObject] Node cloneNode(optional boolean deep = false); - boolean isEqualNode(Node? node); - - const unsigned short DOCUMENT_POSITION_DISCONNECTED = 0x01; - const unsigned short DOCUMENT_POSITION_PRECEDING = 0x02; - const unsigned short DOCUMENT_POSITION_FOLLOWING = 0x04; - const unsigned short DOCUMENT_POSITION_CONTAINS = 0x08; - const unsigned short DOCUMENT_POSITION_CONTAINED_BY = 0x10; - const unsigned short DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 0x20; - unsigned short compareDocumentPosition(Node other); - boolean contains(Node? other); - - DOMString? lookupPrefix(DOMString? namespace); - DOMString? lookupNamespaceURI(DOMString? prefix); - boolean isDefaultNamespace(DOMString? namespace); - - Node insertBefore(Node node, Node? child); - Node appendChild(Node node); - Node replaceChild(Node node, Node child); - Node removeChild(Node child); -}; - -[Constructor] -interface Document : Node { - [SameObject] readonly attribute DOMImplementation implementation; - readonly attribute DOMString URL; - readonly attribute DOMString documentURI; - readonly attribute DOMString origin; - readonly attribute DOMString compatMode; - readonly attribute DOMString characterSet; - readonly attribute DOMString charset; // legacy alias of .characterSet - readonly attribute DOMString inputEncoding; // legacy alias of .characterSet - readonly attribute DOMString contentType; - - readonly attribute DocumentType? doctype; - readonly attribute Element? documentElement; - HTMLCollection getElementsByTagName(DOMString localName); - HTMLCollection getElementsByTagNameNS(DOMString? namespace, DOMString localName); - HTMLCollection getElementsByClassName(DOMString classNames); - - [NewObject] Element createElement(DOMString localName); - [NewObject] Element createElementNS(DOMString? namespace, DOMString qualifiedName); - [NewObject] DocumentFragment createDocumentFragment(); - [NewObject] Text createTextNode(DOMString data); - [NewObject] CDATASection createCDATASection(DOMString data); - [NewObject] Comment createComment(DOMString data); - [NewObject] ProcessingInstruction createProcessingInstruction(DOMString target, DOMString data); - - [NewObject] Node importNode(Node node, optional boolean deep = false); - Node adoptNode(Node node); - - [NewObject] Attr createAttribute(DOMString localName); - [NewObject] Attr createAttributeNS(DOMString? namespace, DOMString name); - - [NewObject] Event createEvent(DOMString interface); - - [NewObject] Range createRange(); - - // NodeFilter.SHOW_ALL = 0xFFFFFFFF - [NewObject] NodeIterator createNodeIterator(Node root, optional unsigned long whatToShow = 0xFFFFFFFF, optional NodeFilter? filter = null); - [NewObject] TreeWalker createTreeWalker(Node root, optional unsigned long whatToShow = 0xFFFFFFFF, optional NodeFilter? filter = null); -}; - -interface XMLDocument : Document {}; - -interface DOMImplementation { - [NewObject] DocumentType createDocumentType(DOMString qualifiedName, DOMString publicId, DOMString systemId); - [NewObject] XMLDocument createDocument(DOMString? namespace, [TreatNullAs=EmptyString] DOMString qualifiedName, optional DocumentType? doctype = null); - [NewObject] Document createHTMLDocument(optional DOMString title); - - boolean hasFeature(); // useless; always returns true -}; - -[Constructor] -interface DocumentFragment : Node { -}; - -interface DocumentType : Node { - readonly attribute DOMString name; - readonly attribute DOMString publicId; - readonly attribute DOMString systemId; -}; - -interface Element : Node { - readonly attribute DOMString? namespaceURI; - readonly attribute DOMString? prefix; - readonly attribute DOMString localName; - readonly attribute DOMString tagName; - - attribute DOMString id; - attribute DOMString className; - [SameObject, PutForwards=value] readonly attribute DOMTokenList classList; - - boolean hasAttributes(); - [SameObject] readonly attribute NamedNodeMap attributes; - sequence getAttributeNames(); - DOMString? getAttribute(DOMString name); - DOMString? getAttributeNS(DOMString? namespace, DOMString localName); - void setAttribute(DOMString name, DOMString value); - void setAttributeNS(DOMString? namespace, DOMString name, DOMString value); - void removeAttribute(DOMString name); - void removeAttributeNS(DOMString? namespace, DOMString localName); - boolean hasAttribute(DOMString name); - boolean hasAttributeNS(DOMString? namespace, DOMString localName); - - Attr? getAttributeNode(DOMString name); - Attr? getAttributeNodeNS(DOMString? namespace, DOMString localName); - Attr? setAttributeNode(Attr attr); - Attr? setAttributeNodeNS(Attr attr); - Attr removeAttributeNode(Attr attr); - - Element? closest(DOMString selectors); - boolean matches(DOMString selectors); - - HTMLCollection getElementsByTagName(DOMString localName); - HTMLCollection getElementsByTagNameNS(DOMString? namespace, DOMString localName); - HTMLCollection getElementsByClassName(DOMString classNames); -}; - -interface NamedNodeMap { - readonly attribute unsigned long length; - getter Attr? item(unsigned long index); - getter Attr? getNamedItem(DOMString name); - Attr? getNamedItemNS(DOMString? namespace, DOMString localName); - Attr? setNamedItem(Attr attr); - Attr? setNamedItemNS(Attr attr); - Attr removeNamedItem(DOMString name); - Attr removeNamedItemNS(DOMString? namespace, DOMString localName); -}; - -interface Attr { - readonly attribute DOMString? namespaceURI; - readonly attribute DOMString? prefix; - readonly attribute DOMString localName; - readonly attribute DOMString name; - attribute DOMString value; - attribute DOMString nodeValue; // legacy alias of .value - attribute DOMString textContent; // legacy alias of .value - - readonly attribute Element? ownerElement; - - readonly attribute boolean specified; // useless; always returns true -}; - -interface CharacterData : Node { - [TreatNullAs=EmptyString] attribute DOMString data; - readonly attribute unsigned long length; - DOMString substringData(unsigned long offset, unsigned long count); - void appendData(DOMString data); - void insertData(unsigned long offset, DOMString data); - void deleteData(unsigned long offset, unsigned long count); - void replaceData(unsigned long offset, unsigned long count, DOMString data); -}; - -[Constructor(optional DOMString data = "")] -interface Text : CharacterData { - [NewObject] Text splitText(unsigned long offset); - readonly attribute DOMString wholeText; -}; - -[Exposed=Window] -interface CDATASection : Text { -}; - -interface ProcessingInstruction : CharacterData { - readonly attribute DOMString target; -}; - -[Constructor(optional DOMString data = "")] -interface Comment : CharacterData { -}; - -[Constructor] -interface Range { - readonly attribute Node startContainer; - readonly attribute unsigned long startOffset; - readonly attribute Node endContainer; - readonly attribute unsigned long endOffset; - readonly attribute boolean collapsed; - readonly attribute Node commonAncestorContainer; - - void setStart(Node node, unsigned long offset); - void setEnd(Node node, unsigned long offset); - void setStartBefore(Node node); - void setStartAfter(Node node); - void setEndBefore(Node node); - void setEndAfter(Node node); - void collapse(optional boolean toStart = false); - void selectNode(Node node); - void selectNodeContents(Node node); - - const unsigned short START_TO_START = 0; - const unsigned short START_TO_END = 1; - const unsigned short END_TO_END = 2; - const unsigned short END_TO_START = 3; - short compareBoundaryPoints(unsigned short how, Range sourceRange); - - void deleteContents(); - [NewObject] DocumentFragment extractContents(); - [NewObject] DocumentFragment cloneContents(); - void insertNode(Node node); - void surroundContents(Node newParent); - - [NewObject] Range cloneRange(); - void detach(); - - boolean isPointInRange(Node node, unsigned long offset); - short comparePoint(Node node, unsigned long offset); - - boolean intersectsNode(Node node); - - stringifier; -}; - -interface NodeIterator { - [SameObject] readonly attribute Node root; - readonly attribute Node referenceNode; - readonly attribute boolean pointerBeforeReferenceNode; - readonly attribute unsigned long whatToShow; - readonly attribute NodeFilter? filter; - - Node? nextNode(); - Node? previousNode(); - - void detach(); -}; - -interface TreeWalker { - [SameObject] readonly attribute Node root; - readonly attribute unsigned long whatToShow; - readonly attribute NodeFilter? filter; - attribute Node currentNode; - - Node? parentNode(); - Node? firstChild(); - Node? lastChild(); - Node? previousSibling(); - Node? nextSibling(); - Node? previousNode(); - Node? nextNode(); -}; - -callback interface NodeFilter { - // Constants for acceptNode() - const unsigned short FILTER_ACCEPT = 1; - const unsigned short FILTER_REJECT = 2; - const unsigned short FILTER_SKIP = 3; - - // Constants for whatToShow - const unsigned long SHOW_ALL = 0xFFFFFFFF; - const unsigned long SHOW_ELEMENT = 0x1; - const unsigned long SHOW_ATTRIBUTE = 0x2; // historical - const unsigned long SHOW_TEXT = 0x4; - const unsigned long SHOW_CDATA_SECTION = 0x8; - const unsigned long SHOW_ENTITY_REFERENCE = 0x10; // historical - const unsigned long SHOW_ENTITY = 0x20; // historical - const unsigned long SHOW_PROCESSING_INSTRUCTION = 0x40; - const unsigned long SHOW_COMMENT = 0x80; - const unsigned long SHOW_DOCUMENT = 0x100; - const unsigned long SHOW_DOCUMENT_TYPE = 0x200; - const unsigned long SHOW_DOCUMENT_FRAGMENT = 0x400; - const unsigned long SHOW_NOTATION = 0x800; // historical - - unsigned short acceptNode(Node node); -}; - -interface DOMTokenList { - readonly attribute unsigned long length; - getter DOMString? item(unsigned long index); - boolean contains(DOMString token); - [CEReactions] void add(DOMString... tokens); - [CEReactions] void remove(DOMString... tokens); - [CEReactions] boolean toggle(DOMString token, optional boolean force); - [CEReactions] void replace(DOMString token, DOMString newToken); - boolean supports(DOMString token); - [CEReactions] stringifier attribute DOMString value; - // iterable; -}; - -// UI Events IDLs -[Constructor(DOMString type, optional UIEventInit eventInitDict)] -interface UIEvent : Event { - readonly attribute WindowProxy? view; - readonly attribute long detail; -}; - -dictionary UIEventInit : EventInit { - WindowProxy? view = null; - long detail = 0; -}; - -[Constructor(DOMString typeArg, optional MouseEventInit mouseEventInitDict)] -interface MouseEvent : UIEvent { - readonly attribute long screenX; - readonly attribute long screenY; - readonly attribute long clientX; - readonly attribute long clientY; - readonly attribute boolean ctrlKey; - readonly attribute boolean shiftKey; - readonly attribute boolean altKey; - readonly attribute boolean metaKey; - readonly attribute short button; - readonly attribute EventTarget? relatedTarget; - // Introduced in DOM Level 3 - readonly attribute unsigned short buttons; - boolean getModifierState (DOMString keyArg); -}; - -dictionary MouseEventInit : EventModifierInit { - long screenX = 0; - long screenY = 0; - long clientX = 0; - long clientY = 0; - short button = 0; - unsigned short buttons = 0; - EventTarget? relatedTarget = null; -}; - -dictionary EventModifierInit : UIEventInit { - boolean ctrlKey = false; - boolean shiftKey = false; - boolean altKey = false; - boolean metaKey = false; - boolean keyModifierStateAltGraph = false; - boolean keyModifierStateCapsLock = false; - boolean keyModifierStateFn = false; - boolean keyModifierStateFnLock = false; - boolean keyModifierStateHyper = false; - boolean keyModifierStateNumLock = false; - boolean keyModifierStateOS = false; - boolean keyModifierStateScrollLock = false; - boolean keyModifierStateSuper = false; - boolean keyModifierStateSymbol = false; - boolean keyModifierStateSymbolLock = false; -}; - -partial interface MouseEvent { - // Deprecated in DOM Level 3 - void initMouseEvent (DOMString typeArg, boolean bubblesArg, boolean cancelableArg, Window? viewArg, long detailArg, long screenXArg, long screenYArg, long clientXArg, long clientYArg, boolean ctrlKeyArg, boolean altKeyArg, boolean shiftKeyArg, boolean metaKeyArg, short buttonArg, EventTarget? relatedTargetArg); -}; - -// Touch Events IDLs -interface Touch { - readonly attribute long identifier; - readonly attribute EventTarget target; - readonly attribute long screenX; - readonly attribute long screenY; - readonly attribute long clientX; - readonly attribute long clientY; - readonly attribute long pageX; - readonly attribute long pageY; -}; - -// CSSOM IDLs -interface MediaList { - stringifier attribute DOMString mediaText; - readonly attribute unsigned long length; - getter DOMString item(unsigned long index); - void appendMedium(DOMString medium); - void deleteMedium(DOMString medium); -}; - -interface StyleSheet { - readonly attribute DOMString type; - readonly attribute DOMString href; - readonly attribute Node ownerNode; - readonly attribute StyleSheet parentStyleSheet; - readonly attribute DOMString title; - [PutForwards=mediaText] readonly attribute MediaList media; - attribute boolean disabled; -}; - -interface CSSStyleSheet : StyleSheet { - readonly attribute CSSRule ownerRule; - readonly attribute CSSRuleList cssRules; - unsigned long insertRule(DOMString rule, unsigned long index); - void deleteRule(unsigned long index); -}; - -typedef sequence StyleSheetList; - -partial interface Document { - [SameObject] readonly attribute StyleSheetList styleSheets; -}; - -[NoInterfaceObject] interface LinkStyle { - readonly attribute StyleSheet sheet; -}; - -ProcessingInstruction implements LinkStyle; - -typedef sequence CSSRuleList; - -interface CSSRule { - // Types - const unsigned short STYLE_RULE = 1; - const unsigned short IMPORT_RULE = 3; - const unsigned short MEDIA_RULE = 4; - const unsigned short FONT_FACE_RULE = 5; - const unsigned short PAGE_RULE = 6; - const unsigned short NAMESPACE_RULE = 10; - readonly attribute unsigned short type; - - // Parsing and serialization - attribute DOMString cssText; - - // Context - readonly attribute CSSRule parentRule; - readonly attribute CSSStyleSheet parentStyleSheet; -}; - -interface CSSStyleRule : CSSRule { - attribute DOMString selectorText; - readonly attribute CSSStyleDeclaration style; -}; - -interface CSSImportRule : CSSRule { - readonly attribute DOMString href; - [PutForwards=mediaText] readonly attribute MediaList media; - readonly attribute CSSStyleSheet styleSheet; -}; - -interface CSSMediaRule : CSSRule { - [PutForwards=mediaText] readonly attribute MediaList media; - readonly attribute CSSRuleList cssRules; - unsigned long insertRule(DOMString rule, unsigned long index); - void deleteRule(unsigned long index); -}; - -interface CSSFontFaceRule : CSSRule { - readonly attribute CSSStyleDeclaration style; -}; - -interface CSSPageRule : CSSRule { - attribute DOMString selectorText; - readonly attribute CSSStyleDeclaration style; -}; - -interface CSSNamespaceRule : CSSRule { - readonly attribute DOMString namespaceURI; - readonly attribute DOMString? prefix; -}; - -interface CSSStyleDeclaration { - attribute DOMString cssText; - - readonly attribute unsigned long length; - DOMString item(unsigned long index); - - DOMString getPropertyValue(DOMString property); - DOMString getPropertyPriority(DOMString property); - void setProperty(DOMString property, DOMString value, optional DOMString priority); - DOMString removeProperty(DOMString property); - - readonly attribute CSSStyleDeclarationValue values; - - readonly attribute CSSRule parentRule; - - // CSS Properties - attribute DOMString azimuth; - attribute DOMString background; - attribute DOMString backgroundAttachment; - attribute DOMString backgroundColor; - attribute DOMString backgroundImage; - attribute DOMString backgroundPosition; - attribute DOMString backgroundRepeat; - attribute DOMString border; - attribute DOMString borderCollapse; - attribute DOMString borderColor; - attribute DOMString borderSpacing; - attribute DOMString borderStyle; - attribute DOMString borderTop; - attribute DOMString borderRight; - attribute DOMString borderBottom; - attribute DOMString borderLeft; - attribute DOMString borderTopColor; - attribute DOMString borderRightColor; - attribute DOMString borderBottomColor; - attribute DOMString borderLeftColor; - attribute DOMString borderTopStyle; - attribute DOMString borderRightStyle; - attribute DOMString borderBottomStyle; - attribute DOMString borderLeftStyle; - attribute DOMString borderTopWidth; - attribute DOMString borderRightWidth; - attribute DOMString borderBottomWidth; - attribute DOMString borderLeftWidth; - attribute DOMString borderWidth; - attribute DOMString bottom; - attribute DOMString captionSide; - attribute DOMString clear; - attribute DOMString clip; - attribute DOMString color; - attribute DOMString content; - attribute DOMString counterIncrement; - attribute DOMString counterReset; - attribute DOMString cue; - attribute DOMString cueAfter; - attribute DOMString cueBefore; - attribute DOMString cursor; - attribute DOMString direction; - attribute DOMString display; - attribute DOMString elevation; - attribute DOMString emptyCells; - attribute DOMString cssFloat; - attribute DOMString font; - attribute DOMString fontFamily; - attribute DOMString fontSize; - attribute DOMString fontSizeAdjust; - attribute DOMString fontStretch; - attribute DOMString fontStyle; - attribute DOMString fontVariant; - attribute DOMString fontWeight; - attribute DOMString height; - attribute DOMString left; - attribute DOMString letterSpacing; - attribute DOMString lineHeight; - attribute DOMString listStyle; - attribute DOMString listStyleImage; - attribute DOMString listStylePosition; - attribute DOMString listStyleType; - attribute DOMString margin; - attribute DOMString marginTop; - attribute DOMString marginRight; - attribute DOMString marginBottom; - attribute DOMString marginLeft; - attribute DOMString marks; - attribute DOMString maxHeight; - attribute DOMString maxWidth; - attribute DOMString minHeight; - attribute DOMString minWidth; - attribute DOMString orphans; - attribute DOMString outline; - attribute DOMString outlineColor; - attribute DOMString outlineStyle; - attribute DOMString outlineWidth; - attribute DOMString overflow; - attribute DOMString padding; - attribute DOMString paddingTop; - attribute DOMString paddingRight; - attribute DOMString paddingBottom; - attribute DOMString paddingLeft; - attribute DOMString page; - attribute DOMString pageBreakAfter; - attribute DOMString pageBreakBefore; - attribute DOMString pageBreakInside; - attribute DOMString pause; - attribute DOMString pauseAfter; - attribute DOMString pauseBefore; - attribute DOMString pitch; - attribute DOMString pitchRange; - attribute DOMString playDuring; - attribute DOMString position; - attribute DOMString quotes; - attribute DOMString richness; - attribute DOMString right; - attribute DOMString size; - attribute DOMString speak; - attribute DOMString speakHeader; - attribute DOMString speakNumeral; - attribute DOMString speakPunctuation; - attribute DOMString speechRate; - attribute DOMString stress; - attribute DOMString tableLayout; - attribute DOMString textAlign; - attribute DOMString textDecoration; - attribute DOMString textIndent; - attribute DOMString textShadow; - attribute DOMString textTransform; - attribute DOMString top; - attribute DOMString unicodeBidi; - attribute DOMString verticalAlign; - attribute DOMString visibility; - attribute DOMString voiceFamily; - attribute DOMString volume; - attribute DOMString whiteSpace; - attribute DOMString widows; - attribute DOMString width; - attribute DOMString wordSpacing; - attribute DOMString zIndex; -}; - -interface CSSStyleDeclarationValue { - // ... - - // CSS Properties - -}; - -interface CSSPropertyValue { - attribute DOMString cssText; -}; - -[NoInterfaceObject] interface CSSMapValue { - getter CSSValue (DOMString name); -}; - -[NoInterfaceObject] interface CSSPropertyValueList { - readonly attribute CSSValue[] list; -}; - -[NoInterfaceObject] interface CSSComponentValue { - readonly attribute DOMString type; - attribute any value; -}; - -[NoInterfaceObject] interface CSSStringComponentValue { - attribute DOMString string; -}; - -[NoInterfaceObject] interface CSSKeywordComponentValue { - attribute DOMString keyword; -}; - -[NoInterfaceObject] interface CSSIdentifierComponentValue { - attribute DOMString identifier; -}; - -[NoInterfaceObject] interface CSSColorComponentValue { - attribute short red; - attribute short green; - attribute short blue; - attribute float alpha; -}; - -[NoInterfaceObject] interface CSSLengthComponentValue { - attribute float em; - attribute float ex; - attribute float px; - // figure out what to do with absolute lengths -}; - -[NoInterfaceObject] interface CSSPercentageComponentValue { - attribute float percent; -}; - -[NoInterfaceObject] interface CSSURLComponentValue { - attribute DOMString? url; -}; - -[NoInterfaceObject] interface ElementCSSInlineStyle { - readonly attribute CSSStyleDeclaration style; -}; - -//partial interface Window { -// CSSStyleDeclaration getComputedStyle(Element elt); -// CSSStyleDeclaration getComputedStyle(Element elt, DOMString pseudoElt); -//}; diff --git a/tests/wpt/web-platform-tests/html/dom/self-origin.sub.html b/tests/wpt/web-platform-tests/html/dom/self-origin.sub.html index 4143a4a20ab..aba2b3016a5 100644 --- a/tests/wpt/web-platform-tests/html/dom/self-origin.sub.html +++ b/tests/wpt/web-platform-tests/html/dom/self-origin.sub.html @@ -10,9 +10,9 @@ - - + diff --git a/tests/wpt/web-platform-tests/html/editing/dnd/datastore/datatransfer-types.html b/tests/wpt/web-platform-tests/html/editing/dnd/datastore/datatransfer-types.html new file mode 100644 index 00000000000..d0842ae75c4 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/editing/dnd/datastore/datatransfer-types.html @@ -0,0 +1,115 @@ + + +DataTransfer types attribute test + + + + diff --git a/tests/wpt/web-platform-tests/html/editing/dnd/events/relatedTarget-attribute-manual.html b/tests/wpt/web-platform-tests/html/editing/dnd/events/relatedTarget-attribute-manual.html new file mode 100644 index 00000000000..c5a897d68e4 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/editing/dnd/events/relatedTarget-attribute-manual.html @@ -0,0 +1,65 @@ + + + + relatedTarget attribute for dragenter and dragleave events + + + + + + + +

        Drag & Drop: relatedTarget attribute for dragenter and dragleave events

        +

        +

        Test Description: +
          +
        1. Drag the text into the green box.
        2. +
        3. Without releasing the drag, drag the text out of the green box.
        4. +
        +

        +
        +
        Drag this text
        over the green box
        +
        +
        +
        + + diff --git a/tests/wpt/web-platform-tests/html/editing/editing-0/spelling-and-grammar-checking/references/spelling-markers-001-ref.html b/tests/wpt/web-platform-tests/html/editing/editing-0/spelling-and-grammar-checking/references/spelling-markers-001-ref.html new file mode 100644 index 00000000000..68dcc54702c --- /dev/null +++ b/tests/wpt/web-platform-tests/html/editing/editing-0/spelling-and-grammar-checking/references/spelling-markers-001-ref.html @@ -0,0 +1,7 @@ + + + +Reference file for spellcheck tests + +
        This test passes if there is no visual marker indicating the spellinnnnnggg mistake in this sentence, and fails otherwise.
        + diff --git a/tests/wpt/web-platform-tests/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-001.html b/tests/wpt/web-platform-tests/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-001.html new file mode 100644 index 00000000000..4a5fd410410 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-001.html @@ -0,0 +1,15 @@ + + + +Turning off spellcheck on editing hosts + + + + +
        This test passes if there is no visual marker indicating the spellinnnnnggg mistake in this sentence, and fails otherwise.
        + + diff --git a/tests/wpt/web-platform-tests/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-002.html b/tests/wpt/web-platform-tests/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-002.html new file mode 100644 index 00000000000..44f1ea842e2 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-002.html @@ -0,0 +1,16 @@ + + + +Turning off spellcheck on editable elements + + + + +
        This test passes if there is no visual marker indicating the spellinnnnnggg mistake in this sentence, and fails otherwise.
        + + diff --git a/tests/wpt/web-platform-tests/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-003.html b/tests/wpt/web-platform-tests/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-003.html new file mode 100644 index 00000000000..9c88660e281 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-003.html @@ -0,0 +1,15 @@ + + + +Turning off spellcheck on editing hosts while keeping them editable + + + + +
        This test passes if there is no visual marker indicating the spellinnnnnggg mistake in this sentence, and fails otherwise.
        + + diff --git a/tests/wpt/web-platform-tests/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-004.html b/tests/wpt/web-platform-tests/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-004.html new file mode 100644 index 00000000000..fdeb90648c0 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-004.html @@ -0,0 +1,16 @@ + + + +Turning off spellcheck on editable elements while keeping them editable + + + + +
        This test passes if there is no visual marker indicating the spellinnnnnggg mistake in this sentence, and fails otherwise.
        + + diff --git a/tests/wpt/web-platform-tests/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-005.html b/tests/wpt/web-platform-tests/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-005.html new file mode 100644 index 00000000000..9ab7a3ed6dc --- /dev/null +++ b/tests/wpt/web-platform-tests/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-005.html @@ -0,0 +1,16 @@ + + + +Turning off spellcheck on editable elements via an ancestor + + + + +
        This test passes if there is no visual marker indicating the spellinnnnnggg mistake in this sentence, and fails otherwise.
        + + diff --git a/tests/wpt/web-platform-tests/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-006.html b/tests/wpt/web-platform-tests/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-006.html new file mode 100644 index 00000000000..f0b54da15b5 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-006.html @@ -0,0 +1,18 @@ + + + +Turning off spellcheck via an ancestor of the editing host + + + + +
        +
        This test passes if there is no visual marker indicating the spellinnnnnggg mistake in this sentence, and fails otherwise.
        +
        + + diff --git a/tests/wpt/web-platform-tests/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-007.html b/tests/wpt/web-platform-tests/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-007.html new file mode 100644 index 00000000000..4bbeca9a32c --- /dev/null +++ b/tests/wpt/web-platform-tests/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-007.html @@ -0,0 +1,25 @@ + + + +Turning off spellcheck by making textareas readonly + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-008.html b/tests/wpt/web-platform-tests/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-008.html new file mode 100644 index 00000000000..5ed72abb84d --- /dev/null +++ b/tests/wpt/web-platform-tests/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-008.html @@ -0,0 +1,25 @@ + + + +Turning off spellcheck by making textareas disabled + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-009.html b/tests/wpt/web-platform-tests/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-009.html new file mode 100644 index 00000000000..577ffd895bc --- /dev/null +++ b/tests/wpt/web-platform-tests/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-009.html @@ -0,0 +1,25 @@ + + + +Turning off spellcheck by making input elements readonly + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-010.html b/tests/wpt/web-platform-tests/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-010.html new file mode 100644 index 00000000000..6a2e1046b89 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-010.html @@ -0,0 +1,25 @@ + + + +Turning off spellcheck by making input elements disabled + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/broadcastchannel-success-and-failure.html b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/broadcastchannel-success-and-failure.html new file mode 100644 index 00000000000..8902de49cfb --- /dev/null +++ b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/broadcastchannel-success-and-failure.html @@ -0,0 +1,35 @@ + +SharedArrayBuffer cannot cross agent clusters, BroadcastChannel edition + + + diff --git a/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/broadcastchannel-success.html b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/broadcastchannel-success.html new file mode 100644 index 00000000000..f6d7f26ce83 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/broadcastchannel-success.html @@ -0,0 +1,58 @@ + + +Structured cloning of SharedArrayBuffers: BroadcastChannel within the same agent cluster + + + + + + +
        + + diff --git a/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/identity-not-preserved.html b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/identity-not-preserved.html new file mode 100644 index 00000000000..91110867d7b --- /dev/null +++ b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/identity-not-preserved.html @@ -0,0 +1,64 @@ + + +SharedArrayBuffers, when cloned, do not give back the same object + + + + + + +
        + + diff --git a/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-worker-success-dedicatedworker.html b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-worker-success-dedicatedworker.html new file mode 100644 index 00000000000..de097b26c41 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-worker-success-dedicatedworker.html @@ -0,0 +1,14 @@ + + +Structured cloning of SharedArrayBuffers into a dedicated worker nested inside a dedicated worker + + + + + +
        + + diff --git a/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-worker-success-sharedworker.html b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-worker-success-sharedworker.html new file mode 100644 index 00000000000..cf328be8799 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-worker-success-sharedworker.html @@ -0,0 +1,14 @@ + + +Structured cloning of SharedArrayBuffers into a dedicated worker nested inside a shared worker + + + + + +
        + + diff --git a/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-worker-success.js b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-worker-success.js new file mode 100644 index 00000000000..e1a28436e0a --- /dev/null +++ b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-worker-success.js @@ -0,0 +1,11 @@ +"use strict"; +importScripts("/resources/testharness.js"); +importScripts("resources/test-incrementer.js"); + +promise_test(t => { + const worker = new Worker("resources/incrementer-worker.js"); + + return testSharingViaIncrementerScript(t, worker, "parent worker", worker, "sub-worker"); +}, "postMessaging to a dedicated sub-worker allows them to see each others' modifications"); + +done(); diff --git a/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-transferring.html b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-transferring.html new file mode 100644 index 00000000000..ece74e27194 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-transferring.html @@ -0,0 +1,31 @@ + + +SharedArrayBuffers cannot be transferred + + + + + + diff --git a/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/blank.html b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/blank.html new file mode 100644 index 00000000000..eec1b2cc8e3 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/blank.html @@ -0,0 +1,2 @@ + +Used as a service worker-controlled iframe diff --git a/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/broadcastchannel-iframe.html b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/broadcastchannel-iframe.html new file mode 100644 index 00000000000..792d6fd2013 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/broadcastchannel-iframe.html @@ -0,0 +1,19 @@ + + +A test page that messes with a given SharedArrayBuffer sent from a BroadcastChannel + + diff --git a/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/broadcastchannel-sharedworker.js b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/broadcastchannel-sharedworker.js new file mode 100644 index 00000000000..310e0e93584 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/broadcastchannel-sharedworker.js @@ -0,0 +1,7 @@ +const channel = new BroadcastChannel("anne was here"); +channel.onmessageerror = ({ data }) => { + if(data === null) { + channel.postMessage("sw-success"); + } +} +channel.postMessage("hi"); diff --git a/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/broadcastchannel-worker.js b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/broadcastchannel-worker.js new file mode 100644 index 00000000000..36369cde500 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/broadcastchannel-worker.js @@ -0,0 +1,9 @@ +const channel = new BroadcastChannel("anne was here"); +channel.onmessage = ({ data }) => { + if(data === "hi" || data === "sw-success") { + return; + } else if(data instanceof SharedArrayBuffer) { + channel.postMessage("dw-success"); + } +} +channel.postMessage("hi"); diff --git a/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/echo-iframe.html b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/echo-iframe.html new file mode 100644 index 00000000000..c4fd5824a1c --- /dev/null +++ b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/echo-iframe.html @@ -0,0 +1,11 @@ + + +A test page that echos back anything postMessaged to it to its parent + + diff --git a/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/echo-worker.js b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/echo-worker.js new file mode 100644 index 00000000000..cbbde8a73c8 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/echo-worker.js @@ -0,0 +1,5 @@ +"use strict"; + +self.onmessage = ({ data }) => { + self.postMessage(data); +}; diff --git a/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/incrementer-iframe-domain.sub.html b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/incrementer-iframe-domain.sub.html new file mode 100644 index 00000000000..a6dd7017758 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/incrementer-iframe-domain.sub.html @@ -0,0 +1,11 @@ + + +A test page that messes with a given SharedArrayBuffer and also sets document.domain + + + diff --git a/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/incrementer-iframe.html b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/incrementer-iframe.html new file mode 100644 index 00000000000..6f27ad7d5be --- /dev/null +++ b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/incrementer-iframe.html @@ -0,0 +1,10 @@ + + +A test page that messes with a given SharedArrayBuffer + + + diff --git a/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/incrementer-popup.html b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/incrementer-popup.html new file mode 100644 index 00000000000..e583b5c4161 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/incrementer-popup.html @@ -0,0 +1,10 @@ + + +A test page that messes with a given SharedArrayBuffer + + + diff --git a/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/incrementer-worker-with-channel.js b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/incrementer-worker-with-channel.js new file mode 100644 index 00000000000..c74fd26d3fd --- /dev/null +++ b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/incrementer-worker-with-channel.js @@ -0,0 +1,7 @@ +"use strict"; +importScripts("./test-incrementer.js"); + +self.onmessage = ({ data }) => { + // data will be a MessagePort + setupDestinationIncrementer(data, data); +}; diff --git a/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/incrementer-worker.js b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/incrementer-worker.js new file mode 100644 index 00000000000..5801bd2b97c --- /dev/null +++ b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/incrementer-worker.js @@ -0,0 +1,4 @@ +"use strict"; +importScripts("./test-incrementer.js"); + +setupDestinationIncrementer(self, self); diff --git a/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-iframe-1.html b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-iframe-1.html new file mode 100644 index 00000000000..fe93cc0c4b0 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-iframe-1.html @@ -0,0 +1,5 @@ + + +Nesting level 1 + + diff --git a/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-iframe-2.html b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-iframe-2.html new file mode 100644 index 00000000000..fad52ce9de3 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-iframe-2.html @@ -0,0 +1,5 @@ + + +Nesting level 2 + + diff --git a/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-iframe-3.html b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-iframe-3.html new file mode 100644 index 00000000000..7971022b2cd --- /dev/null +++ b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-iframe-3.html @@ -0,0 +1,5 @@ + + +Nesting level 3 + + diff --git a/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-iframe-4-incrementer.html b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-iframe-4-incrementer.html new file mode 100644 index 00000000000..d374515bdc7 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-iframe-4-incrementer.html @@ -0,0 +1,10 @@ + + +A test page that messes with a given SharedArrayBuffer, nested 4 levels deep in iframes + + + diff --git a/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/serviceworker-failure.js b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/serviceworker-failure.js new file mode 100644 index 00000000000..c6f2046878c --- /dev/null +++ b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/serviceworker-failure.js @@ -0,0 +1,32 @@ +"use strict"; +self.importScripts("/resources/testharness.js"); + +let state = "start in worker"; + +self.onmessage = e => { + if (e.data === "start in window") { + assert_equals(state, "start in worker"); + e.source.postMessage(state); + state = "we are expecting a messageerror due to the window sending us a SAB"; + } else if (e.data === "we are expecting a messageerror due to the worker sending us a SAB") { + assert_equals(state, "onmessageerror was received in worker"); + e.source.postMessage(new SharedArrayBuffer()); + state = "done in worker"; + } else { + e.source.postMessage(`worker onmessage was reached when in state "${state}" and data ${e.data}`); + } +}; + +self.onmessageerror = e => { + if (state === "we are expecting a messageerror due to the window sending us a SAB") { + assert_equals(e.data, null, "data"); + assert_equals(e.origin, self.origin, "origin"); + assert_not_equals(e.source, null, "source"); + assert_equals(e.ports.length, 0, "ports length"); + + state = "onmessageerror was received in worker"; + e.source.postMessage(state); + } else { + e.source.postMessage(`worker onmessageerror was reached when in state "${state}" and data ${e.data}`); + } +}; diff --git a/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/sharedworker-failure.js b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/sharedworker-failure.js new file mode 100644 index 00000000000..a11ccbc1f30 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/sharedworker-failure.js @@ -0,0 +1,17 @@ +let state = "send-sw-failure" +onconnect = initialE => { + initialE.source.postMessage(state) + initialE.source.onmessage = e => { + if(state === "" && e.data === "send-window-failure") { + e.postMessage(new SharedArrayBuffer()) + } else { + e.postMessage("failure") + } + } + initialE.source.onmessageerror = e => { + if(state === "send-sw-failure") { + e.postMessage("send-sw-failure-success") + state = "" + } + } +} diff --git a/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/test-incrementer.js b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/test-incrementer.js new file mode 100644 index 00000000000..2bdd2bae66e --- /dev/null +++ b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/test-incrementer.js @@ -0,0 +1,73 @@ +"use strict"; + +self.getViewValue = (view, index) => { + if(view instanceof DataView) { + return view.getInt8(index); + } + return view[index]; +}; + +self.setViewValue = (view, index, value) => { + if(view instanceof DataView) { + view.setInt8(index, value); + } else { + view[index] = value; + } +}; + +self.testSharingViaIncrementerScript = (t, whereToListen, whereToListenLabel, whereToSend, whereToSendLabel, origin, type = "Int32Array") => { + return new Promise(resolve => { + const sab = new SharedArrayBuffer(8); + const view = new self[type](sab); + setViewValue(view, 0, 1); + + whereToListen.onmessage = t.step_func(({ data }) => { + switch (data.message) { + case "initial payload received": { + assert_equals(data.value, 1, `The ${whereToSendLabel} must see the same value in the SharedArrayBuffer`); + break; + } + + case "changed to 2": { + assert_equals(getViewValue(view, 0), 2, `The ${whereToListenLabel} must see changes made in the ${whereToSendLabel}`); + + setViewValue(view, 0, 3); + whereToSend.postMessage({ message: "changed to 3" }, origin); + + break; + } + + case "changed to 3 received": { + assert_equals(data.value, 3, `The ${whereToSendLabel} must see changes made in the ${whereToListenLabel}`); + resolve(); + break; + } + } + }); + + whereToSend.postMessage({ message: "initial payload", view }, origin); + }); +}; + +self.setupDestinationIncrementer = (whereToListen, whereToSendBackTo, origin) => { + let view; + whereToListen.onmessage = ({ data }) => { + switch (data.message) { + case "initial payload": { + view = data.view; + whereToSendBackTo.postMessage({ message: "initial payload received", value: getViewValue(view, 0) }, origin); + + setViewValue(view, 0, 2); + whereToSendBackTo.postMessage({ message: "changed to 2" }, origin); + + break; + } + + case "changed to 3": { + whereToSendBackTo.postMessage({ message: "changed to 3 received", value: getViewValue(view, 0) }, origin); + + break; + } + } + }; +}; diff --git a/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/test-sab.js b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/test-sab.js new file mode 100644 index 00000000000..6d6efda00db --- /dev/null +++ b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/test-sab.js @@ -0,0 +1,15 @@ +"use strict"; + +self.assertSABsHaveSameBackingBlock = (originalSAB, clonedSAB) => { + const originalView = new Uint8Array(originalSAB); + const clonedView = new Uint8Array(clonedSAB); + + assert_not_equals(originalSAB, clonedSAB, "the clone must not be the same object"); + + assert_equals(originalView[0], 0, "originalView[0] starts 0"); + assert_equals(clonedView[0], 0, "clonedView[0] starts 0"); + + originalView[0] = 5; + assert_equals(originalView[0], 5, "originalView[0] ends up 5"); + assert_equals(clonedView[0], 5, "clonedView[0] ends up 5"); +}; diff --git a/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-history.html b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-history.html new file mode 100644 index 00000000000..49d341f47f9 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-history.html @@ -0,0 +1,36 @@ + + +SharedArrayBuffers cloning via history's methods invoking StructuredSerializeForStorage + + + + + + + + diff --git a/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-idb.any.js b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-idb.any.js new file mode 100644 index 00000000000..4eb25eb8546 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-idb.any.js @@ -0,0 +1,40 @@ +// META: script=/IndexedDB/support.js +"use strict"; + +async_test(t => { + const openReq = createdb(t); + + openReq.onupgradeneeded = e => { + const db = e.target.result; + const store = db.createObjectStore("store", { keyPath: "key" }); + + assert_throws("DataCloneError", () => { + store.put({ key: 1, property: new SharedArrayBuffer() }); + }); + t.done(); + }; +}, "SharedArrayBuffer cloning via IndexedDB: basic case"); + +async_test(t => { + const openReq = createdb(t); + + openReq.onupgradeneeded = e => { + const db = e.target.result; + const store = db.createObjectStore("store", { keyPath: "key" }); + + let getter1Called = false; + let getter2Called = false; + + assert_throws("DataCloneError", () => { + store.put({ key: 1, property: [ + { get x() { getter1Called = true; return 5; } }, + new SharedArrayBuffer(), + { get x() { getter2Called = true; return 5; } } + ]}); + }); + + assert_true(getter1Called, "The getter before the SAB must have been called"); + assert_false(getter2Called, "The getter after the SAB must not have been called"); + t.done(); + }; +}, "SharedArrayBuffer cloning via the IndexedDB: is interleaved correctly"); diff --git a/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-notifications-api.any.js b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-notifications-api.any.js new file mode 100644 index 00000000000..2c3fb7be034 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-notifications-api.any.js @@ -0,0 +1,23 @@ +"use strict"; + +test(() => { + assert_throws("DataCloneError", () => { + new Notification("Bob: Hi", { data: new SharedArrayBuffer() }); + }) +}, "SharedArrayBuffer cloning via the Notifications API's data member: basic case"); + +test(() => { + let getter1Called = false; + let getter2Called = false; + + assert_throws("DataCloneError", () => { + new Notification("Bob: Hi", { data: [ + { get x() { getter1Called = true; return 5; } }, + new SharedArrayBuffer(), + { get x() { getter2Called = true; return 5; } } + ]}); + }); + + assert_true(getter1Called, "The getter before the SAB must have been called"); + assert_false(getter2Called, "The getter after the SAB must not have been called"); +}, "SharedArrayBuffer cloning via the Notifications API's data member: is interleaved correctly"); diff --git a/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-domain-success.sub.html b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-domain-success.sub.html new file mode 100644 index 00000000000..9205d01df26 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-domain-success.sub.html @@ -0,0 +1,26 @@ + + +Structured cloning of SharedArrayBuffers into same-origin-domain windows + + + + + + +
        + + diff --git a/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-messagechannel-success.html b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-messagechannel-success.html new file mode 100644 index 00000000000..cd67e5b2c95 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-messagechannel-success.html @@ -0,0 +1,22 @@ + + +Structured cloning of SharedArrayBuffers using MessageChannel + + + + + + +
        + + diff --git a/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-serviceworker-failure.https.html b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-serviceworker-failure.https.html new file mode 100644 index 00000000000..ff7449a9317 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-serviceworker-failure.https.html @@ -0,0 +1,54 @@ + + +SharedArrayBuffer cannot cross agent clusters, service worker edition + + + + + + + diff --git a/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-sharedworker-failure.html b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-sharedworker-failure.html new file mode 100644 index 00000000000..023cb5acdef --- /dev/null +++ b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-sharedworker-failure.html @@ -0,0 +1,31 @@ + +SharedArrayBuffer cannot cross agent clusters, shared worker edition + + + diff --git a/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-similar-but-cross-origin-success.sub.html b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-similar-but-cross-origin-success.sub.html new file mode 100644 index 00000000000..e25fc9002d0 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-similar-but-cross-origin-success.sub.html @@ -0,0 +1,26 @@ + + +Structured cloning of SharedArrayBuffers to similar-origin, but not same-origin, windows + + + + + + +
        + + diff --git a/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-simple-success.html b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-simple-success.html new file mode 100644 index 00000000000..4b86f9befa6 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-simple-success.html @@ -0,0 +1,70 @@ + + +Structured cloning of SharedArrayBuffers: simple success cases that don't need dedicated files + + + + + + +
        + + diff --git a/tests/wpt/web-platform-tests/html/infrastructure/urls/resolving-urls/query-encoding/resources/resolve-url.js b/tests/wpt/web-platform-tests/html/infrastructure/urls/resolving-urls/query-encoding/resources/resolve-url.js index 4c586b2c9f9..907b5fb1a50 100644 --- a/tests/wpt/web-platform-tests/html/infrastructure/urls/resolving-urls/query-encoding/resources/resolve-url.js +++ b/tests/wpt/web-platform-tests/html/infrastructure/urls/resolving-urls/query-encoding/resources/resolve-url.js @@ -85,7 +85,7 @@ onload = function() { } ('iframe src, a href, base href, link href, img src, embed src, object data, track src, video src, audio src, input src, form action, ' + - 'input formaction formAction, button formaction formAction, menuitem icon, script src').split(', ').forEach(function(str) { + 'input formaction formAction, button formaction formAction, script src').split(', ').forEach(function(str) { var arr = str.split(' '); test_reflecting(arr[0], arr[1], arr[2]); }); @@ -292,7 +292,6 @@ onload = function() { }); // XXX test or its successor - // could also be tested but the spec doesn't require it to be loaded... // loading video function test_load_video(tag, use_source_element) { diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-block-formatting-context.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-block-formatting-context.html new file mode 100644 index 00000000000..4e953917973 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-block-formatting-context.html @@ -0,0 +1,81 @@ + +The legend element: block formatting context + + + + +
        +
        +
        +
        +
        + +
        +
        +
        +
        +
        +
        +
        +
        + + diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend.html new file mode 100644 index 00000000000..1cda91f32ba --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend.html @@ -0,0 +1,62 @@ + +The legend element + + + + + +
        + + +
        +
        +
        + + diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-hr-element-0/hr.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-hr-element-0/hr.html new file mode 100644 index 00000000000..e8522164945 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-hr-element-0/hr.html @@ -0,0 +1,55 @@ + +The hr element + + + + +
        +
        + + diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-hr-element-0/setting-overflow-visible.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-hr-element-0/setting-overflow-visible.html new file mode 100644 index 00000000000..11e3d63e347 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-hr-element-0/setting-overflow-visible.html @@ -0,0 +1,64 @@ + +The hr element: setting 'overflow: visible' + + + + +
        +
        +
        +
        +
        + +
        +
        +
        +
        +
        + + diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/iframe-body-margin-attributes.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/iframe-body-margin-attributes.html new file mode 100644 index 00000000000..e1f4fb51540 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/iframe-body-margin-attributes.html @@ -0,0 +1,32 @@ + +iframe and body margin attributes + + + + + + diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/iframe-marginwidth-marginheight.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/iframe-marginwidth-marginheight.html new file mode 100644 index 00000000000..b5b49d1b867 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/iframe-marginwidth-marginheight.html @@ -0,0 +1,11 @@ + +iframe marginwidth and marginheight + + + + diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/support/body-marginwidth-marginheight.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/support/body-marginwidth-marginheight.html new file mode 100644 index 00000000000..5d825e34556 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/support/body-marginwidth-marginheight.html @@ -0,0 +1,2 @@ + + diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/support/body-topmargin-leftmargin.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/support/body-topmargin-leftmargin.html new file mode 100644 index 00000000000..7ba5e533305 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/support/body-topmargin-leftmargin.html @@ -0,0 +1,2 @@ + + diff --git a/tests/wpt/web-platform-tests/html/rendering/replaced-elements/the-option-element/option-with-br-ref.html b/tests/wpt/web-platform-tests/html/rendering/replaced-elements/the-option-element/option-with-br-ref.html new file mode 100644 index 00000000000..954840f389b --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/replaced-elements/the-option-element/option-with-br-ref.html @@ -0,0 +1,21 @@ + + +option element with br child + + + + + +

        This test passes if the option element displays three options:

        + +
        a
        +b
        +ab
        + +

        Importantly the third option must not be split across two lines.

        + + diff --git a/tests/wpt/web-platform-tests/html/rendering/replaced-elements/the-option-element/option-with-br.html b/tests/wpt/web-platform-tests/html/rendering/replaced-elements/the-option-element/option-with-br.html new file mode 100644 index 00000000000..3b8d992cc2a --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/replaced-elements/the-option-element/option-with-br.html @@ -0,0 +1,32 @@ + + +option element with br child + + + + + + + +

        This test passes if the option element displays three options:

        + +
        a
        +b
        +ab
        + +

        Importantly the third option must not be split across two lines.

        + + + + diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/ismap/img-ismap-coordinates-iframe-after.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/ismap/img-ismap-coordinates-iframe-after.html new file mode 100644 index 00000000000..bb4c5991c91 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/ismap/img-ismap-coordinates-iframe-after.html @@ -0,0 +1,21 @@ + + + + img ismap attribute coordinate origin + + + +
        +
        + + + +
        +

        Click inside the dashed rectangle

        + + diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/ismap/img-ismap-coordinates-iframe-before.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/ismap/img-ismap-coordinates-iframe-before.html new file mode 100644 index 00000000000..8349b62783c --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/ismap/img-ismap-coordinates-iframe-before.html @@ -0,0 +1,21 @@ + + + + img ismap attribute coordinate origin + + + +
        +
        + + + +
        +

        Click inside the dashed rectangle

        + + diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/ismap/img-ismap-coordinates-iframe-inside.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/ismap/img-ismap-coordinates-iframe-inside.html new file mode 100644 index 00000000000..fdecee9ace2 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/ismap/img-ismap-coordinates-iframe-inside.html @@ -0,0 +1,21 @@ + + + + img ismap attribute coordinate origin + + + +
        +
        + + + +
        +

        Click inside the dashed rectangle

        + + diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/ismap/img-ismap-coordinates-manual.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/ismap/img-ismap-coordinates-manual.html new file mode 100644 index 00000000000..4d77e677e4c --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/ismap/img-ismap-coordinates-manual.html @@ -0,0 +1,78 @@ + + + + img ismap attribute coordinate origin + + + + + + +
        + + + diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/resetting-a-form/reset-form-2.html b/tests/wpt/web-platform-tests/html/semantics/forms/resetting-a-form/reset-form-2.html new file mode 100644 index 00000000000..6ce0040c4a2 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/forms/resetting-a-form/reset-form-2.html @@ -0,0 +1,61 @@ + + +Resetting a form integration test + + + + + + diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/textfieldselection/selection-after-content-change.html b/tests/wpt/web-platform-tests/html/semantics/forms/textfieldselection/selection-after-content-change.html index 90ebc28a238..60390085c6d 100644 --- a/tests/wpt/web-platform-tests/html/semantics/forms/textfieldselection/selection-after-content-change.html +++ b/tests/wpt/web-platform-tests/html/semantics/forms/textfieldselection/selection-after-content-change.html @@ -3,16 +3,142 @@ Selection indices after content change + + + + diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/the-button-element/button-click-submits.html b/tests/wpt/web-platform-tests/html/semantics/forms/the-button-element/button-click-submits.html new file mode 100644 index 00000000000..e6f02d3e21c --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/forms/the-button-element/button-click-submits.html @@ -0,0 +1,149 @@ + + +Clicking a button should submit the form + + + + + + + diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/the-button-element/button-type.html b/tests/wpt/web-platform-tests/html/semantics/forms/the-button-element/button-type.html new file mode 100644 index 00000000000..6cfd6687c70 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/forms/the-button-element/button-type.html @@ -0,0 +1,41 @@ + + +HTMLButtonElement.prototype.type + + + + + + diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/the-form-element/form-action-reflection-with-base-url.html b/tests/wpt/web-platform-tests/html/semantics/forms/the-form-element/form-action-reflection-with-base-url.html new file mode 100644 index 00000000000..67828a30778 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/forms/the-form-element/form-action-reflection-with-base-url.html @@ -0,0 +1,36 @@ + + +form.action with a base URL + + + + + + +
        +
        +
        + + diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/the-form-element/form-action-reflection.html b/tests/wpt/web-platform-tests/html/semantics/forms/the-form-element/form-action-reflection.html new file mode 100644 index 00000000000..c92fd0f0cf2 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/forms/the-form-element/form-action-reflection.html @@ -0,0 +1,35 @@ + + +form.action + + + + + +
        +
        +
        + + diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/the-form-element/form-action-submission-with-base-url.html b/tests/wpt/web-platform-tests/html/semantics/forms/the-form-element/form-action-submission-with-base-url.html new file mode 100644 index 00000000000..baee5500dee --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/forms/the-form-element/form-action-submission-with-base-url.html @@ -0,0 +1,56 @@ + + +form action="" attribute effect on submission + + + + + + + diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/the-form-element/form-action-submission.html b/tests/wpt/web-platform-tests/html/semantics/forms/the-form-element/form-action-submission.html new file mode 100644 index 00000000000..54ca7b5ff53 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/forms/the-form-element/form-action-submission.html @@ -0,0 +1,56 @@ + + +form action="" attribute effect on submission + + + + + + + diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/the-form-element/form-action-url.html b/tests/wpt/web-platform-tests/html/semantics/forms/the-form-element/form-action-url.html deleted file mode 100644 index 09f073ab945..00000000000 --- a/tests/wpt/web-platform-tests/html/semantics/forms/the-form-element/form-action-url.html +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - + - + + + + diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/currentscript.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/currentscript.js new file mode 100644 index 00000000000..547359ff96e --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/currentscript.js @@ -0,0 +1 @@ +export let currentScriptOnImportedModule = window.document.currentScript; diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/cycle-tdz-access-a.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/cycle-tdz-access-a.js new file mode 100644 index 00000000000..1f91f93eb13 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/cycle-tdz-access-a.js @@ -0,0 +1,3 @@ +log.push("cycle-tdz-access-a"); +import { Y } from "./cycle-tdz-access.js"; +export var X = Y; diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/cycle-tdz-access.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/cycle-tdz-access.js new file mode 100644 index 00000000000..9df68b3b27d --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/cycle-tdz-access.js @@ -0,0 +1,3 @@ +log.push("cycle-tdz-access"); +import { X } from "./cycle-tdz-access-a.js"; +export let Y = X; diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/cycle-unresolvable-a.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/cycle-unresolvable-a.js new file mode 100644 index 00000000000..12994f23d0c --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/cycle-unresolvable-a.js @@ -0,0 +1,2 @@ +export {x} from "./cycle-unresolvable.js"; +log.push("cycle-unresolvable-a"); diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/cycle-unresolvable.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/cycle-unresolvable.js new file mode 100644 index 00000000000..61c6d8dcb09 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/cycle-unresolvable.js @@ -0,0 +1,2 @@ +export {x} from "./cycle-unresolvable-a.js"; +log.push("cycle-unresolvable"); diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-and-slow-dependency.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-and-slow-dependency.html new file mode 100644 index 00000000000..88d6a297c21 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-and-slow-dependency.html @@ -0,0 +1,19 @@ + +Module importing syntax error script and slow script should not crash UA + + + + + diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-error-1.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-error-1.html new file mode 100644 index 00000000000..21f005a69e9 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-error-1.html @@ -0,0 +1,27 @@ + +Handling of evaluation errors, 1 + + + + + + + + diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-error-2.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-error-2.html new file mode 100644 index 00000000000..6aedc0608c6 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-error-2.html @@ -0,0 +1,27 @@ + +Handling of evaluation errors, 2 + + + + + + + diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-error-3.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-error-3.html new file mode 100644 index 00000000000..71d61f5a99d --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-error-3.html @@ -0,0 +1,28 @@ + +Handling of evaluation errors, 3 + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-error-4.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-error-4.html new file mode 100644 index 00000000000..dcb0108b9d4 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-error-4.html @@ -0,0 +1,28 @@ + +Handling of evaluation errors, 4 + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/execorder.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/execorder.html index 0f4195ffd1b..6a7513dc136 100644 --- a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/execorder.html +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/execorder.html @@ -41,8 +41,8 @@ var test_parsedUnordered1 = async_test("Unordered module script execution (parsed, unordered #1)"); var test_parsedUnordered2 = async_test("Unordered module script execution (parsed, unordered #2)"); - - + + - + - + + + + diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/fetch-error-2.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/fetch-error-2.html new file mode 100644 index 00000000000..9386ce603a9 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/fetch-error-2.html @@ -0,0 +1,15 @@ + +Handling of fetch errors, 2 + + + + + diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/fetch-error-2.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/fetch-error-2.js new file mode 100644 index 00000000000..20c0ea6402f --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/fetch-error-2.js @@ -0,0 +1,2 @@ +import "./no-such-file.js" +import "./this.js"; diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/import-something-namespace.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/import-something-namespace.js new file mode 100644 index 00000000000..32d90287d77 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/import-something-namespace.js @@ -0,0 +1,5 @@ +log.push("import-something-namespace"); +log.push(m.foo); +m.set_foo(43); +log.push(m.foo); +import * as m from "./export-something.js"; diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/import-subgraph-404.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/import-subgraph-404.html new file mode 100644 index 00000000000..4911a071a0f --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/import-subgraph-404.html @@ -0,0 +1,14 @@ + + + + + diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/imports-cycle.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/imports-cycle.js index 9f452e4abeb..88a77a4d67a 100644 --- a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/imports-cycle.js +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/imports-cycle.js @@ -1,5 +1,6 @@ import { CycleA } from "./imports-cycle-a.js"; test_importCycle.step(function () { - assert_unreached("This module should not have loaded!"); + assert_equals(CycleA, "CycleA"); + test_importCycle.done(); }); diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/imports-self.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/imports-self.js index 32eb7b6841d..05fa60e2dce 100644 --- a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/imports-self.js +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/imports-self.js @@ -1,5 +1,6 @@ import { SelfInner } from "./imports-self-inner.js"; test_importSelf.step(function () { - assert_unreached("This module should not have loaded!"); + assert_equals(SelfInner, "SelfInner"); + test_importSelf.done(); }); diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/imports.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/imports.html index 91a0fd35e57..ca6900744dc 100644 --- a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/imports.html +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/imports.html @@ -52,13 +52,13 @@ - + - + diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/instantiation-error-1.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/instantiation-error-1.html new file mode 100644 index 00000000000..efdf5879fce --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/instantiation-error-1.html @@ -0,0 +1,33 @@ + +Handling of instantiation errors, 1 + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/instantiation-error-1.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/instantiation-error-1.js new file mode 100644 index 00000000000..e317b01cc21 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/instantiation-error-1.js @@ -0,0 +1 @@ +import something from "./instantiation-error-1.js"; diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/instantiation-error-2.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/instantiation-error-2.html new file mode 100644 index 00000000000..3d50ce63a6b --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/instantiation-error-2.html @@ -0,0 +1,33 @@ + +Handling of instantiation errors, 2 + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/instantiation-error-3.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/instantiation-error-3.html new file mode 100644 index 00000000000..ab510c675ad --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/instantiation-error-3.html @@ -0,0 +1,29 @@ + +Handling of instantiation errors, 3 + + + + + + + diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/late-namespace-request.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/late-namespace-request.html new file mode 100644 index 00000000000..00269efdf93 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/late-namespace-request.html @@ -0,0 +1,20 @@ + +Late namespace request + + + + + + diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/late-star-export-request.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/late-star-export-request.html new file mode 100644 index 00000000000..d40bb0aca79 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/late-star-export-request.html @@ -0,0 +1,25 @@ + +Late star-export request + + + + + + diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/missing-export-nested.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/missing-export-nested.js new file mode 100644 index 00000000000..860d2bf3417 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/missing-export-nested.js @@ -0,0 +1,2 @@ +import "./missing-export.js"; +log.push("nested-missing-export"); diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/missing-export.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/missing-export.js new file mode 100644 index 00000000000..e6f5746eb74 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/missing-export.js @@ -0,0 +1,2 @@ +import something from "./missing-export.js"; +log.push("missing-export"); diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/module-vs-script-1.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/module-vs-script-1.html new file mode 100644 index 00000000000..ae82e1348aa --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/module-vs-script-1.html @@ -0,0 +1,17 @@ + +Once as module script, once as classic script + + + + + + diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/module-vs-script-2.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/module-vs-script-2.html new file mode 100644 index 00000000000..2a879f38253 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/module-vs-script-2.html @@ -0,0 +1,17 @@ + +Once as classic script, once as module script + + + + + + diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/nested-missing-export.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/nested-missing-export.js new file mode 100644 index 00000000000..3801ae847af --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/nested-missing-export.js @@ -0,0 +1,2 @@ +import "./missing-export.js"; +log.push("missing-export-nested"); diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/nomodule-attribute.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/nomodule-attribute.html new file mode 100644 index 00000000000..656c99b292a --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/nomodule-attribute.html @@ -0,0 +1,18 @@ + +The 'nomodule' attribute + + + + + + diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/resources/delayed-modulescript.py b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/resources/delayed-modulescript.py new file mode 100644 index 00000000000..6ed16212d71 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/resources/delayed-modulescript.py @@ -0,0 +1,7 @@ +import time + +def main(request, response): + delay = float(request.GET.first("ms", 500)) + time.sleep(delay / 1E3); + + return [("Content-type", "text/javascript")], "export let delayedLoaded = true;" diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/script-for-event.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/script-for-event.html new file mode 100644 index 00000000000..e3b8e15b414 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/script-for-event.html @@ -0,0 +1,93 @@ + +Module scripts with for and event attributes + + + + + +
        + + + + + + + + + + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/set-currentScript-on-window.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/set-currentScript-on-window.js new file mode 100644 index 00000000000..6863075bd90 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/set-currentScript-on-window.js @@ -0,0 +1 @@ +window.currentScriptRecorded = document.currentScript; diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/single-evaluation-1.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/single-evaluation-1.html new file mode 100644 index 00000000000..cc4e2d69b7e --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/single-evaluation-1.html @@ -0,0 +1,20 @@ + +Single evaluation, 1 + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/single-evaluation-2.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/single-evaluation-2.html new file mode 100644 index 00000000000..790e2fa9c6a --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/single-evaluation-2.html @@ -0,0 +1,20 @@ + +Single evaluation, 2 + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/slow-cycle.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/slow-cycle.html new file mode 100644 index 00000000000..3a42cf9e306 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/slow-cycle.html @@ -0,0 +1,11 @@ + +Cyclic graph with slow imports + + + diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/slow-module-graph-a.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/slow-module-graph-a.js new file mode 100644 index 00000000000..48701aa1d03 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/slow-module-graph-a.js @@ -0,0 +1,3 @@ +import "./slow-module-graph-b.js"; +import "./resources/delayed-modulescript.py" +export let loaded = true; diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/slow-module-graph-b.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/slow-module-graph-b.js new file mode 100644 index 00000000000..53a8f2026e0 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/slow-module-graph-b.js @@ -0,0 +1 @@ +import "./slow-module-graph-a.js"; diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/specifier-error.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/specifier-error.html new file mode 100644 index 00000000000..d07005caaa3 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/specifier-error.html @@ -0,0 +1,22 @@ + +Handling of invalid specifiers + + + + + diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/syntaxerror-nested.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/syntaxerror-nested.js new file mode 100644 index 00000000000..de1b053c5a9 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/syntaxerror-nested.js @@ -0,0 +1,2 @@ +import "./syntaxerror.js"; +log.push("nested-syntaxerror"); diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/syntaxerror.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/syntaxerror.js new file mode 100644 index 00000000000..31a9e2cbdf9 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/syntaxerror.js @@ -0,0 +1,2 @@ +log.push("syntaxerror"); +%!#$@#$@#$@ diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/this-nested.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/this-nested.js new file mode 100644 index 00000000000..f204812fd13 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/this-nested.js @@ -0,0 +1,2 @@ +import "./this.js"; +log.push("this-nested"); diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/this.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/this.js new file mode 100644 index 00000000000..996a439df0b --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/this.js @@ -0,0 +1 @@ +log.push(this); diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/throw-nested.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/throw-nested.js new file mode 100644 index 00000000000..f1801ea366f --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/throw-nested.js @@ -0,0 +1,2 @@ +import "./throw.js"; +log.push("throw-nested"); diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/throw.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/throw.js new file mode 100644 index 00000000000..cef7918216d --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/throw.js @@ -0,0 +1,2 @@ +log.push("throw"); +throw {foo: true} diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/nomodule-set-on-async-classic-script.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/nomodule-set-on-async-classic-script.html index 26eefed6a67..25de7968304 100644 --- a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/nomodule-set-on-async-classic-script.html +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/nomodule-set-on-async-classic-script.html @@ -11,31 +11,27 @@ diff --git a/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/checked.html b/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/checked.html index bf5981293ad..754c2342bc0 100644 --- a/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/checked.html +++ b/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/checked.html @@ -20,7 +20,8 @@

        - + + @@ -30,14 +31,14 @@ diff --git a/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/enabled.html b/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/enabled.html index 98d81297ef4..0ad0e1b402a 100644 --- a/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/enabled.html +++ b/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/enabled.html @@ -29,7 +29,8 @@

        - + + @@ -38,5 +39,5 @@
        diff --git a/tests/wpt/web-platform-tests/html/semantics/tabular-data/processing-model-1/col-span-limits.html b/tests/wpt/web-platform-tests/html/semantics/tabular-data/processing-model-1/col-span-limits.html new file mode 100644 index 00000000000..a4a425b9c1f --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/tabular-data/processing-model-1/col-span-limits.html @@ -0,0 +1,59 @@ + +Limits on col/colgroup.span + + + +
        +
        + + + + + + + + + +
        +
        +These two must look the same, each having 2 cells in one row: + + + + + + +
        +
        + + + + + + +
        +
        + + diff --git a/tests/wpt/web-platform-tests/html/semantics/tabular-data/processing-model-1/span-limits.html b/tests/wpt/web-platform-tests/html/semantics/tabular-data/processing-model-1/span-limits.html new file mode 100644 index 00000000000..176ce09925c --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/tabular-data/processing-model-1/span-limits.html @@ -0,0 +1,65 @@ + +Limits on colSpan/rowSpan + + +
        + + +
        aa + +
        a +
        + + +
        aa + +
        a +
        + + + +
        a + +
        + + + +
        a + +
        + + diff --git a/tests/wpt/web-platform-tests/html/syntax/serializing-html-fragments/serializing.html b/tests/wpt/web-platform-tests/html/syntax/serializing-html-fragments/serializing.html index 6b7e678a355..6a6f0c1d746 100644 --- a/tests/wpt/web-platform-tests/html/syntax/serializing-html-fragments/serializing.html +++ b/tests/wpt/web-platform-tests/html/syntax/serializing-html-fragments/serializing.html @@ -178,7 +178,7 @@ var text_tests = [ var void_elements = [ "area", "base", "basefont", "bgsound", "br", "col", "embed", - "frame", "hr", "img", "input", "keygen", "link", "menuitem", + "frame", "hr", "img", "input", "keygen", "link", "meta", "param", "source", "track", "wbr" ]; diff --git a/tests/wpt/web-platform-tests/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-1.htm b/tests/wpt/web-platform-tests/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-1.htm new file mode 100644 index 00000000000..4025e2a477f --- /dev/null +++ b/tests/wpt/web-platform-tests/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-1.htm @@ -0,0 +1,13 @@ + + +HTML entities for various XHTML Doctype + + + + + + + diff --git a/tests/wpt/web-platform-tests/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-10.htm b/tests/wpt/web-platform-tests/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-10.htm new file mode 100644 index 00000000000..698239e1f48 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-10.htm @@ -0,0 +1,13 @@ + + +HTML entities for various XHTML Doctype + + + + + + + diff --git a/tests/wpt/web-platform-tests/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-2.htm b/tests/wpt/web-platform-tests/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-2.htm new file mode 100644 index 00000000000..9f511768a8f --- /dev/null +++ b/tests/wpt/web-platform-tests/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-2.htm @@ -0,0 +1,13 @@ + + +HTML entities for various XHTML Doctype + + + + + + + diff --git a/tests/wpt/web-platform-tests/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-3.htm b/tests/wpt/web-platform-tests/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-3.htm new file mode 100644 index 00000000000..a86c7a843ee --- /dev/null +++ b/tests/wpt/web-platform-tests/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-3.htm @@ -0,0 +1,13 @@ + + +HTML entities for various XHTML Doctype + + + + + + + diff --git a/tests/wpt/web-platform-tests/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-4.htm b/tests/wpt/web-platform-tests/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-4.htm new file mode 100644 index 00000000000..53a68b455c8 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-4.htm @@ -0,0 +1,13 @@ + + +HTML entities for various XHTML Doctype + + + + + + + diff --git a/tests/wpt/web-platform-tests/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-5.htm b/tests/wpt/web-platform-tests/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-5.htm new file mode 100644 index 00000000000..17773322e68 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-5.htm @@ -0,0 +1,13 @@ + + +HTML entities for various XHTML Doctype + + + + + + + diff --git a/tests/wpt/web-platform-tests/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-6.htm b/tests/wpt/web-platform-tests/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-6.htm new file mode 100644 index 00000000000..b1589bbac72 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-6.htm @@ -0,0 +1,13 @@ + + +HTML entities for various XHTML Doctype + + + + + + + diff --git a/tests/wpt/web-platform-tests/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-7.htm b/tests/wpt/web-platform-tests/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-7.htm new file mode 100644 index 00000000000..dc821d85582 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-7.htm @@ -0,0 +1,13 @@ + + +HTML entities for various XHTML Doctype + + + + + + + diff --git a/tests/wpt/web-platform-tests/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-8.htm b/tests/wpt/web-platform-tests/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-8.htm new file mode 100644 index 00000000000..b16011c43bd --- /dev/null +++ b/tests/wpt/web-platform-tests/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-8.htm @@ -0,0 +1,13 @@ + + +HTML entities for various XHTML Doctype + + + + + + + diff --git a/tests/wpt/web-platform-tests/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-9.htm b/tests/wpt/web-platform-tests/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-9.htm new file mode 100644 index 00000000000..ec4d200560b --- /dev/null +++ b/tests/wpt/web-platform-tests/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-9.htm @@ -0,0 +1,13 @@ + + +HTML entities for various XHTML Doctype + + + + + + + diff --git a/tests/wpt/web-platform-tests/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-support.htm b/tests/wpt/web-platform-tests/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-support.htm index 8460f5ff18b..76165509459 100644 --- a/tests/wpt/web-platform-tests/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-support.htm +++ b/tests/wpt/web-platform-tests/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-support.htm @@ -1,10 +1,5 @@ -HTML entities for various XHTML Doctype variants - - - -
        diff --git a/tests/wpt/web-platform-tests/html/webappapis/idle-callbacks/callback-multiple-calls.html b/tests/wpt/web-platform-tests/html/webappapis/idle-callbacks/callback-multiple-calls.html index 8584c71daf1..7bb524beb41 100644 --- a/tests/wpt/web-platform-tests/html/webappapis/idle-callbacks/callback-multiple-calls.html +++ b/tests/wpt/web-platform-tests/html/webappapis/idle-callbacks/callback-multiple-calls.html @@ -5,12 +5,14 @@
        diff --git a/tests/wpt/web-platform-tests/html/semantics/interactive-elements/context-menus/contextmenu-event-manual.htm b/tests/wpt/web-platform-tests/html/webappapis/scripting/events/contextmenu-event-manual.htm similarity index 100% rename from tests/wpt/web-platform-tests/html/semantics/interactive-elements/context-menus/contextmenu-event-manual.htm rename to tests/wpt/web-platform-tests/html/webappapis/scripting/events/contextmenu-event-manual.htm diff --git a/tests/wpt/web-platform-tests/html/webappapis/scripting/events/event-handler-all-global-events.html b/tests/wpt/web-platform-tests/html/webappapis/scripting/events/event-handler-all-global-events.html new file mode 100644 index 00000000000..caeac8e8a50 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/webappapis/scripting/events/event-handler-all-global-events.html @@ -0,0 +1,74 @@ + +GlobalEventHandlers + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/html/webappapis/scripting/events/event-handler-onauxclick.html b/tests/wpt/web-platform-tests/html/webappapis/scripting/events/event-handler-onauxclick.html deleted file mode 100644 index a1c9e9ccff1..00000000000 --- a/tests/wpt/web-platform-tests/html/webappapis/scripting/events/event-handler-onauxclick.html +++ /dev/null @@ -1,58 +0,0 @@ - -onauxclick - - - - - -
        -
        - - diff --git a/tests/wpt/web-platform-tests/html/webappapis/scripting/events/inline-event-handler-ordering.html b/tests/wpt/web-platform-tests/html/webappapis/scripting/events/inline-event-handler-ordering.html index 90e29bfd14b..aae0f1abf8b 100644 --- a/tests/wpt/web-platform-tests/html/webappapis/scripting/events/inline-event-handler-ordering.html +++ b/tests/wpt/web-platform-tests/html/webappapis/scripting/events/inline-event-handler-ordering.html @@ -5,6 +5,7 @@ + + + diff --git a/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/canblock-serviceworker.https.html b/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/canblock-serviceworker.https.html new file mode 100644 index 00000000000..6bfd29e8c74 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/canblock-serviceworker.https.html @@ -0,0 +1,14 @@ + + +[[CanBlock]] in a service worker agent + + + + + + + + diff --git a/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/canblock-sharedworker.html b/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/canblock-sharedworker.html new file mode 100644 index 00000000000..beb7c6467b2 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/canblock-sharedworker.html @@ -0,0 +1,13 @@ + + +[[CanBlock]] in a shared worker agent + + + + + + + diff --git a/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/canblock-window.html b/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/canblock-window.html new file mode 100644 index 00000000000..369ce77b0b6 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/canblock-window.html @@ -0,0 +1,21 @@ + + +[[CanBlock]] in a similar-origin window agent + + + + + + + diff --git a/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/worker-that-requires-failure.js b/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/worker-that-requires-failure.js new file mode 100644 index 00000000000..586c8ba3876 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/worker-that-requires-failure.js @@ -0,0 +1,13 @@ +"use strict"; +importScripts("/resources/testharness.js"); + +test(() => { + const sab = new SharedArrayBuffer(16); + const ta = new Int32Array(sab); + + assert_throws(new TypeError(), () => { + Atomics.wait(ta, 0, 0, 10); + }); +}, `[[CanBlock]] in a ${self.constructor.name}`); + +done(); diff --git a/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/worker-that-requires-success.js b/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/worker-that-requires-success.js new file mode 100644 index 00000000000..2ed54143ee5 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/worker-that-requires-success.js @@ -0,0 +1,11 @@ +"use strict"; +importScripts("/resources/testharness.js"); + +test(() => { + const sab = new SharedArrayBuffer(16); + const ta = new Int32Array(sab); + + assert_equals(Atomics.wait(ta, 0, 0, 10), "timed-out"); +}, `[[CanBlock]] in a ${self.constructor.name}`); + +done(); diff --git a/tests/wpt/web-platform-tests/html/webappapis/system-state-and-capabilities/the-navigator-object/NavigatorID.worker.js b/tests/wpt/web-platform-tests/html/webappapis/system-state-and-capabilities/the-navigator-object/NavigatorID.worker.js deleted file mode 100644 index 9ba7defa1fb..00000000000 --- a/tests/wpt/web-platform-tests/html/webappapis/system-state-and-capabilities/the-navigator-object/NavigatorID.worker.js +++ /dev/null @@ -1,4 +0,0 @@ -importScripts("/resources/testharness.js") -importScripts("NavigatorID.js") -run_test(); -done(); diff --git a/tests/wpt/web-platform-tests/html/webappapis/system-state-and-capabilities/the-navigator-object/navigator-pluginarray.html b/tests/wpt/web-platform-tests/html/webappapis/system-state-and-capabilities/the-navigator-object/navigator-pluginarray.html new file mode 100644 index 00000000000..8798b263064 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/webappapis/system-state-and-capabilities/the-navigator-object/navigator-pluginarray.html @@ -0,0 +1,55 @@ + + + + + + + + diff --git a/tests/wpt/web-platform-tests/html/webappapis/system-state-and-capabilities/the-navigator-object/NavigatorID.js b/tests/wpt/web-platform-tests/html/webappapis/system-state-and-capabilities/the-navigator-object/navigator.any.js similarity index 97% rename from tests/wpt/web-platform-tests/html/webappapis/system-state-and-capabilities/the-navigator-object/NavigatorID.js rename to tests/wpt/web-platform-tests/html/webappapis/system-state-and-capabilities/the-navigator-object/navigator.any.js index 78706f44d74..8cfaef024a0 100644 --- a/tests/wpt/web-platform-tests/html/webappapis/system-state-and-capabilities/the-navigator-object/NavigatorID.js +++ b/tests/wpt/web-platform-tests/html/webappapis/system-state-and-capabilities/the-navigator-object/navigator.any.js @@ -1,4 +1,3 @@ -function run_test() { var compatibilityMode; if (navigator.userAgent.includes("Chrome")) { compatibilityMode = "Chrome"; @@ -50,7 +49,7 @@ function run_test() { async_test(function() { var request = new XMLHttpRequest(); request.onload = this.step_func_done(function() { - assert_equals("user-agent: " + navigator.userAgent + "\n", + assert_equals("User-Agent: " + navigator.userAgent + "\n", request.response, "userAgent should return the value sent in the " + "User-Agent header"); @@ -103,4 +102,5 @@ function run_test() { assert_false("oscpu" in navigator); } }, "oscpu"); -} + +done() diff --git a/tests/wpt/web-platform-tests/image-decodes/image-decode-iframe.html b/tests/wpt/web-platform-tests/image-decodes/image-decode-iframe.html new file mode 100644 index 00000000000..e64ea98afeb --- /dev/null +++ b/tests/wpt/web-platform-tests/image-decodes/image-decode-iframe.html @@ -0,0 +1,55 @@ + + + +img.decode() + + + + +
        + + + + + + + diff --git a/tests/wpt/web-platform-tests/image-decodes/image-decode-path-changes.html b/tests/wpt/web-platform-tests/image-decodes/image-decode-path-changes.html new file mode 100644 index 00000000000..6082c4b148e --- /dev/null +++ b/tests/wpt/web-platform-tests/image-decodes/image-decode-path-changes.html @@ -0,0 +1,112 @@ + + + +img.decode() + + + + +
        + + diff --git a/tests/wpt/web-platform-tests/image-decodes/image-decode.html b/tests/wpt/web-platform-tests/image-decodes/image-decode.html new file mode 100644 index 00000000000..5b8c1b6e9cd --- /dev/null +++ b/tests/wpt/web-platform-tests/image-decodes/image-decode.html @@ -0,0 +1,112 @@ + + + +img.decode() + + + + +
        + + diff --git a/tests/wpt/web-platform-tests/input-events/input-events-typing-data-manual.html b/tests/wpt/web-platform-tests/input-events/input-events-typing-data-manual.html new file mode 100644 index 00000000000..2b4a80984d8 --- /dev/null +++ b/tests/wpt/web-platform-tests/input-events/input-events-typing-data-manual.html @@ -0,0 +1,38 @@ + + +InputEvent have data when typing on textarea and contenteditable + + +

        To manually run this test, please follow the steps below:
        +1. Focus the first box and press key 'a' and then 'b'.
        +2. Focus the second box and press key 'c' and then 'd'.
        +
        +If a "PASS" result appears the test passes, otherwise it fails

        + +
        + diff --git a/tests/wpt/web-platform-tests/interfaces/OWNERS b/tests/wpt/web-platform-tests/interfaces/OWNERS new file mode 100644 index 00000000000..7ccc510535f --- /dev/null +++ b/tests/wpt/web-platform-tests/interfaces/OWNERS @@ -0,0 +1,4 @@ +@domenic +@jensl +@tobie +@yuki3 diff --git a/tests/wpt/web-platform-tests/interfaces/cssom.idl b/tests/wpt/web-platform-tests/interfaces/cssom.idl new file mode 100644 index 00000000000..e5a998ebf5d --- /dev/null +++ b/tests/wpt/web-platform-tests/interfaces/cssom.idl @@ -0,0 +1,294 @@ +interface MediaList { + stringifier attribute DOMString mediaText; + readonly attribute unsigned long length; + getter DOMString item(unsigned long index); + void appendMedium(DOMString medium); + void deleteMedium(DOMString medium); +}; + +interface StyleSheet { + readonly attribute DOMString type; + readonly attribute DOMString href; + readonly attribute Node ownerNode; + readonly attribute StyleSheet parentStyleSheet; + readonly attribute DOMString title; + [PutForwards=mediaText] readonly attribute MediaList media; + attribute boolean disabled; +}; + +interface CSSStyleSheet : StyleSheet { + readonly attribute CSSRule ownerRule; + readonly attribute CSSRuleList cssRules; + unsigned long insertRule(DOMString rule, unsigned long index); + void deleteRule(unsigned long index); +}; + +typedef sequence StyleSheetList; + +partial interface Document { + [SameObject] readonly attribute StyleSheetList styleSheets; +}; + +[NoInterfaceObject] interface LinkStyle { + readonly attribute StyleSheet sheet; +}; + +ProcessingInstruction implements LinkStyle; + +typedef sequence CSSRuleList; + +interface CSSRule { + // Types + const unsigned short STYLE_RULE = 1; + const unsigned short IMPORT_RULE = 3; + const unsigned short MEDIA_RULE = 4; + const unsigned short FONT_FACE_RULE = 5; + const unsigned short PAGE_RULE = 6; + const unsigned short NAMESPACE_RULE = 10; + readonly attribute unsigned short type; + + // Parsing and serialization + attribute DOMString cssText; + + // Context + readonly attribute CSSRule parentRule; + readonly attribute CSSStyleSheet parentStyleSheet; +}; + +interface CSSStyleRule : CSSRule { + attribute DOMString selectorText; + readonly attribute CSSStyleDeclaration style; +}; + +interface CSSImportRule : CSSRule { + readonly attribute DOMString href; + [PutForwards=mediaText] readonly attribute MediaList media; + readonly attribute CSSStyleSheet styleSheet; +}; + +interface CSSMediaRule : CSSRule { + [PutForwards=mediaText] readonly attribute MediaList media; + readonly attribute CSSRuleList cssRules; + unsigned long insertRule(DOMString rule, unsigned long index); + void deleteRule(unsigned long index); +}; + +interface CSSFontFaceRule : CSSRule { + readonly attribute CSSStyleDeclaration style; +}; + +interface CSSPageRule : CSSRule { + attribute DOMString selectorText; + readonly attribute CSSStyleDeclaration style; +}; + +interface CSSNamespaceRule : CSSRule { + readonly attribute DOMString namespaceURI; + readonly attribute DOMString? prefix; +}; + +interface CSSStyleDeclaration { + attribute DOMString cssText; + + readonly attribute unsigned long length; + DOMString item(unsigned long index); + + DOMString getPropertyValue(DOMString property); + DOMString getPropertyPriority(DOMString property); + void setProperty(DOMString property, DOMString value, optional DOMString priority); + DOMString removeProperty(DOMString property); + + readonly attribute CSSStyleDeclarationValue values; + + readonly attribute CSSRule parentRule; + + // CSS Properties + attribute DOMString azimuth; + attribute DOMString background; + attribute DOMString backgroundAttachment; + attribute DOMString backgroundColor; + attribute DOMString backgroundImage; + attribute DOMString backgroundPosition; + attribute DOMString backgroundRepeat; + attribute DOMString border; + attribute DOMString borderCollapse; + attribute DOMString borderColor; + attribute DOMString borderSpacing; + attribute DOMString borderStyle; + attribute DOMString borderTop; + attribute DOMString borderRight; + attribute DOMString borderBottom; + attribute DOMString borderLeft; + attribute DOMString borderTopColor; + attribute DOMString borderRightColor; + attribute DOMString borderBottomColor; + attribute DOMString borderLeftColor; + attribute DOMString borderTopStyle; + attribute DOMString borderRightStyle; + attribute DOMString borderBottomStyle; + attribute DOMString borderLeftStyle; + attribute DOMString borderTopWidth; + attribute DOMString borderRightWidth; + attribute DOMString borderBottomWidth; + attribute DOMString borderLeftWidth; + attribute DOMString borderWidth; + attribute DOMString bottom; + attribute DOMString captionSide; + attribute DOMString clear; + attribute DOMString clip; + attribute DOMString color; + attribute DOMString content; + attribute DOMString counterIncrement; + attribute DOMString counterReset; + attribute DOMString cue; + attribute DOMString cueAfter; + attribute DOMString cueBefore; + attribute DOMString cursor; + attribute DOMString direction; + attribute DOMString display; + attribute DOMString elevation; + attribute DOMString emptyCells; + attribute DOMString cssFloat; + attribute DOMString font; + attribute DOMString fontFamily; + attribute DOMString fontSize; + attribute DOMString fontSizeAdjust; + attribute DOMString fontStretch; + attribute DOMString fontStyle; + attribute DOMString fontVariant; + attribute DOMString fontWeight; + attribute DOMString height; + attribute DOMString left; + attribute DOMString letterSpacing; + attribute DOMString lineHeight; + attribute DOMString listStyle; + attribute DOMString listStyleImage; + attribute DOMString listStylePosition; + attribute DOMString listStyleType; + attribute DOMString margin; + attribute DOMString marginTop; + attribute DOMString marginRight; + attribute DOMString marginBottom; + attribute DOMString marginLeft; + attribute DOMString marks; + attribute DOMString maxHeight; + attribute DOMString maxWidth; + attribute DOMString minHeight; + attribute DOMString minWidth; + attribute DOMString orphans; + attribute DOMString outline; + attribute DOMString outlineColor; + attribute DOMString outlineStyle; + attribute DOMString outlineWidth; + attribute DOMString overflow; + attribute DOMString padding; + attribute DOMString paddingTop; + attribute DOMString paddingRight; + attribute DOMString paddingBottom; + attribute DOMString paddingLeft; + attribute DOMString page; + attribute DOMString pageBreakAfter; + attribute DOMString pageBreakBefore; + attribute DOMString pageBreakInside; + attribute DOMString pause; + attribute DOMString pauseAfter; + attribute DOMString pauseBefore; + attribute DOMString pitch; + attribute DOMString pitchRange; + attribute DOMString playDuring; + attribute DOMString position; + attribute DOMString quotes; + attribute DOMString richness; + attribute DOMString right; + attribute DOMString size; + attribute DOMString speak; + attribute DOMString speakHeader; + attribute DOMString speakNumeral; + attribute DOMString speakPunctuation; + attribute DOMString speechRate; + attribute DOMString stress; + attribute DOMString tableLayout; + attribute DOMString textAlign; + attribute DOMString textDecoration; + attribute DOMString textIndent; + attribute DOMString textShadow; + attribute DOMString textTransform; + attribute DOMString top; + attribute DOMString unicodeBidi; + attribute DOMString verticalAlign; + attribute DOMString visibility; + attribute DOMString voiceFamily; + attribute DOMString volume; + attribute DOMString whiteSpace; + attribute DOMString widows; + attribute DOMString width; + attribute DOMString wordSpacing; + attribute DOMString zIndex; +}; + +interface CSSStyleDeclarationValue { + // ... + + // CSS Properties + +}; + +interface CSSPropertyValue { + attribute DOMString cssText; +}; + +[NoInterfaceObject] interface CSSMapValue { + getter CSSValue (DOMString name); +}; + +[NoInterfaceObject] interface CSSPropertyValueList { + readonly attribute CSSValue[] list; +}; + +[NoInterfaceObject] interface CSSComponentValue { + readonly attribute DOMString type; + attribute any value; +}; + +[NoInterfaceObject] interface CSSStringComponentValue { + attribute DOMString string; +}; + +[NoInterfaceObject] interface CSSKeywordComponentValue { + attribute DOMString keyword; +}; + +[NoInterfaceObject] interface CSSIdentifierComponentValue { + attribute DOMString identifier; +}; + +[NoInterfaceObject] interface CSSColorComponentValue { + attribute short red; + attribute short green; + attribute short blue; + attribute float alpha; +}; + +[NoInterfaceObject] interface CSSLengthComponentValue { + attribute float em; + attribute float ex; + attribute float px; + // figure out what to do with absolute lengths +}; + +[NoInterfaceObject] interface CSSPercentageComponentValue { + attribute float percent; +}; + +[NoInterfaceObject] interface CSSURLComponentValue { + attribute DOMString? url; +}; + +[NoInterfaceObject] interface ElementCSSInlineStyle { + readonly attribute CSSStyleDeclaration style; +}; + +//partial interface Window { +// CSSStyleDeclaration getComputedStyle(Element elt); +// CSSStyleDeclaration getComputedStyle(Element elt, DOMString pseudoElt); +//}; diff --git a/tests/wpt/web-platform-tests/interfaces/dom.idl b/tests/wpt/web-platform-tests/interfaces/dom.idl new file mode 100644 index 00000000000..7e2667ff7d3 --- /dev/null +++ b/tests/wpt/web-platform-tests/interfaces/dom.idl @@ -0,0 +1,549 @@ +[Constructor(DOMString type, optional EventInit eventInitDict)/*, + Exposed=(Window,Worker)*/] +interface Event { + readonly attribute DOMString type; + readonly attribute EventTarget? target; + readonly attribute EventTarget? currentTarget; + + const unsigned short NONE = 0; + const unsigned short CAPTURING_PHASE = 1; + const unsigned short AT_TARGET = 2; + const unsigned short BUBBLING_PHASE = 3; + readonly attribute unsigned short eventPhase; + + void stopPropagation(); + void stopImmediatePropagation(); + + readonly attribute boolean bubbles; + readonly attribute boolean cancelable; + void preventDefault(); + readonly attribute boolean defaultPrevented; + + [Unforgeable] readonly attribute boolean isTrusted; + readonly attribute DOMTimeStamp timeStamp; + + void initEvent(DOMString type, optional boolean bubbles = false, optional boolean cancelable = false); +}; + +dictionary EventInit { + boolean bubbles = false; + boolean cancelable = false; +}; + + +[Constructor(DOMString type, optional CustomEventInit eventInitDict)/*, + Exposed=(Window,Worker)*/] +interface CustomEvent : Event { + readonly attribute any detail; + + void initCustomEvent(DOMString type, optional boolean bubbles = false, optional boolean cancelable = false, optional any detail = null); +}; + +dictionary CustomEventInit : EventInit { + any detail = null; +}; + + +//[Exposed=(Window,Worker)] +interface EventTarget { + void addEventListener(DOMString type, EventListener? callback, optional (EventListenerOptions or boolean) options); + void removeEventListener(DOMString type, EventListener? callback, optional (EventListenerOptions or boolean) options); + boolean dispatchEvent(Event event); +}; + +callback interface EventListener { + void handleEvent(Event event); +}; + +dictionary EventListenerOptions { + boolean capture; + boolean passive; +}; + + +[NoInterfaceObject, + Exposed=Window] +interface NonElementParentNode { + Element? getElementById(DOMString elementId); +}; +Document implements NonElementParentNode; +DocumentFragment implements NonElementParentNode; + + +[NoInterfaceObject, + Exposed=Window] +interface DocumentOrShadowRoot { +}; +Document implements DocumentOrShadowRoot; +ShadowRoot implements DocumentOrShadowRoot; + + +[NoInterfaceObject, + Exposed=Window] +interface ParentNode { + [SameObject] readonly attribute HTMLCollection children; + readonly attribute Element? firstElementChild; + readonly attribute Element? lastElementChild; + readonly attribute unsigned long childElementCount; + + [Unscopable] void prepend((Node or DOMString)... nodes); + [Unscopable] void append((Node or DOMString)... nodes); + + Element? querySelector(DOMString selectors); + [NewObject] NodeList querySelectorAll(DOMString selectors); +}; +Document implements ParentNode; +DocumentFragment implements ParentNode; +Element implements ParentNode; + + +[NoInterfaceObject, + Exposed=Window] +interface NonDocumentTypeChildNode { + readonly attribute Element? previousElementSibling; + readonly attribute Element? nextElementSibling; +}; +Element implements NonDocumentTypeChildNode; +CharacterData implements NonDocumentTypeChildNode; + + +[NoInterfaceObject, + Exposed=Window] +interface ChildNode { + [Unscopable] void before((Node or DOMString)... nodes); + [Unscopable] void after((Node or DOMString)... nodes); + [Unscopable] void replaceWith((Node or DOMString)... nodes); + [Unscopable] void remove(); +}; +DocumentType implements ChildNode; +Element implements ChildNode; +CharacterData implements ChildNode; + + +[NoInterfaceObject, + Exposed=Window] +interface Slotable { + readonly attribute HTMLSlotElement? assignedSlot; +}; +Element implements Slotable; +Text implements Slotable; + + +[Exposed=Window] +interface NodeList { + getter Node? item(unsigned long index); + readonly attribute unsigned long length; +// iterable; +}; + + +[Exposed=Window, LegacyUnenumerableNamedProperties] +interface HTMLCollection { + readonly attribute unsigned long length; + getter Element? item(unsigned long index); + getter Element? namedItem(DOMString name); +}; + + +[Constructor(MutationCallback callback)] +interface MutationObserver { + void observe(Node target, optional MutationObserverInit options); + void disconnect(); + sequence takeRecords(); +}; + +callback MutationCallback = void (sequence mutations, MutationObserver observer); + +dictionary MutationObserverInit { + boolean childList = false; + boolean attributes; + boolean characterData; + boolean subtree = false; + boolean attributeOldValue; + boolean characterDataOldValue; + sequence attributeFilter; +}; + + +[Exposed=Window] +interface MutationRecord { + readonly attribute DOMString type; + [SameObject] readonly attribute Node target; + [SameObject] readonly attribute NodeList addedNodes; + [SameObject] readonly attribute NodeList removedNodes; + readonly attribute Node? previousSibling; + readonly attribute Node? nextSibling; + readonly attribute DOMString? attributeName; + readonly attribute DOMString? attributeNamespace; + readonly attribute DOMString? oldValue; +}; + + +[Exposed=Window] +interface Node : EventTarget { + const unsigned short ELEMENT_NODE = 1; + const unsigned short ATTRIBUTE_NODE = 2; // historical + const unsigned short TEXT_NODE = 3; + const unsigned short CDATA_SECTION_NODE = 4; + const unsigned short ENTITY_REFERENCE_NODE = 5; // historical + const unsigned short ENTITY_NODE = 6; // historical + const unsigned short PROCESSING_INSTRUCTION_NODE = 7; + const unsigned short COMMENT_NODE = 8; + const unsigned short DOCUMENT_NODE = 9; + const unsigned short DOCUMENT_TYPE_NODE = 10; + const unsigned short DOCUMENT_FRAGMENT_NODE = 11; + const unsigned short NOTATION_NODE = 12; // historical + readonly attribute unsigned short nodeType; + readonly attribute DOMString nodeName; + + readonly attribute DOMString baseURI; + + readonly attribute boolean isConnected; + readonly attribute Document? ownerDocument; + Node getRootNode(optional GetRootNodeOptions options); + readonly attribute Node? parentNode; + readonly attribute Element? parentElement; + boolean hasChildNodes(); + [SameObject] readonly attribute NodeList childNodes; + readonly attribute Node? firstChild; + readonly attribute Node? lastChild; + readonly attribute Node? previousSibling; + readonly attribute Node? nextSibling; + + attribute DOMString? nodeValue; + attribute DOMString? textContent; + void normalize(); + + [NewObject] Node cloneNode(optional boolean deep = false); + boolean isEqualNode(Node? otherNode); + boolean isSameNode(Node? otherNode); // historical alias of === + + const unsigned short DOCUMENT_POSITION_DISCONNECTED = 0x01; + const unsigned short DOCUMENT_POSITION_PRECEDING = 0x02; + const unsigned short DOCUMENT_POSITION_FOLLOWING = 0x04; + const unsigned short DOCUMENT_POSITION_CONTAINS = 0x08; + const unsigned short DOCUMENT_POSITION_CONTAINED_BY = 0x10; + const unsigned short DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 0x20; + unsigned short compareDocumentPosition(Node other); + boolean contains(Node? other); + + DOMString? lookupPrefix(DOMString? namespace); + DOMString? lookupNamespaceURI(DOMString? prefix); + boolean isDefaultNamespace(DOMString? namespace); + + Node insertBefore(Node node, Node? child); + Node appendChild(Node node); + Node replaceChild(Node node, Node child); + Node removeChild(Node child); +}; + +dictionary GetRootNodeOptions { + boolean composed = false; +}; + +[Constructor, + Exposed=Window] +interface Document : Node { + [SameObject] readonly attribute DOMImplementation implementation; + readonly attribute DOMString URL; + readonly attribute DOMString documentURI; + readonly attribute DOMString origin; + readonly attribute DOMString compatMode; + readonly attribute DOMString characterSet; + readonly attribute DOMString charset; // historical alias of .characterSet + readonly attribute DOMString inputEncoding; // historical alias of .characterSet + readonly attribute DOMString contentType; + + readonly attribute DocumentType? doctype; + readonly attribute Element? documentElement; + HTMLCollection getElementsByTagName(DOMString qualifiedName); + HTMLCollection getElementsByTagNameNS(DOMString? namespace, DOMString localName); + HTMLCollection getElementsByClassName(DOMString classNames); + + [NewObject] Element createElement(DOMString localName, optional ElementCreationOptions options); + [NewObject] Element createElementNS(DOMString? namespace, DOMString qualifiedName, optional ElementCreationOptions options); + [NewObject] DocumentFragment createDocumentFragment(); + [NewObject] Text createTextNode(DOMString data); + [NewObject] CDATASection createCDATASection(DOMString data); + [NewObject] Comment createComment(DOMString data); + [NewObject] ProcessingInstruction createProcessingInstruction(DOMString target, DOMString data); + + [NewObject] Node importNode(Node node, optional boolean deep = false); + Node adoptNode(Node node); + + [NewObject] Attr createAttribute(DOMString localName); + [NewObject] Attr createAttributeNS(DOMString? namespace, DOMString qualifiedName); + + [NewObject] Event createEvent(DOMString interface); + + [NewObject] Range createRange(); + + // NodeFilter.SHOW_ALL = 0xFFFFFFFF + [NewObject] NodeIterator createNodeIterator(Node root, optional unsigned long whatToShow = 0xFFFFFFFF, optional NodeFilter? filter = null); + [NewObject] TreeWalker createTreeWalker(Node root, optional unsigned long whatToShow = 0xFFFFFFFF, optional NodeFilter? filter = null); +}; + +[Exposed=Window] +interface XMLDocument : Document {}; + +dictionary ElementCreationOptions { + DOMString is; +}; + + +[Exposed=Window] +interface DOMImplementation { + [NewObject] DocumentType createDocumentType(DOMString qualifiedName, DOMString publicId, DOMString systemId); + [NewObject] XMLDocument createDocument(DOMString? namespace, [TreatNullAs=EmptyString] DOMString qualifiedName, optional DocumentType? doctype = null); + [NewObject] Document createHTMLDocument(optional DOMString title); + + boolean hasFeature(); // useless; always returns true +}; + + +[Exposed=Window] +interface DocumentType : Node { + readonly attribute DOMString name; + readonly attribute DOMString publicId; + readonly attribute DOMString systemId; +}; + + +[Constructor, + Exposed=Window] +interface DocumentFragment : Node { +}; + + +[Exposed=Window] +interface ShadowRoot : DocumentFragment { + readonly attribute ShadowRootMode mode; + readonly attribute Element host; +}; + +enum ShadowRootMode { "open", "closed" }; + + +[Exposed=Window] +interface Element : Node { + readonly attribute DOMString? namespaceURI; + readonly attribute DOMString? prefix; + readonly attribute DOMString localName; + readonly attribute DOMString tagName; + + attribute DOMString id; + attribute DOMString className; + [SameObject, PutForwards=value] readonly attribute DOMTokenList classList; + attribute DOMString slot; + + boolean hasAttributes(); + [SameObject] readonly attribute NamedNodeMap attributes; + sequence getAttributeNames(); + DOMString? getAttribute(DOMString qualifiedName); + DOMString? getAttributeNS(DOMString? namespace, DOMString localName); + void setAttribute(DOMString qualifiedName, DOMString value); + void setAttributeNS(DOMString? namespace, DOMString qualifiedName, DOMString value); + void removeAttribute(DOMString qualifiedName); + void removeAttributeNS(DOMString? namespace, DOMString localName); + boolean hasAttribute(DOMString qualifiedName); + boolean hasAttributeNS(DOMString? namespace, DOMString localName); + + Attr? getAttributeNode(DOMString qualifiedName); + Attr? getAttributeNodeNS(DOMString? namespace, DOMString localName); + Attr? setAttributeNode(Attr attr); + Attr? setAttributeNodeNS(Attr attr); + Attr removeAttributeNode(Attr attr); + + ShadowRoot attachShadow(ShadowRootInit init); + readonly attribute ShadowRoot? shadowRoot; + + Element? closest(DOMString selectors); + boolean matches(DOMString selectors); + boolean webkitMatchesSelector(DOMString selectors); // historical alias of .matches + + HTMLCollection getElementsByTagName(DOMString qualifiedName); + HTMLCollection getElementsByTagNameNS(DOMString? namespace, DOMString localName); + HTMLCollection getElementsByClassName(DOMString classNames); + + Element? insertAdjacentElement(DOMString where, Element element); // historical + void insertAdjacentText(DOMString where, DOMString data); // historical +}; + +dictionary ShadowRootInit { +// required ShadowRootMode mode; +}; + + +[Exposed=Window, LegacyUnenumerableNamedProperties] +interface NamedNodeMap { + readonly attribute unsigned long length; + getter Attr? item(unsigned long index); + getter Attr? getNamedItem(DOMString qualifiedName); + Attr? getNamedItemNS(DOMString? namespace, DOMString localName); + Attr? setNamedItem(Attr attr); + Attr? setNamedItemNS(Attr attr); + Attr removeNamedItem(DOMString qualifiedName); + Attr removeNamedItemNS(DOMString? namespace, DOMString localName); +}; + + +[Exposed=Window] +interface Attr : Node { + readonly attribute DOMString? namespaceURI; + readonly attribute DOMString? prefix; + readonly attribute DOMString localName; + readonly attribute DOMString name; + attribute DOMString value; + + readonly attribute Element? ownerElement; + + readonly attribute boolean specified; // useless; always returns true +}; + +[Exposed=Window] +interface CharacterData : Node { + [TreatNullAs=EmptyString] attribute DOMString data; + readonly attribute unsigned long length; + DOMString substringData(unsigned long offset, unsigned long count); + void appendData(DOMString data); + void insertData(unsigned long offset, DOMString data); + void deleteData(unsigned long offset, unsigned long count); + void replaceData(unsigned long offset, unsigned long count, DOMString data); +}; + + +[Constructor(optional DOMString data = ""), + Exposed=Window] +interface Text : CharacterData { + [NewObject] Text splitText(unsigned long offset); + readonly attribute DOMString wholeText; +}; + +[Exposed=Window] +interface CDATASection : Text { +}; + +[Exposed=Window] +interface ProcessingInstruction : CharacterData { + readonly attribute DOMString target; +}; + +[Constructor(optional DOMString data = ""), + Exposed=Window] +interface Comment : CharacterData { +}; + + +[Constructor, + Exposed=Window] +interface Range { + readonly attribute Node startContainer; + readonly attribute unsigned long startOffset; + readonly attribute Node endContainer; + readonly attribute unsigned long endOffset; + readonly attribute boolean collapsed; + readonly attribute Node commonAncestorContainer; + + void setStart(Node node, unsigned long offset); + void setEnd(Node node, unsigned long offset); + void setStartBefore(Node node); + void setStartAfter(Node node); + void setEndBefore(Node node); + void setEndAfter(Node node); + void collapse(optional boolean toStart = false); + void selectNode(Node node); + void selectNodeContents(Node node); + + const unsigned short START_TO_START = 0; + const unsigned short START_TO_END = 1; + const unsigned short END_TO_END = 2; + const unsigned short END_TO_START = 3; + short compareBoundaryPoints(unsigned short how, Range sourceRange); + + void deleteContents(); + [NewObject] DocumentFragment extractContents(); + [NewObject] DocumentFragment cloneContents(); + void insertNode(Node node); + void surroundContents(Node newParent); + + [NewObject] Range cloneRange(); + void detach(); + + boolean isPointInRange(Node node, unsigned long offset); + short comparePoint(Node node, unsigned long offset); + + boolean intersectsNode(Node node); + + stringifier; +}; + + +[Exposed=Window] +interface NodeIterator { + [SameObject] readonly attribute Node root; + readonly attribute Node referenceNode; + readonly attribute boolean pointerBeforeReferenceNode; + readonly attribute unsigned long whatToShow; + readonly attribute NodeFilter? filter; + + Node? nextNode(); + Node? previousNode(); + + void detach(); +}; + + +[Exposed=Window] +interface TreeWalker { + [SameObject] readonly attribute Node root; + readonly attribute unsigned long whatToShow; + readonly attribute NodeFilter? filter; + attribute Node currentNode; + + Node? parentNode(); + Node? firstChild(); + Node? lastChild(); + Node? previousSibling(); + Node? nextSibling(); + Node? previousNode(); + Node? nextNode(); +}; + +[Exposed=Window] +callback interface NodeFilter { + // Constants for acceptNode() + const unsigned short FILTER_ACCEPT = 1; + const unsigned short FILTER_REJECT = 2; + const unsigned short FILTER_SKIP = 3; + + // Constants for whatToShow + const unsigned long SHOW_ALL = 0xFFFFFFFF; + const unsigned long SHOW_ELEMENT = 0x1; + const unsigned long SHOW_ATTRIBUTE = 0x2; // historical + const unsigned long SHOW_TEXT = 0x4; + const unsigned long SHOW_CDATA_SECTION = 0x8; + const unsigned long SHOW_ENTITY_REFERENCE = 0x10; // historical + const unsigned long SHOW_ENTITY = 0x20; // historical + const unsigned long SHOW_PROCESSING_INSTRUCTION = 0x40; + const unsigned long SHOW_COMMENT = 0x80; + const unsigned long SHOW_DOCUMENT = 0x100; + const unsigned long SHOW_DOCUMENT_TYPE = 0x200; + const unsigned long SHOW_DOCUMENT_FRAGMENT = 0x400; + const unsigned long SHOW_NOTATION = 0x800; // historical + + unsigned short acceptNode(Node node); +}; + + +interface DOMTokenList { + readonly attribute unsigned long length; + getter DOMString? item(unsigned long index); + boolean contains(DOMString token); + [CEReactions] void add(DOMString... tokens); + [CEReactions] void remove(DOMString... tokens); + [CEReactions] boolean toggle(DOMString token, optional boolean force); + [CEReactions] void replace(DOMString token, DOMString newToken); + boolean supports(DOMString token); + [CEReactions] stringifier attribute DOMString value; + // iterable; +}; diff --git a/tests/wpt/web-platform-tests/interfaces/fullscreen.idl b/tests/wpt/web-platform-tests/interfaces/fullscreen.idl new file mode 100644 index 00000000000..61710f01ee7 --- /dev/null +++ b/tests/wpt/web-platform-tests/interfaces/fullscreen.idl @@ -0,0 +1,20 @@ +partial interface Element { + Promise requestFullscreen(); + + attribute EventHandler onfullscreenchange; + attribute EventHandler onfullscreenerror; +}; + +partial interface Document { + [LenientSetter] readonly attribute boolean fullscreenEnabled; + [LenientSetter, Unscopable] readonly attribute boolean fullscreen; // historical + + Promise exitFullscreen(); + + attribute EventHandler onfullscreenchange; + attribute EventHandler onfullscreenerror; +}; + +partial interface DocumentOrShadowRoot { + [LenientSetter] readonly attribute Element? fullscreenElement; +}; diff --git a/tests/wpt/web-platform-tests/interfaces/geometry.idl b/tests/wpt/web-platform-tests/interfaces/geometry.idl new file mode 100644 index 00000000000..87502f9eaf1 --- /dev/null +++ b/tests/wpt/web-platform-tests/interfaces/geometry.idl @@ -0,0 +1,267 @@ +[Constructor(optional unrestricted double x = 0, optional unrestricted double y = 0, + optional unrestricted double z = 0, optional unrestricted double w = 1), + Exposed=(Window,Worker), + Serializable] +interface DOMPointReadOnly { + [NewObject] static DOMPointReadOnly fromPoint(optional DOMPointInit other); + + readonly attribute unrestricted double x; + readonly attribute unrestricted double y; + readonly attribute unrestricted double z; + readonly attribute unrestricted double w; + + DOMPoint matrixTransform(optional DOMMatrixInit matrix); + + serializer = { attribute }; +}; + +[Constructor(optional unrestricted double x = 0, optional unrestricted double y = 0, + optional unrestricted double z = 0, optional unrestricted double w = 1), + Exposed=(Window,Worker), + Serializable, + LegacyWindowAlias=SVGPoint] +interface DOMPoint : DOMPointReadOnly { + [NewObject] static DOMPoint fromPoint(optional DOMPointInit other); + + inherit attribute unrestricted double x; + inherit attribute unrestricted double y; + inherit attribute unrestricted double z; + inherit attribute unrestricted double w; +}; + +dictionary DOMPointInit { + unrestricted double x = 0; + unrestricted double y = 0; + unrestricted double z = 0; + unrestricted double w = 1; +}; + +[Constructor(optional unrestricted double x = 0, optional unrestricted double y = 0, + optional unrestricted double width = 0, optional unrestricted double height = 0), + Exposed=(Window,Worker), + Serializable] +interface DOMRectReadOnly { + [NewObject] static DOMRectReadOnly fromRect(optional DOMRectInit other); + + readonly attribute unrestricted double x; + readonly attribute unrestricted double y; + readonly attribute unrestricted double width; + readonly attribute unrestricted double height; + readonly attribute unrestricted double top; + readonly attribute unrestricted double right; + readonly attribute unrestricted double bottom; + readonly attribute unrestricted double left; + + serializer = { attribute }; +}; + +[Constructor(optional unrestricted double x = 0, optional unrestricted double y = 0, + optional unrestricted double width = 0, optional unrestricted double height = 0), + Exposed=(Window,Worker), + Serializable, + LegacyWindowAlias=SVGRect] +interface DOMRect : DOMRectReadOnly { + [NewObject] static DOMRect fromRect(optional DOMRectInit other); + + inherit attribute unrestricted double x; + inherit attribute unrestricted double y; + inherit attribute unrestricted double width; + inherit attribute unrestricted double height; +}; + +dictionary DOMRectInit { + unrestricted double x = 0; + unrestricted double y = 0; + unrestricted double width = 0; + unrestricted double height = 0; +}; + +[Constructor(optional DOMPointInit p1, optional DOMPointInit p2, + optional DOMPointInit p3, optional DOMPointInit p4), + Exposed=(Window,Worker), + Serializable] +interface DOMQuad { + [NewObject] static DOMQuad fromRect(optional DOMRectInit other); + [NewObject] static DOMQuad fromQuad(optional DOMQuadInit other); + + [SameObject] readonly attribute DOMPoint p1; + [SameObject] readonly attribute DOMPoint p2; + [SameObject] readonly attribute DOMPoint p3; + [SameObject] readonly attribute DOMPoint p4; + [NewObject] DOMRect getBounds(); + + serializer = { attribute }; +}; + +dictionary DOMQuadInit { + DOMPointInit p1; + DOMPointInit p2; + DOMPointInit p3; + DOMPointInit p4; +}; + +[Constructor(optional (DOMString or sequence) init), + Exposed=(Window,Worker), + Serializable] +interface DOMMatrixReadOnly { + [NewObject] static DOMMatrixReadOnly fromMatrix(optional DOMMatrixInit other); + [NewObject] static DOMMatrixReadOnly fromFloat32Array(Float32Array array32); + [NewObject] static DOMMatrixReadOnly fromFloat64Array(Float64Array array64); + + // These attributes are simple aliases for certain elements of the 4x4 matrix + readonly attribute unrestricted double a; + readonly attribute unrestricted double b; + readonly attribute unrestricted double c; + readonly attribute unrestricted double d; + readonly attribute unrestricted double e; + readonly attribute unrestricted double f; + + readonly attribute unrestricted double m11; + readonly attribute unrestricted double m12; + readonly attribute unrestricted double m13; + readonly attribute unrestricted double m14; + readonly attribute unrestricted double m21; + readonly attribute unrestricted double m22; + readonly attribute unrestricted double m23; + readonly attribute unrestricted double m24; + readonly attribute unrestricted double m31; + readonly attribute unrestricted double m32; + readonly attribute unrestricted double m33; + readonly attribute unrestricted double m34; + readonly attribute unrestricted double m41; + readonly attribute unrestricted double m42; + readonly attribute unrestricted double m43; + readonly attribute unrestricted double m44; + + readonly attribute boolean is2D; + readonly attribute boolean isIdentity; + + // Immutable transform methods + [NewObject] DOMMatrix translate(optional unrestricted double tx = 0, + optional unrestricted double ty = 0, + optional unrestricted double tz = 0); + [NewObject] DOMMatrix scale(optional unrestricted double scaleX = 1, + optional unrestricted double scaleY, + optional unrestricted double scaleZ = 1, + optional unrestricted double originX = 0, + optional unrestricted double originY = 0, + optional unrestricted double originZ = 0); + [NewObject] DOMMatrix scale3d(optional unrestricted double scale = 1, + optional unrestricted double originX = 0, + optional unrestricted double originY = 0, + optional unrestricted double originZ = 0); + [NewObject] DOMMatrix rotate(optional unrestricted double rotX = 0, + optional unrestricted double rotY, + optional unrestricted double rotZ); + [NewObject] DOMMatrix rotateFromVector(optional unrestricted double x = 0, + optional unrestricted double y = 0); + [NewObject] DOMMatrix rotateAxisAngle(optional unrestricted double x = 0, + optional unrestricted double y = 0, + optional unrestricted double z = 0, + optional unrestricted double angle = 0); + [NewObject] DOMMatrix skewX(optional unrestricted double sx = 0); + [NewObject] DOMMatrix skewY(optional unrestricted double sy = 0); + [NewObject] DOMMatrix multiply(optional DOMMatrixInit other); + [NewObject] DOMMatrix flipX(); + [NewObject] DOMMatrix flipY(); + [NewObject] DOMMatrix inverse(); + + [NewObject] DOMPoint transformPoint(optional DOMPointInit point); + [NewObject] Float32Array toFloat32Array(); + [NewObject] Float64Array toFloat64Array(); + + [Exposed=Window] stringifier; + serializer = { attribute }; +}; + +[Constructor(optional (DOMString or sequence) init), + Exposed=(Window,Worker), + Serializable, + LegacyWindowAlias=(SVGMatrix,WebKitCSSMatrix)] +interface DOMMatrix : DOMMatrixReadOnly { + [NewObject] static DOMMatrix fromMatrix(optional DOMMatrixInit other); + [NewObject] static DOMMatrix fromFloat32Array(Float32Array array32); + [NewObject] static DOMMatrix fromFloat64Array(Float64Array array64); + + // These attributes are simple aliases for certain elements of the 4x4 matrix + inherit attribute unrestricted double a; + inherit attribute unrestricted double b; + inherit attribute unrestricted double c; + inherit attribute unrestricted double d; + inherit attribute unrestricted double e; + inherit attribute unrestricted double f; + + inherit attribute unrestricted double m11; + inherit attribute unrestricted double m12; + inherit attribute unrestricted double m13; + inherit attribute unrestricted double m14; + inherit attribute unrestricted double m21; + inherit attribute unrestricted double m22; + inherit attribute unrestricted double m23; + inherit attribute unrestricted double m24; + inherit attribute unrestricted double m31; + inherit attribute unrestricted double m32; + inherit attribute unrestricted double m33; + inherit attribute unrestricted double m34; + inherit attribute unrestricted double m41; + inherit attribute unrestricted double m42; + inherit attribute unrestricted double m43; + inherit attribute unrestricted double m44; + + // Mutable transform methods + DOMMatrix multiplySelf(optional DOMMatrixInit other); + DOMMatrix preMultiplySelf(optional DOMMatrixInit other); + DOMMatrix translateSelf(optional unrestricted double tx = 0, + optional unrestricted double ty = 0, + optional unrestricted double tz = 0); + DOMMatrix scaleSelf(optional unrestricted double scaleX = 1, + optional unrestricted double scaleY, + optional unrestricted double scaleZ = 1, + optional unrestricted double originX = 0, + optional unrestricted double originY = 0, + optional unrestricted double originZ = 0); + DOMMatrix scale3dSelf(optional unrestricted double scale = 1, + optional unrestricted double originX = 0, + optional unrestricted double originY = 0, + optional unrestricted double originZ = 0); + DOMMatrix rotateSelf(optional unrestricted double rotX = 0, + optional unrestricted double rotY, + optional unrestricted double rotZ); + DOMMatrix rotateFromVectorSelf(optional unrestricted double x = 0, + optional unrestricted double y = 0); + DOMMatrix rotateAxisAngleSelf(optional unrestricted double x = 0, + optional unrestricted double y = 0, + optional unrestricted double z = 0, + optional unrestricted double angle = 0); + DOMMatrix skewXSelf(optional unrestricted double sx = 0); + DOMMatrix skewYSelf(optional unrestricted double sy = 0); + DOMMatrix invertSelf(); + + [Exposed=Window] DOMMatrix setMatrixValue(DOMString transformList); +}; + +dictionary DOMMatrixInit { + unrestricted double a; + unrestricted double b; + unrestricted double c; + unrestricted double d; + unrestricted double e; + unrestricted double f; + unrestricted double m11; + unrestricted double m12; + unrestricted double m13 = 0; + unrestricted double m14 = 0; + unrestricted double m21; + unrestricted double m22; + unrestricted double m23 = 0; + unrestricted double m24 = 0; + unrestricted double m31 = 0; + unrestricted double m32 = 0; + unrestricted double m33 = 1; + unrestricted double m34 = 0; + unrestricted double m41; + unrestricted double m42; + unrestricted double m43 = 0; + unrestricted double m44 = 1; + boolean is2D; +}; diff --git a/tests/wpt/web-platform-tests/html/dom/resources/interfaces.idl b/tests/wpt/web-platform-tests/interfaces/html.idl similarity index 93% rename from tests/wpt/web-platform-tests/html/dom/resources/interfaces.idl rename to tests/wpt/web-platform-tests/interfaces/html.idl index 26c8cff17a9..93653d0db0a 100644 --- a/tests/wpt/web-platform-tests/html/dom/resources/interfaces.idl +++ b/tests/wpt/web-platform-tests/interfaces/html.idl @@ -136,7 +136,6 @@ interface HTMLElement : Element { [CEReactions] attribute DOMString accessKey; readonly attribute DOMString accessKeyLabel; [CEReactions] attribute boolean draggable; - [CEReactions] attribute HTMLMenuElement? contextMenu; [CEReactions] attribute boolean spellcheck; void forceSpellCheck(); @@ -168,7 +167,7 @@ interface HTMLLinkElement : HTMLElement { [CEReactions] attribute USVString href; [CEReactions] attribute DOMString? crossOrigin; [CEReactions] attribute DOMString rel; - // [CEReactions] attribute RequestDestination as; // (default "") XXX TODO + [CEReactions] attribute DOMString as; // (default "") [CEReactions, SameObject, PutForwards=value] readonly attribute DOMTokenList relList; [CEReactions] attribute DOMString media; [CEReactions] attribute DOMString nonce; @@ -956,32 +955,9 @@ interface HTMLDetailsElement : HTMLElement { }; interface HTMLMenuElement : HTMLElement { - attribute DOMString type; - attribute DOMString label; - // also has obsolete members }; -interface HTMLMenuItemElement : HTMLElement { - attribute DOMString type; - attribute DOMString label; - attribute DOMString icon; - attribute boolean disabled; - attribute boolean checked; - attribute DOMString radiogroup; - attribute boolean default; - readonly attribute HTMLElement? command; -}; - -[Constructor(DOMString type, optional RelatedEventInit eventInitDict)] -interface RelatedEvent : Event { - readonly attribute EventTarget? relatedTarget; -}; - -dictionary RelatedEventInit : EventInit { - EventTarget? relatedTarget; -}; - interface HTMLDialogElement : HTMLElement { attribute boolean open; attribute DOMString returnValue; @@ -1326,7 +1302,7 @@ interface DataTransfer { void setDragImage(Element image, long x, long y); /* old interface */ - readonly attribute DOMString[] types; + readonly attribute FrozenArray types; DOMString getData(DOMString format); void setData(DOMString format, DOMString data); void clearData(optional DOMString format); @@ -1408,7 +1384,6 @@ typedef Window WindowProxy; boolean confirm(optional DOMString message = ""); DOMString? prompt(optional DOMString message = "", optional DOMString default = ""); void print(); - any showModalDialog(DOMString url, optional any argument); void postMessage(any message, DOMString targetOrigin, optional sequence transfer); @@ -1549,67 +1524,67 @@ typedef OnBeforeUnloadEventHandlerNonNull? OnBeforeUnloadEventHandler; [NoInterfaceObject] interface GlobalEventHandlers { - attribute EventHandler onabort; - attribute EventHandler onauxclick; - attribute EventHandler onblur; - attribute EventHandler oncancel; - attribute EventHandler oncanplay; - attribute EventHandler oncanplaythrough; - attribute EventHandler onchange; - attribute EventHandler onclick; - attribute EventHandler onclose; - attribute EventHandler oncontextmenu; - attribute EventHandler oncuechange; - attribute EventHandler ondblclick; - attribute EventHandler ondrag; - attribute EventHandler ondragend; - attribute EventHandler ondragenter; - attribute EventHandler ondragexit; - attribute EventHandler ondragleave; - attribute EventHandler ondragover; - attribute EventHandler ondragstart; - attribute EventHandler ondrop; - attribute EventHandler ondurationchange; - attribute EventHandler onemptied; - attribute EventHandler onended; - attribute OnErrorEventHandler onerror; - attribute EventHandler onfocus; - attribute EventHandler oninput; - attribute EventHandler oninvalid; - attribute EventHandler onkeydown; - attribute EventHandler onkeypress; - attribute EventHandler onkeyup; - attribute EventHandler onload; - attribute EventHandler onloadeddata; - attribute EventHandler onloadedmetadata; - attribute EventHandler onloadstart; - attribute EventHandler onmousedown; + attribute EventHandler onabort; + attribute EventHandler onauxclick; + attribute EventHandler onblur; + attribute EventHandler oncancel; + attribute EventHandler oncanplay; + attribute EventHandler oncanplaythrough; + attribute EventHandler onchange; + attribute EventHandler onclick; + attribute EventHandler onclose; + attribute EventHandler oncontextmenu; + attribute EventHandler oncuechange; + attribute EventHandler ondblclick; + attribute EventHandler ondrag; + attribute EventHandler ondragend; + attribute EventHandler ondragenter; + attribute EventHandler ondragexit; + attribute EventHandler ondragleave; + attribute EventHandler ondragover; + attribute EventHandler ondragstart; + attribute EventHandler ondrop; + attribute EventHandler ondurationchange; + attribute EventHandler onemptied; + attribute EventHandler onended; + attribute OnErrorEventHandler onerror; + attribute EventHandler onfocus; + attribute EventHandler oninput; + attribute EventHandler oninvalid; + attribute EventHandler onkeydown; + attribute EventHandler onkeypress; + attribute EventHandler onkeyup; + attribute EventHandler onload; + attribute EventHandler onloadeddata; + attribute EventHandler onloadedmetadata; + attribute EventHandler onloadend; + attribute EventHandler onloadstart; + attribute EventHandler onmousedown; [LenientThis] attribute EventHandler onmouseenter; [LenientThis] attribute EventHandler onmouseleave; - attribute EventHandler onmousemove; - attribute EventHandler onmouseout; - attribute EventHandler onmouseover; - attribute EventHandler onmouseup; - attribute EventHandler onmousewheel; - attribute EventHandler onpause; - attribute EventHandler onplay; - attribute EventHandler onplaying; - attribute EventHandler onprogress; - attribute EventHandler onratechange; - attribute EventHandler onreset; - attribute EventHandler onresize; - attribute EventHandler onscroll; - attribute EventHandler onseeked; - attribute EventHandler onseeking; - attribute EventHandler onselect; - attribute EventHandler onshow; - attribute EventHandler onstalled; - attribute EventHandler onsubmit; - attribute EventHandler onsuspend; - attribute EventHandler ontimeupdate; - attribute EventHandler ontoggle; - attribute EventHandler onvolumechange; - attribute EventHandler onwaiting; + attribute EventHandler onmousemove; + attribute EventHandler onmouseout; + attribute EventHandler onmouseover; + attribute EventHandler onmouseup; + attribute EventHandler onwheel; + attribute EventHandler onpause; + attribute EventHandler onplay; + attribute EventHandler onplaying; + attribute EventHandler onprogress; + attribute EventHandler onratechange; + attribute EventHandler onreset; + attribute EventHandler onresize; + attribute EventHandler onscroll; + attribute EventHandler onseeked; + attribute EventHandler onseeking; + attribute EventHandler onselect; + attribute EventHandler onstalled; + attribute EventHandler onsubmit; + attribute EventHandler onsuspend; + attribute EventHandler ontimeupdate; + attribute EventHandler ontoggle; + attribute EventHandler onvolumechange; + attribute EventHandler onwaiting; }; [NoInterfaceObject] @@ -1621,19 +1596,22 @@ interface DocumentAndElementEventHandlers { [NoInterfaceObject] interface WindowEventHandlers { - attribute EventHandler onafterprint; - attribute EventHandler onbeforeprint; - attribute OnBeforeUnloadEventHandler onbeforeunload; - attribute EventHandler onhashchange; - attribute EventHandler onlanguagechange; - attribute EventHandler onmessage; - attribute EventHandler onoffline; - attribute EventHandler ononline; - attribute EventHandler onpagehide; - attribute EventHandler onpageshow; - attribute EventHandler onpopstate; - attribute EventHandler onstorage; - attribute EventHandler onunload; + attribute EventHandler onafterprint; + attribute EventHandler onbeforeprint; + attribute OnBeforeUnloadEventHandler onbeforeunload; + attribute EventHandler onhashchange; + attribute EventHandler onlanguagechange; + attribute EventHandler onmessage; + attribute EventHandler onmessageerror; + attribute EventHandler onoffline; + attribute EventHandler ononline; + attribute EventHandler onpagehide; + attribute EventHandler onpageshow; + attribute EventHandler onpopstate; + attribute EventHandler onrejectionhandled; + attribute EventHandler onstorage; + attribute EventHandler onunhandledrejection; + attribute EventHandler onunload; }; typedef (DOMString or Function) TimerHandler; @@ -1871,23 +1849,24 @@ interface MessageChannel { readonly attribute MessagePort port2; }; -[Exposed=(Window,Worker)] +[Exposed=(Window,Worker), Transferable] interface MessagePort : EventTarget { - void postMessage(any message, optional sequence transfer); + void postMessage(any message, optional sequence transfer = []); void start(); void close(); // event handlers - attribute EventHandler onmessage; + attribute EventHandler onmessage; + attribute EventHandler onmessageerror; }; -// MessagePort implements Transferable; -[Constructor(DOMString channel), Exposed=(Window,Worker)] +[Constructor(DOMString name), Exposed=(Window,Worker)] interface BroadcastChannel : EventTarget { readonly attribute DOMString name; void postMessage(any message); void close(); - attribute EventHandler onmessage; + attribute EventHandler onmessage; + attribute EventHandler onmessageerror; }; [Exposed=Worker] @@ -1906,9 +1885,13 @@ interface WorkerGlobalScope : EventTarget { }; [Global=(Worker,DedicatedWorker),Exposed=DedicatedWorker] -/*sealed*/ interface DedicatedWorkerGlobalScope : WorkerGlobalScope { - void postMessage(any message, optional sequence transfer); - attribute EventHandler onmessage; +interface DedicatedWorkerGlobalScope : WorkerGlobalScope { + void postMessage(any message, optional sequence transfer = []); + + void close(); + + attribute EventHandler onmessage; + attribute EventHandler onmessageerror; }; [Global=(Worker,SharedWorker),Exposed=SharedWorker] diff --git a/tests/wpt/web-platform-tests/interfaces/mediacapture-main.idl b/tests/wpt/web-platform-tests/interfaces/mediacapture-main.idl new file mode 100644 index 00000000000..13593c78687 --- /dev/null +++ b/tests/wpt/web-platform-tests/interfaces/mediacapture-main.idl @@ -0,0 +1,254 @@ +[Exposed=Window, + Constructor, + Constructor(MediaStream stream), + Constructor(sequence tracks)] +interface MediaStream : EventTarget { + readonly attribute DOMString id; + sequence getAudioTracks(); + sequence getVideoTracks(); + sequence getTracks(); + MediaStreamTrack? getTrackById(DOMString trackId); + void addTrack(MediaStreamTrack track); + void removeTrack(MediaStreamTrack track); + MediaStream clone(); + readonly attribute boolean active; + attribute EventHandler onaddtrack; + attribute EventHandler onremovetrack; +}; + +[Exposed=Window] +interface MediaStreamTrack : EventTarget { + readonly attribute DOMString kind; + readonly attribute DOMString id; + readonly attribute DOMString label; + attribute boolean enabled; + readonly attribute boolean muted; + attribute EventHandler onmute; + attribute EventHandler onunmute; + readonly attribute MediaStreamTrackState readyState; + attribute EventHandler onended; + MediaStreamTrack clone(); + void stop(); + MediaTrackCapabilities getCapabilities(); + MediaTrackConstraints getConstraints(); + MediaTrackSettings getSettings(); + Promise applyConstraints(optional MediaTrackConstraints constraints); + attribute EventHandler onoverconstrained; +}; + +enum MediaStreamTrackState { + "live", + "ended" +}; + +dictionary MediaTrackSupportedConstraints { + boolean width = true; + boolean height = true; + boolean aspectRatio = true; + boolean frameRate = true; + boolean facingMode = true; + boolean volume = true; + boolean sampleRate = true; + boolean sampleSize = true; + boolean echoCancellation = true; + boolean latency = true; + boolean channelCount = true; + boolean deviceId = true; + boolean groupId = true; +}; + +dictionary MediaTrackCapabilities { + LongRange width; + LongRange height; + DoubleRange aspectRatio; + DoubleRange frameRate; + sequence facingMode; + DoubleRange volume; + LongRange sampleRate; + LongRange sampleSize; + sequence echoCancellation; + DoubleRange latency; + LongRange channelCount; + DOMString deviceId; + DOMString groupId; +}; + +dictionary MediaTrackConstraints : MediaTrackConstraintSet { + sequence advanced; +}; + +dictionary MediaTrackConstraintSet { + ConstrainLong width; + ConstrainLong height; + ConstrainDouble aspectRatio; + ConstrainDouble frameRate; + ConstrainDOMString facingMode; + ConstrainDouble volume; + ConstrainLong sampleRate; + ConstrainLong sampleSize; + ConstrainBoolean echoCancellation; + ConstrainDouble latency; + ConstrainLong channelCount; + ConstrainDOMString deviceId; + ConstrainDOMString groupId; +}; + +dictionary MediaTrackSettings { + long width; + long height; + double aspectRatio; + double frameRate; + DOMString facingMode; + double volume; + long sampleRate; + long sampleSize; + boolean echoCancellation; + double latency; + long channelCount; + DOMString deviceId; + DOMString groupId; +}; + +enum VideoFacingModeEnum { + "user", + "environment", + "left", + "right" +}; + +[Exposed=Window, + Constructor(DOMString type, MediaStreamTrackEventInit eventInitDict)] +interface MediaStreamTrackEvent : Event { + [SameObject] + readonly attribute MediaStreamTrack track; +}; + +dictionary MediaStreamTrackEventInit : EventInit { + required MediaStreamTrack track; +}; + +[Exposed=Window, + Constructor(DOMString type, OverconstrainedErrorEventInit eventInitDict)] +interface OverconstrainedErrorEvent : Event { + readonly attribute OverconstrainedError? error; +}; + +dictionary OverconstrainedErrorEventInit : EventInit { + OverconstrainedError? error = null; +}; + +[Exposed=Window, + NoInterfaceObject] +interface NavigatorUserMedia { + [SameObject] + readonly attribute MediaDevices mediaDevices; +}; + +Navigator implements NavigatorUserMedia; + +[Exposed=Window] +interface MediaDevices : EventTarget { + attribute EventHandler ondevicechange; + Promise> enumerateDevices(); +}; + +[Exposed=Window] +interface MediaDeviceInfo { + readonly attribute DOMString deviceId; + readonly attribute MediaDeviceKind kind; + readonly attribute DOMString label; + readonly attribute DOMString groupId; + serializer = {attribute}; +}; + +enum MediaDeviceKind { + "audioinput", + "audiooutput", + "videoinput" +}; + +interface InputDeviceInfo : MediaDeviceInfo { + MediaTrackCapabilities getCapabilities(); +}; + +partial interface NavigatorUserMedia { + void getUserMedia(MediaStreamConstraints constraints, + NavigatorUserMediaSuccessCallback successCallback, + NavigatorUserMediaErrorCallback errorCallback); +}; + +partial interface MediaDevices { + MediaTrackSupportedConstraints getSupportedConstraints(); + Promise getUserMedia(optional MediaStreamConstraints constraints); +}; + +dictionary MediaStreamConstraints { + (boolean or MediaTrackConstraints) video = false; + (boolean or MediaTrackConstraints) audio = false; +}; + +callback NavigatorUserMediaSuccessCallback = void (MediaStream stream); + +callback NavigatorUserMediaErrorCallback = void (MediaStreamError error); + +typedef object MediaStreamError; + +[NoInterfaceObject] +interface ConstrainablePattern { + Capabilities getCapabilities(); + Constraints getConstraints(); + Settings getSettings(); + Promise applyConstraints(optional Constraints constraints); + attribute EventHandler onoverconstrained; +}; + +dictionary DoubleRange { + double max; + double min; +}; + +dictionary ConstrainDoubleRange : DoubleRange { + double exact; + double ideal; +}; + +dictionary LongRange { + long max; + long min; +}; + +dictionary ConstrainLongRange : LongRange { + long exact; + long ideal; +}; + +dictionary ConstrainBooleanParameters { + boolean exact; + boolean ideal; +}; + +dictionary ConstrainDOMStringParameters { + (DOMString or sequence) exact; + (DOMString or sequence) ideal; +}; + +typedef (long or ConstrainLongRange) ConstrainLong; + +typedef (double or ConstrainDoubleRange) ConstrainDouble; + +typedef (boolean or ConstrainBooleanParameters) ConstrainBoolean; + +typedef (DOMString or sequence or ConstrainDOMStringParameters) ConstrainDOMString; + +dictionary Capabilities { +}; + +dictionary Settings { +}; + +dictionary ConstraintSet { +}; + +dictionary Constraints : ConstraintSet { + sequence advanced; +}; diff --git a/tests/wpt/web-platform-tests/interfaces/remoteplayback.idl b/tests/wpt/web-platform-tests/interfaces/remoteplayback.idl new file mode 100644 index 00000000000..598bf30b165 --- /dev/null +++ b/tests/wpt/web-platform-tests/interfaces/remoteplayback.idl @@ -0,0 +1,23 @@ +enum RemotePlaybackState { + "connecting", + "connected", + "disconnected" +}; + +callback RemotePlaybackAvailabilityCallback = void(boolean available); + +interface RemotePlayback : EventTarget { + readonly attribute RemotePlaybackState state; + attribute EventHandler onconnecting; + attribute EventHandler onconnect; + attribute EventHandler ondisconnect; + + Promise watchAvailability(RemotePlaybackAvailabilityCallback callback); + Promise cancelWatchAvailability(optional long id); + Promise prompt(); +}; + +partial interface HTMLMediaElement { + readonly attribute RemotePlayback remote; + attribute boolean disableRemotePlayback; +}; diff --git a/tests/wpt/web-platform-tests/interfaces/touchevents.idl b/tests/wpt/web-platform-tests/interfaces/touchevents.idl new file mode 100644 index 00000000000..81eec0185c2 --- /dev/null +++ b/tests/wpt/web-platform-tests/interfaces/touchevents.idl @@ -0,0 +1,10 @@ +interface Touch { + readonly attribute long identifier; + readonly attribute EventTarget target; + readonly attribute long screenX; + readonly attribute long screenY; + readonly attribute long clientX; + readonly attribute long clientY; + readonly attribute long pageX; + readonly attribute long pageY; +}; diff --git a/tests/wpt/web-platform-tests/interfaces/uievents.idl b/tests/wpt/web-platform-tests/interfaces/uievents.idl new file mode 100644 index 00000000000..bac832ba436 --- /dev/null +++ b/tests/wpt/web-platform-tests/interfaces/uievents.idl @@ -0,0 +1,60 @@ +[Constructor(DOMString type, optional UIEventInit eventInitDict)] +interface UIEvent : Event { + readonly attribute WindowProxy? view; + readonly attribute long detail; +}; + +dictionary UIEventInit : EventInit { + WindowProxy? view = null; + long detail = 0; +}; + +[Constructor(DOMString typeArg, optional MouseEventInit mouseEventInitDict)] +interface MouseEvent : UIEvent { + readonly attribute long screenX; + readonly attribute long screenY; + readonly attribute long clientX; + readonly attribute long clientY; + readonly attribute boolean ctrlKey; + readonly attribute boolean shiftKey; + readonly attribute boolean altKey; + readonly attribute boolean metaKey; + readonly attribute short button; + readonly attribute EventTarget? relatedTarget; + // Introduced in DOM Level 3 + readonly attribute unsigned short buttons; + boolean getModifierState (DOMString keyArg); +}; + +dictionary MouseEventInit : EventModifierInit { + long screenX = 0; + long screenY = 0; + long clientX = 0; + long clientY = 0; + short button = 0; + unsigned short buttons = 0; + EventTarget? relatedTarget = null; +}; + +dictionary EventModifierInit : UIEventInit { + boolean ctrlKey = false; + boolean shiftKey = false; + boolean altKey = false; + boolean metaKey = false; + boolean keyModifierStateAltGraph = false; + boolean keyModifierStateCapsLock = false; + boolean keyModifierStateFn = false; + boolean keyModifierStateFnLock = false; + boolean keyModifierStateHyper = false; + boolean keyModifierStateNumLock = false; + boolean keyModifierStateOS = false; + boolean keyModifierStateScrollLock = false; + boolean keyModifierStateSuper = false; + boolean keyModifierStateSymbol = false; + boolean keyModifierStateSymbolLock = false; +}; + +partial interface MouseEvent { + // Deprecated in DOM Level 3 + void initMouseEvent (DOMString typeArg, boolean bubblesArg, boolean cancelableArg, Window? viewArg, long detailArg, long screenXArg, long screenYArg, long clientXArg, long clientYArg, boolean ctrlKeyArg, boolean altKeyArg, boolean shiftKeyArg, boolean metaKeyArg, short buttonArg, EventTarget? relatedTargetArg); +}; diff --git a/tests/wpt/web-platform-tests/interfaces/webrtc-pc.idl b/tests/wpt/web-platform-tests/interfaces/webrtc-pc.idl new file mode 100644 index 00000000000..133524a6cdf --- /dev/null +++ b/tests/wpt/web-platform-tests/interfaces/webrtc-pc.idl @@ -0,0 +1,657 @@ +dictionary RTCConfiguration { + sequence iceServers; + RTCIceTransportPolicy iceTransportPolicy = "all"; + RTCBundlePolicy bundlePolicy = "balanced"; + RTCRtcpMuxPolicy rtcpMuxPolicy = "require"; + DOMString peerIdentity; + sequence certificates; + [EnforceRange] + octet iceCandidatePoolSize = 0; +}; + +enum RTCIceCredentialType { + "password", + "token" +}; + +dictionary RTCIceServer { + required (DOMString or sequence) urls; + DOMString username; + DOMString credential; + RTCIceCredentialType credentialType = "password"; +}; + +enum RTCIceTransportPolicy { + "relay", + "all" +}; + +enum RTCBundlePolicy { + "balanced", + "max-compat", + "max-bundle" +}; + +enum RTCRtcpMuxPolicy { + // At risk due to lack of implementers' interest. + "negotiate", + "require" +}; + +dictionary RTCOfferAnswerOptions { + boolean voiceActivityDetection = true; +}; + +dictionary RTCOfferOptions : RTCOfferAnswerOptions { + boolean iceRestart = false; + boolean offerToReceiveAudio; + boolean offerToReceiveVideo; +}; + +dictionary RTCAnswerOptions : RTCOfferAnswerOptions { +}; + +[Constructor(optional RTCConfiguration configuration)] +interface RTCPeerConnection : EventTarget { + Promise createOffer(optional RTCOfferOptions options); + Promise createAnswer(optional RTCAnswerOptions options); + Promise setLocalDescription(RTCSessionDescriptionInit description); + readonly attribute RTCSessionDescription? localDescription; + readonly attribute RTCSessionDescription? currentLocalDescription; + readonly attribute RTCSessionDescription? pendingLocalDescription; + Promise setRemoteDescription(RTCSessionDescriptionInit description); + readonly attribute RTCSessionDescription? remoteDescription; + readonly attribute RTCSessionDescription? currentRemoteDescription; + readonly attribute RTCSessionDescription? pendingRemoteDescription; + Promise addIceCandidate((RTCIceCandidateInit or RTCIceCandidate) candidate); + readonly attribute RTCSignalingState signalingState; + readonly attribute RTCIceGatheringState iceGatheringState; + readonly attribute RTCIceConnectionState iceConnectionState; + readonly attribute RTCPeerConnectionState connectionState; + readonly attribute boolean? canTrickleIceCandidates; + static readonly attribute FrozenArray defaultIceServers; + RTCConfiguration getConfiguration(); + void setConfiguration(RTCConfiguration configuration); + void close(); + attribute EventHandler onnegotiationneeded; + attribute EventHandler onicecandidate; + attribute EventHandler onicecandidateerror; + attribute EventHandler onsignalingstatechange; + attribute EventHandler oniceconnectionstatechange; + attribute EventHandler onicegatheringstatechange; + attribute EventHandler onconnectionstatechange; + attribute EventHandler onfingerprintfailure; +}; + +partial interface RTCPeerConnection { + Promise createOffer(RTCSessionDescriptionCallback successCallback, + RTCPeerConnectionErrorCallback failureCallback, + optional RTCOfferOptions options); + Promise setLocalDescription(RTCSessionDescriptionInit description, + VoidFunction successCallback, + RTCPeerConnectionErrorCallback failureCallback); + Promise createAnswer(RTCSessionDescriptionCallback successCallback, + RTCPeerConnectionErrorCallback failureCallback); + Promise setRemoteDescription(RTCSessionDescriptionInit description, + VoidFunction successCallback, + RTCPeerConnectionErrorCallback failureCallback); + Promise addIceCandidate((RTCIceCandidateInit or RTCIceCandidate) candidate, + VoidFunction successCallback, + RTCPeerConnectionErrorCallback failureCallback); +}; + +enum RTCSignalingState { + "stable", + "have-local-offer", + "have-remote-offer", + "have-local-pranswer", + "have-remote-pranswer" +}; + +enum RTCIceGatheringState { + "new", + "gathering", + "complete" +}; + +enum RTCPeerConnectionState { + "new", + "connecting", + "connected", + "disconnected", + "failed", + "closed" +}; + +enum RTCIceConnectionState { + "new", + "checking", + "connected", + "completed", + "failed", + "disconnected", + "closed" +}; + +callback RTCPeerConnectionErrorCallback = void (DOMException error); + +callback RTCSessionDescriptionCallback = void (RTCSessionDescriptionInit description); + +callback RTCStatsCallback = void (RTCStatsReport report); + +enum RTCSdpType { + "offer", + "pranswer", + "answer", + "rollback" +}; + +[Constructor(RTCSessionDescriptionInit descriptionInitDict)] +interface RTCSessionDescription { + readonly attribute RTCSdpType type; + readonly attribute DOMString sdp; + serializer = {attribute}; +}; + +dictionary RTCSessionDescriptionInit { + required RTCSdpType type; + DOMString sdp = ""; +}; + +[Constructor(RTCIceCandidateInit candidateInitDict)] +interface RTCIceCandidate { + readonly attribute DOMString candidate; + readonly attribute DOMString? sdpMid; + readonly attribute unsigned short? sdpMLineIndex; + readonly attribute DOMString? foundation; + readonly attribute unsigned long? priority; + readonly attribute DOMString? ip; + readonly attribute RTCIceProtocol? protocol; + readonly attribute unsigned short? port; + readonly attribute RTCIceCandidateType? type; + readonly attribute RTCIceTcpCandidateType? tcpType; + readonly attribute DOMString? relatedAddress; + readonly attribute unsigned short? relatedPort; + readonly attribute DOMString? ufrag; + serializer = {candidate, sdpMid, sdpMLineIndex, ufrag}; +}; + +dictionary RTCIceCandidateInit { + DOMString candidate = ""; + DOMString? sdpMid = null; + unsigned short? sdpMLineIndex = null; + DOMString ufrag; +}; + +enum RTCIceProtocol { + "udp", + "tcp" +}; + +enum RTCIceTcpCandidateType { + "active", + "passive", + "so" +}; + +enum RTCIceCandidateType { + "host", + "srflx", + "prflx", + "relay" +}; + +[Constructor(DOMString type, optional RTCPeerConnectionIceEventInit eventInitDict)] +interface RTCPeerConnectionIceEvent : Event { + readonly attribute RTCIceCandidate? candidate; + readonly attribute DOMString? url; +}; + +dictionary RTCPeerConnectionIceEventInit : EventInit { + RTCIceCandidate? candidate; + DOMString? url; +}; + +[Constructor(DOMString type, RTCPeerConnectionIceErrorEventInit eventInitDict)] +interface RTCPeerConnectionIceErrorEvent : Event { + readonly attribute DOMString hostCandidate; + readonly attribute DOMString url; + readonly attribute unsigned short errorCode; + readonly attribute USVString errorText; +}; + +dictionary RTCPeerConnectionIceErrorEventInit : EventInit { + DOMString hostCandidate; + DOMString url; + required unsigned short errorCode; + USVString statusText; +}; + +enum RTCPriorityType { + "very-low", + "low", + "medium", + "high" +}; + +partial interface RTCPeerConnection { + static Promise generateCertificate(AlgorithmIdentifier keygenAlgorithm); +}; + +dictionary RTCCertificateExpiration { + [EnforceRange] + DOMTimeStamp expires; +}; + +interface RTCCertificate { + readonly attribute DOMTimeStamp expires; + readonly attribute FrozenArray fingerprints; + AlgorithmIdentifier getAlgorithm(); +}; + +partial interface RTCPeerConnection { + sequence getSenders(); + sequence getReceivers(); + sequence getTransceivers(); + RTCRtpSender addTrack(MediaStreamTrack track, + MediaStream... streams); + void removeTrack(RTCRtpSender sender); + RTCRtpTransceiver addTransceiver((MediaStreamTrack or DOMString) trackOrKind, + optional RTCRtpTransceiverInit init); + attribute EventHandler ontrack; +}; + +dictionary RTCRtpTransceiverInit { + RTCRtpTransceiverDirection direction = "sendrecv"; + sequence streams; + sequence sendEncodings; +}; + +enum RTCRtpTransceiverDirection { + "sendrecv", + "sendonly", + "recvonly", + "inactive" +}; + +interface RTCRtpSender { + readonly attribute MediaStreamTrack? track; + readonly attribute RTCDtlsTransport? transport; + readonly attribute RTCDtlsTransport? rtcpTransport; + static RTCRtpCapabilities getCapabilities(DOMString kind); + Promise setParameters(optional RTCRtpParameters parameters); + RTCRtpParameters getParameters(); + Promise replaceTrack(MediaStreamTrack withTrack); +}; + +dictionary RTCRtpParameters { + DOMString transactionId; + sequence encodings; + sequence headerExtensions; + RTCRtcpParameters rtcp; + sequence codecs; + RTCDegradationPreference degradationPreference = "balanced"; +}; + +dictionary RTCRtpEncodingParameters { + unsigned long ssrc; + RTCRtpRtxParameters rtx; + RTCRtpFecParameters fec; + RTCDtxStatus dtx; + boolean active; + RTCPriorityType priority; + unsigned long maxBitrate; + unsigned long maxFramerate; + DOMString rid; + double scaleResolutionDownBy = 1; +}; + +enum RTCDtxStatus { + "disabled", + "enabled" +}; + +enum RTCDegradationPreference { + "maintain-framerate", + "maintain-resolution", + "balanced" +}; + +dictionary RTCRtpRtxParameters { + unsigned long ssrc; +}; + +dictionary RTCRtpFecParameters { + unsigned long ssrc; +}; + +dictionary RTCRtcpParameters { + DOMString cname; + boolean reducedSize; +}; + +dictionary RTCRtpHeaderExtensionParameters { + DOMString uri; + unsigned short id; + boolean encrypted; +}; + +dictionary RTCRtpCodecParameters { + unsigned short payloadType; + DOMString mimeType; + unsigned long clockRate; + unsigned short channels = 1; + DOMString sdpFmtpLine; +}; + +dictionary RTCRtpCapabilities { + sequence codecs; + sequence headerExtensions; +}; + +dictionary RTCRtpCodecCapability { + DOMString mimeType; + unsigned long clockRate; + unsigned short channels = 1; + DOMString sdpFmtpLine; +}; + +dictionary RTCRtpHeaderExtensionCapability { + DOMString uri; +}; + +interface RTCRtpReceiver { + readonly attribute MediaStreamTrack track; + readonly attribute RTCDtlsTransport? transport; + readonly attribute RTCDtlsTransport? rtcpTransport; + static RTCRtpCapabilities getCapabilities(DOMString kind); + RTCRtpParameters getParameters(); + sequence getContributingSources(); +}; + +interface RTCRtpContributingSource { + readonly attribute DOMHighResTimeStamp timestamp; + readonly attribute unsigned long source; + readonly attribute byte? audioLevel; + readonly attribute boolean? voiceActivityFlag; +}; + +interface RTCRtpTransceiver { + readonly attribute DOMString? mid; + [SameObject] + readonly attribute RTCRtpSender sender; + [SameObject] + readonly attribute RTCRtpReceiver receiver; + readonly attribute boolean stopped; + readonly attribute RTCRtpTransceiverDirection direction; + readonly attribute RTCRtpTransceiverDirection? currentDirection; + void setDirection(RTCRtpTransceiverDirection direction); + void stop(); + void setCodecPreferences(sequence codecs); +}; + +interface RTCDtlsTransport { + readonly attribute RTCIceTransport transport; + readonly attribute RTCDtlsTransportState state; + sequence getRemoteCertificates(); + attribute EventHandler onstatechange; +}; + +enum RTCDtlsTransportState { + "new", + "connecting", + "connected", + "closed", + "failed" +}; + +dictionary RTCDtlsFingerprint { + DOMString algorithm; + DOMString value; +}; + +interface RTCIceTransport { + readonly attribute RTCIceRole role; + readonly attribute RTCIceComponent component; + readonly attribute RTCIceTransportState state; + readonly attribute RTCIceGathererState gatheringState; + sequence getLocalCandidates(); + sequence getRemoteCandidates(); + RTCIceCandidatePair? getSelectedCandidatePair(); + RTCIceParameters? getLocalParameters(); + RTCIceParameters? getRemoteParameters(); + attribute EventHandler onstatechange; + attribute EventHandler ongatheringstatechange; + attribute EventHandler onselectedcandidatepairchange; +}; + +dictionary RTCIceParameters { + DOMString usernameFragment; + DOMString password; +}; + +dictionary RTCIceCandidatePair { + RTCIceCandidate local; + RTCIceCandidate remote; +}; + +enum RTCIceGathererState { + "new", + "gathering", + "complete" +}; + +enum RTCIceTransportState { + "new", + "checking", + "connected", + "completed", + "failed", + "disconnected", + "closed" +}; + +enum RTCIceRole { + "controlling", + "controlled" +}; + +enum RTCIceComponent { + "rtp", + "rtcp" +}; + +[Constructor(DOMString type, RTCTrackEventInit eventInitDict)] +interface RTCTrackEvent : Event { + readonly attribute RTCRtpReceiver receiver; + readonly attribute MediaStreamTrack track; + readonly attribute FrozenArray streams; + readonly attribute RTCRtpTransceiver transceiver; +}; + +dictionary RTCTrackEventInit : EventInit { + required RTCRtpReceiver receiver; + required MediaStreamTrack track; + sequence streams = []; + required RTCRtpTransceiver transceiver; +}; + +partial interface RTCPeerConnection { + readonly attribute RTCSctpTransport? sctp; + RTCDataChannel createDataChannel([TreatNullAs=EmptyString] USVString label, + optional RTCDataChannelInit dataChannelDict); + attribute EventHandler ondatachannel; +}; + +interface RTCSctpTransport { + readonly attribute RTCDtlsTransport transport; + readonly attribute unsigned long maxMessageSize; +}; + +interface RTCDataChannel : EventTarget { + readonly attribute USVString label; + readonly attribute boolean ordered; + readonly attribute unsigned short? maxPacketLifeTime; + readonly attribute unsigned short? maxRetransmits; + readonly attribute USVString protocol; + readonly attribute boolean negotiated; + readonly attribute unsigned short? id; + readonly attribute RTCPriorityType priority; + readonly attribute RTCDataChannelState readyState; + readonly attribute unsigned long bufferedAmount; + attribute unsigned long bufferedAmountLowThreshold; + attribute EventHandler onopen; + attribute EventHandler onbufferedamountlow; + attribute EventHandler onerror; + attribute EventHandler onclose; + void close(); + attribute EventHandler onmessage; + attribute DOMString binaryType; + void send(USVString data); + void send(Blob data); + void send(ArrayBuffer data); + void send(ArrayBufferView data); +}; + +dictionary RTCDataChannelInit { + boolean ordered = true; + unsigned short maxPacketLifeTime; + unsigned short maxRetransmits; + USVString protocol = ""; + boolean negotiated = false; + [EnforceRange] + unsigned short id; + RTCPriorityType priority = "low"; +}; + +enum RTCDataChannelState { + "connecting", + "open", + "closing", + "closed" +}; + +[Constructor(DOMString type, RTCDataChannelEventInit eventInitDict)] +interface RTCDataChannelEvent : Event { + readonly attribute RTCDataChannel channel; +}; + +dictionary RTCDataChannelEventInit : EventInit { + required RTCDataChannel channel; +}; + +partial interface RTCRtpSender { + readonly attribute RTCDTMFSender? dtmf; +}; + +interface RTCDTMFSender : EventTarget { + void insertDTMF(DOMString tones, + optional unsigned long duration = 100, + optional unsigned long interToneGap = 70); + attribute EventHandler ontonechange; + readonly attribute DOMString toneBuffer; +}; + +[Constructor(DOMString type, RTCDTMFToneChangeEventInit eventInitDict)] +interface RTCDTMFToneChangeEvent : Event { + readonly attribute DOMString tone; +}; + +dictionary RTCDTMFToneChangeEventInit : EventInit { + required DOMString tone; +}; + +partial interface RTCPeerConnection { + Promise getStats(optional MediaStreamTrack? selector = null); +}; + +interface RTCStatsReport { + readonly maplike; +}; + +dictionary RTCStats { + DOMHighResTimeStamp timestamp; + RTCStatsType type; + DOMString id; +}; + +enum RTCStatsType { +}; + +[Global, + Exposed=RTCIdentityProviderGlobalScope] +interface RTCIdentityProviderGlobalScope : WorkerGlobalScope { + readonly attribute RTCIdentityProviderRegistrar rtcIdentityProvider; +}; + +[Exposed=RTCIdentityProviderGlobalScope] +interface RTCIdentityProviderRegistrar { + void register(RTCIdentityProvider idp); +}; + +dictionary RTCIdentityProvider { + required GenerateAssertionCallback generateAssertion; + required ValidateAssertionCallback validateAssertion; +}; + +callback GenerateAssertionCallback = Promise (DOMString contents, + DOMString origin, + RTCIdentityProviderOptions options); + +callback ValidateAssertionCallback = Promise (DOMString assertion, + DOMString origin); + +dictionary RTCIdentityAssertionResult { + required RTCIdentityProviderDetails idp; + required DOMString assertion; +}; + +dictionary RTCIdentityProviderDetails { + required DOMString domain; + DOMString protocol = "default"; +}; + +dictionary RTCIdentityValidationResult { + required DOMString identity; + required DOMString contents; +}; + +partial interface RTCPeerConnection { + void setIdentityProvider(DOMString provider, + optional RTCIdentityProviderOptions options); + Promise getIdentityAssertion(); + readonly attribute Promise peerIdentity; + readonly attribute DOMString? idpLoginUrl; + readonly attribute DOMString? idpErrorInfo; +}; + +dictionary RTCIdentityProviderOptions { + DOMString protocol = "default"; + DOMString usernameHint; + DOMString peerIdentity; +}; + +[Constructor(DOMString idp, DOMString name)] +interface RTCIdentityAssertion { + attribute DOMString idp; + attribute DOMString name; +}; + +partial dictionary MediaStreamConstraints { + DOMString peerIdentity; +}; + +partial interface MediaStreamTrack { + readonly attribute boolean isolated; + attribute EventHandler onisolationchange; +}; + +[Exposed=Window, + Constructor(DOMString type, RTCErrorEventInit eventInitDict)] +interface RTCErrorEvent : Event { + readonly attribute RTCError? error; +}; + +dictionary RTCErrorEventInit : EventInit { + RTCError? error = null; +}; diff --git a/tests/wpt/web-platform-tests/js/builtins/Promise-subclassing.html b/tests/wpt/web-platform-tests/js/builtins/Promise-subclassing.html index 7264f4661aa..2349c07b059 100644 --- a/tests/wpt/web-platform-tests/js/builtins/Promise-subclassing.html +++ b/tests/wpt/web-platform-tests/js/builtins/Promise-subclassing.html @@ -143,7 +143,7 @@ promise_test(function testPromiseRace() { "Next 3"]); assert_true(p instanceof LoggingPromise); return p.then(function(arg) { - assert_true(arg == 1 || arg == 2); + assert_in_array(arg, [1, 2]); }); }, "Promise.race behavior"); @@ -159,7 +159,7 @@ promise_test(function testPromiseRaceNoSpecies() { "Next 3"]); assert_true(p instanceof SpeciesLessPromise); return p.then(function(arg) { - assert_true(arg == 1 || arg == 2); + assert_in_array(arg, [1, 2]); }); }, "Promise.race without species behavior"); diff --git a/tests/wpt/web-platform-tests/keyboard-lock/idlharness.https.html b/tests/wpt/web-platform-tests/keyboard-lock/idlharness.https.html new file mode 100644 index 00000000000..6fabb411743 --- /dev/null +++ b/tests/wpt/web-platform-tests/keyboard-lock/idlharness.https.html @@ -0,0 +1,41 @@ + + + +Keyboard Lock IDL tests + + + + + + + + + + + +
        + + diff --git a/tests/wpt/web-platform-tests/keyboard-lock/navigator-cancelKeyboardLock.https.html b/tests/wpt/web-platform-tests/keyboard-lock/navigator-cancelKeyboardLock.https.html new file mode 100644 index 00000000000..10fd50d3a79 --- /dev/null +++ b/tests/wpt/web-platform-tests/keyboard-lock/navigator-cancelKeyboardLock.https.html @@ -0,0 +1,12 @@ + + + + diff --git a/tests/wpt/web-platform-tests/keyboard-lock/navigator-requestKeyboardLock-two-parallel-requests.https.html b/tests/wpt/web-platform-tests/keyboard-lock/navigator-requestKeyboardLock-two-parallel-requests.https.html new file mode 100644 index 00000000000..8e84d14d465 --- /dev/null +++ b/tests/wpt/web-platform-tests/keyboard-lock/navigator-requestKeyboardLock-two-parallel-requests.https.html @@ -0,0 +1,15 @@ + + + + diff --git a/tests/wpt/web-platform-tests/keyboard-lock/navigator-requestKeyboardLock-two-sequential-requests.https.html b/tests/wpt/web-platform-tests/keyboard-lock/navigator-requestKeyboardLock-two-sequential-requests.https.html new file mode 100644 index 00000000000..30f49054495 --- /dev/null +++ b/tests/wpt/web-platform-tests/keyboard-lock/navigator-requestKeyboardLock-two-sequential-requests.https.html @@ -0,0 +1,14 @@ + + + + diff --git a/tests/wpt/web-platform-tests/keyboard-lock/navigator-requestKeyboardLock.https.html b/tests/wpt/web-platform-tests/keyboard-lock/navigator-requestKeyboardLock.https.html new file mode 100644 index 00000000000..e6e0121e75e --- /dev/null +++ b/tests/wpt/web-platform-tests/keyboard-lock/navigator-requestKeyboardLock.https.html @@ -0,0 +1,13 @@ + + + + diff --git a/tests/wpt/web-platform-tests/lint b/tests/wpt/web-platform-tests/lint index 28434bab324..388db4f7fd5 100755 --- a/tests/wpt/web-platform-tests/lint +++ b/tests/wpt/web-platform-tests/lint @@ -4,8 +4,7 @@ import sys try: from tools.lint import lint except ImportError: - print("tools.lint not found. Did you forget to run " - '"git submodule update --init --recursive"?') + print("tools.lint not found.") sys.exit(2) args = lint.parse_args() diff --git a/tests/wpt/web-platform-tests/lint.whitelist b/tests/wpt/web-platform-tests/lint.whitelist index 1e78fa7c205..a5b620a39bd 100644 --- a/tests/wpt/web-platform-tests/lint.whitelist +++ b/tests/wpt/web-platform-tests/lint.whitelist @@ -73,6 +73,7 @@ TRAILING WHITESPACE, INDENT TABS, CR AT EOL: *.swf TRAILING WHITESPACE, INDENT TABS, CR AT EOL: *.ani TRAILING WHITESPACE, INDENT TABS, CR AT EOL: *.cur TRAILING WHITESPACE, INDENT TABS, CR AT EOL: *.ico +TRAILING WHITESPACE, INDENT TABS, CR AT EOL: *.wasm ## Documentation ## @@ -87,6 +88,7 @@ W3C-TEST.ORG:tools/* PRINT STATEMENT:tools/* W3C-TEST.ORG:*/tools/* PRINT STATEMENT:*/tools/* +PRINT STATEMENT:wptrun.py ### Test exclusions ## @@ -150,6 +152,7 @@ SET TIMEOUT: cookies/resources/testharness-helpers.js SET TIMEOUT: common/reftest-wait.js SET TIMEOUT: conformance-checkers/* SET TIMEOUT: content-security-policy/* +SET TIMEOUT: css-font-display/font-display.html SET TIMEOUT: encrypted-media/Google/migrated_to_root_disabled/encrypted-media-utils.js SET TIMEOUT: encrypted-media/polyfill/chrome-polyfill.js SET TIMEOUT: encrypted-media/polyfill/clearkey-polyfill.js @@ -172,6 +175,7 @@ SET TIMEOUT: old-tests/submission/Opera/script_scheduling/* SET TIMEOUT: old-tests/webdriver/timeouts/res/implicit_waits_tests.html SET TIMEOUT: page-visibility/resources/pagevistestharness.js SET TIMEOUT: payment-request/allowpaymentrequest/setting-allowpaymentrequest-timing.https.sub.html +SET TIMEOUT: payment-request/payment-request-response-id.html SET TIMEOUT: pointerevents/pointerevent_support.js SET TIMEOUT: preload/single-download-preload.html SET TIMEOUT: resource-timing/resource-timing.js @@ -187,7 +191,9 @@ SET TIMEOUT: service-workers/service-worker/update-recovery.https.html SET TIMEOUT: service-workers/service-worker/resources/extendable-event-async-waituntil.js SET TIMEOUT: service-workers/service-worker/resources/fetch-event-async-respond-with-worker.js SET TIMEOUT: service-workers/service-worker/resources/fetch-event-test-worker.js +SET TIMEOUT: service-workers/service-worker/resources/opaque-response-preloaded-iframe.html SET TIMEOUT: service-workers/service-worker/resources/performance-timeline-worker.js +SET TIMEOUT: service-workers/service-worker/resources/register-foreign-fetch-errors-worker.js SET TIMEOUT: shadow-dom/Document-prototype-currentScript.html SET TIMEOUT: shadow-dom/scroll-to-the-fragment-in-shadow-tree.html SET TIMEOUT: shadow-dom/slotchange-event.html @@ -366,7 +372,6 @@ INDENT TABS: css/css-regions-1/* INDENT TABS: css/css-round-display-1/* INDENT TABS: css/css-shapes-1/* INDENT TABS: css/css-speech-1/* -INDENT TABS: css/css-tables-3/* INDENT TABS: css/css-text-3/* INDENT TABS: css/css-text-decor-3/* INDENT TABS: css/css-transforms-1/* @@ -385,7 +390,7 @@ INDENT TABS: css/WOFF2/* ## Things we're stopping from getting worse -CONSOLE: css/css-flexbox-1/support/check-layout-th.js +CONSOLE: css/*/support/check-layout-th.js CONSOLE: css/css-regions-1/elements/support/Three.js CONSOLE: css/css-regions-1/interactivity/selection/support/js/selection-test-helper.js CONSOLE: css/css-regions-1/stacking-context/javascript-stacking-context-002.html @@ -767,3 +772,11 @@ CSS-COLLIDING-SUPPORT-NAME: css/CSS2/css1/support/pattern-gg-gr.png CSS-COLLIDING-SUPPORT-NAME: css/css-display-3/support/util.js CSS-COLLIDING-SUPPORT-NAME: css/CSS2/normal-flow/support/replaced-min-max-1.png CSS-COLLIDING-SUPPORT-NAME: css/vendor-imports/mozilla/mozilla-central-reftests/ui3/support/replaced-min-max-1.png + +# TODO https://github.com/w3c/web-platform-tests/issues/5770 +MISSING-LINK: css/geometry-1/*.worker.js + +WEBIDL2.JS:.gitmodules + +# Manual test that uses console.logs for feedback +CONSOLE:payment-request/payment-request-response-id.html diff --git a/tests/wpt/web-platform-tests/magnetometer/Magnetometer.https.html b/tests/wpt/web-platform-tests/magnetometer/Magnetometer.https.html new file mode 100644 index 00000000000..bad18f1dea8 --- /dev/null +++ b/tests/wpt/web-platform-tests/magnetometer/Magnetometer.https.html @@ -0,0 +1,16 @@ + + +Magnetometer Test + + + + + +
        + + diff --git a/tests/wpt/web-platform-tests/magnetometer/Magnetometer_insecure_context.html b/tests/wpt/web-platform-tests/magnetometer/Magnetometer_insecure_context.html new file mode 100644 index 00000000000..452bfc1c6ee --- /dev/null +++ b/tests/wpt/web-platform-tests/magnetometer/Magnetometer_insecure_context.html @@ -0,0 +1,20 @@ + + +Magnetometer Test: insecure context + + + + + +
        +

        Precondition

        +
          +
        1. + Run test in an insecure context, e.g. http://example.com/. +
        2. +
        + diff --git a/tests/wpt/web-platform-tests/magnetometer/Magnetometer_onerror-manual.https.html b/tests/wpt/web-platform-tests/magnetometer/Magnetometer_onerror-manual.https.html new file mode 100644 index 00000000000..3cd62db8a22 --- /dev/null +++ b/tests/wpt/web-platform-tests/magnetometer/Magnetometer_onerror-manual.https.html @@ -0,0 +1,20 @@ + + +Magnetometer Test: onerror + + + + + +
        +

        Precondition

        +
          +
        1. + Disable the Magnetometer Sensor or run test on a device without Magnetometer Sensor. +
        2. +
        + diff --git a/tests/wpt/web-platform-tests/magnetometer/idlharness.https.html b/tests/wpt/web-platform-tests/magnetometer/idlharness.https.html index 00fdafee664..55a0851e1ec 100644 --- a/tests/wpt/web-platform-tests/magnetometer/idlharness.https.html +++ b/tests/wpt/web-platform-tests/magnetometer/idlharness.https.html @@ -2,7 +2,8 @@ Magnetometer Sensor IDL tests - + + @@ -18,24 +19,24 @@ interface Event { }; -interface EventTarget { -}; - -interface EventHandler { -}; - interface Error { }; dictionary EventInit { }; + +interface EventTarget { +}; + +interface EventHandler { +};
         [SecureContext]
         interface Sensor : EventTarget {
        -  readonly attribute SensorState state;
        -  readonly attribute SensorReading? reading;
        +  readonly attribute boolean activated;
        +  readonly attribute DOMHighResTimeStamp? timestamp;
           void start();
           void stop();
           attribute EventHandler onchange;
        @@ -47,18 +48,6 @@ dictionary SensorOptions {
           double? frequency;
         };
         
        -enum SensorState {
        -  "idle",
        -  "activating",
        -  "activated",
        -  "errored"
        -};
        -
        -[SecureContext]
        -interface SensorReading {
        -  readonly attribute DOMHighResTimeStamp timeStamp;
        -};
        -
         [SecureContext, Constructor(DOMString type, SensorErrorEventInit errorEventInitDict)]
         interface SensorErrorEvent : Event {
           readonly attribute Error error;
        @@ -67,42 +56,31 @@ interface SensorErrorEvent : Event {
         dictionary SensorErrorEventInit : EventInit {
           required Error error;
         };
        -
         
         [Constructor(optional SensorOptions sensorOptions)]
         interface Magnetometer : Sensor {
        -  readonly attribute MagnetometerReading? reading;
        -};
        -
        -[Constructor(MagnetometerReadingInit magnetometerReadingInit)]
        -interface MagnetometerReading : SensorReading {
        -    readonly attribute double x;
        -    readonly attribute double y;
        -    readonly attribute double z;
        -};
        -
        -dictionary MagnetometerReadingInit {
        -  double x = 0;
        -  double y = 0;
        -  double z = 0;
        +  readonly attribute unrestricted double? x;
        +  readonly attribute unrestricted double? y;
        +  readonly attribute unrestricted double? z;
         };
         
        diff --git a/tests/wpt/web-platform-tests/magnetometer/support-iframe.html b/tests/wpt/web-platform-tests/magnetometer/support-iframe.html new file mode 100644 index 00000000000..5328f6273f0 --- /dev/null +++ b/tests/wpt/web-platform-tests/magnetometer/support-iframe.html @@ -0,0 +1,10 @@ + + + diff --git a/tests/wpt/web-platform-tests/media-capabilities/decodingInfo.html b/tests/wpt/web-platform-tests/media-capabilities/decodingInfo.html index a0e0d342682..85acfe7f613 100644 --- a/tests/wpt/web-platform-tests/media-capabilities/decodingInfo.html +++ b/tests/wpt/web-platform-tests/media-capabilities/decodingInfo.html @@ -35,6 +35,131 @@ promise_test(t => { })); }, "Test that decodingInfo rejects if the MediaConfiguration does not have a type"); +promise_test(t => { + return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + type: 'file', + })); +}, "Test that decodingInfo rejects if the configuration doesn't have an audio or video field"); + +promise_test(t => { + return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + type: 'file', + video: { + contentType: 'video/webm; codecs="vp9"', + width: 800, + height: 600, + bitrate: 3000, + framerate: -1, + }, + })); +}, "Test that decodingInfo rejects if the video configuration has a negative framerate"); + +promise_test(t => { + return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + type: 'file', + video: { + contentType: 'video/webm; codecs="vp9"', + width: 800, + height: 600, + bitrate: 3000, + framerate: 0, + }, + })); +}, "Test that decodingInfo rejects if the video configuration has a framerate set to 0"); + +promise_test(t => { + return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + type: 'file', + video: { + contentType: 'video/webm; codecs="vp9"', + width: 800, + height: 600, + bitrate: 3000, + framerate: Infinity, + }, + })); +}, "Test that decodingInfo rejects if the video configuration has a framerate set to Infinity"); + +promise_test(t => { + return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + type: 'file', + video: { + contentType: 'fgeoa', + width: 800, + height: 600, + bitrate: 3000, + framerate: 24, + }, + })); +}, "Test that decodingInfo rejects if the video configuration contentType doesn't parse"); + +promise_test(t => { + return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + type: 'file', + video: { + contentType: 'audio/fgeoa', + width: 800, + height: 600, + bitrate: 3000, + framerate: 24, + }, + })); +}, "Test that decodingInfo rejects if the video configuration contentType isn't of type video"); + +promise_test(t => { + return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + type: 'file', + video: { + contentType: 'video/webm; codecs="vp9"; foo="bar"', + width: 800, + height: 600, + bitrate: 3000, + framerate: 24, + }, + })); +}, "Test that decodingInfo rejects if the video configuration contentType has more than one parameter"); + +promise_test(t => { + return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + type: 'file', + video: { + contentType: 'video/webm; foo="bar"', + width: 800, + height: 600, + bitrate: 3000, + framerate: 24, + }, + })); +}, "Test that decodingInfo rejects if the video configuration contentType has one parameter that isn't codecs"); + +promise_test(t => { + return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + type: 'file', + audio: { contentType: 'fgeoa' }, + })); +}, "Test that decodingInfo rejects if the audio configuration contenType doesn't parse"); + +promise_test(t => { + return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + type: 'file', + audio: { contentType: 'video/fgeoa' }, + })); +}, "Test that decodingInfo rejects if the audio configuration contentType isn't of type audio"); + +promise_test(t => { + return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + type: 'file', + audio: { contentType: 'audio/webm; codecs="opus"; foo="bar"' }, + })); +}, "Test that decodingInfo rejects if the audio configuration contentType has more than one parameters"); + +promise_test(t => { + return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + type: 'file', + audio: { contentType: 'audio/webm; foo="bar"' }, + })); +}, "Test that decodingInfo rejects if the audio configuration contentType has one parameter that isn't codecs"); + promise_test(t => { return navigator.mediaCapabilities.decodingInfo({ type: 'file', diff --git a/tests/wpt/web-platform-tests/media/CanvasTest.ttf b/tests/wpt/web-platform-tests/media/CanvasTest.ttf deleted file mode 100644 index 9023592ef5aa83a03dd6957398897a585062ca57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2528 zcmds3+iM(E9RAMC>}--IZHkSlbcJb}Hmx+fn~4|=c}SaNsWzb@-3F9mI_^#~3%fJR z?rbg~7_kpEQi_7Nf1zrjK~Q`sQnW2nkwV|M-@%oK-E?>x_(MpM29?acOqAH}eAZX8>i{v90{QD@UK8 z?l;0S4h7BS^-meAn|!xZ@)uj54c;RECHbzRm$TF>nv6e6K2fq3%b3Ch^~cB?u2r(v zkH7ad5c`2P>9SY#cXvOjFn>GsdB|P~`n~De%#NWyu}z}@xPEE<^GzId1b6hq`YrNJ zpl7(G&#mANPHPA{)^6*E!$^@bL|Q0mLqc}TB|Swb8%8pe2%7wX7*!uCHz~QWfyJ-r z7tPW^=Wn!Ro%h$|>{uSdXvUa|I&fOQrS7LPvS9~Z(v&zMA=;65&=C=`DhY|mZ&Kj!3HhbNxDPn<$e@rAG|9>`>_U%Yaa|m@d0+T+9$}A07}*9%}w^Ondom zl3bI=hUcy>--uAx7wLGEX&Kzn_%3s9JFtg_4YL!pi){|FXP{H;ZW!kJ85v$FZVvZc z=7R1t%y+FTKz4K3D>LVrE9j_0Kg^W>kV`b=3OX8csX3V|_H9EhakU|rxWPtGG$xDs zeRLLqoPhkgUkcxKN!R$Lr8Sp8i&%_ketg8+5v}5Y_$i__v?%)`I)-*-GNN_L7dTC! z$#2##gbi9?mv|+j6|{;sB3i|`_#mP+>{8kyItD{YMzl`3g%NltV+j=$Fb4-d3>-ub zhlow2(MK>aNlgJoLYZ6^7Cnmetngdg!aW6>yiIwPzj@l!;1b)kFc{MzW$@m3p1uag z87D`H8(I%iBJ=u;J%|+dLb#J*WgAu=<5fZ*DXp;5R9MY}C{;>IjO(NK5lxbD9RfzY z@=~QR=lI6K+#$nE_oaaWNmxCd;m?tPvxY zJ8xC9c9rx5g?W}XCSRSBcZdsV~Z&>YL1E97mjWcg0TE4dJ(nei;|UEZ=>^4@JlJ9c3=csI~@nRO6C WZTNf5{_GpcUH|0vRERIFfAlvXi@|mP diff --git a/tests/wpt/web-platform-tests/media/OWNERS b/tests/wpt/web-platform-tests/media/OWNERS index 1df5d1ae68f..48e9f02d628 100644 --- a/tests/wpt/web-platform-tests/media/OWNERS +++ b/tests/wpt/web-platform-tests/media/OWNERS @@ -1 +1,2 @@ @hillbrad +@gsnedders diff --git a/tests/wpt/web-platform-tests/mediacapture-image/idlharness.html b/tests/wpt/web-platform-tests/mediacapture-image/idlharness.html new file mode 100644 index 00000000000..146e0e85c8e --- /dev/null +++ b/tests/wpt/web-platform-tests/mediacapture-image/idlharness.html @@ -0,0 +1,185 @@ + + + + + Image Capture IDL test + + + + + + + + + + + + + +
        + + diff --git a/tests/wpt/web-platform-tests/mediacapture-streams/GUM-api.https.html b/tests/wpt/web-platform-tests/mediacapture-streams/GUM-api.https.html index 6e662dded73..176f458c2c2 100644 --- a/tests/wpt/web-platform-tests/mediacapture-streams/GUM-api.https.html +++ b/tests/wpt/web-platform-tests/mediacapture-streams/GUM-api.https.html @@ -16,8 +16,8 @@ diff --git a/tests/wpt/web-platform-tests/mediacapture-streams/GUM-deny.https.html b/tests/wpt/web-platform-tests/mediacapture-streams/GUM-deny.https.html index cce0e1c18d0..f61d6233383 100644 --- a/tests/wpt/web-platform-tests/mediacapture-streams/GUM-deny.https.html +++ b/tests/wpt/web-platform-tests/mediacapture-streams/GUM-deny.https.html @@ -2,37 +2,36 @@ getUserMedia() triggers error callback when auth is denied - - - + + + -

        When prompted, please deny access to -the video stream.

        -

        Description

        -

        This test checks that the error callback is triggered -when user denies access to the video stream.

        - -
        - - - - +

        When prompted, please deny access to + the video stream.

        +

        Description

        +

        This test checks that the error callback is triggered + when user denies access to the video stream.

        +
        + + + + diff --git a/tests/wpt/web-platform-tests/mediacapture-streams/MediaDevices-IDL-all.html b/tests/wpt/web-platform-tests/mediacapture-streams/MediaDevices-IDL-all.html new file mode 100644 index 00000000000..8c8fe2214f9 --- /dev/null +++ b/tests/wpt/web-platform-tests/mediacapture-streams/MediaDevices-IDL-all.html @@ -0,0 +1,45 @@ + + + + getUserMedia: Non-Interactive test for mediaDevices APIs + + + + + + +

        Description

        +

        This test checks for the presence of the + navigator.mediaDevices.getUserMedia method.

        +
        + + + + + + + diff --git a/tests/wpt/web-platform-tests/mediacapture-streams/MediaDevices-IDL-enumerateDevices.html b/tests/wpt/web-platform-tests/mediacapture-streams/MediaDevices-IDL-enumerateDevices.html new file mode 100644 index 00000000000..4dc1c608d22 --- /dev/null +++ b/tests/wpt/web-platform-tests/mediacapture-streams/MediaDevices-IDL-enumerateDevices.html @@ -0,0 +1,62 @@ + + + +enumerateDevices: test that enumerateDevices is present + + + + + + + +

        Description

        +

        This test checks for the presence of the +navigator.mediaDevices.enumerateDevices() method.

        +
        + + + + + + + diff --git a/tests/wpt/web-platform-tests/mixed-content/imageset.https.sub.html b/tests/wpt/web-platform-tests/mixed-content/imageset.https.sub.html new file mode 100644 index 00000000000..dd371566161 --- /dev/null +++ b/tests/wpt/web-platform-tests/mixed-content/imageset.https.sub.html @@ -0,0 +1,31 @@ + + + + Mixed-Content: imageset tests + + + + + + + + + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/navigation-timing/resources/webperftestharness.js b/tests/wpt/web-platform-tests/navigation-timing/resources/webperftestharness.js index 750946dde20..f9b56d98689 100644 --- a/tests/wpt/web-platform-tests/navigation-timing/resources/webperftestharness.js +++ b/tests/wpt/web-platform-tests/navigation-timing/resources/webperftestharness.js @@ -12,7 +12,6 @@ policies and contribution forms [3]. // Helper Functions for NavigationTiming W3C tests // -var performanceNamespace = window.performance; var timingAttributes = [ 'connectEnd', 'connectStart', @@ -36,32 +35,6 @@ var timingAttributes = [ 'unloadEventStart' ]; -var namespace_check = false; - -// -// All test() functions in the WebPerf test suite should use wp_test() instead. -// -// wp_test() validates the window.performance namespace exists prior to running tests and -// immediately shows a single failure if it does not. -// - -function wp_test(func, msg, properties) -{ - // only run the namespace check once - if (!namespace_check) - { - namespace_check = true; - - if (performanceNamespace === undefined || performanceNamespace == null) - { - // show a single error that window.performance is undefined - test(function() { assert_true(performanceNamespace !== undefined && performanceNamespace != null, "window.performance is defined and not null"); }, "window.performance is defined and not null.", {author:"W3C http://www.w3.org/",help:"http://www.w3.org/TR/navigation-timing/#sec-window.performance-attribute",assert:"The window.performance attribute provides a hosting area for performance related attributes. "}); - } - } - - test(func, msg, properties); -} - function test_namespace(child_name, skip_root) { if (skip_root === undefined) { @@ -129,16 +102,6 @@ function sleep_milliseconds(n) // Common helper functions // -function test_true(value, msg, properties) -{ - wp_test(function () { assert_true(value, msg); }, msg, properties); -} - -function test_equals(value, equals, msg, properties) -{ - wp_test(function () { assert_equals(value, equals, msg); }, msg, properties); -} - function test_greater_than(value, greater_than, msg, properties) { wp_test(function () { assert_true(value > greater_than, msg); }, msg, properties); diff --git a/tests/wpt/web-platform-tests/navigation-timing/test_document_open.html b/tests/wpt/web-platform-tests/navigation-timing/test_document_open.html index 07890952042..1986b3fb986 100644 --- a/tests/wpt/web-platform-tests/navigation-timing/test_document_open.html +++ b/tests/wpt/web-platform-tests/navigation-timing/test_document_open.html @@ -7,6 +7,7 @@ + + diff --git a/tests/wpt/web-platform-tests/navigation-timing/test_navigation_attributes_exist.html b/tests/wpt/web-platform-tests/navigation-timing/test_navigation_attributes_exist.html index 465409ea413..845523d1a2d 100644 --- a/tests/wpt/web-platform-tests/navigation-timing/test_navigation_attributes_exist.html +++ b/tests/wpt/web-platform-tests/navigation-timing/test_navigation_attributes_exist.html @@ -7,6 +7,7 @@ + diff --git a/tests/wpt/web-platform-tests/navigation-timing/test_navigation_redirectCount_none.html b/tests/wpt/web-platform-tests/navigation-timing/test_navigation_redirectCount_none.html index 2046b32cd64..eaaef4b514c 100644 --- a/tests/wpt/web-platform-tests/navigation-timing/test_navigation_redirectCount_none.html +++ b/tests/wpt/web-platform-tests/navigation-timing/test_navigation_redirectCount_none.html @@ -7,6 +7,7 @@ + diff --git a/tests/wpt/web-platform-tests/navigation-timing/test_navigation_type_backforward.html b/tests/wpt/web-platform-tests/navigation-timing/test_navigation_type_backforward.html index b201c3adee8..b5920953cbd 100644 --- a/tests/wpt/web-platform-tests/navigation-timing/test_navigation_type_backforward.html +++ b/tests/wpt/web-platform-tests/navigation-timing/test_navigation_type_backforward.html @@ -7,6 +7,7 @@ + + diff --git a/tests/wpt/web-platform-tests/navigation-timing/test_navigation_type_reload.html b/tests/wpt/web-platform-tests/navigation-timing/test_navigation_type_reload.html index 786d1ddca6c..d3331b81972 100644 --- a/tests/wpt/web-platform-tests/navigation-timing/test_navigation_type_reload.html +++ b/tests/wpt/web-platform-tests/navigation-timing/test_navigation_type_reload.html @@ -7,6 +7,7 @@ + + + diff --git a/tests/wpt/web-platform-tests/navigation-timing/test_performance_attributes_exist_in_object.html b/tests/wpt/web-platform-tests/navigation-timing/test_performance_attributes_exist_in_object.html index 0464758c62b..9035522aee9 100644 --- a/tests/wpt/web-platform-tests/navigation-timing/test_performance_attributes_exist_in_object.html +++ b/tests/wpt/web-platform-tests/navigation-timing/test_performance_attributes_exist_in_object.html @@ -7,6 +7,7 @@ + + diff --git a/tests/wpt/web-platform-tests/navigation-timing/test_timing_attributes_exist.html b/tests/wpt/web-platform-tests/navigation-timing/test_timing_attributes_exist.html index f3dea6838c4..5db07459b4e 100644 --- a/tests/wpt/web-platform-tests/navigation-timing/test_timing_attributes_exist.html +++ b/tests/wpt/web-platform-tests/navigation-timing/test_timing_attributes_exist.html @@ -7,6 +7,7 @@ + diff --git a/tests/wpt/web-platform-tests/navigation-timing/test_timing_attributes_order.html b/tests/wpt/web-platform-tests/navigation-timing/test_timing_attributes_order.html index e3a0758f17b..03c2619cb3e 100644 --- a/tests/wpt/web-platform-tests/navigation-timing/test_timing_attributes_order.html +++ b/tests/wpt/web-platform-tests/navigation-timing/test_timing_attributes_order.html @@ -7,6 +7,7 @@ + + + + + + diff --git a/tests/wpt/web-platform-tests/netinfo/netinfo-basics.html b/tests/wpt/web-platform-tests/netinfo/netinfo-basics.html new file mode 100644 index 00000000000..31ad9fce8b9 --- /dev/null +++ b/tests/wpt/web-platform-tests/netinfo/netinfo-basics.html @@ -0,0 +1,35 @@ + + +NetInfo basic functionality + + + + + diff --git a/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/iframe_sandbox_009.htm b/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/iframe_sandbox_009.htm deleted file mode 100644 index f232dcb7c9a..00000000000 --- a/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/iframe_sandbox_009.htm +++ /dev/null @@ -1,9 +0,0 @@ - - - - Page with showModalDialog() API - - - - - \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/sandbox_009-manual.htm b/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/sandbox_009-manual.htm deleted file mode 100644 index 5cb0d90309f..00000000000 --- a/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/sandbox_009-manual.htm +++ /dev/null @@ -1,37 +0,0 @@ - - - - HTML5 Sandbox: Block popup created via showModalDialog() inside iframe with sandbox attribute. - - - - - - - -
        Description: Block popup created via showModalDialog() inside iframe with sandbox attribute.
        - - - - - - - - - -
        Test ResultTest Assertion
        Manual -
        Steps:
        -
        1. Click button "Click here to call showModalDialog() API".
        -
        -
        Test passes if there is no red on the page and no new window opens. The user agent may offer the user the option of allowing a new window to open.
        -
        -
        -
        -
        iframe with sandbox="allow-scripts allow-same-origin allow-forms allow-top-navigation"
        - -
        - - - diff --git a/tests/wpt/web-platform-tests/orientation-sensor/OWNERS b/tests/wpt/web-platform-tests/orientation-sensor/OWNERS new file mode 100644 index 00000000000..cc7c3879319 --- /dev/null +++ b/tests/wpt/web-platform-tests/orientation-sensor/OWNERS @@ -0,0 +1,5 @@ +@zqzhang +@dontcallmedom +@tobie +@riju +@Honry diff --git a/tests/wpt/web-platform-tests/orientation-sensor/idlharness.https.html b/tests/wpt/web-platform-tests/orientation-sensor/idlharness.https.html new file mode 100644 index 00000000000..8f556ca3164 --- /dev/null +++ b/tests/wpt/web-platform-tests/orientation-sensor/idlharness.https.html @@ -0,0 +1,89 @@ + + +Orientation Sensor IDL tests + + + + + + + + +
        + +
        +interface Event {
        +};
        +
        +interface Error {
        +};
        +
        +dictionary EventInit {
        +};
        +
        +interface EventTarget {
        +};
        +
        +interface EventHandler {
        +};
        +
        + +
        +[SecureContext]
        +interface Sensor : EventTarget {
        +  readonly attribute boolean activated;
        +  readonly attribute DOMHighResTimeStamp? timestamp;
        +  void start();
        +  void stop();
        +  attribute EventHandler onchange;
        +  attribute EventHandler onactivate;
        +  attribute EventHandler onerror;
        +};
        +
        +dictionary SensorOptions {
        +  double? frequency;
        +};
        +
        +[SecureContext, Constructor(DOMString type, SensorErrorEventInit errorEventInitDict)]
        +interface SensorErrorEvent : Event {
        +  readonly attribute Error error;
        +};
        +
        +dictionary SensorErrorEventInit : EventInit {
        +  required Error error;
        +};
        +
        + +
        +typedef (Float32Array or Float64Array or DOMMatrix) RotationMatrixType;
        +interface OrientationSensor : Sensor {
        +  readonly attribute FrozenArray? quaternion;
        +  void populateMatrix(RotationMatrixType targetMatrix);
        +};
        +
        +[Constructor(optional SensorOptions sensorOptions)]
        +interface AbsoluteOrientationSensor : OrientationSensor {
        +};
        +
        + + diff --git a/tests/wpt/web-platform-tests/payment-request/OWNERS b/tests/wpt/web-platform-tests/payment-request/OWNERS index eabd49986cd..ce59356364a 100644 --- a/tests/wpt/web-platform-tests/payment-request/OWNERS +++ b/tests/wpt/web-platform-tests/payment-request/OWNERS @@ -1,2 +1,3 @@ -@halindrome +@edenchuang +@alphan102 @marcoscaceres diff --git a/tests/wpt/web-platform-tests/payment-request/payment-request-abort-method.https.html b/tests/wpt/web-platform-tests/payment-request/payment-request-abort-method.https.html new file mode 100644 index 00000000000..f59680013f5 --- /dev/null +++ b/tests/wpt/web-platform-tests/payment-request/payment-request-abort-method.https.html @@ -0,0 +1,65 @@ + + + +Test for PaymentRequest.abort() method + + + + diff --git a/tests/wpt/web-platform-tests/payment-request/payment-request-canmakepayment-method.https.http b/tests/wpt/web-platform-tests/payment-request/payment-request-canmakepayment-method.https.http new file mode 100644 index 00000000000..86fae2effb1 --- /dev/null +++ b/tests/wpt/web-platform-tests/payment-request/payment-request-canmakepayment-method.https.http @@ -0,0 +1,148 @@ + + + +Tests for PaymentRequest.canMakePayment() method + + + + diff --git a/tests/wpt/web-platform-tests/payment-request/payment-request-constructor-crash.https.html b/tests/wpt/web-platform-tests/payment-request/payment-request-constructor-crash.https.html new file mode 100644 index 00000000000..8ca0a4794dd --- /dev/null +++ b/tests/wpt/web-platform-tests/payment-request/payment-request-constructor-crash.https.html @@ -0,0 +1,269 @@ + + +Crash tests PaymentRequest Constructor + + + + diff --git a/tests/wpt/web-platform-tests/payment-request/payment-request-constructor.https.html b/tests/wpt/web-platform-tests/payment-request/payment-request-constructor.https.html new file mode 100644 index 00000000000..971622e8a32 --- /dev/null +++ b/tests/wpt/web-platform-tests/payment-request/payment-request-constructor.https.html @@ -0,0 +1,861 @@ + + + +Test for PaymentRequest Constructor + + + + diff --git a/tests/wpt/web-platform-tests/payment-request/payment-request-id.https.html b/tests/wpt/web-platform-tests/payment-request/payment-request-id.https.html new file mode 100644 index 00000000000..8e3c3446170 --- /dev/null +++ b/tests/wpt/web-platform-tests/payment-request/payment-request-id.https.html @@ -0,0 +1,18 @@ + + + +Test for PaymentRequest identifier usage + + + + diff --git a/tests/wpt/web-platform-tests/payment-request/payment-request-onshippingaddresschange-attribute.https.html b/tests/wpt/web-platform-tests/payment-request/payment-request-onshippingaddresschange-attribute.https.html new file mode 100644 index 00000000000..7d5530a35e7 --- /dev/null +++ b/tests/wpt/web-platform-tests/payment-request/payment-request-onshippingaddresschange-attribute.https.html @@ -0,0 +1,63 @@ + + + +Test for onshippingaddresschange attribute + + + + diff --git a/tests/wpt/web-platform-tests/payment-request/payment-request-onshippingoptionchange-attribute.https.html b/tests/wpt/web-platform-tests/payment-request/payment-request-onshippingoptionchange-attribute.https.html new file mode 100644 index 00000000000..05c3dbfaa30 --- /dev/null +++ b/tests/wpt/web-platform-tests/payment-request/payment-request-onshippingoptionchange-attribute.https.html @@ -0,0 +1,64 @@ + + + +Test for onshippingoptionchange attribute + + + + diff --git a/tests/wpt/web-platform-tests/payment-request/payment-request-response-id.html b/tests/wpt/web-platform-tests/payment-request/payment-request-response-id.html new file mode 100644 index 00000000000..a28f3b24c6f --- /dev/null +++ b/tests/wpt/web-platform-tests/payment-request/payment-request-response-id.html @@ -0,0 +1,140 @@ + + + + + + PaymentRequest identifier manual test + + +
        +

        PaymentRequest identifier manual test

        +

        Perform the following steps:

        +
          +
        • Press 'Buy'
        • +
        • In the payment dialog make sure a payment app is selected
        • +
        • In the payment dialog press 'Pay'
        • +
        • In the launched payment app perform steps to do the payment
        • +
        • The response will be processed and below should display 'my_payment_id'
        • +
        +

        No payment will be processed.

        +

        Price: USD $55.00

        +

        +
        +
        
        +  
        +
        +
        +
        diff --git a/tests/wpt/web-platform-tests/payment-request/payment-request-show-method.https.html b/tests/wpt/web-platform-tests/payment-request/payment-request-show-method.https.html
        new file mode 100644
        index 00000000000..1bdbba41fd7
        --- /dev/null
        +++ b/tests/wpt/web-platform-tests/payment-request/payment-request-show-method.https.html
        @@ -0,0 +1,40 @@
        +
        +
        +
        +Test for PaymentRequest.show() method
        +
        +
        +
        +
        diff --git a/tests/wpt/web-platform-tests/payment-request/payment-request-update-event-constructor.http.html b/tests/wpt/web-platform-tests/payment-request/payment-request-update-event-constructor.http.html
        new file mode 100644
        index 00000000000..685eed6469e
        --- /dev/null
        +++ b/tests/wpt/web-platform-tests/payment-request/payment-request-update-event-constructor.http.html
        @@ -0,0 +1,14 @@
        +
        +
        +
        +Test for PaymentRequestUpdateEvent Constructor
        +
        +
        +
        +
        diff --git a/tests/wpt/web-platform-tests/payment-request/payment-request-update-event-constructor.https.html b/tests/wpt/web-platform-tests/payment-request/payment-request-update-event-constructor.https.html
        new file mode 100644
        index 00000000000..bb83e5d6227
        --- /dev/null
        +++ b/tests/wpt/web-platform-tests/payment-request/payment-request-update-event-constructor.https.html
        @@ -0,0 +1,51 @@
        +
        +
        +
        +Test for PaymentRequestUpdateEvent Constructor
        +
        +
        +
        +
        diff --git a/tests/wpt/web-platform-tests/payment-request/payment-request-update-event-updatewith-method.https.html b/tests/wpt/web-platform-tests/payment-request/payment-request-update-event-updatewith-method.https.html
        new file mode 100644
        index 00000000000..98a418ce71c
        --- /dev/null
        +++ b/tests/wpt/web-platform-tests/payment-request/payment-request-update-event-updatewith-method.https.html
        @@ -0,0 +1,66 @@
        +
        +
        +
        +Test for PaymentRequestUpdateEvent's updateWith() method
        +
        +
        +
        +
        diff --git a/tests/wpt/web-platform-tests/performance-timeline/po-observe.html b/tests/wpt/web-platform-tests/performance-timeline/po-observe.html
        new file mode 100644
        index 00000000000..dcfd373f4f4
        --- /dev/null
        +++ b/tests/wpt/web-platform-tests/performance-timeline/po-observe.html
        @@ -0,0 +1,82 @@
        +
        +
        +PerformanceObservers: PerformanceObserverInit.buffered
        +
        +
        +
        +

        PerformanceObservers: PerformanceObserverInit.buffered

        +

        +PerformanceObserverInit.buffered should retrieve previously buffered entries +

        +
        + diff --git a/tests/wpt/web-platform-tests/pointerevents/extension/pointerevent_coalesced_events_attributes-manual.html b/tests/wpt/web-platform-tests/pointerevents/extension/pointerevent_coalesced_events_attributes-manual.html index 4610806b3fc..89149468a5d 100644 --- a/tests/wpt/web-platform-tests/pointerevents/extension/pointerevent_coalesced_events_attributes-manual.html +++ b/tests/wpt/web-platform-tests/pointerevents/extension/pointerevent_coalesced_events_attributes-manual.html @@ -77,8 +77,14 @@ test (function() { for (var i=0; i 0) + assert_greater_than_equal(coalescedEvents[i].timeStamp, coalescedEvents[i-1].timeStamp, 'Time stamps of coalesced events must be ascending.'); } }, expectedPointerType + ' pointermove coalesced events should all be marked as trusted.'); + test (function() { + for (var i=1; i target0.getBoundingClientRect().left)&& (event.clientX < target0.getBoundingClientRect().right)&& (event.clientY > target0.getBoundingClientRect().top)&& (event.clientY < target0.getBoundingClientRect().bottom), "pointerleave should be received inside of target bounds"); }); - test_pointerEvent.done(); // complete test + if (count >= 2) + test_pointerEvent.done(); // complete test }); } @@ -43,11 +57,11 @@

        Pointer Event: Dispatch pointerleave (pen)

        Test Description: - When a pointing device that supports hover (pen stylus) leaves the range of the digitizer while over an element, the pointerleave event must be dispatched. + When a pointing device that supports hover (pen stylus) leaves the range of the digitizer while over an element, the pointerleave event must be dispatched. In addition, all the pointer events' isPrimary should always be true when the pointing device leaves and enters the range of the digitizer again.


        - Use a pen to hover over then lift up away from this element. + Use a pen to hover over then lift up away from this element, and repeat it again.

        Test complete: Scroll to Summary to view Pass/Fail Results.

        @@ -55,4 +69,4 @@
        - \ No newline at end of file + diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_suppress_compat_events_on_drag_mouse-manual.html b/tests/wpt/web-platform-tests/pointerevents/pointerevent_suppress_compat_events_on_drag_mouse-manual.html index 02bca85008e..8afa04634bb 100644 --- a/tests/wpt/web-platform-tests/pointerevents/pointerevent_suppress_compat_events_on_drag_mouse-manual.html +++ b/tests/wpt/web-platform-tests/pointerevents/pointerevent_suppress_compat_events_on_drag_mouse-manual.html @@ -41,8 +41,9 @@ on_event(document.getElementById("done"), "click", end_of_interaction); var target_list = ["target0", "target1"]; - var pointer_event_list = ["pointerdown"]; + var pointer_event_list = ["pointerdown" , "pointermove", "pointerup"]; var mouse_event_list = ["mousedown", "mouseup", "mousemove"]; + var last_pointer_event = null; target_list.forEach(function(targetId) { var target = document.getElementById(targetId); @@ -52,12 +53,16 @@ detected_pointertypes[event.pointerType] = true; var label = event.type + "@" + targetId; - test(function () { - assert_true(event.isPrimary); - }, "primary pointer " + label); + if (event.type == "pointerdown") { + test(function () { + assert_true(event.isPrimary); + }, "primary pointer " + label); + } if (label === "pointerdown@target0") event.preventDefault(); + + last_pointer_event = event; }); }); @@ -69,6 +74,11 @@ event_log.push(event.type + "@" + targetId); include_next_mousemove = (event.type == "mousedown"); + test(function() { + test(function () { + assert_equals(event.timeStamp, last_pointer_event.timeStamp, "The time stamp of the compat mouse event should be the same as its pointerevent"); + }); + }, event.type + "'s time stamp should be the same as " + last_pointer_event.type + "'s time stamp."); }); }); }); diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-rotated-divs_touch-manual.html b/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-rotated-divs_touch-manual.html new file mode 100644 index 00000000000..1c09b15f1f9 --- /dev/null +++ b/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-rotated-divs_touch-manual.html @@ -0,0 +1,92 @@ + + + + Pointer Event: touch-action in rotated divs + + + + + + + + + + + + +

        Pointer Event: touch-action in rotated divs

        +

        +

        + Tests that touch-action directions in a div rotated by 90-degrees are interpreted in the local (rotated) coordinate space +

        +
          +
        1. Make 4 separate touch drags on Green, in this order: drag UP, then drag DOWN, then drag LEFT, then drag RIGHT.
        2. +
        3. Tap on Done.
        4. +
        5. Repeat the touch drags once again, in the same order.
        6. +
        7. Tap on Done.
        8. +
        +
        + +
        + + diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerlock/pointerevent_pointerlock_after_pointercapture-manual.html b/tests/wpt/web-platform-tests/pointerevents/pointerlock/pointerevent_pointerlock_after_pointercapture-manual.html new file mode 100644 index 00000000000..92fe7f26a79 --- /dev/null +++ b/tests/wpt/web-platform-tests/pointerevents/pointerlock/pointerevent_pointerlock_after_pointercapture-manual.html @@ -0,0 +1,69 @@ + + + + Pointer Events pointer lock test + + + + + + + + + +

        Pointer Events pointer lock test

        +

        +

        + Test Description: This test checks that we release the exsiting pointer capture when any element in the page gets a pointer lock. +
          +
        1. Press left button down on the green rectangle and hold it.
        2. +
        3. Move the mouse inside the green rectangle.
        4. +
        + + Test passes if the pointer capture is released on the yellow rectangle when the green rectangle gets the pointer lock. +

        +
        +
        +
        +
        +
        + + diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerlock/pointerevent_pointerlock_supercedes_capture-manual.html b/tests/wpt/web-platform-tests/pointerevents/pointerlock/pointerevent_pointerlock_supercedes_capture-manual.html new file mode 100644 index 00000000000..d8dbeaae172 --- /dev/null +++ b/tests/wpt/web-platform-tests/pointerevents/pointerlock/pointerevent_pointerlock_supercedes_capture-manual.html @@ -0,0 +1,93 @@ + + + + Pointer Events pointer lock tests + + + + + + + + + +

        Pointer Events pointer lock test

        +

        +

        + Test Description: This test checks that we do not set the pointer capture when any element in the page gets a pointer lock. +
          +
        1. Press left button down on the green rectangle and hold it.
        2. +
        3. Move the mouse inside the green rectangle.
        4. +
        + + Test passes if the pointer capture is not set when the green rectangle gets the pointer lock. +

        +
        +
        +
        +
        +
        + + diff --git a/tests/wpt/web-platform-tests/pointerlock/pointerlock_remove_target_on_mouseup-manual.html b/tests/wpt/web-platform-tests/pointerlock/pointerlock_remove_target_on_mouseup-manual.html new file mode 100644 index 00000000000..71b9eb69371 --- /dev/null +++ b/tests/wpt/web-platform-tests/pointerlock/pointerlock_remove_target_on_mouseup-manual.html @@ -0,0 +1,20 @@ + + +Remove PointerLock target on mouseup + + +

        Click anywhere to run the test. If a "PASS" result appears the test passes, otherwise it fails

        +
        + diff --git a/tests/wpt/web-platform-tests/preload/download-resources.html b/tests/wpt/web-platform-tests/preload/download-resources.html index 3a758cfa18d..7b51e78d285 100644 --- a/tests/wpt/web-platform-tests/preload/download-resources.html +++ b/tests/wpt/web-platform-tests/preload/download-resources.html @@ -8,12 +8,13 @@ - + - + + @@ -24,8 +25,9 @@ - - + + + diff --git a/tests/wpt/web-platform-tests/preload/onload-event.html b/tests/wpt/web-platform-tests/preload/onload-event.html index bd945cb42c7..86a985286d5 100644 --- a/tests/wpt/web-platform-tests/preload/onload-event.html +++ b/tests/wpt/web-platform-tests/preload/onload-event.html @@ -14,15 +14,17 @@ var gibberishLoaded = false; var gibberishErrored = false; var noTypeLoaded = false; + var fetchLoaded = false; - + + @@ -37,8 +39,9 @@ assert_true(audioLoaded, "audio triggered load event"); assert_true(trackLoaded, "track triggered load event"); assert_false(gibberishLoaded, "gibberish as value triggered load event"); - assert_true(gibberishErrored, "gibberish as value triggered error event"); - assert_true(noTypeLoaded, "empty as triggered load event"); + assert_false(gibberishErrored, "gibberish as value triggered error event"); + assert_true(fetchLoaded, "fetch as value triggered load event"); + assert_false(noTypeLoaded, "empty as triggered load event"); t.done(); }); diff --git a/tests/wpt/web-platform-tests/preload/preload-with-type.html b/tests/wpt/web-platform-tests/preload/preload-with-type.html index db68721f54e..69c52c46ee3 100644 --- a/tests/wpt/web-platform-tests/preload/preload-with-type.html +++ b/tests/wpt/web-platform-tests/preload/preload-with-type.html @@ -31,7 +31,7 @@ - + + + diff --git a/tests/wpt/web-platform-tests/preload/single-download-preload.html b/tests/wpt/web-platform-tests/preload/single-download-preload.html index 6b76a8887cb..ef174129bb2 100644 --- a/tests/wpt/web-platform-tests/preload/single-download-preload.html +++ b/tests/wpt/web-platform-tests/preload/single-download-preload.html @@ -9,7 +9,7 @@ - + @@ -25,7 +25,7 @@ } @font-face { font-family:ahem; - src: url(/media/CanvasTest.ttf); + src: url(/fonts/CanvasTest.ttf); } span { font-family: ahem, Arial; } @@ -49,7 +49,7 @@ verifyNumberOfDownloads("resources/dummy.css", 1); verifyNumberOfDownloads("resources/square.png", 1); verifyNumberOfDownloads("resources/square.png?background", 1); - verifyNumberOfDownloads("/media/CanvasTest.ttf", 1); + verifyNumberOfDownloads("/fonts/CanvasTest.ttf", 1); verifyNumberOfDownloads("resources/dummy.xml?foobar", 0); verifyNumberOfDownloads("/media/foo.vtt", 1); verifyNumberOfDownloads("resources/dummy.xml", 1); diff --git a/tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationAvailability_onchange-manual.https.html b/tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationAvailability_onchange-manual.https.html index 186dbd3d9f3..48ecb610c6e 100644 --- a/tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationAvailability_onchange-manual.https.html +++ b/tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationAvailability_onchange-manual.https.html @@ -14,20 +14,20 @@ // prevent the default timeout setup({explicit_timeout: true}); - var notice = document.getElementById('notice'); + const notice = document.getElementById('notice'); - promise_test(function(t) { + promise_test(t => { // clean up the instruction notice when the test ends - t.add_cleanup(function() { - notice.parentNode.removeChild(notice); + t.add_cleanup(() => { + notice.parentNode.removeChild(notice); }); // initialize a presentation request - var request = new PresentationRequest(presentationUrls); + const request = new PresentationRequest(presentationUrls); - var availability, previousState, timeout; + let availability, previousState, timeout; - function wait() { + const wait = () => { notice.textContent = 'Please wait for a moment... (It might take long time)'; // set timeout to observe the presentation availability @@ -35,9 +35,9 @@ t.force_timeout(); t.done(); }, 90000); - } + }; - function setup() { + const setup = () => { // save the current value of the presentation availability previousState = availability.value; @@ -45,34 +45,45 @@ notice.textContent = 'Please make your presentation displays ' + (previousState ? 'unavailable' : 'available') + ' and click this button: '; - var button = document.createElement('button'); + const button = document.createElement('button'); button.textContent = 'Start Monitoring'; button.onclick = wait; notice.appendChild(button); - } + }; - var check = t.step_func(function(a) { + // check the event and its attributes + const checkEvent = evt => { + clearTimeout(timeout); + timeout = undefined; + + assert_true(evt.isTrusted && !evt.bubbles && !evt.cancelable && evt instanceof Event, 'A simple event is fired.'); + assert_equals(evt.type, 'change', 'The event name is "change".'); + assert_equals(evt.target, availability, 'event.target is the presentation availability.'); + assert_not_equals(previousState, availability.value, 'Value of the presentation availability is changed.'); + setup(); + }; + + const watchEvent = (obj, watcher, type) => { + const watchHandler = new Promise(resolve => { + obj['on' + type] = evt => { resolve(evt); }; + }); + return Promise.all([ watchHandler, watcher.wait_for(type) ]).then(results => { + assert_equals(results[0], results[1], 'Both on' + type + ' and addEventListener pass the same event object.'); + return results[0]; + }); + }; + + // check the change of PresentationAvailability.value twice; "true to false" and "false to true" + return request.getAvailability().then(a => { availability = a; setup(); - availability.onchange = t.step_func(function(evt) { - clearTimeout(timeout); - timeout = undefined; - - // check the event and its attributes - assert_true(evt.isTrusted && !evt.bubbles && !evt.cancelable && evt instanceof Event, 'A simple event is fired.'); - assert_equals(evt.type, 'change', 'The event name is "change".'); - assert_equals(evt.target, availability, 'event.target is the presentation availability.'); - assert_not_equals(previousState, availability.value, 'Value of the presentation availability is changed.'); - setup(); - }); - // wait until a "change" event is fired twice var eventWatcher = new EventWatcher(t, availability, 'change'); - return eventWatcher.wait_for(['change', 'change']); + return watchEvent(availability, eventWatcher, 'change') + .then(checkEvent) + .then(() => { return eventWatcher.wait_for('change'); }) + .then(checkEvent); }); - - // check the change of PresentationAvailability.value twice; "true to false" and "false to true" - return request.getAvailability().then(check); }); \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationConnection_onclose-manual.https.html b/tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationConnection_onclose-manual.https.html new file mode 100644 index 00000000000..f63806f82b0 --- /dev/null +++ b/tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationConnection_onclose-manual.https.html @@ -0,0 +1,145 @@ + + + +Closing a PresentationConnection + + + + + + + + +

        Description

        +

        + This test validates that after connection close,
        + the connection state is set closed,
        + the onclose EventHandler is triggered. +

        +
        +

        Click the button below to start the test.

        + + + diff --git a/tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationConnection_onclosed-manual.html b/tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationConnection_onclosed-manual.html deleted file mode 100644 index a4aa65e9adc..00000000000 --- a/tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationConnection_onclosed-manual.html +++ /dev/null @@ -1,48 +0,0 @@ - - - -PresentationConnection.onclose - - - - - - -

        Description

        -

        - This test validates that after connection close,
        - the connection state is set closed,
        - the onclose EventHandler is triggered. -

        -
        -

        Click the button below to start the test.

        - - - diff --git a/tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationConnection_onconnect-manual.https.html b/tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationConnection_onconnect-manual.https.html new file mode 100644 index 00000000000..0f4a4ac3697 --- /dev/null +++ b/tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationConnection_onconnect-manual.https.html @@ -0,0 +1,72 @@ + + + +Establishing a presentation connection + + + + + + + +

        Description

        +

        + This test validates that after connection starts,
        + the onconnect EventHandler is triggered and connection state is connected. +

        +
        +

        Click the button below to start the test.

        + + + diff --git a/tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationConnection_onconnected-manual.html b/tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationConnection_onconnected-manual.html deleted file mode 100644 index 3c75b969e0e..00000000000 --- a/tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationConnection_onconnected-manual.html +++ /dev/null @@ -1,46 +0,0 @@ - - - -PresentationConnection.onconnect - - - - - - -

        Description

        -

        - This test validates that after connection starts,
        - the onconnect EventHandler is triggered and connection state is connected. -

        -
        -

        Click the button below to start the test.

        - - - diff --git a/tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationConnection_onmessage-manual.https.html b/tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationConnection_onmessage-manual.https.html index 43affaa5f3f..59d7e8c0e04 100644 --- a/tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationConnection_onmessage-manual.https.html +++ b/tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationConnection_onmessage-manual.https.html @@ -36,103 +36,109 @@ return !!p && !!q && p.every((item, index) => { return item === q[index]; }); }; - presentBtn.onclick = () => { - presentBtn.disabled = true; + promise_test(t => { + const clickWatcher = new EventWatcher(t, presentBtn, 'click'); + const request = new PresentationRequest(presentationUrls); const stash = new Stash(stashIds.toController, stashIds.toReceiver); + let connection, watcher, eventWatcher; - promise_test(t => { - let connection, watcher, eventWatcher; - const request = new PresentationRequest(presentationUrls); + const checkEvent = event => { + assert_true(event.isTrusted, 'a trusted event is fired'); + assert_true(event instanceof MessageEvent, 'The event uses the MessageEvent interface'); + assert_false(event.bubbles, 'the event does not bubble'); + assert_false(event.cancelable, 'the event is not cancelable'); + }; - const checkEvent = event => { - assert_true(event.isTrusted, 'a trusted event is fired'); - assert_true(event instanceof MessageEvent, 'The event uses the MessageEvent interface'); - assert_false(event.bubbles, 'the event does not bubble'); - assert_false(event.cancelable, 'the event is not cancelable'); - }; - - t.add_cleanup(() => { - if (connection) { - if (connection.state === 'connecting') { - connection.onconnect = event => { - connection.terminate(); - }; - } - else if (connection.state === 'connected') - connection.terminate(); - else if (connection.state === 'closed') { - request.reconnect(connection.id).then(c => { - c.terminate(); - }); - } - } - const notice = document.getElementById('notice'); - notice.parentNode.removeChild(notice); - stash.stop(); + const watchEvent = (obj, watcher, type) => { + const watchHandler = new Promise(resolve => { + obj['on' + type] = evt => { resolve(evt); }; }); - - return request.start().then(c => { - connection = c; - assert_equals(connection.state, 'connecting', 'the initial state of the presentation connection is "connecting"'); - assert_equals(connection.binaryType, 'arraybuffer', 'the default value of binaryType is "arraybuffer"'); - - // enable timeout again, cause no user action is needed from here. - t.step_timeout(() => { - t.force_timeout(); - t.done(); - }, 5000); - - watcher = new EventWatcher(t, connection, 'connect'); - return watcher.wait_for('connect'); - }).then(() => { - return stash.init(); - }).then(() => { - eventWatcher = new EventWatcher(t, connection, 'message'); - // Tell receiving page to start sending messages, and wait for first message - return Promise.all([ - stash.send('onmessage'), - eventWatcher.wait_for('message') - ]).then(results => results[1]); - }).then(event => { - checkEvent(event); - assert_equals(event.data, message1, 'receive a string correctly'); - return eventWatcher.wait_for('message'); - }).then(event => { - checkEvent(event); - assert_equals(event.data, message2, 'receive a string correctly'); - return eventWatcher.wait_for('message'); - }).then(event => { - checkEvent(event); - assert_true(event.data instanceof ArrayBuffer, 'receive binary data as ArrayBuffer'); - assert_true(compare(event.data, message3), 'receive an ArrayBuffer correctly (originally a Blob at a receiving user agent)'); - return eventWatcher.wait_for('message'); - }).then(event => { - checkEvent(event); - assert_true(event.data instanceof ArrayBuffer, 'receive binary data as ArrayBuffer'); - assert_true(compare(event.data, message4), 'receive an ArrayBuffer correctly (originally an ArrayBuffer at a receiving user agent)'); - return eventWatcher.wait_for('message'); - }).then(event => { - checkEvent(event); - assert_true(event.data instanceof ArrayBuffer, 'receive binary data as ArrayBuffer'); - assert_true(compare(event.data, message5), 'receive an ArrayBuffer correctly (originally an ArrayBufferView at a receiving user agent)'); - - connection.binaryType = 'blob'; - return Promise.all([ - stash.send('blob'), - eventWatcher.wait_for('message') - ]).then(results => results[1]); - }).then(event => { - assert_true(event.data instanceof Blob, 'receive binary data as Blob'); - return new Promise((resolve, reject) => { - const reader = new FileReader(); - reader.onload = resolve; - reader.onerror = reject; - reader.readAsArrayBuffer(event.data); - }); - }).then(event => { - assert_true(compare(event.target.result, message5), 'receive a Blob correctly'); - connection.terminate(); + return Promise.all([ watchHandler, watcher.wait_for(type) ]).then(results => { + assert_equals(results[0], results[1], 'Both on' + type + ' and addEventListener pass the same event object.'); + return results[0]; }); + }; + + t.add_cleanup(() => { + if (connection) { + connection.onconnect = () => { connection.terminate(); }; + if (connection.state === 'closed') + request.reconnect(connection.id); + else + connection.terminate(); + } + const notice = document.getElementById('notice'); + notice.parentNode.removeChild(notice); + stash.stop(); }); - }; + + return Promise.all([ + clickWatcher.wait_for('click'), + stash.init() + ]).then(() => { + presentBtn.disabled = true; + return request.start(); + }).then(c => { + connection = c; + assert_equals(connection.state, 'connecting', 'the initial state of the presentation connection is "connecting"'); + assert_equals(connection.binaryType, 'arraybuffer', 'the default value of binaryType is "arraybuffer"'); + + // enable timeout again, cause no user action is needed from here. + t.step_timeout(() => { + t.force_timeout(); + t.done(); + }, 5000); + + watcher = new EventWatcher(t, connection, 'connect'); + return watcher.wait_for('connect'); + }).then(() => { + return stash.init(); + }).then(() => { + eventWatcher = new EventWatcher(t, connection, 'message'); + // Tell receiving page to start sending messages, and wait for first message + return Promise.all([ + stash.send('onmessage'), + watchEvent(connection, eventWatcher, 'message') + ]).then(results => results[1]); + }).then(event => { + checkEvent(event); + assert_equals(event.data, message1, 'receive a string correctly'); + return watchEvent(connection, eventWatcher, 'message'); + }).then(event => { + checkEvent(event); + assert_equals(event.data, message2, 'receive a string correctly'); + return watchEvent(connection, eventWatcher, 'message'); + }).then(event => { + checkEvent(event); + assert_true(event.data instanceof ArrayBuffer, 'receive binary data as ArrayBuffer'); + assert_true(compare(event.data, message3), 'receive an ArrayBuffer correctly (originally a Blob at a receiving user agent)'); + return watchEvent(connection, eventWatcher, 'message'); + }).then(event => { + checkEvent(event); + assert_true(event.data instanceof ArrayBuffer, 'receive binary data as ArrayBuffer'); + assert_true(compare(event.data, message4), 'receive an ArrayBuffer correctly (originally an ArrayBuffer at a receiving user agent)'); + return watchEvent(connection, eventWatcher, 'message'); + }).then(event => { + checkEvent(event); + assert_true(event.data instanceof ArrayBuffer, 'receive binary data as ArrayBuffer'); + assert_true(compare(event.data, message5), 'receive an ArrayBuffer correctly (originally an ArrayBufferView at a receiving user agent)'); + + connection.binaryType = 'blob'; + return Promise.all([ + stash.send('blob'), + watchEvent(connection, eventWatcher, 'message') + ]).then(results => results[1]); + }).then(event => { + assert_true(event.data instanceof Blob, 'receive binary data as Blob'); + return new Promise((resolve, reject) => { + const reader = new FileReader(); + reader.onload = resolve; + reader.onerror = reject; + reader.readAsArrayBuffer(event.data); + }); + }).then(event => { + assert_true(compare(event.target.result, message5), 'receive a Blob correctly'); + connection.terminate(); + }); + }); diff --git a/tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationConnection_onterminate-manual.https.html b/tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationConnection_onterminate-manual.https.html new file mode 100644 index 00000000000..7fdc2dbdcd9 --- /dev/null +++ b/tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationConnection_onterminate-manual.https.html @@ -0,0 +1,157 @@ + + + +Terminating a presentation in a controlling browsing context + + + + + + + + +

        + Click the button below and select the available presentation display, to start the manual test. The test passes if a "PASS" result appears.
        + This test asks you to click the button twice, unless the test fails.
        +

        + + + + diff --git a/tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationConnection_onterminated-manual.html b/tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationConnection_onterminated-manual.html deleted file mode 100644 index 68ee6280a85..00000000000 --- a/tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationConnection_onterminated-manual.html +++ /dev/null @@ -1,54 +0,0 @@ - - - -PresentationConnection.onterminate - - - - - - -

        Description

        -

        - This test validates that after connection terminate,
        - the connection state is set terminated,
        - the onterminate EventHandler is triggered. -

        -
        -

        Click the button below to start the test.

        - - - diff --git a/tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationConnection_send-manual.https.html b/tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationConnection_send-manual.https.html index 9060ca92889..9bdd0859b1c 100644 --- a/tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationConnection_send-manual.https.html +++ b/tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationConnection_send-manual.https.html @@ -37,92 +37,89 @@ }, ''); } - presentBtn.onclick = () => { - presentBtn.disabled = true; + promise_test(t => { + const clickWatcher = new EventWatcher(t, presentBtn, 'click'); const stash = new Stash(stashIds.toController, stashIds.toReceiver); + const request = new PresentationRequest(presentationUrls); + let connection, watcher; - promise_test(t => { - let connection, watcher; - const request = new PresentationRequest(presentationUrls); - - t.add_cleanup(() => { - if (connection) { - if (connection.state === 'connected') - connection.terminate(); - else if (connection.state === 'closed') { - request.reconnect(connection.id).then(c => { - c.terminate(); - }); - } - } - const notice = document.getElementById('notice'); - notice.parentNode.removeChild(notice); - stash.stop(); - }); - - return request.start().then(c => { - connection = c; - - // send data in "connecting" state (throws an exception) - assert_equals(connection.state, 'connecting', 'the initial state of the presentation connection is "connecting"'); - assert_throws('InvalidStateError', () => { - connection.send(''); - }, 'an InvalidStateError is thrown if the state is "connecting"'); - - // enable timeout again, cause no user action is needed from here. - t.step_timeout(() => { - t.force_timeout(); - t.done(); - }, 10000); - - watcher = new EventWatcher(t, connection, ['connect', 'close']); - return watcher.wait_for('connect'); - }).then(() => { - return stash.init(); - }).then(() => { - return Promise.all([ stash.send('send'), stash.receive() ]); - }).then(results => { - // send messages - connection.send(message1); // string - connection.send(message2); // string - connection.send(new Blob([message3])); // Blob - connection.send(message4.buffer); // ArrayBuffer - connection.send(message5); // ArrayBufferView - return stash.receive(); - }).then(stash => { - // verify messages - const results = JSON.parse(stash); - assert_true(!!results[0] && results[0].type === 'text' && results[0].data === message1, 'send a string correctly'); - assert_true(!!results[1] && results[1].type === 'text' && results[1].data === message2, 'send a string correctly'); - assert_true(!!results[2] && results[2].type === 'binary' && results[2].data === toText(message3), 'send a Blob correctly'); - assert_true(!!results[3] && results[3].type === 'binary' && results[3].data === toText(message4), 'send a ArrayBuffer correctly'); - assert_true(!!results[4] && results[4].type === 'binary' && results[4].data === toText(message5), 'send a ArrayBufferView correctly'); - - // send data in "closed" state (throws an exception) - connection.close(); - return watcher.wait_for('close'); - }).then(() => { - assert_equals(connection.state, 'closed', 'the state is set to "closed" when the presentation connection is closed'); - assert_throws('InvalidStateError', () => { - connection.send(''); - }, 'an InvalidStateError is thrown if the state is "closed"'); - - // reconnect and terminate the connection - return request.reconnect(connection.id); - }).then(c => { - connection = c; - watcher = new EventWatcher(t, connection, ['connect', 'terminate']); - return watcher.wait_for('connect'); - }).then(() => { - // send data in "terminated" state (throws an exception) - connection.terminate(); - return watcher.wait_for('terminate'); - }).then(() => { - assert_equals(connection.state, 'terminated', 'the state is set to "terminated" when the presentation connection is terminated'); - assert_throws('InvalidStateError', () => { - connection.send(''); - }, 'an InvalidStateError is thrown if the state is "terminated"'); - }); + t.add_cleanup(() => { + if (connection) { + connection.onconnect = () => { connection.terminate(); }; + if (connection.state === 'closed') + request.reconnect(connection.id); + else + connection.terminate(); + } + const notice = document.getElementById('notice'); + notice.parentNode.removeChild(notice); + stash.stop(); }); - }; + + return clickWatcher.wait_for('click').then(() => { + presentBtn.disabled = true; + + return request.start(); + }).then(c => { + connection = c; + + // send data in "connecting" state (throws an exception) + assert_equals(connection.state, 'connecting', 'the initial state of the presentation connection is "connecting"'); + assert_throws('InvalidStateError', () => { + connection.send(''); + }, 'an InvalidStateError is thrown if the state is "connecting"'); + + // enable timeout again, cause no user action is needed from here. + t.step_timeout(() => { + t.force_timeout(); + t.done(); + }, 10000); + + watcher = new EventWatcher(t, connection, ['connect', 'close', 'terminate']); + return watcher.wait_for('connect'); + }).then(() => { + return stash.init(); + }).then(() => { + return Promise.all([ stash.send('send'), stash.receive() ]); + }).then(results => { + // send messages + connection.send(message1); // string + connection.send(message2); // string + connection.send(new Blob([message3])); // Blob + connection.send(message4.buffer); // ArrayBuffer + connection.send(message5); // ArrayBufferView + return stash.receive(); + }).then(stash => { + // verify messages + const results = JSON.parse(stash); + assert_true(!!results[0] && results[0].type === 'text' && results[0].data === message1, 'send a string correctly'); + assert_true(!!results[1] && results[1].type === 'text' && results[1].data === message2, 'send a string correctly'); + assert_true(!!results[2] && results[2].type === 'binary' && results[2].data === toText(message3), 'send a Blob correctly'); + assert_true(!!results[3] && results[3].type === 'binary' && results[3].data === toText(message4), 'send a ArrayBuffer correctly'); + assert_true(!!results[4] && results[4].type === 'binary' && results[4].data === toText(message5), 'send a ArrayBufferView correctly'); + + // send data in "closed" state (throws an exception) + connection.close(); + return watcher.wait_for('close'); + }).then(() => { + assert_equals(connection.state, 'closed', 'the state is set to "closed" when the presentation connection is closed'); + assert_throws('InvalidStateError', () => { + connection.send(''); + }, 'an InvalidStateError is thrown if the state is "closed"'); + + // reconnect and terminate the connection + return request.reconnect(connection.id); + }).then(() => { + return watcher.wait_for('connect'); + }).then(() => { + // send data in "terminated" state (throws an exception) + connection.terminate(); + return watcher.wait_for('terminate'); + }).then(() => { + assert_equals(connection.state, 'terminated', 'the state is set to "terminated" when the presentation connection is terminated'); + assert_throws('InvalidStateError', () => { + connection.send(''); + }, 'an InvalidStateError is thrown if the state is "terminated"'); + }); + }); diff --git a/tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationRequest_onconnectionavailable-manual.https.html b/tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationRequest_onconnectionavailable-manual.https.html index a24e03aba88..4c2ec083247 100644 --- a/tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationRequest_onconnectionavailable-manual.https.html +++ b/tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationRequest_onconnectionavailable-manual.https.html @@ -1,6 +1,6 @@ -PresentationRequest.onconnectionavailable (manual test) +Firing a connectionavailable event at a controlling user agent @@ -17,43 +17,67 @@ // ---------- // DOM Object // ---------- - var presentBtn = document.getElementById("presentBtn"); + const presentBtn = document.getElementById('presentBtn'); // -------------------------------------------------------------------------- // Start New PresentationRequest.onconnectionavailable Test (success) - begin // -------------------------------------------------------------------------- - var startPresentation = function () { - presentBtn.disabled = true; - promise_test(function (t) { - var connection; - t.add_cleanup(function() { - if(connection) - connection.terminate(); - }); + promise_test(t => { + const clickWatcher = new EventWatcher(t, presentBtn, 'click'); + const request = new PresentationRequest(presentationUrls); + let connection; - // Note: During starting a presentation, the connectionavailable event is fired (step 20) - // after the promise P is resolved (step 19). - return new Promise(function(resolve, reject) { - var request = new PresentationRequest(presentationUrls); - request.onconnectionavailable = function (evt) { - resolve(evt.connection); - }; - // This test fails if request.onconnectionavailable is not invoked although the presentation is started successfully - // or the presentation fails to be started - request.start().then(function(c) { - connection = c; - t.step_timeout(function() { assert_unreached('The connectionavailable event was not fired.'); }, 5000); - }, reject); - }).then(function(c) { - connection = c; - assert_equals(connection.state, 'connecting', 'The initial state of the presentation connection is "connecting".'); - assert_true(!!connection.id, 'The connection ID is set.'); - assert_true(typeof connection.id === 'string', 'The connection ID is a string.'); - assert_true(connection instanceof PresentationConnection, 'The connection is an instance of PresentationConnection.'); + t.add_cleanup(() => { + if (connection) { + connection.onconnect = () => { connection.terminate(); }; + if (connection.state === 'closed') + request.reconnect(connection.id); + else + connection.terminate(); + } + }); + + const watchEvent = (obj, watcher, type) => { + const watchHandler = new Promise(resolve => { + obj['on' + type] = evt => { resolve(evt); }; }); - }, 'The connectionavailable event was fired successfully.'); - } - presentBtn.onclick = startPresentation; + return Promise.all([ watchHandler, watcher.wait_for(type) ]).then(results => { + assert_equals(results[0], results[1], 'Both on' + type + ' and addEventListener pass the same event object.'); + return results[0]; + }); + }; + + return clickWatcher.wait_for('click').then(() => { + presentBtn.disabled = true; + + // Note: During starting a presentation, the connectionavailable event is fired (step 9) + // after the promise P is resolved (step 8). + return request.start(); + }).then(c => { + connection = c; + assert_equals(connection.state, 'connecting', 'The initial state of the presentation connection is "connecting".'); + assert_true(!!connection.id, 'The connection ID is set.'); + assert_true(typeof connection.id === 'string', 'The connection ID is a string.'); + assert_true(connection instanceof PresentationConnection, 'The connection is an instance of PresentationConnection.'); + + const eventWatcher = new EventWatcher(t, request, 'connectionavailable'); + const timeout = new Promise((_, reject) => { + // This test fails if request.onconnectionavailable is not invoked although the presentation is started successfully + // or the presentation fails to be started. + t.step_timeout(() => { reject('The connectionavailable event was not fired (timeout).'); }, 5000);} + ); + return Promise.race([ watchEvent(request, eventWatcher, 'connectionavailable'), timeout ]); + }).then(evt => { + assert_true(evt instanceof PresentationConnectionAvailableEvent, 'An event using PresentationConnectionAvailableEvent is fired.'); + assert_true(evt.isTrusted, 'The event is a trusted event.'); + assert_false(evt.bubbles, 'The event does not bubbles.'); + assert_false(evt.cancelable, 'The event is not cancelable.'); + assert_equals(evt.type, 'connectionavailable', 'The event name is "connectionavailable".'); + assert_equals(evt.target, request, 'event.target is the presentation request.'); + assert_true(evt.connection instanceof PresentationConnection, 'event.connection is a presentation connection.'); + assert_equals(evt.connection, connection, 'event.connection is set to the presentation which the promise is resolved with.'); + }); + }); // ------------------------------------------------------------------------ // Start New PresentationRequest.onconnectionavailable Test (success) - end // ------------------------------------------------------------------------ diff --git a/tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationRequest_success.https.html b/tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationRequest_success.https.html index 4e1570e83ad..70ea5a806e7 100644 --- a/tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationRequest_success.https.html +++ b/tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationRequest_success.https.html @@ -1,43 +1,24 @@ -Presentation API PresentationRequest for Controlling User Agent (Success) +Constructing a PresentationRequest - + + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/presentation-api/controlling-ua/defaultRequest.https.html b/tests/wpt/web-platform-tests/presentation-api/controlling-ua/defaultRequest.https.html new file mode 100644 index 00000000000..bc07e02748c --- /dev/null +++ b/tests/wpt/web-platform-tests/presentation-api/controlling-ua/defaultRequest.https.html @@ -0,0 +1,24 @@ + + +Setting a default presentation request + + + + + + diff --git a/tests/wpt/web-platform-tests/presentation-api/controlling-ua/getAvailability.https.html b/tests/wpt/web-platform-tests/presentation-api/controlling-ua/getAvailability.https.html index 895e1dc27d1..f8ccd703403 100644 --- a/tests/wpt/web-platform-tests/presentation-api/controlling-ua/getAvailability.https.html +++ b/tests/wpt/web-platform-tests/presentation-api/controlling-ua/getAvailability.https.html @@ -16,33 +16,46 @@ // Presentation Availability Tests - begin // --------------------------------------- - promise_test(function(t) { - var availability; + promise_test(t => { + let availability; - var request = new PresentationRequest(presentationUrls); + const request = new PresentationRequest(presentationUrls); assert_true(request instanceof PresentationRequest, 'The request is an instance of PresentationRequest.'); - var promise = request.getAvailability(); + const promise = request.getAvailability(); assert_equals(promise, request.getAvailability(), 'If the PresentationRequest object has an unsettled Promise, getAvailability returns that Promise.'); function catchNotSupported(err) { assert_equals(err.name, 'NotSupportedError', 'getAvailability() rejects a Promise with a NotSupportedError exception, if the browser can find presentation displays only when starting a connection.') } - return promise.then(function (a) { + return promise.then(a => { availability = a; assert_true(availability instanceof PresentationAvailability, 'The promise is resolved with an instance of PresentationAvailability.'); assert_equals(typeof availability.value, 'boolean', 'The availability has an boolean value.'); - assert_true(availability.value, 'The availability value is true when any presentation display is available.'); - var newPromise = request.getAvailability(); - assert_not_equals(promise, newPromise, 'If the Promise from a previous call to getAvailability has already been settled, getAvailability returns a new Promise.'); + // The value of the presentation availability object is set to false, when the object is newly created. + const waitForChange = () => { + const eventWatcher = new EventWatcher(t, availability, 'change'); + return eventWatcher.wait_for('change'); + }; - return newPromise.then(function (newAvailability) { - assert_equals(availability, newAvailability, 'Promises from a PresentationRequest\'s getAvailability are resolved with the same PresentationAvailability object.'); + return (availability.value ? Promise.resolve() : waitForChange()).then(() => { + assert_true(availability.value, 'The availability value is true when any presentation display is available.'); + + const request2 = new PresentationRequest('https://example.com'); + return request2.getAvailability(); + }).then(a => { + assert_not_equals(availability, a, 'A presentation availability object is newly created if the presentation request has a newly added presentation URLs.'); + + const newPromise = request.getAvailability(); + assert_not_equals(promise, newPromise, 'If the Promise from a previous call to getAvailability has already been settled, getAvailability returns a new Promise.'); + + return newPromise.then(newAvailability => { + assert_equals(availability, newAvailability, 'Promises from a PresentationRequest\'s getAvailability are resolved with the same PresentationAvailability object.'); + }, catchNotSupported); }, catchNotSupported); }, catchNotSupported); }); - diff --git a/tests/wpt/web-platform-tests/presentation-api/controlling-ua/reconnectToPresentation_success-manual.https.html b/tests/wpt/web-platform-tests/presentation-api/controlling-ua/reconnectToPresentation_success-manual.https.html index c740f6d0021..7521b4fd23c 100644 --- a/tests/wpt/web-platform-tests/presentation-api/controlling-ua/reconnectToPresentation_success-manual.https.html +++ b/tests/wpt/web-platform-tests/presentation-api/controlling-ua/reconnectToPresentation_success-manual.https.html @@ -7,48 +7,179 @@ +

        Click the button below to start the manual test. Select a presentation device after the selection dialog is prompted. The test assumes that at least one presentation device is available. The test passes if a "PASS" result appears.

        + diff --git a/tests/wpt/web-platform-tests/presentation-api/controlling-ua/support/iframe.html b/tests/wpt/web-platform-tests/presentation-api/controlling-ua/support/iframe.html index a37f0fcd8e0..e2171deaa83 100644 --- a/tests/wpt/web-platform-tests/presentation-api/controlling-ua/support/iframe.html +++ b/tests/wpt/web-platform-tests/presentation-api/controlling-ua/support/iframe.html @@ -2,9 +2,23 @@ Presentation API - controlling ua - sandboxing + + + + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/presentation-api/receiving-ua/PresentationConnectionList_onconnectionavailable-manual.https.html b/tests/wpt/web-platform-tests/presentation-api/receiving-ua/PresentationConnectionList_onconnectionavailable-manual.https.html new file mode 100644 index 00000000000..84971cbdf63 --- /dev/null +++ b/tests/wpt/web-platform-tests/presentation-api/receiving-ua/PresentationConnectionList_onconnectionavailable-manual.https.html @@ -0,0 +1,78 @@ + + +Monitoring incoming presentation connections + + + + + + + +

        Click the button below and select the available presentation display, to start the manual test.

        + + + + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/presentation-api/receiving-ua/PresentationConnection_onclose-manual.https.html b/tests/wpt/web-platform-tests/presentation-api/receiving-ua/PresentationConnection_onclose-manual.https.html new file mode 100644 index 00000000000..d6baad1c285 --- /dev/null +++ b/tests/wpt/web-platform-tests/presentation-api/receiving-ua/PresentationConnection_onclose-manual.https.html @@ -0,0 +1,85 @@ + + +Closing a PresentationConnection + + + + + + + +

        Click the button below and select the available presentation display, to start the manual test.

        + + + + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/presentation-api/receiving-ua/PresentationConnection_terminate-manual.https.html b/tests/wpt/web-platform-tests/presentation-api/receiving-ua/PresentationConnection_terminate-manual.https.html new file mode 100644 index 00000000000..6484e97c5ab --- /dev/null +++ b/tests/wpt/web-platform-tests/presentation-api/receiving-ua/PresentationConnection_terminate-manual.https.html @@ -0,0 +1,71 @@ + + +Terminating a presentation in a receiving browsing context + + + + + + + + +

        Click the button below and select the available presentation display, to start the manual test.

        + + + + diff --git a/tests/wpt/web-platform-tests/presentation-api/receiving-ua/support/PresentationConnectionList_onconnectionavailable_receiving-ua.html b/tests/wpt/web-platform-tests/presentation-api/receiving-ua/support/PresentationConnectionList_onconnectionavailable_receiving-ua.html new file mode 100644 index 00000000000..f1afb684cb0 --- /dev/null +++ b/tests/wpt/web-platform-tests/presentation-api/receiving-ua/support/PresentationConnectionList_onconnectionavailable_receiving-ua.html @@ -0,0 +1,92 @@ + + + +Monitoring incoming presentation connections + + + + + + + + diff --git a/tests/wpt/web-platform-tests/presentation-api/receiving-ua/support/PresentationConnection_onclose_receiving-ua.html b/tests/wpt/web-platform-tests/presentation-api/receiving-ua/support/PresentationConnection_onclose_receiving-ua.html new file mode 100644 index 00000000000..7194c6f4d96 --- /dev/null +++ b/tests/wpt/web-platform-tests/presentation-api/receiving-ua/support/PresentationConnection_onclose_receiving-ua.html @@ -0,0 +1,89 @@ + + + +Closing a PresentationConnection + + + + + + + + diff --git a/tests/wpt/web-platform-tests/presentation-api/receiving-ua/support/PresentationConnection_onmessage_receiving-ua.html b/tests/wpt/web-platform-tests/presentation-api/receiving-ua/support/PresentationConnection_onmessage_receiving-ua.html index 93f0dca04ed..e48fffdd6dd 100644 --- a/tests/wpt/web-platform-tests/presentation-api/receiving-ua/support/PresentationConnection_onmessage_receiving-ua.html +++ b/tests/wpt/web-platform-tests/presentation-api/receiving-ua/support/PresentationConnection_onmessage_receiving-ua.html @@ -43,6 +43,16 @@ navigator.presentation.receiver.connectionList.then(list => { assert_false(event.cancelable, 'the event is not cancelable'); }; + const watchEvent = (obj, watcher, type) => { + const watchHandler = new Promise(resolve => { + obj['on' + type] = evt => { resolve(evt); }; + }); + return Promise.all([ watchHandler, watcher.wait_for(type) ]).then(results => { + assert_equals(results[0], results[1], 'Both on' + type + ' and addEventListener pass the same event object.'); + return results[0]; + }); + }; + const connection = list.connections[0]; promise_test(t => { @@ -56,21 +66,21 @@ navigator.presentation.receiver.connectionList.then(list => { return eventWatcher.wait_for('message').then(evt => { checkEvent(evt); assert_equals(event.data, message1, 'receive a string correctly'); - return eventWatcher.wait_for('message'); + return watchEvent(connection, eventWatcher, 'message'); }).then(event => { checkEvent(event); assert_equals(event.data, message2, 'receive a string correctly'); - return eventWatcher.wait_for('message'); + return watchEvent(connection, eventWatcher, 'message'); }).then(event => { checkEvent(event); assert_true(event.data instanceof ArrayBuffer, 'receive binary data as ArrayBuffer'); assert_true(compare(event.data, message3), 'receive an ArrayBuffer correctly (originally a Blob at a controlling user agent)'); - return eventWatcher.wait_for('message'); + return watchEvent(connection, eventWatcher, 'message'); }).then(event => { checkEvent(event); assert_true(event.data instanceof ArrayBuffer, 'receive binary data as ArrayBuffer'); assert_true(compare(event.data, message4), 'receive an ArrayBuffer correctly (originally an ArrayBuffer at a controlling user agent)'); - return eventWatcher.wait_for('message'); + return watchEvent(connection, eventWatcher, 'message'); }).then(event => { checkEvent(event); assert_true(event.data instanceof ArrayBuffer, 'receive binary data as ArrayBuffer'); @@ -79,7 +89,7 @@ navigator.presentation.receiver.connectionList.then(list => { connection.binaryType = 'blob'; return Promise.all([ stash.send(JSON.stringify({ type: 'blob' })), - eventWatcher.wait_for('message') + watchEvent(connection, eventWatcher, 'message') ]).then(results => results[1]); }).then(event => { assert_true(event.data instanceof Blob, 'receive binary data as Blob'); diff --git a/tests/wpt/web-platform-tests/presentation-api/receiving-ua/support/PresentationConnection_terminate_receiving-ua.html b/tests/wpt/web-platform-tests/presentation-api/receiving-ua/support/PresentationConnection_terminate_receiving-ua.html new file mode 100644 index 00000000000..3a234aaa833 --- /dev/null +++ b/tests/wpt/web-platform-tests/presentation-api/receiving-ua/support/PresentationConnection_terminate_receiving-ua.html @@ -0,0 +1,23 @@ + + + +Terminating a presentation in a receiving browsing context + + + + + + diff --git a/tests/wpt/web-platform-tests/presentation-api/receiving-ua/support/iframe.html b/tests/wpt/web-platform-tests/presentation-api/receiving-ua/support/iframe.html new file mode 100644 index 00000000000..61f18b8912d --- /dev/null +++ b/tests/wpt/web-platform-tests/presentation-api/receiving-ua/support/iframe.html @@ -0,0 +1,22 @@ + + +Helper functions invoked by a nested browsing context + + + + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/presentation-api/receiving-ua/support/stash.js b/tests/wpt/web-platform-tests/presentation-api/receiving-ua/support/stash.js index 616907d4f2c..eb63bb86237 100644 --- a/tests/wpt/web-platform-tests/presentation-api/receiving-ua/support/stash.js +++ b/tests/wpt/web-platform-tests/presentation-api/receiving-ua/support/stash.js @@ -1,5 +1,5 @@ var Stash = function(inbound, outbound) { - this.stashPath = '/presentation-api/controlling-ua/support/stash.py?id='; + this.stashPath = '/presentation-api/receiving-ua/support/stash.py?id='; this.inbound = inbound; this.outbound = outbound; } @@ -28,6 +28,21 @@ Stash.prototype.send = function(result) { }) }; +// upload a test result to a stash on wptserve via navigator.sendBeacon +Stash.prototype.sendBeacon = function(result) { + if ('sendBeacon' in navigator) { + navigator.sendBeacon(this.stashPath + this.outbound, JSON.stringify({ type: 'data', data: result })); + } + // Note: The following could be discarded, since XHR in synchronous mode is now being deprecated. + else { + return new Promise(resolve, reject => { + const xhr = new XMLHttpRequest(); + xhr.open('POST', this.stashPath + this.outbound, false); + xhr.send(JSON.stringify({ type: 'data', data: result })); + }); + } +}; + // wait until a test result is uploaded to a stash on wptserve Stash.prototype.receive = function() { return new Promise((resolve, reject) => { diff --git a/tests/wpt/web-platform-tests/quirks-mode/active-and-hover-manual.html b/tests/wpt/web-platform-tests/quirks-mode/active-and-hover-manual.html index f334d88fb73..10d787dd372 100644 --- a/tests/wpt/web-platform-tests/quirks-mode/active-and-hover-manual.html +++ b/tests/wpt/web-platform-tests/quirks-mode/active-and-hover-manual.html @@ -37,9 +37,8 @@ i j k l -m -n -o
        +m +n
        + + + + + +

        Remote Playback API IDL tests

        + + + +
        + + diff --git a/tests/wpt/web-platform-tests/resource-timing/resource-timing.js b/tests/wpt/web-platform-tests/resource-timing/resource-timing.js index 7a3e335f5e5..9167013a5ad 100644 --- a/tests/wpt/web-platform-tests/resource-timing/resource-timing.js +++ b/tests/wpt/web-platform-tests/resource-timing/resource-timing.js @@ -277,7 +277,7 @@ window.onload = // Per https://w3c.github.io/resource-timing/#performanceresourcetiming: // "[If redirected, startTime] MUST return the same value as redirectStart. Otherwise, // [startTime] MUST return the same value as fetchStart." - assert_true(actual.startTime == actual.redirectStart || actual.startTime == actual.fetchStart, + assert_in_array(actual.startTime, [actual.redirectStart, actual.fetchStart], "startTime must be equal to redirectStart or fetchStart."); // redirectStart <= redirectEnd <= fetchStart <= domainLookupStart <= domainLookupEnd <= connectStart diff --git a/tests/wpt/web-platform-tests/resource-timing/resource_TAO_match_origin.htm b/tests/wpt/web-platform-tests/resource-timing/resource_TAO_match_origin.htm new file mode 100644 index 00000000000..3ab239e90bb --- /dev/null +++ b/tests/wpt/web-platform-tests/resource-timing/resource_TAO_match_origin.htm @@ -0,0 +1,55 @@ + + + + +Resource Timing TAO tests + + + + + + + + + +

        Description

        +

        This test validates that for a cross origin resource, the timing allow check algorithm will pass when the Timing-Allow-Origin header value list contains a case-sensitive match for the value of the origin of the current document.

        +
        + + + diff --git a/tests/wpt/web-platform-tests/resource-timing/resource_TAO_match_wildcard.htm b/tests/wpt/web-platform-tests/resource-timing/resource_TAO_match_wildcard.htm new file mode 100644 index 00000000000..8b07b46672e --- /dev/null +++ b/tests/wpt/web-platform-tests/resource-timing/resource_TAO_match_wildcard.htm @@ -0,0 +1,55 @@ + + + + +Resource Timing TAO tests + + + + + + + + + +

        Description

        +

        This test validates that for a cross origin resource, the timing allow check algorithm will pass when the Timing-Allow-Origin header value list contains a wildcard ("*").

        +
        + + + diff --git a/tests/wpt/web-platform-tests/resource-timing/resource_TAO_multi.htm b/tests/wpt/web-platform-tests/resource-timing/resource_TAO_multi.htm new file mode 100644 index 00000000000..3b6c2e6b267 --- /dev/null +++ b/tests/wpt/web-platform-tests/resource-timing/resource_TAO_multi.htm @@ -0,0 +1,55 @@ + + + + +Resource Timing TAO tests + + + + + + + + + +

        Description

        +

        This test validates that for a cross origin resource, the timing allow check algorithm will pass when the HTTP response has multiple Timing-Allow-Origin header fields and the subsequent field value is separated by a comma.

        +
        + + + diff --git a/tests/wpt/web-platform-tests/resource-timing/resource_TAO_null.htm b/tests/wpt/web-platform-tests/resource-timing/resource_TAO_null.htm new file mode 100644 index 00000000000..419de693e1f --- /dev/null +++ b/tests/wpt/web-platform-tests/resource-timing/resource_TAO_null.htm @@ -0,0 +1,55 @@ + + + + +Resource Timing TAO tests + + + + + + + + + +

        Description

        +

        This test validates that for a cross origin resource, the timing allow check algorithm will fail when the value of Timing-Allow-Origin is null.

        +
        + + + diff --git a/tests/wpt/web-platform-tests/resource-timing/resource_TAO_origin.htm b/tests/wpt/web-platform-tests/resource-timing/resource_TAO_origin.htm new file mode 100644 index 00000000000..dc5efa43ee2 --- /dev/null +++ b/tests/wpt/web-platform-tests/resource-timing/resource_TAO_origin.htm @@ -0,0 +1,55 @@ + + + + +Resource Timing TAO tests + + + + + + + + + +

        Description

        +

        This test validates that for a cross origin resource, the timing allow check algorithm will pass when the value of Timing-Allow-Origin is a case-sensitive match for the value of the origin of the current document.

        +
        + + + diff --git a/tests/wpt/web-platform-tests/resource-timing/resource_TAO_origin_uppercase.htm b/tests/wpt/web-platform-tests/resource-timing/resource_TAO_origin_uppercase.htm new file mode 100644 index 00000000000..0b42166c0ee --- /dev/null +++ b/tests/wpt/web-platform-tests/resource-timing/resource_TAO_origin_uppercase.htm @@ -0,0 +1,55 @@ + + + + +Resource Timing TAO tests + + + + + + + + + +

        Description

        +

        This test validates that for a cross origin resource, the timing allow check algorithm will fail when the value of Timing-Allow-Origin is NOT a case-sensitive match for the value of the origin of the current document.

        +
        + + + diff --git a/tests/wpt/web-platform-tests/resource-timing/resource_TAO_space.htm b/tests/wpt/web-platform-tests/resource-timing/resource_TAO_space.htm new file mode 100644 index 00000000000..f3cbdc62c01 --- /dev/null +++ b/tests/wpt/web-platform-tests/resource-timing/resource_TAO_space.htm @@ -0,0 +1,55 @@ + + + + +Resource Timing TAO tests + + + + + + + + + +

        Description

        +

        This test validates that for a cross origin resource, the timing allow check algorithm will fail if the Timing-Allow-Origin header value list contains [origin|*]{2,}, separated by space.

        +
        + + + diff --git a/tests/wpt/web-platform-tests/resource-timing/resource_TAO_wildcard.htm b/tests/wpt/web-platform-tests/resource-timing/resource_TAO_wildcard.htm new file mode 100644 index 00000000000..407c642d9d4 --- /dev/null +++ b/tests/wpt/web-platform-tests/resource-timing/resource_TAO_wildcard.htm @@ -0,0 +1,55 @@ + + + + +Resource Timing TAO tests + + + + + + + + + +

        Description

        +

        This test validates that for a cross origin resource, the timing allow check algorithm will pass when the Timing-Allow-Origin header value is a wildcard ("*").

        +
        + + + diff --git a/tests/wpt/web-platform-tests/resource-timing/resource_TAO_zero.htm b/tests/wpt/web-platform-tests/resource-timing/resource_TAO_zero.htm new file mode 100644 index 00000000000..0fe16c082a0 --- /dev/null +++ b/tests/wpt/web-platform-tests/resource-timing/resource_TAO_zero.htm @@ -0,0 +1,55 @@ + + + + +Resource Timing TAO tests + + + + + + + + + +

        Description

        +

        This test validates that for a cross origin resource, the timing allow check algorithm will fail when the HTTP response includes zero Timing-Allow-Origin header value.

        +
        + + + diff --git a/tests/wpt/web-platform-tests/resource-timing/resources/TAOResponse.py b/tests/wpt/web-platform-tests/resource-timing/resources/TAOResponse.py new file mode 100644 index 00000000000..cc8fa5f0f93 --- /dev/null +++ b/tests/wpt/web-platform-tests/resource-timing/resources/TAOResponse.py @@ -0,0 +1,38 @@ +def main(request, response): + origin = request.headers['origin'] + response.headers.set('Access-Control-Allow-Origin', origin) + + tao = request.GET.first('tao') + + if tao == 'zero': + # zero TAO value, fail + pass + elif tao == 'wildcard': + # wildcard, pass + response.headers.set('Timing-Allow-Origin', '*') + elif tao == 'null': + # null, fail + response.headers.set('Timing-Allow-Origin', 'null') + elif tao == 'origin': + # case-sensitive match for origin, pass + response.headers.set('Timing-Allow-Origin', origin) + elif tao == 'space': + # space seperated list of origin and wildcard, fail + response.headers.set('Timing-Allow-Origin', (origin + ' *')) + elif tao == 'multi': + # more than one TAO values, seperated by common, pass + response.headers.set('Timing-Allow-Origin', origin) + response.headers.append('Timing-Allow-Origin', '*') + elif tao == 'match_origin': + # contains a match of origin, seperated by common, pass + response.headers.set('Timing-Allow-Origin', origin) + response.headers.append('Timing-Allow-Origin', "fake") + elif tao == 'match_wildcard': + # contains a wildcard, seperated by common, pass + response.headers.set('Timing-Allow-Origin', "fake") + response.headers.append('Timing-Allow-Origin', '*') + elif tao == 'uppercase': + # non-case-sensitive match for origin, fail + response.headers.set('Timing-Allow-Origin', origin.upper()) + else: + pass \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/resource-timing/resources/iframe_TAO_match_origin.html b/tests/wpt/web-platform-tests/resource-timing/resources/iframe_TAO_match_origin.html new file mode 100644 index 00000000000..cf68aade795 --- /dev/null +++ b/tests/wpt/web-platform-tests/resource-timing/resources/iframe_TAO_match_origin.html @@ -0,0 +1,21 @@ + + + diff --git a/tests/wpt/web-platform-tests/resource-timing/resources/iframe_TAO_match_wildcard.html b/tests/wpt/web-platform-tests/resource-timing/resources/iframe_TAO_match_wildcard.html new file mode 100644 index 00000000000..a6a03e0680e --- /dev/null +++ b/tests/wpt/web-platform-tests/resource-timing/resources/iframe_TAO_match_wildcard.html @@ -0,0 +1,21 @@ + + + diff --git a/tests/wpt/web-platform-tests/resource-timing/resources/iframe_TAO_multi.html b/tests/wpt/web-platform-tests/resource-timing/resources/iframe_TAO_multi.html new file mode 100644 index 00000000000..0696dbe3e50 --- /dev/null +++ b/tests/wpt/web-platform-tests/resource-timing/resources/iframe_TAO_multi.html @@ -0,0 +1,21 @@ + + + diff --git a/tests/wpt/web-platform-tests/resource-timing/resources/iframe_TAO_null.html b/tests/wpt/web-platform-tests/resource-timing/resources/iframe_TAO_null.html new file mode 100644 index 00000000000..7d47a2076f8 --- /dev/null +++ b/tests/wpt/web-platform-tests/resource-timing/resources/iframe_TAO_null.html @@ -0,0 +1,21 @@ + + + diff --git a/tests/wpt/web-platform-tests/resource-timing/resources/iframe_TAO_origin.html b/tests/wpt/web-platform-tests/resource-timing/resources/iframe_TAO_origin.html new file mode 100644 index 00000000000..c75b0752406 --- /dev/null +++ b/tests/wpt/web-platform-tests/resource-timing/resources/iframe_TAO_origin.html @@ -0,0 +1,21 @@ + + + diff --git a/tests/wpt/web-platform-tests/resource-timing/resources/iframe_TAO_origin_uppercase.html b/tests/wpt/web-platform-tests/resource-timing/resources/iframe_TAO_origin_uppercase.html new file mode 100644 index 00000000000..7404035d1ab --- /dev/null +++ b/tests/wpt/web-platform-tests/resource-timing/resources/iframe_TAO_origin_uppercase.html @@ -0,0 +1,21 @@ + + + diff --git a/tests/wpt/web-platform-tests/resource-timing/resources/iframe_TAO_space.html b/tests/wpt/web-platform-tests/resource-timing/resources/iframe_TAO_space.html new file mode 100644 index 00000000000..2a484ed5140 --- /dev/null +++ b/tests/wpt/web-platform-tests/resource-timing/resources/iframe_TAO_space.html @@ -0,0 +1,21 @@ + + + diff --git a/tests/wpt/web-platform-tests/resource-timing/resources/iframe_TAO_wildcard.html b/tests/wpt/web-platform-tests/resource-timing/resources/iframe_TAO_wildcard.html new file mode 100644 index 00000000000..3b5be4cdab9 --- /dev/null +++ b/tests/wpt/web-platform-tests/resource-timing/resources/iframe_TAO_wildcard.html @@ -0,0 +1,21 @@ + + + diff --git a/tests/wpt/web-platform-tests/resource-timing/resources/iframe_TAO_zero.html b/tests/wpt/web-platform-tests/resource-timing/resources/iframe_TAO_zero.html new file mode 100644 index 00000000000..76c5938689a --- /dev/null +++ b/tests/wpt/web-platform-tests/resource-timing/resources/iframe_TAO_zero.html @@ -0,0 +1,21 @@ + + + diff --git a/tests/wpt/web-platform-tests/resources/.gitmodules b/tests/wpt/web-platform-tests/resources/.gitmodules deleted file mode 100644 index 89035729d51..00000000000 --- a/tests/wpt/web-platform-tests/resources/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "webidl2"] - path = webidl2 - url = https://github.com/darobin/webidl2.js.git diff --git a/tests/wpt/web-platform-tests/resources/OWNERS b/tests/wpt/web-platform-tests/resources/OWNERS new file mode 100644 index 00000000000..fadaf79c82f --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/OWNERS @@ -0,0 +1,2 @@ +@jgraham +@gsnedders \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/resources/examples/apisample.htm b/tests/wpt/web-platform-tests/resources/examples/apisample.htm deleted file mode 100644 index 504a343acdb..00000000000 --- a/tests/wpt/web-platform-tests/resources/examples/apisample.htm +++ /dev/null @@ -1,175 +0,0 @@ - - - -Sample HTML5 API Tests - - - -

        Sample HTML5 API Tests

        -
        - - - - - - - - - diff --git a/tests/wpt/web-platform-tests/resources/examples/apisample14.html b/tests/wpt/web-platform-tests/resources/examples/apisample14.html deleted file mode 100644 index 89803f0bb6a..00000000000 --- a/tests/wpt/web-platform-tests/resources/examples/apisample14.html +++ /dev/null @@ -1,29 +0,0 @@ - - - -Dedicated Worker Tests - - - - -

        Dedicated Web Worker Tests

        -

        Demonstrates running testharness based tests inside a dedicated web worker. -

        The test harness is expected to fail due to an uncaught exception in one worker.

        -
        - - - diff --git a/tests/wpt/web-platform-tests/resources/examples/apisample15.html b/tests/wpt/web-platform-tests/resources/examples/apisample15.html deleted file mode 100644 index 631d1922bac..00000000000 --- a/tests/wpt/web-platform-tests/resources/examples/apisample15.html +++ /dev/null @@ -1,26 +0,0 @@ - - - -Example with a shared worker - - - - -

        Shared Web Worker Tests

        -

        Demonstrates running testharness based tests inside a shared worker. -

        The test harness should time out due to one of the tests in the worker timing out. -

        This test assumes that the browser supports shared web workers. -

        - - - diff --git a/tests/wpt/web-platform-tests/resources/examples/apisample17.html b/tests/wpt/web-platform-tests/resources/examples/apisample17.html deleted file mode 100644 index c27c417b8fb..00000000000 --- a/tests/wpt/web-platform-tests/resources/examples/apisample17.html +++ /dev/null @@ -1,59 +0,0 @@ - - - -Sample for using generate_tests to create a series of tests that share the same callback. - - - - - - - - - - diff --git a/tests/wpt/web-platform-tests/resources/examples/apisample19.html b/tests/wpt/web-platform-tests/resources/examples/apisample19.html deleted file mode 100644 index 84b9e122aba..00000000000 --- a/tests/wpt/web-platform-tests/resources/examples/apisample19.html +++ /dev/null @@ -1,26 +0,0 @@ - - - -Example with iframe that consolidates tests via fetch_tests_from_window - - - - - -

        Fetching Tests From a Child Context

        -

        This test demonstrates the use of fetch_tests_from_window to pull -tests from an iframe into the primary document.

        -

        The test suite will not complete until tests in the child context have finished -executing

        -
        - - - - - - \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/resources/examples/apisample2.htm b/tests/wpt/web-platform-tests/resources/examples/apisample2.htm deleted file mode 100644 index 4a4c16b4dfa..00000000000 --- a/tests/wpt/web-platform-tests/resources/examples/apisample2.htm +++ /dev/null @@ -1,19 +0,0 @@ - - - -Sample HTML5 API Tests - - -

        Sample HTML5 API Tests

        -

        There should be two results

        -
        - - - diff --git a/tests/wpt/web-platform-tests/resources/examples/apisample3.htm b/tests/wpt/web-platform-tests/resources/examples/apisample3.htm deleted file mode 100644 index 4dbbf9a871b..00000000000 --- a/tests/wpt/web-platform-tests/resources/examples/apisample3.htm +++ /dev/null @@ -1,17 +0,0 @@ - - - -Sample HTML5 API Tests - - - - -

        Sample HTML5 API Tests

        -
        - - - diff --git a/tests/wpt/web-platform-tests/resources/examples/apisample4.htm b/tests/wpt/web-platform-tests/resources/examples/apisample4.htm deleted file mode 100644 index c8fbbded695..00000000000 --- a/tests/wpt/web-platform-tests/resources/examples/apisample4.htm +++ /dev/null @@ -1,16 +0,0 @@ - - - -Harness Handling Uncaught Exception - - - - -

        Harness Handling Uncaught Exception

        -
        - - - diff --git a/tests/wpt/web-platform-tests/resources/examples/apisample5.htm b/tests/wpt/web-platform-tests/resources/examples/apisample5.htm deleted file mode 100644 index 3edf602a1e6..00000000000 --- a/tests/wpt/web-platform-tests/resources/examples/apisample5.htm +++ /dev/null @@ -1,18 +0,0 @@ - - - -Harness Ignoring Uncaught Exception - - - - -

        Harness Ignoring Uncaught Exception

        -
        - - - diff --git a/tests/wpt/web-platform-tests/resources/examples/apisample6.html b/tests/wpt/web-platform-tests/resources/examples/apisample6.html deleted file mode 100644 index 7459c54d572..00000000000 --- a/tests/wpt/web-platform-tests/resources/examples/apisample6.html +++ /dev/null @@ -1,10 +0,0 @@ - -Example with file_is_test - - - \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/resources/examples/apisample7.html b/tests/wpt/web-platform-tests/resources/examples/apisample7.html deleted file mode 100644 index 6885f52f8a5..00000000000 --- a/tests/wpt/web-platform-tests/resources/examples/apisample7.html +++ /dev/null @@ -1,10 +0,0 @@ - -Example with file_is_test (should fail) - - - \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/resources/examples/apisample8.html b/tests/wpt/web-platform-tests/resources/examples/apisample8.html deleted file mode 100644 index 70853d9c6c5..00000000000 --- a/tests/wpt/web-platform-tests/resources/examples/apisample8.html +++ /dev/null @@ -1,8 +0,0 @@ - -Example single page test with no body - - - \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/resources/examples/apisample9.html b/tests/wpt/web-platform-tests/resources/examples/apisample9.html deleted file mode 100644 index f84433dd198..00000000000 --- a/tests/wpt/web-platform-tests/resources/examples/apisample9.html +++ /dev/null @@ -1,7 +0,0 @@ - -Example single page test with no asserts - - - \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/resources/idlharness.js b/tests/wpt/web-platform-tests/resources/idlharness.js index db7db151553..e83b2152961 100644 --- a/tests/wpt/web-platform-tests/resources/idlharness.js +++ b/tests/wpt/web-platform-tests/resources/idlharness.js @@ -8,7 +8,7 @@ policies and contribution forms [3]. [3] http://www.w3.org/2004/10/27-testcases */ -/* For user documentation see docs/idlharness.md */ +/* For user documentation see docs/_writing-tests/idlharness.md */ /** * Notes for people who want to edit this file (not just use it as a library): @@ -437,6 +437,11 @@ IdlArray.prototype.test = function() IdlArray.prototype.assert_type_is = function(value, type) //@{ { + if (type.idlType in this.members + && this.members[type.idlType] instanceof IdlTypedef) { + this.assert_type_is(value, this.members[type.idlType].idlType); + return; + } if (type.union) { for (var i = 0; i < type.idlType.length; i++) { try { @@ -484,7 +489,7 @@ IdlArray.prototype.assert_type_is = function(value, type) if (type.sequence) { - assert_true(Array.isArray(value), "is not array"); + assert_true(Array.isArray(value), "should be an Array"); if (!value.length) { // Nothing we can do. @@ -495,7 +500,7 @@ IdlArray.prototype.assert_type_is = function(value, type) } if (type.generic === "Promise") { - assert_true("then" in value, "Attribute with a Promise type has a then property"); + assert_true("then" in value, "Attribute with a Promise type should have a then property"); // TODO: Ideally, we would check on project fulfillment // that we get the right type // but that would require making the type check async @@ -528,38 +533,38 @@ IdlArray.prototype.assert_type_is = function(value, type) case "byte": assert_equals(typeof value, "number"); - assert_equals(value, Math.floor(value), "not an integer"); - assert_true(-128 <= value && value <= 127, "byte " + value + " not in range [-128, 127]"); + assert_equals(value, Math.floor(value), "should be an integer"); + assert_true(-128 <= value && value <= 127, "byte " + value + " should be in range [-128, 127]"); return; case "octet": assert_equals(typeof value, "number"); - assert_equals(value, Math.floor(value), "not an integer"); - assert_true(0 <= value && value <= 255, "octet " + value + " not in range [0, 255]"); + assert_equals(value, Math.floor(value), "should be an integer"); + assert_true(0 <= value && value <= 255, "octet " + value + " should be in range [0, 255]"); return; case "short": assert_equals(typeof value, "number"); - assert_equals(value, Math.floor(value), "not an integer"); - assert_true(-32768 <= value && value <= 32767, "short " + value + " not in range [-32768, 32767]"); + assert_equals(value, Math.floor(value), "should be an integer"); + assert_true(-32768 <= value && value <= 32767, "short " + value + " should be in range [-32768, 32767]"); return; case "unsigned short": assert_equals(typeof value, "number"); - assert_equals(value, Math.floor(value), "not an integer"); - assert_true(0 <= value && value <= 65535, "unsigned short " + value + " not in range [0, 65535]"); + assert_equals(value, Math.floor(value), "should be an integer"); + assert_true(0 <= value && value <= 65535, "unsigned short " + value + " should be in range [0, 65535]"); return; case "long": assert_equals(typeof value, "number"); - assert_equals(value, Math.floor(value), "not an integer"); - assert_true(-2147483648 <= value && value <= 2147483647, "long " + value + " not in range [-2147483648, 2147483647]"); + assert_equals(value, Math.floor(value), "should be an integer"); + assert_true(-2147483648 <= value && value <= 2147483647, "long " + value + " should be in range [-2147483648, 2147483647]"); return; case "unsigned long": assert_equals(typeof value, "number"); - assert_equals(value, Math.floor(value), "not an integer"); - assert_true(0 <= value && value <= 4294967295, "unsigned long " + value + " not in range [0, 4294967295]"); + assert_equals(value, Math.floor(value), "should be an integer"); + assert_true(0 <= value && value <= 4294967295, "unsigned long " + value + " should be in range [0, 4294967295]"); return; case "long long": @@ -569,7 +574,7 @@ IdlArray.prototype.assert_type_is = function(value, type) case "unsigned long long": case "DOMTimeStamp": assert_equals(typeof value, "number"); - assert_true(0 <= value, "unsigned long long is negative"); + assert_true(0 <= value, "unsigned long long should be positive"); return; case "float": @@ -612,7 +617,7 @@ IdlArray.prototype.assert_type_is = function(value, type) return; case "object": - assert_true(typeof value == "object" || typeof value == "function", "wrong type: not object or function"); + assert_in_array(typeof value, ["object", "function"], "wrong type: not object or function"); return; } @@ -628,12 +633,12 @@ IdlArray.prototype.assert_type_is = function(value, type) // in an infinite loop. TODO: This means we don't have tests for // NoInterfaceObject interfaces, and we also can't test objects that // come from another self. - assert_true(typeof value == "object" || typeof value == "function", "wrong type: not object or function"); + assert_in_array(typeof value, ["object", "function"], "wrong type: not object or function"); if (value instanceof Object && !this.members[type].has_extended_attribute("NoInterfaceObject") && type in self) { - assert_true(value instanceof self[type], "not instanceof " + type); + assert_true(value instanceof self[type], "instanceof " + type); } } else if (this.members[type] instanceof IdlEnum) @@ -644,10 +649,6 @@ IdlArray.prototype.assert_type_is = function(value, type) { // TODO: Test when we actually have something to test this on } - else if (this.members[type] instanceof IdlTypedef) - { - // TODO: Test when we actually have something to test this on - } else { throw "Type " + type + " isn't an interface or dictionary"; @@ -837,11 +838,11 @@ IdlInterface.prototype.test_self = function() assert_own_property(self, this.name, "self does not have own property " + format_value(this.name)); var desc = Object.getOwnPropertyDescriptor(self, this.name); - assert_false("get" in desc, "self's property " + format_value(this.name) + " has getter"); - assert_false("set" in desc, "self's property " + format_value(this.name) + " has setter"); - assert_true(desc.writable, "self's property " + format_value(this.name) + " is not writable"); - assert_false(desc.enumerable, "self's property " + format_value(this.name) + " is enumerable"); - assert_true(desc.configurable, "self's property " + format_value(this.name) + " is not configurable"); + assert_false("get" in desc, "self's property " + format_value(this.name) + " should not have a getter"); + assert_false("set" in desc, "self's property " + format_value(this.name) + " should not have a setter"); + assert_true(desc.writable, "self's property " + format_value(this.name) + " should be writable"); + assert_false(desc.enumerable, "self's property " + format_value(this.name) + " should not be enumerable"); + assert_true(desc.configurable, "self's property " + format_value(this.name) + " should be configurable"); if (this.is_callback()) { // "The internal [[Prototype]] property of an interface object for @@ -934,11 +935,11 @@ IdlInterface.prototype.test_self = function() // a Number." assert_own_property(self[this.name], "length"); var desc = Object.getOwnPropertyDescriptor(self[this.name], "length"); - assert_false("get" in desc, this.name + ".length has getter"); - assert_false("set" in desc, this.name + ".length has setter"); - assert_false(desc.writable, this.name + ".length is writable"); - assert_false(desc.enumerable, this.name + ".length is enumerable"); - assert_true(desc.configurable, this.name + ".length is not configurable"); + assert_false("get" in desc, this.name + ".length should not have a getter"); + assert_false("set" in desc, this.name + ".length should not have a setter"); + assert_false(desc.writable, this.name + ".length should not be writable"); + assert_false(desc.enumerable, this.name + ".length should not be enumerable"); + assert_true(desc.configurable, this.name + ".length should be configurable"); var constructors = this.extAttrs .filter(function(attr) { return attr.name == "Constructor"; }); @@ -962,15 +963,67 @@ IdlInterface.prototype.test_self = function() assert_own_property(self[this.name], "name"); var desc = Object.getOwnPropertyDescriptor(self[this.name], "name"); - assert_false("get" in desc, this.name + ".name has getter"); - assert_false("set" in desc, this.name + ".name has setter"); - assert_false(desc.writable, this.name + ".name is writable"); - assert_false(desc.enumerable, this.name + ".name is enumerable"); - assert_true(desc.configurable, this.name + ".name is not configurable"); + assert_false("get" in desc, this.name + ".name should not have a getter"); + assert_false("set" in desc, this.name + ".name should not have a setter"); + assert_false(desc.writable, this.name + ".name should not be writable"); + assert_false(desc.enumerable, this.name + ".name should not be enumerable"); + assert_true(desc.configurable, this.name + ".name should be configurable"); assert_equals(self[this.name].name, this.name, "wrong value for " + this.name + ".name"); }.bind(this), this.name + " interface object name"); } + + if (this.has_extended_attribute("LegacyWindowAlias")) { + test(function() + { + var aliasAttrs = this.extAttrs.filter(function(o) { return o.name === "LegacyWindowAlias"; }); + if (aliasAttrs.length > 1) { + throw "Invalid IDL: multiple LegacyWindowAlias extended attributes on " + this.name; + } + if (this.is_callback()) { + throw "Invalid IDL: LegacyWindowAlias extended attribute on non-interface " + this.name; + } + if (this.exposureSet.indexOf("Window") === -1) { + throw "Invalid IDL: LegacyWindowAlias extended attribute on " + this.name + " which is not exposed in Window"; + } + // TODO: when testing of [NoInterfaceObject] interfaces is supported, + // check that it's not specified together with LegacyWindowAlias. + + // TODO: maybe check that [LegacyWindowAlias] is not specified on a partial interface. + + var rhs = aliasAttrs[0].rhs; + if (!rhs) { + throw "Invalid IDL: LegacyWindowAlias extended attribute on " + this.name + " without identifier"; + } + var aliases; + if (rhs.type === "identifier-list") { + aliases = rhs.value; + } else { // rhs.type === identifier + aliases = [ rhs.value ]; + } + + // OK now actually check the aliases... + var alias; + if (exposed_in(exposure_set(this, this.exposureSet)) && 'document' in self) { + for (alias of aliases) { + assert_true(alias in self, alias + " should exist"); + assert_equals(self[alias], self[this.name], "self." + alias + " should be the same value as self." + this.name); + var desc = Object.getOwnPropertyDescriptor(self, alias); + assert_equals(desc.value, self[this.name], "wrong value in " + alias + " property descriptor"); + assert_true(desc.writable, alias + " should be writable"); + assert_false(desc.enumerable, alias + " should not be enumerable"); + assert_true(desc.configurable, alias + " should be configurable"); + assert_false('get' in desc, alias + " should not have a getter"); + assert_false('set' in desc, alias + " should not have a setter"); + } + } else { + for (alias of aliases) { + assert_false(alias in self, alias + " should not exist"); + } + } + + }.bind(this), this.name + " interface: legacy window alias"); + } // TODO: Test named constructors if I find any interfaces that have them. test(function() @@ -1001,11 +1054,11 @@ IdlInterface.prototype.test_self = function() assert_own_property(self[this.name], "prototype", 'interface "' + this.name + '" does not have own property "prototype"'); var desc = Object.getOwnPropertyDescriptor(self[this.name], "prototype"); - assert_false("get" in desc, this.name + ".prototype has getter"); - assert_false("set" in desc, this.name + ".prototype has setter"); - assert_false(desc.writable, this.name + ".prototype is writable"); - assert_false(desc.enumerable, this.name + ".prototype is enumerable"); - assert_false(desc.configurable, this.name + ".prototype is configurable"); + assert_false("get" in desc, this.name + ".prototype should not have a getter"); + assert_false("set" in desc, this.name + ".prototype should not have a setter"); + assert_false(desc.writable, this.name + ".prototype should not be writable"); + assert_false(desc.enumerable, this.name + ".prototype should not be enumerable"); + assert_false(desc.configurable, this.name + ".prototype should not be configurable"); // Next, test that the [[Prototype]] of the interface prototype object // is correct. (This is made somewhat difficult by the existence of @@ -1068,16 +1121,99 @@ IdlInterface.prototype.test_self = function() // "The class string of an interface prototype object is the // concatenation of the interface’s identifier and the string // “Prototype”." - assert_class_string(self[this.name].prototype, this.name + "Prototype", - "class string of " + this.name + ".prototype"); + + // Skip these tests for now due to a specification issue about + // prototype name. + // https://www.w3.org/Bugs/Public/show_bug.cgi?id=28244 + + // assert_class_string(self[this.name].prototype, this.name + "Prototype", + // "class string of " + this.name + ".prototype"); + // String() should end up calling {}.toString if nothing defines a // stringifier. if (!this.has_stringifier()) { - assert_equals(String(self[this.name].prototype), "[object " + this.name + "Prototype]", - "String(" + this.name + ".prototype)"); + // assert_equals(String(self[this.name].prototype), "[object " + this.name + "Prototype]", + // "String(" + this.name + ".prototype)"); } }.bind(this), this.name + " interface: existence and properties of interface prototype object"); + if (this.is_global() && typeof Object.setPrototypeOf === "function") { + // These functions test WebIDL as of 2017-06-06. + // https://heycam.github.io/webidl/#platform-object-setprototypeof + test(function() { + var originalValue = Object.getPrototypeOf(self[this.name].prototype); + var newValue = Object.create(null); + + assert_throws(new TypeError(), function() { + Object.setPrototypeOf(self[this.name].prototype, newValue); + }); + + assert_equals( + Object.getPrototypeOf(self[this.name].prototype), + originalValue, + "original value not modified" + ); + }.bind(this), this.name + " interface: internal [[SetPrototypeOf]] method " + + "of global platform object - setting to a new value via Object.setPrototypeOf " + + "should throw a TypeError"); + + test(function() { + var originalValue = Object.getPrototypeOf(self[this.name].prototype); + var newValue = Object.create(null); + + assert_throws(new TypeError(), function() { + self[this.name].prototype.__proto__ = newValue; + }); + + assert_equals( + Object.getPrototypeOf(self[this.name].prototype), + originalValue, + "original value not modified" + ); + }.bind(this), this.name + " interface: internal [[SetPrototypeOf]] method " + + "of global platform object - setting to a new value via __proto__ " + + "should throw a TypeError"); + + test(function() { + var originalValue = Object.getPrototypeOf(self[this.name].prototype); + var newValue = Object.create(null); + + assert_false(Reflect.setPrototypeOf(self[this.name].prototype.__proto__, newValue)); + + assert_equals( + Object.getPrototypeOf(self[this.name].prototype), + originalValue, + "original value not modified" + ); + }.bind(this), this.name + " interface: internal [[SetPrototypeOf]] method " + + "of global platform object - setting to a new value via Reflect.setPrototypeOf " + + "should return false"); + + test(function() { + var originalValue = Object.getPrototypeOf(self[this.name].prototype); + + Object.setPrototypeOf(self[this.name].prototype, originalValue); + }.bind(this), this.name + " interface: internal [[SetPrototypeOf]] method " + + "of global platform object - setting to its original value via Object.setPrototypeOf " + + "should not throw"); + + test(function() { + var originalValue = Object.getPrototypeOf(self[this.name].prototype); + + self[this.name].prototype.__proto__ = originalValue; + }.bind(this), this.name + " interface: internal [[SetPrototypeOf]] method " + + "of global platform object - setting to its original value via __proto__ " + + "should not throw"); + + test(function() { + var originalValue = Object.getPrototypeOf(self[this.name].prototype); + + assert_true(Reflect.setPrototypeOf(self[this.name].prototype, originalValue)); + }.bind(this), this.name + " interface: internal [[SetPrototypeOf]] method " + + "of global platform object - setting to its original value via Reflect.setPrototypeOf " + + "should return true"); + } + test(function() { if (this.is_callback() && !this.has_constants()) { @@ -1104,11 +1240,11 @@ IdlInterface.prototype.test_self = function() assert_own_property(self[this.name].prototype, "constructor", this.name + '.prototype does not have own property "constructor"'); var desc = Object.getOwnPropertyDescriptor(self[this.name].prototype, "constructor"); - assert_false("get" in desc, this.name + ".prototype.constructor has getter"); - assert_false("set" in desc, this.name + ".prototype.constructor has setter"); - assert_true(desc.writable, this.name + ".prototype.constructor is not writable"); - assert_false(desc.enumerable, this.name + ".prototype.constructor is enumerable"); - assert_true(desc.configurable, this.name + ".prototype.constructor in not configurable"); + assert_false("get" in desc, this.name + ".prototype.constructor should not have a getter"); + assert_false("set" in desc, this.name + ".prototype.constructor should not have a setter"); + assert_true(desc.writable, this.name + ".prototype.constructor should be writable"); + assert_false(desc.enumerable, this.name + ".prototype.constructor should not be enumerable"); + assert_true(desc.configurable, this.name + ".prototype.constructor should be configurable"); assert_equals(self[this.name].prototype.constructor, self[this.name], this.name + '.prototype.constructor is not the same object as ' + this.name); }.bind(this), this.name + ' interface: existence and properties of interface prototype object\'s "constructor" property'); @@ -1139,11 +1275,11 @@ IdlInterface.prototype.test_member_const = function(member) // "The property has attributes { [[Writable]]: false, // [[Enumerable]]: true, [[Configurable]]: false }." var desc = Object.getOwnPropertyDescriptor(self[this.name], member.name); - assert_false("get" in desc, "property has getter"); - assert_false("set" in desc, "property has setter"); - assert_false(desc.writable, "property is writable"); - assert_true(desc.enumerable, "property is not enumerable"); - assert_false(desc.configurable, "property is configurable"); + assert_false("get" in desc, "property should not have a getter"); + assert_false("set" in desc, "property should not have a setter"); + assert_false(desc.writable, "property should not be writable"); + assert_true(desc.enumerable, "property should be enumerable"); + assert_false(desc.configurable, "property should not be configurable"); }.bind(this), this.name + " interface: constant " + member.name + " on interface object"); // "In addition, a property with the same characteristics must @@ -1166,11 +1302,11 @@ IdlInterface.prototype.test_member_const = function(member) assert_equals(self[this.name].prototype[member.name], constValue(member.value), "property has wrong value"); var desc = Object.getOwnPropertyDescriptor(self[this.name], member.name); - assert_false("get" in desc, "property has getter"); - assert_false("set" in desc, "property has setter"); - assert_false(desc.writable, "property is writable"); - assert_true(desc.enumerable, "property is not enumerable"); - assert_false(desc.configurable, "property is configurable"); + assert_false("get" in desc, "property should not have a getter"); + assert_false("set" in desc, "property should not have a setter"); + assert_false(desc.writable, "property should not be writable"); + assert_true(desc.enumerable, "property should be enumerable"); + assert_false(desc.configurable, "property should not be configurable"); }.bind(this), this.name + " interface: constant " + member.name + " on interface prototype object"); }; @@ -1202,7 +1338,7 @@ IdlInterface.prototype.test_member_attribute = function(member) "The global object must have a property " + format_value(member.name)); assert_false(member.name in self[this.name].prototype, - "The prototype object must not have a property " + + "The prototype object should not have a property " + format_value(member.name)); var getter = Object.getOwnPropertyDescriptor(self, member.name).get; @@ -1337,11 +1473,11 @@ IdlInterface.prototype.do_member_operation_asserts = function(memberHolderObject // "The property has attributes { [[Writable]]: B, // [[Enumerable]]: true, [[Configurable]]: B }, where B is false if the // operation is unforgeable on the interface, and true otherwise". - assert_false("get" in desc, "property has getter"); - assert_false("set" in desc, "property has setter"); + assert_false("get" in desc, "property should not have a getter"); + assert_false("set" in desc, "property should not have a setter"); assert_equals(desc.writable, !operationUnforgeable, "property should be writable if and only if not unforgeable"); - assert_true(desc.enumerable, "property is not enumerable"); + assert_true(desc.enumerable, "property should be enumerable"); assert_equals(desc.configurable, !operationUnforgeable, "property should be configurable if and only if not unforgeable"); // "The value of the property is a Function object whose @@ -1424,9 +1560,9 @@ IdlInterface.prototype.test_member_iterable = function(member) test(function() { var descriptor = Object.getOwnPropertyDescriptor(self[interfaceName].prototype, Symbol.iterator); - assert_true(descriptor.writable, "property is not writable"); - assert_true(descriptor.configurable, "property is not configurable"); - assert_false(descriptor.enumerable, "property is enumerable"); + assert_true(descriptor.writable, "property should be writable"); + assert_true(descriptor.configurable, "property should be configurable"); + assert_false(descriptor.enumerable, "property should not be enumerable"); assert_equals(self[interfaceName].prototype[Symbol.iterator].name, isPairIterator ? "entries" : "values", "@@iterator function does not have the right name"); }, "Testing Symbol.iterator property of iterable interface " + interfaceName); @@ -1475,11 +1611,11 @@ IdlInterface.prototype.test_member_stringifier = function(member) // "The property has attributes { [[Writable]]: B, // [[Enumerable]]: true, [[Configurable]]: B }, where B is false if the // stringifier is unforgeable on the interface, and true otherwise." - assert_false("get" in desc, "property has getter"); - assert_false("set" in desc, "property has setter"); + assert_false("get" in desc, "property should not have a getter"); + assert_false("set" in desc, "property should not have a setter"); assert_equals(desc.writable, !stringifierUnforgeable, "property should be writable if and only if not unforgeable"); - assert_true(desc.enumerable, "property is not enumerable"); + assert_true(desc.enumerable, "property should be enumerable"); assert_equals(desc.configurable, !stringifierUnforgeable, "property should be configurable if and only if not unforgeable"); // "The value of the property is a Function object, which behaves as @@ -1626,6 +1762,13 @@ IdlInterface.prototype.test_object = function(desc) IdlInterface.prototype.test_primary_interface_of = function(desc, obj, exception, expected_typeof) //@{ { + // Only the object itself, not its members, are tested here, so if the + // interface is untested, there is nothing to do. + if (this.untested) + { + return; + } + // We can't easily test that its prototype is correct if there's no // interface object, or the object is from a different global environment // (not instanceof Object). TODO: test in this case that its prototype at @@ -1677,6 +1820,9 @@ IdlInterface.prototype.test_interface_of = function(desc, obj, exception, expect for (var i = 0; i < this.members.length; i++) { var member = this.members[i]; + if (member.untested) { + continue; + } if (!exposed_in(exposure_set(member, this.exposureSet))) { test(function() { assert_false(member.name in obj); @@ -1837,9 +1983,9 @@ IdlInterface.prototype.do_interface_attribute_asserts = function(obj, member, a_ // "G is the attribute getter, defined below; and // "S is the attribute setter, also defined below." var desc = Object.getOwnPropertyDescriptor(obj, member.name); - assert_false("value" in desc, 'property descriptor has value but is supposed to be accessor'); - assert_false("writable" in desc, 'property descriptor has "writable" field but is supposed to be accessor'); - assert_true(desc.enumerable, "property is not enumerable"); + assert_false("value" in desc, 'property descriptor should not have a "value" field'); + assert_false("writable" in desc, 'property descriptor should not have a "writable" field'); + assert_true(desc.enumerable, "property should be enumerable"); if (member.isUnforgeable) { assert_false(desc.configurable, "[Unforgeable] property must not be configurable"); @@ -1884,6 +2030,7 @@ IdlInterface.prototype.do_interface_attribute_asserts = function(obj, member, a_ // TODO: Test calling setter on the interface prototype (should throw // TypeError in most cases). if (member.readonly + && !member.has_extended_attribute("LenientSetter") && !member.has_extended_attribute("PutForwards") && !member.has_extended_attribute("Replaceable")) { @@ -2023,8 +2170,8 @@ function IdlTypedef(obj) /** Self-explanatory. */ this.name = obj.name; - /** An array of values produced by the "typedef" production. */ - this.values = obj.values; + /** The idlType that we are supposed to be typedeffing to. */ + this.idlType = obj.idlType; } //@} diff --git a/tests/wpt/web-platform-tests/resources/readme.md b/tests/wpt/web-platform-tests/resources/readme.md index eed90906423..8583d5f8d5b 100644 --- a/tests/wpt/web-platform-tests/resources/readme.md +++ b/tests/wpt/web-platform-tests/resources/readme.md @@ -16,8 +16,7 @@ To use testharness.js you must include two scripts, in the order given: ## Full documentation ## -Full user documentation for the API is in the -[docs/api.md](https://github.com/w3c/testharness.js/blob/master/docs/api.md) file. +Full user documentation for the API is at [http://web-platform-tests.org/writing-tests/testharness-api.html](http://web-platform-tests.org/writing-tests/testharness-api.html). You can also read a tutorial on [Using testharness.js](http://darobin.github.com/test-harness-tutorial/docs/using-testharness.html). diff --git a/tests/wpt/web-platform-tests/resources/test/README.md b/tests/wpt/web-platform-tests/resources/test/README.md new file mode 100644 index 00000000000..3a912a76ab5 --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/test/README.md @@ -0,0 +1,61 @@ +# `testharness.js` test suite + +The test suite for the `testharness.js` testing framework. + +## Executing Tests + +Install the following dependencies: + +- [Python 2.7](https://www.python.org/) +- [the tox Python package](https://tox.readthedocs.io/en/latest/) +- [the Mozilla Firefox web browser](https://mozilla.org/firefox) +- [the GeckoDriver server](https://github.com/mozilla/geckodriver) + +Once these dependencies are satisfied, the tests may be run from a command line +by executing the following command from this directory: + + tox + +## Authoring Tests + +Test cases are expressed as `.html` files located within the `tests/` +sub-directory. Each test should include the `testharness.js` library with the +following markup: + + + + +This should be followed by one or more ` + +Finally, each test may include a summary of the expected results as a JSON +string within a ` + +This is useful to test, for example, whether asserations that should fail or +throw actually do. \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/resources/test/config.test.json b/tests/wpt/web-platform-tests/resources/test/config.test.json new file mode 100644 index 00000000000..df664faf44b --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/test/config.test.json @@ -0,0 +1,27 @@ +{"host": "web-platform.test", + "doc_root": null, + "ws_doc_root": null, + "external_host": null, + "ports":{"http":[8000, "auto"], + "https":[9003], + "ws":["auto"], + "wss":["auto"]}, + "check_subdomains": true, + "log_level":"debug", + "bind_hostname": true, + "ssl": {"type": "openssl", + "encrypt_after_connect": false, + "openssl": { + "openssl_binary": "openssl", + "base_path": "_certs", + "force_regenerate": false, + "base_conf_path": null + }, + "pregenerated": { + "host_key_path": null, + "host_cert_path": null + }, + "none": {} + }, + "aliases": [] +} diff --git a/tests/wpt/web-platform-tests/resources/test/conftest.py b/tests/wpt/web-platform-tests/resources/test/conftest.py new file mode 100644 index 00000000000..cb119632664 --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/test/conftest.py @@ -0,0 +1,134 @@ +import io +import json +import os + +import html5lib +import pytest +from selenium import webdriver + +from wptserver import WPTServer + +ENC = 'utf8' +HERE = os.path.dirname(os.path.abspath(__file__)) +WPT_ROOT = os.path.normpath(os.path.join(HERE, '..', '..')) +HARNESS = os.path.join(HERE, 'harness.html') + +def pytest_collect_file(path, parent): + if path.ext.lower() == '.html': + return HTMLItem(str(path), parent) + +def pytest_configure(config): + config.driver = webdriver.Firefox() + config.server = WPTServer(WPT_ROOT) + config.server.start() + config.add_cleanup(lambda: config.server.stop()) + config.add_cleanup(lambda: config.driver.quit()) + +class HTMLItem(pytest.Item, pytest.Collector): + def __init__(self, filename, parent): + self.filename = filename + with io.open(filename, encoding=ENC) as f: + markup = f.read() + + parsed = html5lib.parse(markup, namespaceHTMLElements=False) + name = None + self.expected = None + + for element in parsed.getiterator(): + if not name and element.tag == 'title': + name = element.text + continue + if element.attrib.get('id') == 'expected': + self.expected = json.loads(unicode(element.text)) + continue + + if not name: + raise ValueError('No name found in file: %s' % filename) + + super(HTMLItem, self).__init__(name, parent) + + + def reportinfo(self): + return self.fspath, None, self.filename + + def repr_failure(self, excinfo): + return pytest.Collector.repr_failure(self, excinfo) + + def runtest(self): + driver = self.session.config.driver + server = self.session.config.server + + driver.get(server.url(HARNESS)) + + actual = driver.execute_async_script('runTest("%s", "foo", arguments[0])' % server.url(str(self.filename))) + + # Test object ordering is not guaranteed. This weak assertion verifies + # that the indices are unique and sequential + indices = [test_obj.get('index') for test_obj in actual['tests']] + self._assert_sequence(indices) + + summarized = {} + summarized[u'summarized_status'] = self._summarize_status(actual['status']) + summarized[u'summarized_tests'] = [ + self._summarize_test(test) for test in actual['tests']] + summarized[u'summarized_tests'].sort(key=lambda test_obj: test_obj.get('name')) + summarized[u'type'] = actual['type'] + + if not self.expected: + assert summarized[u'summarized_status'][u'status_string'] == u'OK', summarized[u'summarized_status'][u'message'] + for test in summarized[u'summarized_tests']: + msg = "%s\n%s:\n%s" % (test[u'name'], test[u'message'], test[u'stack']) + assert test[u'status_string'] == u'PASS', msg + else: + assert summarized == self.expected + + @staticmethod + def _assert_sequence(nums): + assert nums == range(1, nums[-1] + 1) + + @staticmethod + def _scrub_stack(test_obj): + copy = dict(test_obj) + + assert 'stack' in copy + + if copy['stack'] is not None: + copy['stack'] = u'(implementation-defined)' + + return copy + + @staticmethod + def _expand_status(status_obj): + for key, value in [item for item in status_obj.items()]: + # In "status" and "test" objects, the "status" value enum + # definitions are interspersed with properties for unrelated + # metadata. The following condition is a best-effort attempt to + # ignore non-enum properties. + if key != key.upper() or not isinstance(value, int): + continue + + del status_obj[key] + + if status_obj['status'] == value: + status_obj[u'status_string'] = key + + del status_obj['status'] + + return status_obj + + @staticmethod + def _summarize_test(test_obj): + del test_obj['index'] + + assert 'phase' in test_obj + assert 'phases' in test_obj + assert 'COMPLETE' in test_obj['phases'] + assert test_obj['phase'] == test_obj['phases']['COMPLETE'] + del test_obj['phases'] + del test_obj['phase'] + + return HTMLItem._expand_status(HTMLItem._scrub_stack(test_obj)) + + @staticmethod + def _summarize_status(status_obj): + return HTMLItem._expand_status(HTMLItem._scrub_stack(status_obj)) diff --git a/tests/wpt/web-platform-tests/resources/test/harness.html b/tests/wpt/web-platform-tests/resources/test/harness.html new file mode 100644 index 00000000000..5ee0f285e83 --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/test/harness.html @@ -0,0 +1,26 @@ + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/resources/test/tests/add_cleanup.html b/tests/wpt/web-platform-tests/resources/test/tests/add_cleanup.html new file mode 100644 index 00000000000..d47e7ff24b7 --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/test/tests/add_cleanup.html @@ -0,0 +1,96 @@ + + + +Test#add_cleanup + + + + +
        + + + + diff --git a/tests/wpt/web-platform-tests/resources/test/tests/add_cleanup_err.html b/tests/wpt/web-platform-tests/resources/test/tests/add_cleanup_err.html new file mode 100644 index 00000000000..66efb077337 --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/test/tests/add_cleanup_err.html @@ -0,0 +1,48 @@ + + + +Test#add_cleanup: error + + + + +
        + + + + diff --git a/tests/wpt/web-platform-tests/resources/test/tests/add_cleanup_err_multi.html b/tests/wpt/web-platform-tests/resources/test/tests/add_cleanup_err_multi.html new file mode 100644 index 00000000000..b60668c0290 --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/test/tests/add_cleanup_err_multi.html @@ -0,0 +1,55 @@ + + + +Test#add_cleanup: multiple functions with one in error + + + + +
        + + + + + diff --git a/tests/wpt/web-platform-tests/resources/test/tests/api-tests-1.html b/tests/wpt/web-platform-tests/resources/test/tests/api-tests-1.html new file mode 100644 index 00000000000..454189b323c --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/test/tests/api-tests-1.html @@ -0,0 +1,384 @@ + + + +Sample HTML5 API Tests + + + +

        Sample HTML5 API Tests

        +
        + + + + + + + diff --git a/tests/wpt/web-platform-tests/resources/test/tests/api-tests-2.html b/tests/wpt/web-platform-tests/resources/test/tests/api-tests-2.html new file mode 100644 index 00000000000..99fa5be9c85 --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/test/tests/api-tests-2.html @@ -0,0 +1,47 @@ + + + +Sample HTML5 API Tests + + +

        Sample HTML5 API Tests

        +

        There should be two results

        +
        + + + + + + diff --git a/tests/wpt/web-platform-tests/resources/test/tests/api-tests-3.html b/tests/wpt/web-platform-tests/resources/test/tests/api-tests-3.html new file mode 100644 index 00000000000..fb571c8ee85 --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/test/tests/api-tests-3.html @@ -0,0 +1,36 @@ + + + +Sample HTML5 API Tests + + + + +

        Sample HTML5 API Tests

        +
        + + + + diff --git a/tests/wpt/web-platform-tests/resources/test/tests/generate-callback.html b/tests/wpt/web-platform-tests/resources/test/tests/generate-callback.html new file mode 100644 index 00000000000..a72ad62a59f --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/test/tests/generate-callback.html @@ -0,0 +1,167 @@ + + + +Sample for using generate_tests to create a series of tests that share the same callback. + + + + + + + + diff --git a/tests/wpt/web-platform-tests/resources/test/tests/idlharness/IdlInterface/test_primary_interface_of.html b/tests/wpt/web-platform-tests/resources/test/tests/idlharness/IdlInterface/test_primary_interface_of.html new file mode 100644 index 00000000000..859340a2362 --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/test/tests/idlharness/IdlInterface/test_primary_interface_of.html @@ -0,0 +1,111 @@ + + + + + idlharness: Primary interface + + + + + + +

        Verify the series of sub-tests that are executed for "tested" interface +objects but skipped for "untested" interface objects.

        + + + + diff --git a/tests/wpt/web-platform-tests/resources/examples/apisample11.html b/tests/wpt/web-platform-tests/resources/test/tests/iframe-callback.html similarity index 85% rename from tests/wpt/web-platform-tests/resources/examples/apisample11.html rename to tests/wpt/web-platform-tests/resources/test/tests/iframe-callback.html index 32e8984c3f1..1a8b2cbc00f 100644 --- a/tests/wpt/web-platform-tests/resources/examples/apisample11.html +++ b/tests/wpt/web-platform-tests/resources/test/tests/iframe-callback.html @@ -2,8 +2,8 @@ Example with iframe that notifies containing document via callbacks - - + +

        Callbacks From Tests Running In An IFRAME

        @@ -87,8 +87,8 @@ function start_test_in_iframe() { // completion_callback() will then complete the testing on this document. callbacks.length = 0; var iframe = document.createElement("iframe"); - // apisample6.html has a single test. - iframe.src = "apisample6.html"; + // single-page-test-pass.html has a single test. + iframe.src = "single-page-test-pass.html"; iframe.style.setProperty("display", "none"); document.getElementById("target").appendChild(iframe); } @@ -96,4 +96,23 @@ function start_test_in_iframe() {
        + diff --git a/tests/wpt/web-platform-tests/resources/examples/apisample18.html b/tests/wpt/web-platform-tests/resources/test/tests/iframe-consolidate-errors.html similarity index 50% rename from tests/wpt/web-platform-tests/resources/examples/apisample18.html rename to tests/wpt/web-platform-tests/resources/test/tests/iframe-consolidate-errors.html index c97cba39580..fd20d4f71f5 100644 --- a/tests/wpt/web-platform-tests/resources/examples/apisample18.html +++ b/tests/wpt/web-platform-tests/resources/test/tests/iframe-consolidate-errors.html @@ -2,8 +2,8 @@ Example with iframe that consolidates errors via fetch_tests_from_window - - + + @@ -16,11 +16,31 @@ tests from an iframe into the primary document.

        child context.

        - - + + - \ No newline at end of file + + + diff --git a/tests/wpt/web-platform-tests/resources/test/tests/iframe-consolidate-tests.html b/tests/wpt/web-platform-tests/resources/test/tests/iframe-consolidate-tests.html new file mode 100644 index 00000000000..90c5f8ece9f --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/test/tests/iframe-consolidate-tests.html @@ -0,0 +1,95 @@ + + + +Example with iframe that consolidates tests via fetch_tests_from_window + + + + + +

        Fetching Tests From a Child Context

        +

        This test demonstrates the use of fetch_tests_from_window to pull +tests from an iframe into the primary document.

        +

        The test suite will not complete until tests in the child context have finished +executing

        +
        + + + + + + + + diff --git a/tests/wpt/web-platform-tests/resources/examples/apisample12.html b/tests/wpt/web-platform-tests/resources/test/tests/iframe-msg.html similarity index 76% rename from tests/wpt/web-platform-tests/resources/examples/apisample12.html rename to tests/wpt/web-platform-tests/resources/test/tests/iframe-msg.html index 785d57b2ba5..13a3fff924f 100644 --- a/tests/wpt/web-platform-tests/resources/examples/apisample12.html +++ b/tests/wpt/web-platform-tests/resources/test/tests/iframe-msg.html @@ -2,8 +2,8 @@ Example with iframe that notifies containing document via cross document messaging - - + +

        Notifications From Tests Running In An IFRAME

        @@ -61,7 +61,26 @@ on_event(window, handler(message); }); - + diff --git a/tests/wpt/web-platform-tests/resources/test/tests/order.html b/tests/wpt/web-platform-tests/resources/test/tests/order.html new file mode 100644 index 00000000000..d20eb6b1ad0 --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/test/tests/order.html @@ -0,0 +1,39 @@ + + + +Ordering + + + +
        + + + + + + diff --git a/tests/wpt/web-platform-tests/resources/examples/apisample10.html b/tests/wpt/web-platform-tests/resources/test/tests/promise-async.html similarity index 64% rename from tests/wpt/web-platform-tests/resources/examples/apisample10.html rename to tests/wpt/web-platform-tests/resources/test/tests/promise-async.html index 69810fe16cf..88b6972a60a 100644 --- a/tests/wpt/web-platform-tests/resources/examples/apisample10.html +++ b/tests/wpt/web-platform-tests/resources/test/tests/promise-async.html @@ -7,8 +7,8 @@

        Async Tests and Promises

        This test assumes ECMAScript 6 Promise support. Some failures are expected.

        - - + + + diff --git a/tests/wpt/web-platform-tests/resources/examples/apisample13.html b/tests/wpt/web-platform-tests/resources/test/tests/promise.html similarity index 59% rename from tests/wpt/web-platform-tests/resources/examples/apisample13.html rename to tests/wpt/web-platform-tests/resources/test/tests/promise.html index f6cf0eec831..61ef15ded98 100644 --- a/tests/wpt/web-platform-tests/resources/examples/apisample13.html +++ b/tests/wpt/web-platform-tests/resources/test/tests/promise.html @@ -8,8 +8,8 @@

        This test demonstrates the use of promise_test. Assumes ECMAScript 6 Promise support. Some failures are expected.

        - - + + + diff --git a/tests/wpt/web-platform-tests/resources/test/tests/single-page-test-fail.html b/tests/wpt/web-platform-tests/resources/test/tests/single-page-test-fail.html new file mode 100644 index 00000000000..a1f88107382 --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/test/tests/single-page-test-fail.html @@ -0,0 +1,29 @@ + +Example with file_is_test (should fail) + + + + diff --git a/tests/wpt/web-platform-tests/resources/test/tests/single-page-test-no-assertions.html b/tests/wpt/web-platform-tests/resources/test/tests/single-page-test-no-assertions.html new file mode 100644 index 00000000000..3402a469cf8 --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/test/tests/single-page-test-no-assertions.html @@ -0,0 +1,26 @@ + +Example single page test with no asserts + + + + diff --git a/tests/wpt/web-platform-tests/resources/test/tests/single-page-test-no-body.html b/tests/wpt/web-platform-tests/resources/test/tests/single-page-test-no-body.html new file mode 100644 index 00000000000..065091a93e8 --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/test/tests/single-page-test-no-body.html @@ -0,0 +1,27 @@ + +Example single page test with no body + + + + diff --git a/tests/wpt/web-platform-tests/resources/test/tests/single-page-test-pass.html b/tests/wpt/web-platform-tests/resources/test/tests/single-page-test-pass.html new file mode 100644 index 00000000000..31e4e649471 --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/test/tests/single-page-test-pass.html @@ -0,0 +1,29 @@ + +Example with file_is_test + + + + diff --git a/tests/wpt/web-platform-tests/resources/test/tests/uncaught-exception-handle.html b/tests/wpt/web-platform-tests/resources/test/tests/uncaught-exception-handle.html new file mode 100644 index 00000000000..7d8244bf1ce --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/test/tests/uncaught-exception-handle.html @@ -0,0 +1,35 @@ + + + +Harness Handling Uncaught Exception + + + + +

        Harness Handling Uncaught Exception

        +
        + + + + diff --git a/tests/wpt/web-platform-tests/resources/test/tests/uncaught-exception-ignore.html b/tests/wpt/web-platform-tests/resources/test/tests/uncaught-exception-ignore.html new file mode 100644 index 00000000000..9f45ddb47f5 --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/test/tests/uncaught-exception-ignore.html @@ -0,0 +1,37 @@ + + + +Harness Ignoring Uncaught Exception + + + + +

        Harness Ignoring Uncaught Exception

        +
        + + + + diff --git a/tests/wpt/web-platform-tests/resources/test/tests/worker-dedicated.html b/tests/wpt/web-platform-tests/resources/test/tests/worker-dedicated.html new file mode 100644 index 00000000000..0ca3e4d145a --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/test/tests/worker-dedicated.html @@ -0,0 +1,97 @@ + + + +Dedicated Worker Tests + + + + +

        Dedicated Web Worker Tests

        +

        Demonstrates running testharness based tests inside a dedicated web worker. +

        The test harness is expected to fail due to an uncaught exception in one worker.

        +
        + + + + diff --git a/tests/wpt/web-platform-tests/resources/examples/apisample-error-worker.js b/tests/wpt/web-platform-tests/resources/test/tests/worker-error.js similarity index 54% rename from tests/wpt/web-platform-tests/resources/examples/apisample-error-worker.js rename to tests/wpt/web-platform-tests/resources/test/tests/worker-error.js index 9bfe0a6f343..a25f0db188b 100644 --- a/tests/wpt/web-platform-tests/resources/examples/apisample-error-worker.js +++ b/tests/wpt/web-platform-tests/resources/test/tests/worker-error.js @@ -1,3 +1,3 @@ -importScripts("../testharness.js"); +importScripts("../../testharness.js"); throw new Error("This failure is expected."); diff --git a/tests/wpt/web-platform-tests/resources/examples/apisample16.html b/tests/wpt/web-platform-tests/resources/test/tests/worker-service.html similarity index 55% rename from tests/wpt/web-platform-tests/resources/examples/apisample16.html rename to tests/wpt/web-platform-tests/resources/test/tests/worker-service.html index d859d94bf6c..418f6d72bb1 100644 --- a/tests/wpt/web-platform-tests/resources/examples/apisample16.html +++ b/tests/wpt/web-platform-tests/resources/test/tests/worker-service.html @@ -2,8 +2,8 @@ Example with a service worker - - + +

        Service Worker Tests

        @@ -25,8 +25,8 @@ promise_test( // Since the service worker registration could be in an indeterminate // state (due to, for example, a previous test run failing), we start by // unregstering our service worker and then registering it again. - var scope = "/service-worker-scope"; - var worker_url = "apisample-worker.js"; + var scope = "service-worker-scope"; + var worker_url = "worker.js"; return navigator.serviceWorker.register(worker_url, {scope: scope}) .then( @@ -59,4 +59,65 @@ promise_test( }, "Register ServiceWorker"); + diff --git a/tests/wpt/web-platform-tests/resources/test/tests/worker-shared.html b/tests/wpt/web-platform-tests/resources/test/tests/worker-shared.html new file mode 100644 index 00000000000..a5601de0386 --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/test/tests/worker-shared.html @@ -0,0 +1,80 @@ + + + +Example with a shared worker + + + + +

        Shared Web Worker Tests

        +

        Demonstrates running testharness based tests inside a shared worker. +

        The test harness should time out due to one of the tests in the worker timing out. +

        This test assumes that the browser supports shared web workers. +

        + + + + diff --git a/tests/wpt/web-platform-tests/resources/examples/apisample-worker.js b/tests/wpt/web-platform-tests/resources/test/tests/worker.js similarity index 94% rename from tests/wpt/web-platform-tests/resources/examples/apisample-worker.js rename to tests/wpt/web-platform-tests/resources/test/tests/worker.js index b1d086314cc..a25621ac1e4 100644 --- a/tests/wpt/web-platform-tests/resources/examples/apisample-worker.js +++ b/tests/wpt/web-platform-tests/resources/test/tests/worker.js @@ -1,4 +1,4 @@ -importScripts("../testharness.js"); +importScripts("../../testharness.js"); test( function(test) { diff --git a/tests/wpt/web-platform-tests/resources/test/tox.ini b/tests/wpt/web-platform-tests/resources/test/tox.ini new file mode 100644 index 00000000000..f40238131c7 --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/test/tox.ini @@ -0,0 +1,13 @@ +[tox] +skipsdist=True + +[testenv] +passenv=DISPLAY # Necessary for the spawned GeckoDriver process to connect to + # the appropriate display. +deps = + html5lib + pytest>=2.9 + pyvirtualdisplay + selenium + +commands = pytest -vv tests diff --git a/tests/wpt/web-platform-tests/resources/test/wptserver.py b/tests/wpt/web-platform-tests/resources/test/wptserver.py new file mode 100644 index 00000000000..ec6759e4a4d --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/test/wptserver.py @@ -0,0 +1,48 @@ +import json +import os +import ssl +import subprocess +import urllib2 + +_CONFIG_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), + 'config.test.json') + +with open(_CONFIG_FILE, 'r') as config_handle: + config = json.loads(config_handle.read()) + host = config["host"] + port = config["ports"]["https"][0] + +class WPTServer(object): + base_url = 'https://%s:%s' % (host, port) + + def __init__(self, wpt_root): + self.wpt_root = wpt_root + + def start(self): + self.devnull = open(os.devnull, 'w') + self.proc = subprocess.Popen( + [os.path.join(self.wpt_root, 'serve'), '--config=' + _CONFIG_FILE], + stdout=self.devnull, + stderr=self.devnull, + cwd=self.wpt_root) + context = ssl.SSLContext(ssl.PROTOCOL_TLSv1) + context.verify_mode = ssl.CERT_NONE + context.check_hostname = False + + while True: + if self.proc.poll() != None: + raise Exception('Could not start wptserve.') + + try: + urllib2.urlopen(self.base_url, timeout=1, context=context) + break + except urllib2.URLError as e: + pass + + def stop(self): + self.proc.kill() + self.proc.wait() + self.devnull.close() + + def url(self, abs_path): + return self.base_url + '/' + os.path.relpath(abs_path, self.wpt_root) diff --git a/tests/wpt/web-platform-tests/resources/testharness.js b/tests/wpt/web-platform-tests/resources/testharness.js index 1a313aabc09..39aa686c6f5 100644 --- a/tests/wpt/web-platform-tests/resources/testharness.js +++ b/tests/wpt/web-platform-tests/resources/testharness.js @@ -10,7 +10,8 @@ policies and contribution forms [3]. [3] http://www.w3.org/2004/10/27-testcases */ -/* Documentation is in docs/api.md */ +/* Documentation: http://web-platform-tests.org/writing-tests/testharness-api.html + * (../docs/_writing-tests/testharness-api.md) */ (function () { @@ -482,7 +483,10 @@ policies and contribution forms [3]. } function is_service_worker(worker) { - return 'ServiceWorker' in self && worker instanceof ServiceWorker; + // The worker object may be from another execution context, + // so do not use instanceof here. + return 'ServiceWorker' in self && + Object.prototype.toString.call(worker) == '[object ServiceWorker]'; } /* @@ -1178,7 +1182,7 @@ policies and contribution forms [3]. throw e; } if (code === null) { - return; + throw new AssertionError('Test bug: need to pass exception to assert_throws()'); } if (typeof code === "object") { assert(typeof e == "object" && "name" in e && e.name == code.name, @@ -1250,8 +1254,7 @@ policies and contribution forms [3]. ReadOnlyError: 0, VersionError: 0, OperationError: 0, - NotAllowedError: 0, - CancelationError: 0, + NotAllowedError: 0 }; if (!(name in name_code_map)) { @@ -1323,7 +1326,8 @@ policies and contribution forms [3]. } this.name = name; - this.phase = this.phases.INITIAL; + this.phase = tests.phase === tests.phases.ABORTED ? + this.phases.COMPLETE : this.phases.INITIAL; this.status = this.NOTRUN; this.timeout_id = null; @@ -1371,12 +1375,14 @@ policies and contribution forms [3]. this._structured_clone = merge({ name:String(this.name), properties:merge({}, this.properties), + phases:merge({}, this.phases) }, Test.statuses); } this._structured_clone.status = this.status; this._structured_clone.message = this.message; this._structured_clone.stack = this.stack; this._structured_clone.index = this.index; + this._structured_clone.phase = this.phase; return this._structured_clone; }; @@ -1517,11 +1523,35 @@ policies and contribution forms [3]. this.cleanup(); }; + /* + * Invoke all specified cleanup functions. If one or more produce an error, + * the context is in an unpredictable state, so all further testing should + * be cancelled. + */ Test.prototype.cleanup = function() { + var error_count = 0; + var total; + forEach(this.cleanup_callbacks, function(cleanup_callback) { - cleanup_callback(); + try { + cleanup_callback(); + } catch (e) { + // Set test phase immediately so that tests declared + // within subsequent cleanup functions are not run. + tests.phase = tests.phases.ABORTED; + error_count += 1; + } }); + + if (error_count > 0) { + total = this.cleanup_callbacks.length; + tests.status.status = tests.status.ERROR; + tests.status.message = "Test named '" + this.name + + "' specified " + total + " 'cleanup' function" + + (total > 1 ? "s" : "") + ", and " + error_count + " failed."; + tests.status.stack = null; + } }; /* @@ -1547,10 +1577,12 @@ policies and contribution forms [3]. var clone = {}; Object.keys(this).forEach( (function(key) { - if (typeof(this[key]) === "object") { - clone[key] = merge({}, this[key]); + var value = this[key]; + + if (typeof value === "object" && value !== null) { + clone[key] = merge({}, value); } else { - clone[key] = this[key]; + clone[key] = value; } }).bind(this)); clone.phases = merge({}, this.phases); @@ -1703,7 +1735,8 @@ policies and contribution forms [3]. SETUP:1, HAVE_TESTS:2, HAVE_RESULTS:3, - COMPLETE:4 + COMPLETE:4, + ABORTED:5 }; this.phase = this.phases.INITIAL; @@ -1837,7 +1870,8 @@ policies and contribution forms [3]. }; Tests.prototype.all_done = function() { - return (this.tests.length > 0 && test_environment.all_loaded && + return this.phase === this.phases.ABORTED || + (this.tests.length > 0 && test_environment.all_loaded && this.num_pending === 0 && !this.wait_for_finish && !this.processing_callbacks && !this.pending_remotes.some(function(w) { return w.running; })); @@ -1980,6 +2014,7 @@ policies and contribution forms [3]. } } else if (is_shared_worker(worker)) { message_port = worker.port; + message_port.start(); } else { message_port = worker; } diff --git a/tests/wpt/web-platform-tests/resources/webidl2/README.md b/tests/wpt/web-platform-tests/resources/webidl2/README.md index f7d03fcdef3..5d128ed27ca 100644 --- a/tests/wpt/web-platform-tests/resources/webidl2/README.md +++ b/tests/wpt/web-platform-tests/resources/webidl2/README.md @@ -3,16 +3,15 @@ [![NPM version](https://badge.fury.io/js/webidl2.png)](http://badge.fury.io/js/webidl2) -Purpose -======= +## Purpose This is a parser for the [WebIDL](http://dev.w3.org/2006/webapi/WebIDL/) language. If you don't know what that is, then you probably don't need it. It is meant to be used both in Node and in the browser (the parser likely works in other JS environments, but not the test suite). -What of v1? ------------ +### What of v1? + There was a previous incarnation of this project. I had written it in the most quick and dirty manner that was handy because I required it as a dependency in an experiment. As these things tend to happen, some people started using that, which then had to be @@ -20,65 +19,72 @@ maintained. But since it was not built on solid foundations, it was painful to k up to date with the specification, which is a bit of a moving target. So I started from scratch. Compared to the previous version (which used a parser generator) -this one is about 6x less code (which translates to 4x smaller minified or 2x smaller +this one is about 6x less code (which translates to 4x smaller minified or 2x smaller minizipped) and 4x faster. The test suite is reasonably complete (95% coverage), much more than previously. This version is up to date with WebIDL, rather than a couple years' behind. It also has *far* better error reporting. -The AST you get from parsing is very similar to the one you got in v1, but some adjustments -have been made in order to be more systematic, and to map better to what's actually in the spec +The AST you get from parsing is very similar to the one you got in v1, but some adjustments +have been made in order to be more systematic, and to map better to what's actually in the spec now. If you used v1, you will need to tweak your code but the result ought to be simpler and -you ought to be able to be a fair bit less defensive against irregularities in the way +you ought to be able to be a fair bit less defensive against irregularities in the way information is represented. -Installation -============ +## Installation Just the usual. For Node: - npm install webidl2 - +```Bash +npm install webidl2 +``` + In the browser: - +```HTML + +``` + +## Documentation -Documentation -============= The API to WebIDL2 is trivial: you parse a string of WebIDL and it returns a syntax tree. -Parsing -------- +### Parsing + In Node, that happens with: - var WebIDL2 = require("webidl2"); - var tree = WebIDL2.parse("string of WebIDL"); +```JS +var WebIDL2 = require("webidl2"); +var tree = WebIDL2.parse("string of WebIDL"); +``` In the browser: +```HTML + + +``` - - - -Advanced Parsing ----------------- +### Advanced Parsing `parse()` can optionally accept a second parameter, an options object, which can be used to modify parsing behavior. The following options are recognized: -```javascript +```JS { - allowNestedTypedefs: false # + allowNestedTypedefs: false } ``` + And their meanings are as follows: -* `allowNestedTypedefs`: Boolean indicating whether the parser should accept `typedef`s as valid members of `interface`s. This is non-standard syntax and therefore the default is `false`. +* `allowNestedTypedefs`: Boolean indicating whether the parser should accept `typedef`s as valid members of `interface`s. +This is non-standard syntax and therefore the default is `false`. + +### Errors -Errors ------- When there is a syntax error in the WebIDL, it throws an exception object with the following properties: @@ -91,8 +97,8 @@ properties: The exception also has a `toString()` method that hopefully should produce a decent error message. -AST (Abstract Syntax Tree) --------------------------- +### AST (Abstract Syntax Tree) + The `parse()` method returns a tree object representing the parse tree of the IDL. Comment and white space are not represented in the AST. @@ -106,35 +112,34 @@ This structure is used in many other places (operation return types, argument ty It captures a WebIDL type with a number of options. Types look like this and are typically attached to a field called `idlType`: - { - "sequence": false, - "generic": null, - "nullable": false, - "array": false, - "union": false, - "idlType": "void" - } +```JS +{ + "array": false, + "generic": null, + "idlType": "void", + "nullable": false, + "union": false, +} +``` Where the fields are as follows: -* `sequence`: Boolean indicating whether this is a sequence or not. Deprecated. Use - `generic` instead. -* `generic`: String indicating the generic type (e.g. "Promise", "sequence"). `null` - otherwise. -* `nullable`: Boolean indicating whether this is nullable or not. * `array`: Either `false` to indicate that it is not an array, or a number for the level of array nesting. -* `union`: Boolean indicating whether this is a union type or not. +* `generic`: String indicating the generic type (e.g. "Promise", "sequence"). `null` + otherwise. * `idlType`: Can be different things depending on context. In most cases, this will just be a string with the type name. But the reason this field isn't called "typeName" is because it can take more complex values. If the type is a union, then this contains an array of the types it unites. If it is a generic type, it contains the IDL type description for the type in the sequence, the eventual value of the promise, etc. +* `nullable`: Boolean indicating whether this is nullable or not. +* `union`: Boolean indicating whether this is a union type or not. #### Interactions between `nullable` and `array` A more complex data model for our AST would likely represent `Foo[][][]` as a series of -nested types four levels deep with three anonymous array types eventually containing a +nested types four levels deep with three anonymous array types eventually containing a `Foo` type. But experience shows that such structures are cumbersome to use, and so we have a simpler model in which the depth of the array is specified with the `array` field. @@ -167,22 +172,23 @@ a `?` at the end. ### Interface Interfaces look like this: - { - "type": "interface", - "name": "Animal", - "partial": false, - "members": [...], - "inheritance": null, - "extAttrs": [...] - }, - { - "type": "interface", - "name": "Human", - "partial": false, - "members": [...], - "inheritance": "Animal", - "extAttrs": [...] - } +```JS +{ + "type": "interface", + "name": "Animal", + "partial": false, + "members": [...], + "inheritance": null, + "extAttrs": [...] +}, { + "type": "interface", + "name": "Human", + "partial": false, + "members": [...], + "inheritance": "Animal", + "extAttrs": [...] +} +``` The fields are as follows: @@ -204,20 +210,22 @@ their `type` field is "callback interface". A callback looks like this: - { - "type": "callback", - "name": "AsyncOperationCallback", - "idlType": { - "sequence": false, - "generic": null, - "nullable": false, - "array": false, - "union": false, - "idlType": "void" - }, - "arguments": [...], - "extAttrs": [] - } +```JS +{ + "type": "callback", + "name": "AsyncOperationCallback", + "idlType": { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "void" + }, + "arguments": [...], + "extAttrs": [] +} +``` The fields are as follows: @@ -231,33 +239,33 @@ The fields are as follows: A dictionary looks like this: - { - "type": "dictionary", - "name": "PaintOptions", - "partial": false, - "members": [ - { - "type": "field", - "name": "fillPattern", - "required": false, - "idlType": { - "sequence": false, - "generic": null, - "nullable": true, - "array": false, - "union": false, - "idlType": "DOMString" - }, - "extAttrs": [], - "default": { - "type": "string", - "value": "black" - } - } - ], - "inheritance": null, - "extAttrs": [] +```JS +{ + "type": "dictionary", + "name": "PaintOptions", + "partial": false, + "members": [{ + "type": "field", + "name": "fillPattern", + "required": false, + "idlType": { + "sequence": false, + "generic": null, + "nullable": true, + "array": false, + "union": false, + "idlType": "DOMString" + }, + "extAttrs": [], + "default": { + "type": "string", + "value": "black" } + }], + "inheritance": null, + "extAttrs": [] +} +``` The fields are as follows: @@ -281,27 +289,27 @@ All the members are fields as follows: An exception looks like this: - { - "type": "exception", - "name": "HierarchyRequestError", - "members": [ - { - "type": "field", - "name": "code", - "idlType": { - "sequence": false, - "generic": null, - "nullable": false, - "array": false, - "union": false, - "idlType": "unsigned short" - }, - "extAttrs": [] - } - ], - "inheritance": "DOMException", - "extAttrs": [] - } +```JS +{ + "type": "exception", + "name": "HierarchyRequestError", + "members": [{ + "type": "field", + "name": "code", + "idlType": { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "unsigned short" + }, + "extAttrs": [] + }], + "inheritance": "DOMException", + "extAttrs": [] +} +``` The fields are as follows: @@ -322,16 +330,18 @@ Members that aren't [constants](#constants) have the following fields: An enum looks like this: - { - "type": "enum", - "name": "MealType", - "values": [ - "rice", - "noodles", - "other" - ], - "extAttrs": [] - } +```JS +{ + "type": "enum", + "name": "MealType", + "values": [ + "rice", + "noodles", + "other" + ], + "extAttrs": [] +} +``` The fields are as follows: @@ -344,27 +354,30 @@ The fields are as follows: A typedef looks like this: - { - "type": "typedef", - "typeExtAttrs": [], - "idlType": { - "sequence": true, - "generic": "sequence", - "nullable": false, - "array": false, - "union": false, - "idlType": { - "sequence": false, - "generic": null, - "nullable": false, - "array": false, - "union": false, - "idlType": "Point" - } - }, - "name": "PointSequence", - "extAttrs": [] +```JS +{ + "type": "typedef", + "typeExtAttrs": [], + "idlType": { + "sequence": true, + "generic": "sequence", + "nullable": false, + "array": false, + "union": false, + "idlType": { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "Point" } + }, + "name": "PointSequence", + "extAttrs": [] +} +``` + The fields are as follows: @@ -379,12 +392,14 @@ type rather than to the typedef as a whole. An implements definition looks like this: - { - "type": "implements", - "target": "Node", - "implements": "EventTarget", - "extAttrs": [] - } +```JS +{ + "type": "implements", + "target": "Node", + "implements": "EventTarget", + "extAttrs": [] +} +``` The fields are as follows: @@ -396,43 +411,42 @@ The fields are as follows: ### Operation Member An operation looks like this: - - { - "type": "operation", - "getter": false, - "setter": false, - "creator": false, - "deleter": false, - "legacycaller": false, - "static": false, - "stringifier": false, - "idlType": { - "sequence": false, - "generic": null, - "nullable": false, - "array": false, - "union": false, - "idlType": "void" - }, - "name": "intersection", - "arguments": [ - { - "optional": false, - "variadic": true, - "extAttrs": [], - "idlType": { - "sequence": false, - "generic": null, - "nullable": false, - "array": false, - "union": false, - "idlType": "long" - }, - "name": "ints" - } - ], - "extAttrs": [] - } +```JS +{ + "type": "operation", + "getter": false, + "setter": false, + "creator": false, + "deleter": false, + "legacycaller": false, + "static": false, + "stringifier": false, + "idlType": { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "void" + }, + "name": "intersection", + "arguments": [{ + "optional": false, + "variadic": true, + "extAttrs": [], + "idlType": { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "long" + }, + "name": "ints" + }], + "extAttrs": [] +} +``` The fields are as follows: @@ -453,24 +467,26 @@ The fields are as follows: An attribute member looks like this: - { - "type": "attribute", - "static": false, - "stringifier": false, - "inherit": false, - "readonly": false, - "idlType": { - "sequence": false, - "generic": null, - "nullable": false, - "array": false, - "union": false, - "idlType": "RegExp" - }, - "name": "regexp", - "extAttrs": [] - } - +```JS +{ + "type": "attribute", + "static": false, + "stringifier": false, + "inherit": false, + "readonly": false, + "idlType": { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "RegExp" + }, + "name": "regexp", + "extAttrs": [] +} +``` + The fields are as follows: * `type`: Always "attribute". @@ -486,17 +502,19 @@ The fields are as follows: A constant member looks like this: - { - "type": "const", - "nullable": false, - "idlType": "boolean", - "name": "DEBUG", - "value": { - "type": "boolean", - "value": false - }, - "extAttrs": [] - } +```JS +{ + "type": "const", + "nullable": false, + "idlType": "boolean", + "name": "DEBUG", + "value": { + "type": "boolean", + "value": false + }, + "extAttrs": [] +} +``` The fields are as follows: @@ -512,60 +530,63 @@ The fields are as follows: Serializers come in many shapes, which are best understood by looking at the examples below that map the IDL to the produced AST. - // serializer; - { - "type": "serializer", - "extAttrs": [] - } +```JS +// serializer; +{ + "type": "serializer", + "extAttrs": [] +} - // serializer DOMString serialize(); - { - "type": "serializer", - "idlType": { - "sequence": false, - "generic": null, - "nullable": false, - "array": false, - "union": false, - "idlType": "DOMString" - }, - "operation": { - "name": "serialize", - "arguments": [] - }, - "extAttrs": [] - } +// serializer DOMString serialize(); +{ + "type": "serializer", + "idlType": { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "DOMString" + }, + "operation": { + "name": "serialize", + "arguments": [] + }, + "extAttrs": [] +} - // serializer = { from, to, amount, description }; - { - "type": "serializer", - "patternMap": true, - "names": [ - "from", - "to", - "amount", - "description" - ], - "extAttrs": [] - } +// serializer = { from, to, amount, description }; +{ + "type": "serializer", + "patternMap": true, + "names": [ + "from", + "to", + "amount", + "description" + ], + "extAttrs": [] +} - // serializer = number; - { - "type": "serializer", - "name": "number", - "extAttrs": [] - } +// serializer = number; +{ + "type": "serializer", + "name": "number", + "extAttrs": [] +} - // serializer = [ name, number ]; - { - "type": "serializer", - "patternList": true, - "names": [ - "name", - "number" - ], - "extAttrs": [] - } +// serializer = [ name, number ]; +{ + "type": "serializer", + "patternList": true, + "names": [ + "name", + "number" + ], + "extAttrs": [] +} + +``` The common fields are as follows: @@ -598,26 +619,28 @@ Finally, if the serializer is a named serializer: Iterator members look like this - { - "type": "iterator", - "getter": false, - "setter": false, - "creator": false, - "deleter": false, - "legacycaller": false, - "static": false, - "stringifier": false, - "idlType": { - "sequence": false, - "generic": null, - "nullable": false, - "array": false, - "union": false, - "idlType": "Session2" - }, - "iteratorObject": "SessionIterator", - "extAttrs": [] - } +```JS +{ + "type": "iterator", + "getter": false, + "setter": false, + "creator": false, + "deleter": false, + "legacycaller": false, + "static": false, + "stringifier": false, + "idlType": { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "Session2" + }, + "iteratorObject": "SessionIterator", + "extAttrs": [] +} +``` * `type`: Always "iterator". * `iteratorObject`: The string on the right-hand side; absent if there isn't one. @@ -627,22 +650,24 @@ Iterator members look like this The arguments (e.g. for an operation) look like this: - "arguments": [ - { - "optional": false, - "variadic": true, - "extAttrs": [], - "idlType": { - "sequence": false, - "generic": null, - "nullable": false, - "array": false, - "union": false, - "idlType": "long" - }, - "name": "ints" - } - ] +```JS +{ + "arguments": [{ + "optional": false, + "variadic": true, + "extAttrs": [], + "idlType": { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "long" + }, + "name": "ints" + }] +} +``` The fields are as follows: @@ -656,16 +681,18 @@ The fields are as follows: Extended attributes are arrays of items that look like this: - "extAttrs": [ - { - "name": "TreatNullAs", - "arguments": null, - "rhs": { - "type": "identifier", - "value": "EmptyString" - } - } - ] +```JS +{ + "extAttrs": [{ + "name": "TreatNullAs", + "arguments": null, + "rhs": { + "type": "identifier", + "value": "EmptyString" + } + }] +} +``` The fields are as follows: @@ -700,12 +727,14 @@ For Infinity: These appear as members of interfaces that look like this: - { - "type": "maplike", // or "legacyiterable" / "iterable" / "setlike" - "idlType": /* One or two types */, - "readonly": false, // only for maplike and setlike - "extAttrs": [] - } +```JS +{ + "type": "maplike", // or "legacyiterable" / "iterable" / "setlike" + "idlType": /* One or two types */ , + "readonly": false, // only for maplike and setlike + "extAttrs": [] +} +``` The fields are as follows: @@ -715,46 +744,51 @@ The fields are as follows: * `extAttrs`: A list of [extended attributes](#extended-attributes). -Testing -======= +## Testing In order to run the tests you need to ensure that the widlproc submodule inside `test` is -initialised and up to date: +initialized and up to date: - git submodule init - git submodule update +```Bash +git submodule init +git submodule update +``` + +### Running -Running -------- The test runs with mocha and expect.js. Normally, running mocha in the root directory should be enough once you're set up. -Coverage --------- +### Coverage + Current test coverage, as documented in `coverage.html`, is 95%. You can run your own coverage analysis with: - jscoverage lib lib-cov - +```Bash +jscoverage lib lib-cov +``` + That will create the lib-cov directory with instrumented code; the test suite knows to use that if needed. You can then run the tests with: - JSCOV=1 mocha --reporter html-cov > coverage.html +```Bash +JSCOV=1 mocha --reporter html-cov > coverage.html +``` Note that I've been getting weirdly overescaped results from the html-cov reporter, so you might wish to try this instead: - JSCOV=1 mocha --reporter html-cov | sed "s/<//g" | sed "s/"/\"/g" > coverage.html +```Bash +JSCOV=1 mocha --reporter html-cov | sed "s/<//g" | sed "s/"/\"/g" > coverage.html +``` +### Browser tests -Browser tests -------------- In order to test in the browser, get inside `test/web` and run `make-web-tests.js`. This will generate a `browser-tests.html` file that you can open in a browser. As of this writing tests pass in the latest Firefox, Chrome, Opera, and Safari. Testing on IE and older versions will happen progressively. -TODO -==== +## TODO * add some tests to address coverage limitations * add a push API for processors that need to process things like comments diff --git a/tests/wpt/web-platform-tests/resources/webidl2/lib/webidl2.js b/tests/wpt/web-platform-tests/resources/webidl2/lib/webidl2.js index 9e504fc6e1f..0e76174a083 100644 --- a/tests/wpt/web-platform-tests/resources/webidl2/lib/webidl2.js +++ b/tests/wpt/web-platform-tests/resources/webidl2/lib/webidl2.js @@ -1,1012 +1,1084 @@ +(function() { + var tokenise = function(str) { + var tokens = [], + re = { + "float": /^-?(([0-9]+\.[0-9]*|[0-9]*\.[0-9]+)([Ee][-+]?[0-9]+)?|[0-9]+[Ee][-+]?[0-9]+)/, + "integer": /^-?(0([Xx][0-9A-Fa-f]+|[0-7]*)|[1-9][0-9]*)/, + "identifier": /^[A-Z_a-z][0-9A-Z_a-z-]*/, + "string": /^"[^"]*"/, + "whitespace": /^(?:[\t\n\r ]+|[\t\n\r ]*((\/\/.*|\/\*(.|\n|\r)*?\*\/)[\t\n\r ]*))+/, + "other": /^[^\t\n\r 0-9A-Z_a-z]/ + }, + types = ["float", "integer", "identifier", "string", "whitespace", "other"]; + while (str.length > 0) { + var matched = false; + for (var i = 0, n = types.length; i < n; i++) { + var type = types[i]; + str = str.replace(re[type], function(tok) { + tokens.push({ type: type, value: tok }); + matched = true; + return ""; + }); + if (matched) break; + } + if (matched) continue; + throw new Error("Token stream not progressing"); + } + return tokens; + }; + function WebIDLParseError(str, line, input, tokens) { + this.message = str; + this.line = line; + this.input = input; + this.tokens = tokens; + }; -(function () { - var tokenise = function (str) { - var tokens = [] - , re = { - "float": /^-?(([0-9]+\.[0-9]*|[0-9]*\.[0-9]+)([Ee][-+]?[0-9]+)?|[0-9]+[Ee][-+]?[0-9]+)/ - , "integer": /^-?(0([Xx][0-9A-Fa-f]+|[0-7]*)|[1-9][0-9]*)/ - , "identifier": /^[A-Z_a-z][0-9A-Z_a-z]*/ - , "string": /^"[^"]*"/ - , "whitespace": /^(?:[\t\n\r ]+|[\t\n\r ]*((\/\/.*|\/\*(.|\n|\r)*?\*\/)[\t\n\r ]*))+/ - , "other": /^[^\t\n\r 0-9A-Z_a-z]/ - } - , types = [] - ; - for (var k in re) types.push(k); - while (str.length > 0) { + WebIDLParseError.prototype.toString = function() { + return this.message + ", line " + this.line + " (tokens: '" + this.input + "')\n" + + JSON.stringify(this.tokens, null, 4); + }; + + var parse = function(tokens, opt) { + var line = 1; + tokens = tokens.slice(); + + var FLOAT = "float", + INT = "integer", + ID = "identifier", + STR = "string", + OTHER = "other"; + + var error = function(str) { + var tok = ""; + var numTokens = 0; + var maxTokens = 5; + while (numTokens < maxTokens && tokens.length > numTokens) { + tok += tokens[numTokens].value; + numTokens++; + } + throw new WebIDLParseError(str, line, tok, tokens.slice(0, 5)); + }; + + var last_token = null; + + var consume = function(type, value) { + if (!tokens.length || tokens[0].type !== type) return; + if (typeof value === "undefined" || tokens[0].value === value) { + last_token = tokens.shift(); + if (type === ID) last_token.value = last_token.value.replace(/^_/, ""); + return last_token; + } + }; + + var ws = function() { + if (!tokens.length) return; + if (tokens[0].type === "whitespace") { + var t = tokens.shift(); + t.value.replace(/\n/g, function(m) { line++; + return m; }); + return t; + } + }; + + var all_ws = function(store, pea) { // pea == post extended attribute, tpea = same for types + var t = { type: "whitespace", value: "" }; + while (true) { + var w = ws(); + if (!w) break; + t.value += w.value; + } + if (t.value.length > 0) { + if (store) { + var w = t.value, + re = { + "ws": /^([\t\n\r ]+)/, + "line-comment": /^\/\/(.*)\n?/m, + "multiline-comment": /^\/\*((?:.|\n|\r)*?)\*\// + }, + wsTypes = []; + for (var k in re) wsTypes.push(k); + while (w.length) { var matched = false; - for (var i = 0, n = types.length; i < n; i++) { - var type = types[i]; - str = str.replace(re[type], function (tok) { - tokens.push({ type: type, value: tok }); - matched = true; - return ""; - }); - if (matched) break; + for (var i = 0, n = wsTypes.length; i < n; i++) { + var type = wsTypes[i]; + w = w.replace(re[type], function(tok, m1) { + store.push({ type: type + (pea ? ("-" + pea) : ""), value: m1 }); + matched = true; + return ""; + }); + if (matched) break; } if (matched) continue; - throw new Error("Token stream not progressing"); + throw new Error("Surprising white space construct."); // this shouldn't happen + } } - return tokens; + return t; + } }; + + var integer_type = function() { + var ret = ""; + all_ws(); + if (consume(ID, "unsigned")) ret = "unsigned "; + all_ws(); + if (consume(ID, "short")) return ret + "short"; + if (consume(ID, "long")) { + ret += "long"; + all_ws(); + if (consume(ID, "long")) return ret + " long"; + return ret; + } + if (ret) error("Failed to parse integer type"); + }; + + var float_type = function() { + var ret = ""; + all_ws(); + if (consume(ID, "unrestricted")) ret = "unrestricted "; + all_ws(); + if (consume(ID, "float")) return ret + "float"; + if (consume(ID, "double")) return ret + "double"; + if (ret) error("Failed to parse float type"); + }; + + var primitive_type = function() { + var num_type = integer_type() || float_type(); + if (num_type) return num_type; + all_ws(); + if (consume(ID, "boolean")) return "boolean"; + if (consume(ID, "byte")) return "byte"; + if (consume(ID, "octet")) return "octet"; + }; + + var const_value = function() { + if (consume(ID, "true")) return { type: "boolean", value: true }; + if (consume(ID, "false")) return { type: "boolean", value: false }; + if (consume(ID, "null")) return { type: "null" }; + if (consume(ID, "Infinity")) return { type: "Infinity", negative: false }; + if (consume(ID, "NaN")) return { type: "NaN" }; + var ret = consume(FLOAT) || consume(INT); + if (ret) return { type: "number", value: 1 * ret.value }; + var tok = consume(OTHER, "-"); + if (tok) { + if (consume(ID, "Infinity")) return { type: "Infinity", negative: true }; + else tokens.unshift(tok); + } + }; + + var type_suffix = function(obj) { + while (true) { + all_ws(); + if (consume(OTHER, "?")) { + if (obj.nullable) error("Can't nullable more than once"); + obj.nullable = true; + } else if (consume(OTHER, "[")) { + all_ws(); + consume(OTHER, "]") || error("Unterminated array type"); + if (!obj.array) { + obj.array = 1; + obj.nullableArray = [obj.nullable]; + } else { + obj.array++; + obj.nullableArray.push(obj.nullable); + } + obj.nullable = false; + } else return; + } + }; + + var single_type = function() { + var prim = primitive_type(), + ret = { sequence: false, generic: null, nullable: false, array: false, union: false }, + name, value; + if (prim) { + ret.idlType = prim; + } else if (name = consume(ID)) { + value = name.value; + all_ws(); + // Generic types + if (consume(OTHER, "<")) { + // backwards compat + if (value === "sequence") { + ret.sequence = true; + } + ret.generic = value; + var types = []; + do { + all_ws(); + types.push(type() || error("Error parsing generic type " + value)); + all_ws(); + } + while (consume(OTHER, ",")); + if (value === "sequence") { + if (types.length !== 1) error("A sequence must have exactly one subtype"); + } else if (value === "record") { + if (types.length !== 2) error("A record must have exactly two subtypes"); + if (!/^(DOMString|USVString|ByteString)$/.test(types[0].idlType)) { + error("Record key must be DOMString, USVString, or ByteString"); + } + } + ret.idlType = types.length === 1 ? types[0] : types; + all_ws(); + if (!consume(OTHER, ">")) error("Unterminated generic type " + value); + type_suffix(ret); + return ret; + } else { + ret.idlType = value; + } + } else { + return; + } + type_suffix(ret); + if (ret.nullable && !ret.array && ret.idlType === "any") error("Type any cannot be made nullable"); + return ret; + }; + + var union_type = function() { + all_ws(); + if (!consume(OTHER, "(")) return; + var ret = { sequence: false, generic: null, nullable: false, array: false, union: true, idlType: [] }; + var fst = type_with_extended_attributes() || error("Union type with no content"); + ret.idlType.push(fst); + while (true) { + all_ws(); + if (!consume(ID, "or")) break; + var typ = type_with_extended_attributes() || error("No type after 'or' in union type"); + ret.idlType.push(typ); + } + if (!consume(OTHER, ")")) error("Unterminated union type"); + type_suffix(ret); + return ret; + }; + + var type = function() { + return single_type() || union_type(); + }; + + var type_with_extended_attributes = function() { + var extAttrs = extended_attrs(); + var ret = single_type() || union_type(); + if (extAttrs.length && ret) ret.extAttrs = extAttrs; + return ret; + }; + + var argument = function(store) { + var ret = { optional: false, variadic: false }; + ret.extAttrs = extended_attrs(store); + all_ws(store, "pea"); + var opt_token = consume(ID, "optional"); + if (opt_token) { + ret.optional = true; + all_ws(); + } + ret.idlType = type_with_extended_attributes(); + if (!ret.idlType) { + if (opt_token) tokens.unshift(opt_token); + return; + } + var type_token = last_token; + if (!ret.optional) { + all_ws(); + if (tokens.length >= 3 && + tokens[0].type === "other" && tokens[0].value === "." && + tokens[1].type === "other" && tokens[1].value === "." && + tokens[2].type === "other" && tokens[2].value === "." + ) { + tokens.shift(); + tokens.shift(); + tokens.shift(); + ret.variadic = true; + } + } + all_ws(); + var name = consume(ID); + if (!name) { + if (opt_token) tokens.unshift(opt_token); + tokens.unshift(type_token); + return; + } + ret.name = name.value; + if (ret.optional) { + all_ws(); + var dflt = default_(); + if (typeof dflt !== "undefined") { + ret["default"] = dflt; + } + } + return ret; + }; + + var argument_list = function(store) { + var ret = [], + arg = argument(store ? ret : null); + if (!arg) return; + ret.push(arg); + while (true) { + all_ws(store ? ret : null); + if (!consume(OTHER, ",")) return ret; + var nxt = argument(store ? ret : null) || error("Trailing comma in arguments list"); + ret.push(nxt); + } + }; + + var simple_extended_attr = function(store) { + all_ws(); + var name = consume(ID); + if (!name) return; + var ret = { + name: name.value, + "arguments": null + }; + all_ws(); + var eq = consume(OTHER, "="); + if (eq) { + var rhs; + all_ws(); + if (rhs = consume(ID)) { + ret.rhs = rhs; + } else if (rhs = consume(FLOAT)) { + ret.rhs = rhs; + } else if (rhs = consume(INT)) { + ret.rhs = rhs; + } else if (rhs = consume(STR)) { + ret.rhs = rhs; + } else if (consume(OTHER, "(")) { + // [Exposed=(Window,Worker)] + rhs = []; + var id = consume(ID); + if (id) { + rhs = [id.value]; + } + identifiers(rhs); + consume(OTHER, ")") || error("Unexpected token in extended attribute argument list or type pair"); + ret.rhs = { + type: "identifier-list", + value: rhs + }; + } + if (!ret.rhs) return error("No right hand side to extended attribute assignment"); + } + all_ws(); + if (consume(OTHER, "(")) { + var args, pair; + // [Constructor(DOMString str)] + if (args = argument_list(store)) { + ret["arguments"] = args; + } + // [Constructor()] + else { + ret["arguments"] = []; + } + all_ws(); + consume(OTHER, ")") || error("Unexpected token in extended attribute argument list"); + } + return ret; + }; + + // Note: we parse something simpler than the official syntax. It's all that ever + // seems to be used + var extended_attrs = function(store) { + var eas = []; + all_ws(store); + if (!consume(OTHER, "[")) return eas; + eas[0] = simple_extended_attr(store) || error("Extended attribute with not content"); + all_ws(); + while (consume(OTHER, ",")) { + if (eas.length) { + eas.push(simple_extended_attr(store)); + } else { + eas.push(simple_extended_attr(store) || error("Trailing comma in extended attribute")); + } + } + consume(OTHER, "]") || error("No end of extended attribute"); + return eas; + }; + + var default_ = function() { + all_ws(); + if (consume(OTHER, "=")) { + all_ws(); + var def = const_value(); + if (def) { + return def; + } else if (consume(OTHER, "[")) { + if (!consume(OTHER, "]")) error("Default sequence value must be empty"); + return { type: "sequence", value: [] }; + } else { + var str = consume(STR) || error("No value for default"); + str.value = str.value.replace(/^"/, "").replace(/"$/, ""); + return str; + } + } + }; + + var const_ = function(store) { + all_ws(store, "pea"); + if (!consume(ID, "const")) return; + var ret = { type: "const", nullable: false }; + all_ws(); + var typ = primitive_type(); + if (!typ) { + typ = consume(ID) || error("No type for const"); + typ = typ.value; + } + ret.idlType = typ; + all_ws(); + if (consume(OTHER, "?")) { + ret.nullable = true; + all_ws(); + } + var name = consume(ID) || error("No name for const"); + ret.name = name.value; + all_ws(); + consume(OTHER, "=") || error("No value assignment for const"); + all_ws(); + var cnt = const_value(); + if (cnt) ret.value = cnt; + else error("No value for const"); + all_ws(); + consume(OTHER, ";") || error("Unterminated const"); + return ret; + }; + + var inheritance = function() { + all_ws(); + if (consume(OTHER, ":")) { + all_ws(); + var inh = consume(ID) || error("No type in inheritance"); + return inh.value; + } + }; + + var operation_rest = function(ret, store) { + all_ws(); + if (!ret) ret = {}; + var name = consume(ID); + ret.name = name ? name.value : null; + all_ws(); + consume(OTHER, "(") || error("Invalid operation"); + ret["arguments"] = argument_list(store) || []; + all_ws(); + consume(OTHER, ")") || error("Unterminated operation"); + all_ws(); + consume(OTHER, ";") || error("Unterminated operation"); + return ret; + }; + + var callback = function(store) { + all_ws(store, "pea"); + var ret; + if (!consume(ID, "callback")) return; + all_ws(); + var tok = consume(ID, "interface"); + if (tok) { + tokens.unshift(tok); + ret = interface_(); + ret.type = "callback interface"; + return ret; + } + var name = consume(ID) || error("No name for callback"); + ret = { type: "callback", name: name.value }; + all_ws(); + consume(OTHER, "=") || error("No assignment in callback"); + all_ws(); + ret.idlType = return_type(); + all_ws(); + consume(OTHER, "(") || error("No arguments in callback"); + ret["arguments"] = argument_list(store) || []; + all_ws(); + consume(OTHER, ")") || error("Unterminated callback"); + all_ws(); + consume(OTHER, ";") || error("Unterminated callback"); + return ret; + }; + + var attribute = function(store) { + all_ws(store, "pea"); + var grabbed = [], + ret = { + type: "attribute", + "static": false, + stringifier: false, + inherit: false, + readonly: false + }; + if (consume(ID, "static")) { + ret["static"] = true; + grabbed.push(last_token); + } else if (consume(ID, "stringifier")) { + ret.stringifier = true; + grabbed.push(last_token); + } + var w = all_ws(); + if (w) grabbed.push(w); + if (consume(ID, "inherit")) { + if (ret["static"] || ret.stringifier) error("Cannot have a static or stringifier inherit"); + ret.inherit = true; + grabbed.push(last_token); + var w = all_ws(); + if (w) grabbed.push(w); + } + if (consume(ID, "readonly")) { + ret.readonly = true; + grabbed.push(last_token); + var w = all_ws(); + if (w) grabbed.push(w); + } + var rest = attribute_rest(ret); + if (!rest) { + tokens = grabbed.concat(tokens); + } + return rest; + }; + + var attribute_rest = function(ret) { + if (!consume(ID, "attribute")) { + return; + } + all_ws(); + ret.idlType = type_with_extended_attributes() || error("No type in attribute"); + if (ret.idlType.sequence) error("Attributes cannot accept sequence types"); + if (ret.idlType.generic === "record") error("Attributes cannot accept record types"); + all_ws(); + var name = consume(ID) || error("No name in attribute"); + ret.name = name.value; + all_ws(); + consume(OTHER, ";") || error("Unterminated attribute"); + return ret; + }; + + var return_type = function() { + var typ = type(); + if (!typ) { + if (consume(ID, "void")) { + return "void"; + } else error("No return type"); + } + return typ; + }; + + var operation = function(store) { + all_ws(store, "pea"); + var ret = { + type: "operation", + getter: false, + setter: false, + creator: false, + deleter: false, + legacycaller: false, + "static": false, + stringifier: false + }; + while (true) { + all_ws(); + if (consume(ID, "getter")) ret.getter = true; + else if (consume(ID, "setter")) ret.setter = true; + else if (consume(ID, "creator")) ret.creator = true; + else if (consume(ID, "deleter")) ret.deleter = true; + else if (consume(ID, "legacycaller")) ret.legacycaller = true; + else break; + } + if (ret.getter || ret.setter || ret.creator || ret.deleter || ret.legacycaller) { + all_ws(); + ret.idlType = return_type(); + operation_rest(ret, store); + return ret; + } + if (consume(ID, "static")) { + ret["static"] = true; + ret.idlType = return_type(); + operation_rest(ret, store); + return ret; + } else if (consume(ID, "stringifier")) { + ret.stringifier = true; - + all_ws(); + if (consume(OTHER, ";")) return ret; + ret.idlType = return_type(); + operation_rest(ret, store); + return ret; + } + ret.idlType = return_type(); + all_ws(); + if (consume(ID, "iterator")) { + all_ws(); + ret.type = "iterator"; + if (consume(ID, "object")) { + ret.iteratorObject = "object"; + } else if (consume(OTHER, "=")) { + all_ws(); + var name = consume(ID) || error("No right hand side in iterator"); + ret.iteratorObject = name.value; + } + all_ws(); + consume(OTHER, ";") || error("Unterminated iterator"); + return ret; + } else { + operation_rest(ret, store); + return ret; + } + }; + + var identifiers = function(arr) { + while (true) { + all_ws(); + if (consume(OTHER, ",")) { + all_ws(); + var name = consume(ID) || error("Trailing comma in identifiers list"); + arr.push(name.value); + } else break; + } + }; + + var serialiser = function(store) { + all_ws(store, "pea"); + if (!consume(ID, "serializer")) return; + var ret = { type: "serializer" }; + all_ws(); + if (consume(OTHER, "=")) { + all_ws(); + if (consume(OTHER, "{")) { + ret.patternMap = true; + all_ws(); + var id = consume(ID); + if (id && id.value === "getter") { + ret.names = ["getter"]; + } else if (id && id.value === "inherit") { + ret.names = ["inherit"]; + identifiers(ret.names); + } else if (id) { + ret.names = [id.value]; + identifiers(ret.names); + } else { + ret.names = []; + } + all_ws(); + consume(OTHER, "}") || error("Unterminated serializer pattern map"); + } else if (consume(OTHER, "[")) { + ret.patternList = true; + all_ws(); + var id = consume(ID); + if (id && id.value === "getter") { + ret.names = ["getter"]; + } else if (id) { + ret.names = [id.value]; + identifiers(ret.names); + } else { + ret.names = []; + } + all_ws(); + consume(OTHER, "]") || error("Unterminated serializer pattern list"); + } else { + var name = consume(ID) || error("Invalid serializer"); + ret.name = name.value; + } + all_ws(); + consume(OTHER, ";") || error("Unterminated serializer"); + return ret; + } else if (consume(OTHER, ";")) { + // noop, just parsing + } else { + ret.idlType = return_type(); + all_ws(); + ret.operation = operation_rest(null, store); + } + return ret; + }; + + var iterable_type = function() { + if (consume(ID, "iterable")) return "iterable"; + else if (consume(ID, "legacyiterable")) return "legacyiterable"; + else if (consume(ID, "maplike")) return "maplike"; + else if (consume(ID, "setlike")) return "setlike"; + else return; + }; + + var readonly_iterable_type = function() { + if (consume(ID, "maplike")) return "maplike"; + else if (consume(ID, "setlike")) return "setlike"; + else return; + }; + + var iterable = function(store) { + all_ws(store, "pea"); + var grabbed = [], + ret = { type: null, idlType: null, readonly: false }; + if (consume(ID, "readonly")) { + ret.readonly = true; + grabbed.push(last_token); + var w = all_ws(); + if (w) grabbed.push(w); + } + var consumeItType = ret.readonly ? readonly_iterable_type : iterable_type; + + var ittype = consumeItType(); + if (!ittype) { + tokens = grabbed.concat(tokens); + return; + } + + var secondTypeRequired = ittype === "maplike"; + var secondTypeAllowed = secondTypeRequired || ittype === "iterable"; + ret.type = ittype; + if (ret.type !== 'maplike' && ret.type !== 'setlike') + delete ret.readonly; + all_ws(); + if (consume(OTHER, "<")) { + ret.idlType = type_with_extended_attributes() || error("Error parsing " + ittype + " declaration"); + all_ws(); + if (secondTypeAllowed) { + var type2 = null; + if (consume(OTHER, ",")) { + all_ws(); + type2 = type_with_extended_attributes(); + all_ws(); + } + if (type2) + ret.idlType = [ret.idlType, type2]; + else if (secondTypeRequired) + error("Missing second type argument in " + ittype + " declaration"); + } + if (!consume(OTHER, ">")) error("Unterminated " + ittype + " declaration"); + all_ws(); + if (!consume(OTHER, ";")) error("Missing semicolon after " + ittype + " declaration"); + } else + error("Error parsing " + ittype + " declaration"); + + return ret; + }; + + var interface_ = function(isPartial, store) { + all_ws(isPartial ? null : store, "pea"); + if (!consume(ID, "interface")) return; + all_ws(); + var name = consume(ID) || error("No name for interface"); + var mems = [], + ret = { + type: "interface", + name: name.value, + partial: false, + members: mems + }; + if (!isPartial) ret.inheritance = inheritance() || null; + all_ws(); + consume(OTHER, "{") || error("Bodyless interface"); + while (true) { + all_ws(store ? mems : null); + if (consume(OTHER, "}")) { + all_ws(); + consume(OTHER, ";") || error("Missing semicolon after interface"); + return ret; + } + var ea = extended_attrs(store ? mems : null); + all_ws(); + var cnt = const_(store ? mems : null); + if (cnt) { + cnt.extAttrs = ea; + ret.members.push(cnt); + continue; + } + var mem = (opt.allowNestedTypedefs && typedef(store ? mems : null)) || + iterable(store ? mems : null) || + serialiser(store ? mems : null) || + attribute(store ? mems : null) || + operation(store ? mems : null) || + error("Unknown member"); + mem.extAttrs = ea; + ret.members.push(mem); + } + }; + + var namespace = function(isPartial, store) { + all_ws(isPartial ? null : store, "pea"); + if (!consume(ID, "namespace")) return; + all_ws(); + var name = consume(ID) || error("No name for namespace"); + var mems = [], + ret = { + type: "namespace", + name: name.value, + partial: isPartial, + members: mems + }; + all_ws(); + consume(OTHER, "{") || error("Bodyless namespace"); + while (true) { + all_ws(store ? mems : null); + if (consume(OTHER, "}")) { + all_ws(); + consume(OTHER, ";") || error("Missing semicolon after namespace"); + return ret; + } + var ea = extended_attrs(store ? mems : null); + all_ws(); + var mem = noninherited_attribute(store ? mems : null) || + nonspecial_operation(store ? mems : null) || + error("Unknown member"); + mem.extAttrs = ea; + ret.members.push(mem); + } + } + + var noninherited_attribute = function(store) { + var w = all_ws(store, "pea"), + grabbed = [], + ret = { + type: "attribute", + "static": false, + stringifier: false, + inherit: false, + readonly: false + }; + if (w) grabbed.push(w); + if (consume(ID, "readonly")) { + ret.readonly = true; + grabbed.push(last_token); + var w = all_ws(); + if (w) grabbed.push(w); + } + var rest = attribute_rest(ret); + if (!rest) { + tokens = grabbed.concat(tokens); + } + return rest; + } - var parse = function (tokens, opt) { - var line = 1; - tokens = tokens.slice(); - - var FLOAT = "float" - , INT = "integer" - , ID = "identifier" - , STR = "string" - , OTHER = "other" - ; - - var WebIDLParseError = function (str, line, input, tokens) { - this.message = str; - this.line = line; - this.input = input; - this.tokens = tokens; - }; - WebIDLParseError.prototype.toString = function () { - return this.message + ", line " + this.line + " (tokens: '" + this.input + "')\n" + - JSON.stringify(this.tokens, null, 4); - }; - - var error = function (str) { - var tok = "", numTokens = 0, maxTokens = 5; - while (numTokens < maxTokens && tokens.length > numTokens) { - tok += tokens[numTokens].value; - numTokens++; - } - throw new WebIDLParseError(str, line, tok, tokens.slice(0, 5)); - }; - - var last_token = null; - - var consume = function (type, value) { - if (!tokens.length || tokens[0].type !== type) return; - if (typeof value === "undefined" || tokens[0].value === value) { - last_token = tokens.shift(); - if (type === ID) last_token.value = last_token.value.replace(/^_/, ""); - return last_token; - } - }; - - var ws = function () { - if (!tokens.length) return; - if (tokens[0].type === "whitespace") { - var t = tokens.shift(); - t.value.replace(/\n/g, function (m) { line++; return m; }); - return t; - } - }; - - var all_ws = function (store, pea) { // pea == post extended attribute, tpea = same for types - var t = { type: "whitespace", value: "" }; - while (true) { - var w = ws(); - if (!w) break; - t.value += w.value; - } - if (t.value.length > 0) { - if (store) { - var w = t.value - , re = { - "ws": /^([\t\n\r ]+)/ - , "line-comment": /^\/\/(.*)\n?/m - , "multiline-comment": /^\/\*((?:.|\n|\r)*?)\*\// - } - , wsTypes = [] - ; - for (var k in re) wsTypes.push(k); - while (w.length) { - var matched = false; - for (var i = 0, n = wsTypes.length; i < n; i++) { - var type = wsTypes[i]; - w = w.replace(re[type], function (tok, m1) { - store.push({ type: type + (pea ? ("-" + pea) : ""), value: m1 }); - matched = true; - return ""; - }); - if (matched) break; - } - if (matched) continue; - throw new Error("Surprising white space construct."); // this shouldn't happen - } - } - return t; - } - }; - - var integer_type = function () { - var ret = ""; - all_ws(); - if (consume(ID, "unsigned")) ret = "unsigned "; - all_ws(); - if (consume(ID, "short")) return ret + "short"; - if (consume(ID, "long")) { - ret += "long"; - all_ws(); - if (consume(ID, "long")) return ret + " long"; - return ret; - } - if (ret) error("Failed to parse integer type"); - }; - - var float_type = function () { - var ret = ""; - all_ws(); - if (consume(ID, "unrestricted")) ret = "unrestricted "; - all_ws(); - if (consume(ID, "float")) return ret + "float"; - if (consume(ID, "double")) return ret + "double"; - if (ret) error("Failed to parse float type"); - }; - - var primitive_type = function () { - var num_type = integer_type() || float_type(); - if (num_type) return num_type; - all_ws(); - if (consume(ID, "boolean")) return "boolean"; - if (consume(ID, "byte")) return "byte"; - if (consume(ID, "octet")) return "octet"; - }; - - var const_value = function () { - if (consume(ID, "true")) return { type: "boolean", value: true }; - if (consume(ID, "false")) return { type: "boolean", value: false }; - if (consume(ID, "null")) return { type: "null" }; - if (consume(ID, "Infinity")) return { type: "Infinity", negative: false }; - if (consume(ID, "NaN")) return { type: "NaN" }; - var ret = consume(FLOAT) || consume(INT); - if (ret) return { type: "number", value: 1 * ret.value }; - var tok = consume(OTHER, "-"); - if (tok) { - if (consume(ID, "Infinity")) return { type: "Infinity", negative: true }; - else tokens.unshift(tok); - } - }; - - var type_suffix = function (obj) { - while (true) { - all_ws(); - if (consume(OTHER, "?")) { - if (obj.nullable) error("Can't nullable more than once"); - obj.nullable = true; - } - else if (consume(OTHER, "[")) { - all_ws(); - consume(OTHER, "]") || error("Unterminated array type"); - if (!obj.array) { - obj.array = 1; - obj.nullableArray = [obj.nullable]; - } - else { - obj.array++; - obj.nullableArray.push(obj.nullable); - } - obj.nullable = false; - } - else return; - } - }; - - var single_type = function () { - var prim = primitive_type() - , ret = { sequence: false, generic: null, nullable: false, array: false, union: false } - , name - , value - ; - if (prim) { - ret.idlType = prim; - } - else if (name = consume(ID)) { - value = name.value; - all_ws(); - // Generic types - if (consume(OTHER, "<")) { - // backwards compat - if (value === "sequence") { - ret.sequence = true; - } - ret.generic = value; - ret.idlType = type() || error("Error parsing generic type " + value); - all_ws(); - if (!consume(OTHER, ">")) error("Unterminated generic type " + value); - type_suffix(ret); - return ret; - } - else { - ret.idlType = value; - } - } - else { - return; - } - type_suffix(ret); - if (ret.nullable && !ret.array && ret.idlType === "any") error("Type any cannot be made nullable"); - return ret; - }; - - var union_type = function () { - all_ws(); - if (!consume(OTHER, "(")) return; - var ret = { sequence: false, generic: null, nullable: false, array: false, union: true, idlType: [] }; - var fst = type() || error("Union type with no content"); - ret.idlType.push(fst); - while (true) { - all_ws(); - if (!consume(ID, "or")) break; - var typ = type() || error("No type after 'or' in union type"); - ret.idlType.push(typ); - } - if (!consume(OTHER, ")")) error("Unterminated union type"); - type_suffix(ret); - return ret; - }; - - var type = function () { - return single_type() || union_type(); - }; - - var argument = function (store) { - var ret = { optional: false, variadic: false }; - ret.extAttrs = extended_attrs(store); - all_ws(store, "pea"); - var opt_token = consume(ID, "optional"); - if (opt_token) { - ret.optional = true; - all_ws(); - } - ret.idlType = type(); - if (!ret.idlType) { - if (opt_token) tokens.unshift(opt_token); - return; - } - var type_token = last_token; - if (!ret.optional) { - all_ws(); - if (tokens.length >= 3 && - tokens[0].type === "other" && tokens[0].value === "." && - tokens[1].type === "other" && tokens[1].value === "." && - tokens[2].type === "other" && tokens[2].value === "." - ) { - tokens.shift(); - tokens.shift(); - tokens.shift(); - ret.variadic = true; - } - } - all_ws(); - var name = consume(ID); - if (!name) { - if (opt_token) tokens.unshift(opt_token); - tokens.unshift(type_token); - return; - } - ret.name = name.value; - if (ret.optional) { - all_ws(); - ret["default"] = default_(); - } - return ret; - }; - - var argument_list = function (store) { - var ret = [] - , arg = argument(store ? ret : null) - ; - if (!arg) return; - ret.push(arg); - while (true) { - all_ws(store ? ret : null); - if (!consume(OTHER, ",")) return ret; - var nxt = argument(store ? ret : null) || error("Trailing comma in arguments list"); - ret.push(nxt); - } - }; - - var type_pair = function () { - all_ws(); - var k = type(); - if (!k) return; - all_ws() - if (!consume(OTHER, ",")) return; - all_ws(); - var v = type(); - if (!v) return; - return [k, v]; - }; - - var simple_extended_attr = function (store) { - all_ws(); - var name = consume(ID); - if (!name) return; - var ret = { - name: name.value - , "arguments": null - }; - all_ws(); - var eq = consume(OTHER, "="); - if (eq) { - var rhs; - all_ws(); - if (rhs = consume(ID)) { - ret.rhs = rhs - } - else if (consume(OTHER, "(")) { - // [Exposed=(Window,Worker)] - rhs = []; - var id = consume(ID); - if (id) { - rhs = [id.value]; - } - identifiers(rhs); - consume(OTHER, ")") || error("Unexpected token in extended attribute argument list or type pair"); - ret.rhs = { - type: "identifier-list", - value: rhs - }; - } - if (!ret.rhs) return error("No right hand side to extended attribute assignment"); - } - all_ws(); - if (consume(OTHER, "(")) { - var args, pair; - // [Constructor(DOMString str)] - if (args = argument_list(store)) { - ret["arguments"] = args; - } - // [MapClass(DOMString, DOMString)] - else if (pair = type_pair()) { - ret.typePair = pair; - } - // [Constructor()] - else { - ret["arguments"] = []; - } - all_ws(); - consume(OTHER, ")") || error("Unexpected token in extended attribute argument list or type pair"); - } - return ret; - }; - - // Note: we parse something simpler than the official syntax. It's all that ever - // seems to be used - var extended_attrs = function (store) { - var eas = []; - all_ws(store); - if (!consume(OTHER, "[")) return eas; - eas[0] = simple_extended_attr(store) || error("Extended attribute with not content"); - all_ws(); - while (consume(OTHER, ",")) { - eas.push(simple_extended_attr(store) || error("Trailing comma in extended attribute")); - all_ws(); - } - consume(OTHER, "]") || error("No end of extended attribute"); - return eas; - }; - - var default_ = function () { - all_ws(); - if (consume(OTHER, "=")) { - all_ws(); - var def = const_value(); - if (def) { - return def; - } - else if (consume(OTHER, "[")) { - if (!consume(OTHER, "]")) error("Default sequence value must be empty"); - return { type: "sequence", value: [] }; - } - else { - var str = consume(STR) || error("No value for default"); - str.value = str.value.replace(/^"/, "").replace(/"$/, ""); - return str; - } - } - }; - - var const_ = function (store) { - all_ws(store, "pea"); - if (!consume(ID, "const")) return; - var ret = { type: "const", nullable: false }; - all_ws(); - var typ = primitive_type(); - if (!typ) { - typ = consume(ID) || error("No type for const"); - typ = typ.value; - } - ret.idlType = typ; - all_ws(); - if (consume(OTHER, "?")) { - ret.nullable = true; - all_ws(); - } - var name = consume(ID) || error("No name for const"); - ret.name = name.value; - all_ws(); - consume(OTHER, "=") || error("No value assignment for const"); - all_ws(); - var cnt = const_value(); - if (cnt) ret.value = cnt; - else error("No value for const"); - all_ws(); - consume(OTHER, ";") || error("Unterminated const"); - return ret; - }; - - var inheritance = function () { - all_ws(); - if (consume(OTHER, ":")) { - all_ws(); - var inh = consume(ID) || error ("No type in inheritance"); - return inh.value; - } - }; - - var operation_rest = function (ret, store) { - all_ws(); - if (!ret) ret = {}; - var name = consume(ID); - ret.name = name ? name.value : null; - all_ws(); - consume(OTHER, "(") || error("Invalid operation"); - ret["arguments"] = argument_list(store) || []; - all_ws(); - consume(OTHER, ")") || error("Unterminated operation"); - all_ws(); - consume(OTHER, ";") || error("Unterminated operation"); - return ret; - }; - - var callback = function (store) { - all_ws(store, "pea"); - var ret; - if (!consume(ID, "callback")) return; - all_ws(); - var tok = consume(ID, "interface"); - if (tok) { - tokens.unshift(tok); - ret = interface_(); - ret.type = "callback interface"; - return ret; - } - var name = consume(ID) || error("No name for callback"); - ret = { type: "callback", name: name.value }; - all_ws(); - consume(OTHER, "=") || error("No assignment in callback"); - all_ws(); - ret.idlType = return_type(); - all_ws(); - consume(OTHER, "(") || error("No arguments in callback"); - ret["arguments"] = argument_list(store) || []; - all_ws(); - consume(OTHER, ")") || error("Unterminated callback"); - all_ws(); - consume(OTHER, ";") || error("Unterminated callback"); - return ret; - }; + var nonspecial_operation = function(store) { + all_ws(store, "pea"); + var ret = { + type: "operation", + getter: false, + setter: false, + creator: false, + deleter: false, + legacycaller: false, + "static": false, + stringifier: false + }; + ret.idlType = return_type(); + return operation_rest(ret, store); + } - var attribute = function (store) { - all_ws(store, "pea"); - var grabbed = [] - , ret = { - type: "attribute" - , "static": false - , stringifier: false - , inherit: false - , readonly: false - }; - if (consume(ID, "static")) { - ret["static"] = true; - grabbed.push(last_token); - } - else if (consume(ID, "stringifier")) { - ret.stringifier = true; - grabbed.push(last_token); - } - var w = all_ws(); - if (w) grabbed.push(w); - if (consume(ID, "inherit")) { - if (ret["static"] || ret.stringifier) error("Cannot have a static or stringifier inherit"); - ret.inherit = true; - grabbed.push(last_token); - var w = all_ws(); - if (w) grabbed.push(w); - } - if (consume(ID, "readonly")) { - ret.readonly = true; - grabbed.push(last_token); - var w = all_ws(); - if (w) grabbed.push(w); - } - if (!consume(ID, "attribute")) { - tokens = grabbed.concat(tokens); - return; - } - all_ws(); - ret.idlType = type() || error("No type in attribute"); - if (ret.idlType.sequence) error("Attributes cannot accept sequence types"); - all_ws(); - var name = consume(ID) || error("No name in attribute"); - ret.name = name.value; - all_ws(); - consume(OTHER, ";") || error("Unterminated attribute"); - return ret; - }; - - var return_type = function () { - var typ = type(); - if (!typ) { - if (consume(ID, "void")) { - return "void"; - } - else error("No return type"); - } - return typ; - }; - - var operation = function (store) { - all_ws(store, "pea"); - var ret = { - type: "operation" - , getter: false - , setter: false - , creator: false - , deleter: false - , legacycaller: false - , "static": false - , stringifier: false - }; - while (true) { - all_ws(); - if (consume(ID, "getter")) ret.getter = true; - else if (consume(ID, "setter")) ret.setter = true; - else if (consume(ID, "creator")) ret.creator = true; - else if (consume(ID, "deleter")) ret.deleter = true; - else if (consume(ID, "legacycaller")) ret.legacycaller = true; - else break; - } - if (ret.getter || ret.setter || ret.creator || ret.deleter || ret.legacycaller) { - all_ws(); - ret.idlType = return_type(); - operation_rest(ret, store); - return ret; - } - if (consume(ID, "static")) { - ret["static"] = true; - ret.idlType = return_type(); - operation_rest(ret, store); - return ret; - } - else if (consume(ID, "stringifier")) { - ret.stringifier = true;- - all_ws(); - if (consume(OTHER, ";")) return ret; - ret.idlType = return_type(); - operation_rest(ret, store); - return ret; - } - ret.idlType = return_type(); - all_ws(); - if (consume(ID, "iterator")) { - all_ws(); - ret.type = "iterator"; - if (consume(ID, "object")) { - ret.iteratorObject = "object"; - } - else if (consume(OTHER, "=")) { - all_ws(); - var name = consume(ID) || error("No right hand side in iterator"); - ret.iteratorObject = name.value; - } - all_ws(); - consume(OTHER, ";") || error("Unterminated iterator"); - return ret; - } - else { - operation_rest(ret, store); - return ret; - } - }; - - var identifiers = function (arr) { - while (true) { - all_ws(); - if (consume(OTHER, ",")) { - all_ws(); - var name = consume(ID) || error("Trailing comma in identifiers list"); - arr.push(name.value); - } - else break; - } - }; - - var serialiser = function (store) { - all_ws(store, "pea"); - if (!consume(ID, "serializer")) return; - var ret = { type: "serializer" }; - all_ws(); - if (consume(OTHER, "=")) { - all_ws(); - if (consume(OTHER, "{")) { - ret.patternMap = true; - all_ws(); - var id = consume(ID); - if (id && id.value === "getter") { - ret.names = ["getter"]; - } - else if (id && id.value === "inherit") { - ret.names = ["inherit"]; - identifiers(ret.names); - } - else if (id) { - ret.names = [id.value]; - identifiers(ret.names); - } - else { - ret.names = []; - } - all_ws(); - consume(OTHER, "}") || error("Unterminated serializer pattern map"); - } - else if (consume(OTHER, "[")) { - ret.patternList = true; - all_ws(); - var id = consume(ID); - if (id && id.value === "getter") { - ret.names = ["getter"]; - } - else if (id) { - ret.names = [id.value]; - identifiers(ret.names); - } - else { - ret.names = []; - } - all_ws(); - consume(OTHER, "]") || error("Unterminated serializer pattern list"); - } - else { - var name = consume(ID) || error("Invalid serializer"); - ret.name = name.value; - } - all_ws(); - consume(OTHER, ";") || error("Unterminated serializer"); - return ret; - } - else if (consume(OTHER, ";")) { - // noop, just parsing - } - else { - ret.idlType = return_type(); - all_ws(); - ret.operation = operation_rest(null, store); - } - return ret; - }; - - var iterable_type = function() { - if (consume(ID, "iterable")) return "iterable"; - else if (consume(ID, "legacyiterable")) return "legacyiterable"; - else if (consume(ID, "maplike")) return "maplike"; - else if (consume(ID, "setlike")) return "setlike"; - else return; - } - - var readonly_iterable_type = function() { - if (consume(ID, "maplike")) return "maplike"; - else if (consume(ID, "setlike")) return "setlike"; - else return; - } - - var iterable = function (store) { - all_ws(store, "pea"); - var grabbed = [], - ret = {type: null, idlType: null, readonly: false}; - if (consume(ID, "readonly")) { - ret.readonly = true; - grabbed.push(last_token); - var w = all_ws(); - if (w) grabbed.push(w); - } - var consumeItType = ret.readonly ? readonly_iterable_type : iterable_type; - - var ittype = consumeItType(); - if (!ittype) { - tokens = grabbed.concat(tokens); - return; - } - - var secondTypeRequired = ittype === "maplike"; - var secondTypeAllowed = secondTypeRequired || ittype === "iterable"; - ret.type = ittype; - if (ret.type !== 'maplike' && ret.type !== 'setlike') - delete ret.readonly; - all_ws(); - if (consume(OTHER, "<")) { - ret.idlType = type() || error("Error parsing " + ittype + " declaration"); - all_ws(); - if (secondTypeAllowed) { - var type2 = null; - if (consume(OTHER, ",")) { - all_ws(); - type2 = type(); - all_ws(); - } - if (type2) - ret.idlType = [ret.idlType, type2]; - else if (secondTypeRequired) - error("Missing second type argument in " + ittype + " declaration"); - } - if (!consume(OTHER, ">")) error("Unterminated " + ittype + " declaration"); - all_ws(); - if (!consume(OTHER, ";")) error("Missing semicolon after " + ittype + " declaration"); - } - else - error("Error parsing " + ittype + " declaration"); - - return ret; - } - - var interface_ = function (isPartial, store) { - all_ws(isPartial ? null : store, "pea"); - if (!consume(ID, "interface")) return; - all_ws(); - var name = consume(ID) || error("No name for interface"); - var mems = [] - , ret = { - type: "interface" - , name: name.value - , partial: false - , members: mems - }; - if (!isPartial) ret.inheritance = inheritance() || null; - all_ws(); - consume(OTHER, "{") || error("Bodyless interface"); - while (true) { - all_ws(store ? mems : null); - if (consume(OTHER, "}")) { - all_ws(); - consume(OTHER, ";") || error("Missing semicolon after interface"); - return ret; - } - var ea = extended_attrs(store ? mems : null); - all_ws(); - var cnt = const_(store ? mems : null); - if (cnt) { - cnt.extAttrs = ea; - ret.members.push(cnt); - continue; - } - var mem = (opt.allowNestedTypedefs && typedef(store ? mems : null)) || - iterable(store ? mems : null) || - serialiser(store ? mems : null) || - attribute(store ? mems : null) || - operation(store ? mems : null) || - error("Unknown member"); - mem.extAttrs = ea; - ret.members.push(mem); - } - }; - - var partial = function (store) { - all_ws(store, "pea"); - if (!consume(ID, "partial")) return; - var thing = dictionary(true, store) || - interface_(true, store) || - error("Partial doesn't apply to anything"); - thing.partial = true; - return thing; - }; - - var dictionary = function (isPartial, store) { - all_ws(isPartial ? null : store, "pea"); - if (!consume(ID, "dictionary")) return; - all_ws(); - var name = consume(ID) || error("No name for dictionary"); - var mems = [] - , ret = { - type: "dictionary" - , name: name.value - , partial: false - , members: mems - }; - if (!isPartial) ret.inheritance = inheritance() || null; - all_ws(); - consume(OTHER, "{") || error("Bodyless dictionary"); - while (true) { - all_ws(store ? mems : null); - if (consume(OTHER, "}")) { - all_ws(); - consume(OTHER, ";") || error("Missing semicolon after dictionary"); - return ret; - } - var ea = extended_attrs(store ? mems : null); - all_ws(store ? mems : null, "pea"); - var required = consume(ID, "required"); - var typ = type() || error("No type for dictionary member"); - all_ws(); - var name = consume(ID) || error("No name for dictionary member"); - var dflt = default_(); - if (required && dflt) error("Required member must not have a default"); - ret.members.push({ - type: "field" - , name: name.value - , required: !!required - , idlType: typ - , extAttrs: ea - , "default": dflt - }); - all_ws(); - consume(OTHER, ";") || error("Unterminated dictionary member"); - } - }; - - var exception = function (store) { - all_ws(store, "pea"); - if (!consume(ID, "exception")) return; - all_ws(); - var name = consume(ID) || error("No name for exception"); - var mems = [] - , ret = { - type: "exception" - , name: name.value - , members: mems - }; - ret.inheritance = inheritance() || null; - all_ws(); - consume(OTHER, "{") || error("Bodyless exception"); - while (true) { - all_ws(store ? mems : null); - if (consume(OTHER, "}")) { - all_ws(); - consume(OTHER, ";") || error("Missing semicolon after exception"); - return ret; - } - var ea = extended_attrs(store ? mems : null); - all_ws(store ? mems : null, "pea"); - var cnt = const_(); - if (cnt) { - cnt.extAttrs = ea; - ret.members.push(cnt); - } - else { - var typ = type(); - all_ws(); - var name = consume(ID); - all_ws(); - if (!typ || !name || !consume(OTHER, ";")) error("Unknown member in exception body"); - ret.members.push({ - type: "field" - , name: name.value - , idlType: typ - , extAttrs: ea - }); - } - } - }; - - var enum_ = function (store) { - all_ws(store, "pea"); - if (!consume(ID, "enum")) return; - all_ws(); - var name = consume(ID) || error("No name for enum"); - var vals = [] - , ret = { - type: "enum" - , name: name.value - , values: vals - }; - all_ws(); - consume(OTHER, "{") || error("No curly for enum"); - var saw_comma = false; - while (true) { - all_ws(store ? vals : null); - if (consume(OTHER, "}")) { - all_ws(); - consume(OTHER, ";") || error("No semicolon after enum"); - return ret; - } - var val = consume(STR) || error("Unexpected value in enum"); - ret.values.push(val.value.replace(/"/g, "")); - all_ws(store ? vals : null); - if (consume(OTHER, ",")) { - if (store) vals.push({ type: "," }); - all_ws(store ? vals : null); - saw_comma = true; - } - else { - saw_comma = false; - } - } - }; - - var typedef = function (store) { - all_ws(store, "pea"); - if (!consume(ID, "typedef")) return; - var ret = { - type: "typedef" - }; - all_ws(); - ret.typeExtAttrs = extended_attrs(); - all_ws(store, "tpea"); - ret.idlType = type() || error("No type in typedef"); - all_ws(); - var name = consume(ID) || error("No name in typedef"); - ret.name = name.value; - all_ws(); - consume(OTHER, ";") || error("Unterminated typedef"); - return ret; - }; - - var implements_ = function (store) { - all_ws(store, "pea"); - var target = consume(ID); - if (!target) return; - var w = all_ws(); - if (consume(ID, "implements")) { - var ret = { - type: "implements" - , target: target.value - }; - all_ws(); - var imp = consume(ID) || error("Incomplete implements statement"); - ret["implements"] = imp.value; - all_ws(); - consume(OTHER, ";") || error("No terminating ; for implements statement"); - return ret; - } - else { - // rollback - tokens.unshift(w); - tokens.unshift(target); - } - }; - - var definition = function (store) { - return callback(store) || - interface_(false, store) || - partial(store) || - dictionary(false, store) || - exception(store) || - enum_(store) || - typedef(store) || - implements_(store) - ; - }; - - var definitions = function (store) { - if (!tokens.length) return []; - var defs = []; - while (true) { - var ea = extended_attrs(store ? defs : null) - , def = definition(store ? defs : null); - if (!def) { - if (ea.length) error("Stray extended attributes"); - break; - } - def.extAttrs = ea; - defs.push(def); - } - return defs; - }; - var res = definitions(opt.ws); - if (tokens.length) error("Unrecognised tokens"); - return res; + var partial = function(store) { + all_ws(store, "pea"); + if (!consume(ID, "partial")) return; + var thing = dictionary(true, store) || + interface_(true, store) || + namespace(true, store) || + error("Partial doesn't apply to anything"); + thing.partial = true; + return thing; }; - var inNode = typeof module !== "undefined" && module.exports - , obj = { - parse: function (str, opt) { - if (!opt) opt = {}; - var tokens = tokenise(str); - return parse(tokens, opt); - } + var dictionary = function(isPartial, store) { + all_ws(isPartial ? null : store, "pea"); + if (!consume(ID, "dictionary")) return; + all_ws(); + var name = consume(ID) || error("No name for dictionary"); + var mems = [], + ret = { + type: "dictionary", + name: name.value, + partial: false, + members: mems + }; + if (!isPartial) ret.inheritance = inheritance() || null; + all_ws(); + consume(OTHER, "{") || error("Bodyless dictionary"); + while (true) { + all_ws(store ? mems : null); + if (consume(OTHER, "}")) { + all_ws(); + consume(OTHER, ";") || error("Missing semicolon after dictionary"); + return ret; + } + var ea = extended_attrs(store ? mems : null); + all_ws(store ? mems : null, "pea"); + var required = consume(ID, "required"); + var typ = type_with_extended_attributes() || error("No type for dictionary member"); + all_ws(); + var name = consume(ID) || error("No name for dictionary member"); + var dflt = default_(); + if (required && dflt) error("Required member must not have a default"); + var member = { + type: "field", + name: name.value, + required: !!required, + idlType: typ, + extAttrs: ea + }; + if (typeof dflt !== "undefined") { + member["default"] = dflt; + } + ret.members.push(member); + all_ws(); + consume(OTHER, ";") || error("Unterminated dictionary member"); + } }; - if (inNode) module.exports = obj; - else self.WebIDL2 = obj; + var exception = function(store) { + all_ws(store, "pea"); + if (!consume(ID, "exception")) return; + all_ws(); + var name = consume(ID) || error("No name for exception"); + var mems = [], + ret = { + type: "exception", + name: name.value, + members: mems + }; + ret.inheritance = inheritance() || null; + all_ws(); + consume(OTHER, "{") || error("Bodyless exception"); + while (true) { + all_ws(store ? mems : null); + if (consume(OTHER, "}")) { + all_ws(); + consume(OTHER, ";") || error("Missing semicolon after exception"); + return ret; + } + var ea = extended_attrs(store ? mems : null); + all_ws(store ? mems : null, "pea"); + var cnt = const_(); + if (cnt) { + cnt.extAttrs = ea; + ret.members.push(cnt); + } else { + var typ = type(); + all_ws(); + var name = consume(ID); + all_ws(); + if (!typ || !name || !consume(OTHER, ";")) error("Unknown member in exception body"); + ret.members.push({ + type: "field", + name: name.value, + idlType: typ, + extAttrs: ea + }); + } + } + }; + + var enum_ = function(store) { + all_ws(store, "pea"); + if (!consume(ID, "enum")) return; + all_ws(); + var name = consume(ID) || error("No name for enum"); + var vals = [], + ret = { + type: "enum", + name: name.value, + values: vals + }; + all_ws(); + consume(OTHER, "{") || error("No curly for enum"); + var saw_comma = false; + while (true) { + all_ws(store ? vals : null); + if (consume(OTHER, "}")) { + all_ws(); + consume(OTHER, ";") || error("No semicolon after enum"); + return ret; + } + var val = consume(STR) || error("Unexpected value in enum"); + ret.values.push(val.value.replace(/"/g, "")); + all_ws(store ? vals : null); + if (consume(OTHER, ",")) { + if (store) vals.push({ type: "," }); + all_ws(store ? vals : null); + saw_comma = true; + } else { + saw_comma = false; + } + } + }; + + var typedef = function(store) { + all_ws(store, "pea"); + if (!consume(ID, "typedef")) return; + var ret = { + type: "typedef" + }; + all_ws(); + ret.idlType = type_with_extended_attributes() || error("No type in typedef"); + all_ws(); + var name = consume(ID) || error("No name in typedef"); + ret.name = name.value; + all_ws(); + consume(OTHER, ";") || error("Unterminated typedef"); + return ret; + }; + + var implements_ = function(store) { + all_ws(store, "pea"); + var target = consume(ID); + if (!target) return; + var w = all_ws(); + if (consume(ID, "implements")) { + var ret = { + type: "implements", + target: target.value + }; + all_ws(); + var imp = consume(ID) || error("Incomplete implements statement"); + ret["implements"] = imp.value; + all_ws(); + consume(OTHER, ";") || error("No terminating ; for implements statement"); + return ret; + } else { + // rollback + tokens.unshift(w); + tokens.unshift(target); + } + }; + + var definition = function(store) { + return callback(store) || + interface_(false, store) || + partial(store) || + dictionary(false, store) || + exception(store) || + enum_(store) || + typedef(store) || + implements_(store) || + namespace(false, store); + }; + + var definitions = function(store) { + if (!tokens.length) return []; + var defs = []; + while (true) { + var ea = extended_attrs(store ? defs : null), + def = definition(store ? defs : null); + if (!def) { + if (ea.length) error("Stray extended attributes"); + break; + } + def.extAttrs = ea; + defs.push(def); + } + return defs; + }; + var res = definitions(opt.ws); + if (tokens.length) error("Unrecognised tokens"); + return res; + }; + + var obj = { + parse: function(str, opt) { + if (!opt) opt = {}; + var tokens = tokenise(str); + return parse(tokens, opt); + } + }; + + if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') { + module.exports = obj; + } else if (typeof define === 'function' && define.amd) { + define([], function() { + return obj; + }); + } else { + (self || window).WebIDL2 = obj; + } }()); diff --git a/tests/wpt/web-platform-tests/resources/webidl2/lib/writer.js b/tests/wpt/web-platform-tests/resources/webidl2/lib/writer.js index ba836373823..f7c79f82893 100644 --- a/tests/wpt/web-platform-tests/resources/webidl2/lib/writer.js +++ b/tests/wpt/web-platform-tests/resources/webidl2/lib/writer.js @@ -1,236 +1,280 @@ +(function() { -(function () { + var write = function(ast, opt) { + var curPea = "", + curTPea = "", + opt = opt || {}, + noop = function(str) { + return str; }, + optNames = "type".split(" "), + context = []; + for (var i = 0, n = optNames.length; i < n; i++) { + var o = optNames[i]; + if (!opt[o]) opt[o] = noop; + } - var write = function (ast, opt) { - var curPea = "" - , curTPea = "" - , opt = opt || {} - , noop = function (str) { return str; } - , optNames = "type".split(" ") - , context = [] - ; - for (var i = 0, n = optNames.length; i < n; i++) { - var o = optNames[i]; - if (!opt[o]) opt[o] = noop; + var literal = function(it) { + return it.value; + }; + var wsPea = function(it) { + curPea += it.value; + return ""; + }; + var wsTPea = function(it) { + curTPea += it.value; + return ""; + }; + var lineComment = function(it) { + return "//" + it.value + "\n"; + }; + var multilineComment = function(it) { + return "/*" + it.value + "*/"; + }; + var type = function(it) { + if (typeof it === "string") return opt.type(it); // XXX should maintain some context + if (it.union) return "(" + it.idlType.map(type).join(" or ") + ")"; + var ret = ""; + if (it.generic) ret += it.generic + "<"; + else if (it.sequence) ret += "sequence<"; + if (Array.isArray(it.idlType)) ret += it.idlType.map(type).join(", "); + else ret += type(it.idlType); + if (it.array || it.generic === 'Array') { + for (var i = 0, n = it.nullableArray.length; i < n; i++) { + var val = it.nullableArray[i]; + if (val) ret += "?"; + ret += "[]"; } - - var literal = function (it) { - return it.value; - }; - var wsPea = function (it) { - curPea += it.value; - return ""; - }; - var wsTPea = function (it) { - curTPea += it.value; - return ""; - }; - var lineComment = function (it) { - return "//" + it.value + "\n"; - }; - var multilineComment = function (it) { - return "/*" + it.value + "*/"; - }; - var type = function (it) { - if (typeof it === "string") return opt.type(it); // XXX should maintain some context - if (it.union) return "(" + it.idlType.map(type).join(" or ") + ")"; - var ret = ""; - if (it.sequence) ret += "sequence<"; - ret += type(it.idlType); - if (it.array) { - for (var i = 0, n = it.nullableArray.length; i < n; i++) { - var val = it.nullableArray[i]; - if (val) ret += "?"; - ret += "[]"; - } - } - if (it.sequence) ret += ">"; - if (it.nullable) ret += "?"; + } + if (it.generic || it.sequence) ret += ">"; + if (it.nullable) ret += "?"; - return ret; - }; - var const_value = function (it) { - var tp = it. type; - if (tp === "boolean") return it.value ? "true" : "false"; - else if (tp === "null") return "null"; - else if (tp === "Infinity") return (it.negative ? "-" : "") + "Infinity"; - else if (tp === "NaN") return "NaN"; - else if (tp === "number") return it.value; - else return '"' + it.value + '"'; - }; - var argument = function (arg, pea) { - var ret = extended_attributes(arg.extAttrs, pea); - if (arg.optional) ret += "optional "; - ret += type(arg.idlType); - if (arg.variadic) ret += "..."; - ret += " " + arg.name; - if (arg["default"]) ret += " = " + const_value(arg["default"]); - return ret; - }; - var args = function (its) { - var res = "" - , pea = "" - ; - for (var i = 0, n = its.length; i < n; i++) { - var arg = its[i]; - if (arg.type === "ws") res += arg.value; - else if (arg.type === "ws-pea") pea += arg.value; - else { - res += argument(arg, pea); - if (i < n - 1) res += ","; - pea = ""; - } - } - return res; - }; - var make_ext_at = function (it) { - if (it["arguments"] === null) return it.name; - context.unshift(it); - var ret = it.name + "(" + (it["arguments"].length ? args(it["arguments"]) : "") + ")"; - context.shift(); // XXX need to add more contexts, but not more than needed for ReSpec - return ret; - }; - var extended_attributes = function (eats, pea) { - if (!eats || !eats.length) return ""; - return "[" + eats.map(make_ext_at).join(", ") + "]" + pea; - }; - - var modifiers = "getter setter creator deleter legacycaller stringifier static".split(" "); - var operation = function (it) { - var ret = extended_attributes(it.extAttrs, curPea); - curPea = ""; - if (it.stringifier && !it.idlType) return "stringifier;"; - for (var i = 0, n = modifiers.length; i < n; i++) { - var mod = modifiers[i]; - if (it[mod]) ret += mod + " "; - } - ret += type(it.idlType) + " "; - if (it.name) ret += it.name; - ret += "(" + args(it["arguments"]) + ");"; - return ret; - }; - - var attribute = function (it) { - var ret = extended_attributes(it.extAttrs, curPea); - curPea = ""; - if (it["static"]) ret += "static "; - if (it.stringifier) ret += "stringifier "; - if (it.readonly) ret += "readonly "; - if (it.inherit) ret += "inherit "; - ret += "attribute " + type(it.idlType) + " " + it.name + ";"; - return ret; - }; - - var interface_ = function (it) { - var ret = extended_attributes(it.extAttrs, curPea); - curPea = ""; - if (it.partial) ret += "partial "; - ret += "interface " + it.name + " "; - if (it.inheritance) ret += ": " + it.inheritance + " "; - ret += "{" + iterate(it.members) + "};"; - return ret; - }; - - var dictionary = function (it) { - var ret = extended_attributes(it.extAttrs, curPea); - curPea = ""; - if (it.partial) ret += "partial "; - ret += "dictionary " + it.name + " "; - ret += "{" + iterate(it.members) + "};"; - return ret; - }; - var field = function (it) { - var ret = extended_attributes(it.extAttrs, curPea); - curPea = ""; - ret += type(it.idlType) + " " + it.name; - if (it["default"]) ret += " = " + const_value(it["default"]); - ret += ";"; - return ret; - }; - var exception = function (it) { - var ret = extended_attributes(it.extAttrs, curPea); - curPea = ""; - ret += "exception " + it.name + " "; - if (it.inheritance) ret += ": " + it.inheritance + " "; - ret += "{" + iterate(it.members) + "};"; - return ret; - }; - var const_ = function (it) { - var ret = extended_attributes(it.extAttrs, curPea); - curPea = ""; - return ret + "const " + type(it.idlType) + " " + it.name + " = " + const_value(it.value) + ";"; - }; - var typedef = function (it) { - var ret = extended_attributes(it.extAttrs, curPea); - curPea = ""; - ret += "typedef " + extended_attributes(it.typeExtAttrs, curTPea); - curTPea = ""; - return ret + type(it.idlType) + " " + it.name + ";"; - }; - var implements_ = function (it) { - var ret = extended_attributes(it.extAttrs, curPea); - curPea = ""; - return ret + it.target + " implements " + it["implements"] + ";"; - }; - var callback = function (it) { - var ret = extended_attributes(it.extAttrs, curPea); - curPea = ""; - return ret + "callback " + it.name + " = " + type(it.idlType) + - "(" + args(it["arguments"]) + ");"; - }; - var enum_ = function (it) { - var ret = extended_attributes(it.extAttrs, curPea); - curPea = ""; - ret += "enum " + it.name + " {"; - for (var i = 0, n = it.values.length; i < n; i++) { - var v = it.values[i]; - if (typeof v === "string") ret += '"' + v + '"'; - else if (v.type === "ws") ret += v.value; - else if (v.type === ",") ret += ","; - } - return ret + "};"; - }; - - var table = { - ws: literal - , "ws-pea": wsPea - , "ws-tpea": wsTPea - , "line-comment": lineComment - , "multiline-comment": multilineComment - , "interface": interface_ - , operation: operation - , attribute: attribute - , dictionary: dictionary - , field: field - , exception: exception - , "const": const_ - , typedef: typedef - , "implements": implements_ - , callback: callback - , "enum": enum_ - }; - var dispatch = function (it) { - return table[it.type](it); - }; - var iterate = function (things) { - if (!things) return; - var ret = ""; - for (var i = 0, n = things.length; i < n; i++) ret += dispatch(things[i]); - return ret; - }; - return iterate(ast); + return ret; + }; + var const_value = function(it) { + var tp = it.type; + if (tp === "boolean") return it.value ? "true" : "false"; + else if (tp === "null") return "null"; + else if (tp === "Infinity") return (it.negative ? "-" : "") + "Infinity"; + else if (tp === "NaN") return "NaN"; + else if (tp === "number") return it.value; + else return '"' + it.value + '"'; + }; + var argument = function(arg, pea) { + var ret = extended_attributes(arg.extAttrs, pea); + if (arg.optional) ret += "optional "; + ret += type(arg.idlType); + if (arg.variadic) ret += "..."; + ret += " " + arg.name; + if (arg["default"]) ret += " = " + const_value(arg["default"]); + return ret; + }; + var args = function(its) { + var res = "", + pea = ""; + for (var i = 0, n = its.length; i < n; i++) { + var arg = its[i]; + if (arg.type === "ws") res += arg.value; + else if (arg.type === "ws-pea") pea += arg.value; + else { + res += argument(arg, pea); + if (i < n - 1) res += ","; + pea = ""; + } + } + return res; + }; + var make_ext_at = function(it) { + if (it["arguments"] === null) return it.name; + context.unshift(it); + var ret = it.name + "(" + (it["arguments"].length ? args(it["arguments"]) : "") + ")"; + context.shift(); // XXX need to add more contexts, but not more than needed for ReSpec + return ret; + }; + var extended_attributes = function(eats, pea) { + if (!eats || !eats.length) return ""; + return "[" + eats.map(make_ext_at).join(", ") + "]" + pea; }; - - var inNode = typeof module !== "undefined" && module.exports - , obj = { - write: function (ast, opt) { - if (!opt) opt = {}; - return write(ast, opt); - } + var modifiers = "getter setter creator deleter legacycaller stringifier static".split(" "); + var operation = function(it) { + var ret = extended_attributes(it.extAttrs, curPea); + curPea = ""; + if (it.stringifier && !it.idlType) return "stringifier;"; + for (var i = 0, n = modifiers.length; i < n; i++) { + var mod = modifiers[i]; + if (it[mod]) ret += mod + " "; + } + ret += type(it.idlType) + " "; + if (it.name) ret += it.name; + ret += "(" + args(it["arguments"]) + ");"; + return ret; }; - if (inNode) module.exports = obj; - else window.WebIDL2Writer = obj; - + var attribute = function(it) { + var ret = extended_attributes(it.extAttrs, curPea); + curPea = ""; + if (it["static"]) ret += "static "; + if (it.stringifier) ret += "stringifier "; + if (it.readonly) ret += "readonly "; + if (it.inherit) ret += "inherit "; + ret += "attribute " + type(it.idlType) + " " + it.name + ";"; + return ret; + }; + + var interface_ = function(it) { + var ret = extended_attributes(it.extAttrs, curPea); + curPea = ""; + if (it.partial) ret += "partial "; + ret += "interface " + it.name + " "; + if (it.inheritance) ret += ": " + it.inheritance + " "; + ret += "{" + iterate(it.members) + "};"; + return ret; + }; + + var dictionary = function(it) { + var ret = extended_attributes(it.extAttrs, curPea); + curPea = ""; + if (it.partial) ret += "partial "; + ret += "dictionary " + it.name + " "; + ret += "{" + iterate(it.members) + "};"; + return ret; + }; + var field = function(it) { + var ret = extended_attributes(it.extAttrs, curPea); + curPea = ""; + if (it.required) ret += "required "; + ret += type(it.idlType) + " " + it.name; + if (it["default"]) ret += " = " + const_value(it["default"]); + ret += ";"; + return ret; + }; + var exception = function(it) { + var ret = extended_attributes(it.extAttrs, curPea); + curPea = ""; + ret += "exception " + it.name + " "; + if (it.inheritance) ret += ": " + it.inheritance + " "; + ret += "{" + iterate(it.members) + "};"; + return ret; + }; + var const_ = function(it) { + var ret = extended_attributes(it.extAttrs, curPea); + curPea = ""; + return ret + "const " + type(it.idlType) + " " + it.name + " = " + const_value(it.value) + ";"; + }; + var typedef = function(it) { + var ret = extended_attributes(it.extAttrs, curPea); + curPea = ""; + ret += "typedef " + extended_attributes(it.typeExtAttrs, curTPea); + curTPea = ""; + return ret + type(it.idlType) + " " + it.name + ";"; + }; + var implements_ = function(it) { + var ret = extended_attributes(it.extAttrs, curPea); + curPea = ""; + return ret + it.target + " implements " + it["implements"] + ";"; + }; + var callback = function(it) { + var ret = extended_attributes(it.extAttrs, curPea); + curPea = ""; + return ret + "callback " + it.name + " = " + type(it.idlType) + + "(" + args(it["arguments"]) + ");"; + }; + var enum_ = function(it) { + var ret = extended_attributes(it.extAttrs, curPea); + curPea = ""; + ret += "enum " + it.name + " {"; + for (var i = 0, n = it.values.length; i < n; i++) { + var v = it.values[i]; + if (typeof v === "string") ret += '"' + v + '"'; + else if (v.type === "ws") ret += v.value; + else if (v.type === ",") ret += ","; + } + return ret + "};"; + }; + var serializer = function(it) { + var ret = "serializer"; + if (it.name) { + ret += " = " + it.name + ";"; + } else if (it.patternList) { + ret += " = [ " + it.names.join(", ") + " ];"; + } else if (it.patternMap) { + ret += " = { " + it.names.join(", ") + " };"; + } else if (it.operation) { + ret += " " + operation(it); + } else { + ret += ";"; + } + return ret; + }; + var iterable = function(it) { + return "iterable<" + (it.idlType instanceof Array ? it.idlType.map(type).join(", ") : type(it.idlType)) + ">;"; + }; + var legacyiterable = function(it) { + return "legacyiterable<" + (it.idlType instanceof Array ? it.idlType.map(type).join(", ") : type(it.idlType)) + ">;"; + }; + var maplike = function(it) { + return (it.readonly ? "readonly " : "") + "maplike<" + + it.idlType.map(type).join(", ") + ">;"; + }; + var setlike = function(it) { + return (it.readonly ? "readonly " : "") + "setlike<" + + type(it.idlType) + ">;"; + }; + var callbackInterface = function(it) { + return 'callback ' + interface_(it); + }; + + var table = { + ws: literal, + "ws-pea": wsPea, + "ws-tpea": wsTPea, + "line-comment": lineComment, + "multiline-comment": multilineComment, + "interface": interface_, + operation: operation, + attribute: attribute, + dictionary: dictionary, + field: field, + exception: exception, + "const": const_, + typedef: typedef, + "implements": implements_, + callback: callback, + "enum": enum_, + serializer: serializer, + iterable: iterable, + legacyiterable: legacyiterable, + maplike: maplike, + setlike: setlike, + "callback interface": callbackInterface + }; + var dispatch = function(it) { + return table[it.type](it); + }; + var iterate = function(things) { + if (!things) return; + var ret = ""; + for (var i = 0, n = things.length; i < n; i++) ret += dispatch(things[i]); + return ret; + }; + return iterate(ast); + }; + + + var obj = { + write: function(ast, opt) { + if (!opt) opt = {}; + return write(ast, opt); + } + }; + + if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') { + module.exports = obj; + } else if (typeof define === 'function' && define.amd) { + define([], function() { + return obj; + }); + } else { + (self || window).WebIDL2Writer = obj; + } }()); diff --git a/tests/wpt/web-platform-tests/resources/webidl2/package.json b/tests/wpt/web-platform-tests/resources/webidl2/package.json index c5ae7da2d59..02b2a9d9b16 100644 --- a/tests/wpt/web-platform-tests/resources/webidl2/package.json +++ b/tests/wpt/web-platform-tests/resources/webidl2/package.json @@ -1,17 +1,17 @@ { "name": "webidl2", "description": "A WebIDL Parser", - "version": "2.0.11", + "version": "2.4.0", "author": "Robin Berjon ", "license": "MIT", "dependencies": {}, "devDependencies": { - "mocha": "2.2.5", - "expect.js": "0.3.1", + "mocha": "3.2.0", + "expect": "1.20.2", "underscore": "1.8.3", - "jsondiffpatch": "0.1.31", + "jsondiffpatch": "0.2.4", "benchmark": "*", - "microtime": "1.4.2" + "microtime": "2.1.3" }, "scripts": { "test": "mocha" diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/invalid.js b/tests/wpt/web-platform-tests/resources/webidl2/test/invalid.js index c9821803726..b8ab3a1866d 100644 --- a/tests/wpt/web-platform-tests/resources/webidl2/test/invalid.js +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/invalid.js @@ -4,7 +4,7 @@ // are fully correct interpretations of the IDLs var wp = process.env.JSCOV ? require("../lib-cov/webidl2") : require("../lib/webidl2") -, expect = require("expect.js") +, expect = require("expect") , pth = require("path") , fs = require("fs") ; @@ -16,7 +16,7 @@ describe("Parses all of the invalid IDLs to check that they blow up correctly", .map(function (it) { return pth.join(dir, it); }) , errors = idls.map(function (it) { return pth.join(__dirname, "invalid", "json", pth.basename(it).replace(/\.w?idl/, ".json")); }) ; - + for (var i = 0, n = idls.length; i < n; i++) { var idl = idls[i], error = JSON.parse(fs.readFileSync(errors[i], "utf8")); var func = (function (idl, err) { @@ -30,11 +30,11 @@ describe("Parses all of the invalid IDLs to check that they blow up correctly", error = e; } finally { - expect(error).to.be.ok(); - expect(error.message).to.equal(err.message); - expect(error.line).to.equal(err.line); + expect(error).toExist(); + expect(error.message).toEqual(err.message); + expect(error.line).toEqual(err.line); } - + }; }(idl, error)); it("should produce the right error for " + idl, func); diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/invalid/idl/record-key.widl b/tests/wpt/web-platform-tests/resources/webidl2/test/invalid/idl/record-key.widl new file mode 100644 index 00000000000..39dc386182f --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/invalid/idl/record-key.widl @@ -0,0 +1,3 @@ +interface Foo { + void foo(record param); +}; diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/invalid/json/record-key.json b/tests/wpt/web-platform-tests/resources/webidl2/test/invalid/json/record-key.json new file mode 100644 index 00000000000..3b929b926a3 --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/invalid/json/record-key.json @@ -0,0 +1,4 @@ +{ + "message": "Record key must be DOMString, USVString, or ByteString", + "line": 2 +} diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax.js b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax.js index 712542a6be8..3b343e4229d 100644 --- a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax.js +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax.js @@ -1,6 +1,6 @@ var wp = process.env.JSCOV ? require("../lib-cov/webidl2") : require("../lib/webidl2") -, expect = require("expect.js") +, expect = require("expect") , pth = require("path") , fs = require("fs") , jdp = require("jsondiffpatch") @@ -14,7 +14,7 @@ describe("Parses all of the IDLs to produce the correct ASTs", function () { .map(function (it) { return pth.join(dir, it); }) , jsons = idls.map(function (it) { return pth.join(__dirname, "syntax/json", pth.basename(it).replace(".widl", ".json")); }) ; - + for (var i = 0, n = idls.length; i < n; i++) { var idl = idls[i], json = jsons[i]; @@ -28,7 +28,7 @@ describe("Parses all of the IDLs to produce the correct ASTs", function () { var diff = jdp.diff(JSON.parse(fs.readFileSync(json, "utf8")), wp.parse(fs.readFileSync(idl, "utf8"), opt)); if (diff && debug) console.log(JSON.stringify(diff, null, 4)); - expect(diff).to.be(undefined); + expect(diff).toBe(undefined); } catch (e) { console.log(e.toString()); diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/extended-attributes.widl b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/extended-attributes.widl index f769c2559cc..c1df79e142d 100644 --- a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/extended-attributes.widl +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/extended-attributes.widl @@ -3,4 +3,9 @@ [Global=(Worker,ServiceWorker), Exposed=ServiceWorker] interface ServiceWorkerGlobalScope : WorkerGlobalScope { -}; \ No newline at end of file +}; + +// Conformance with ExtendedAttributeList grammar in http://www.w3.org/TR/WebIDL/#idl-extended-attributes +// Section 3.11 +[IntAttr=0, FloatAttr=3.14, StringAttr="abc"] +interface IdInterface {}; diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/map.widl b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/map.widl deleted file mode 100644 index 19b54f80a61..00000000000 --- a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/map.widl +++ /dev/null @@ -1,5 +0,0 @@ -// Extracted from https://slightlyoff.github.io/ServiceWorker/spec/service_worker/ on 2014-05-06 - -[MapClass(DOMString, DOMString)] -interface HeaderMap { -}; diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/namespace.widl b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/namespace.widl new file mode 100644 index 00000000000..d9610555e17 --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/namespace.widl @@ -0,0 +1,10 @@ +// Extracted from Web IDL editors draft March 27 2017 +namespace VectorUtils { + readonly attribute Vector unit; + double dotProduct(Vector x, Vector y); + Vector crossProduct(Vector x, Vector y); +}; + +partial namespace SomeNamespace { + /* namespace_members... */ +}; \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/record.widl b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/record.widl new file mode 100644 index 00000000000..6cdedb219be --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/record.widl @@ -0,0 +1,8 @@ +[Constructor(record init)] +interface Foo { + void foo(sequence> param); + record bar(); + + // Make sure record can still be registered as a type. + record baz(); +}; diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/typedef-nested.widl b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/typedef-nested.widl deleted file mode 100644 index 106f30b8f72..00000000000 --- a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/typedef-nested.widl +++ /dev/null @@ -1,22 +0,0 @@ - - interface Point { - attribute float x; - attribute float y; - }; - - - interface Rect { - attribute Point topleft; - attribute Point bottomright; - }; - - interface Widget { - typedef sequence PointSequence; - - readonly attribute Rect bounds; - - boolean pointWithinBounds(Point p); - boolean allPointsWithinBounds(PointSequence ps); - }; - - typedef [Clamp] octet value; \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/typedef-union.idl b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/typedef-union.idl new file mode 100644 index 00000000000..3048703e0c5 --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/typedef-union.idl @@ -0,0 +1,4 @@ + typedef (ImageData or + HTMLImageElement or + HTMLCanvasElement or + HTMLVideoElement) TexImageSource; diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/uniontype.widl b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/uniontype.widl index 4d99f019630..0d5fe9be428 100644 --- a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/uniontype.widl +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/uniontype.widl @@ -1,3 +1,4 @@ interface Union { attribute (float or (Date or Event) or (Node or DOMString)?) test; + attribute ([EnforceRange] long or Date) test2; }; \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/extended-attributes.json b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/extended-attributes.json index 228c4b824be..3b5a3b2e22b 100644 --- a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/extended-attributes.json +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/extended-attributes.json @@ -26,5 +26,38 @@ } } ] + }, + { + "type": "interface", + "name": "IdInterface", + "partial": false, + "members": [], + "inheritance": null, + "extAttrs": [ + { + "name": "IntAttr", + "arguments": null, + "rhs": { + "type": "integer", + "value": "0" + } + }, + { + "name": "FloatAttr", + "arguments": null, + "rhs": { + "type": "float", + "value": "3.14" + } + }, + { + "name": "StringAttr", + "arguments": null, + "rhs": { + "type": "string", + "value": "\"abc\"" + } + } + ] } -] \ No newline at end of file +] diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/identifier-qualified-names.json b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/identifier-qualified-names.json index a91f8c8eb53..d87ea3b5f36 100644 --- a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/identifier-qualified-names.json +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/identifier-qualified-names.json @@ -1,7 +1,6 @@ [ { "type": "typedef", - "typeExtAttrs": [], "idlType": { "sequence": false, "generic": null, @@ -214,4 +213,4 @@ "inheritance": null, "extAttrs": [] } -] \ No newline at end of file +] diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/map.json b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/map.json deleted file mode 100644 index 03ce9412ed0..00000000000 --- a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/map.json +++ /dev/null @@ -1,29 +0,0 @@ -[ - { - "type": "interface", - "name": "HeaderMap", - "partial": false, - "members": [], - "inheritance": null, - "extAttrs": [{ - "name": "MapClass", - "arguments": null, - "typePair": [{ - "sequence": false, - "generic": null, - "nullable": false, - "array": false, - "union": false, - "idlType": "DOMString" - }, - { - "sequence": false, - "generic": null, - "nullable": false, - "array": false, - "union": false, - "idlType": "DOMString" - }] - }] - } -] diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/namespace.json b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/namespace.json new file mode 100644 index 00000000000..7c7ba771e1b --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/namespace.json @@ -0,0 +1,134 @@ +[ + { + "type": "namespace", + "name": "VectorUtils", + "partial": false, + "members": [ + { + "type": "attribute", + "static": false, + "stringifier": false, + "inherit": false, + "readonly": true, + "idlType": { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "Vector" + }, + "name": "unit", + "extAttrs": [] + }, + { + "type": "operation", + "getter": false, + "setter": false, + "creator": false, + "deleter": false, + "legacycaller": false, + "static": false, + "stringifier": false, + "idlType": { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "double" + }, + "name": "dotProduct", + "arguments": [ + { + "optional": false, + "variadic": false, + "extAttrs": [], + "idlType": { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "Vector" + }, + "name": "x" + }, + { + "optional": false, + "variadic": false, + "extAttrs": [], + "idlType": { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "Vector" + }, + "name": "y" + } + ], + "extAttrs": [] + }, + { + "type": "operation", + "getter": false, + "setter": false, + "creator": false, + "deleter": false, + "legacycaller": false, + "static": false, + "stringifier": false, + "idlType": { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "Vector" + }, + "name": "crossProduct", + "arguments": [ + { + "optional": false, + "variadic": false, + "extAttrs": [], + "idlType": { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "Vector" + }, + "name": "x" + }, + { + "optional": false, + "variadic": false, + "extAttrs": [], + "idlType": { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "Vector" + }, + "name": "y" + } + ], + "extAttrs": [] + } + ], + "extAttrs": [] + }, + { + "type": "namespace", + "name": "SomeNamespace", + "partial": true, + "members": [], + "extAttrs": [] + } +] \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/record.json b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/record.json new file mode 100644 index 00000000000..d2a21a4acd9 --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/record.json @@ -0,0 +1,184 @@ +[ + { + "type": "interface", + "name": "Foo", + "partial": false, + "members": [ + { + "type": "operation", + "getter": false, + "setter": false, + "creator": false, + "deleter": false, + "legacycaller": false, + "static": false, + "stringifier": false, + "idlType": { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "void" + }, + "name": "foo", + "arguments": [ + { + "optional": false, + "variadic": false, + "extAttrs": [], + "idlType": { + "sequence": true, + "generic": "sequence", + "nullable": false, + "array": false, + "union": false, + "idlType": { + "sequence": false, + "generic": "record", + "nullable": false, + "array": false, + "union": false, + "idlType": [ + { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "ByteString" + }, + { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "any" + } + ] + } + }, + "name": "param" + } + ], + "extAttrs": [] + }, + { + "type": "operation", + "getter": false, + "setter": false, + "creator": false, + "deleter": false, + "legacycaller": false, + "static": false, + "stringifier": false, + "idlType": { + "sequence": false, + "generic": "record", + "nullable": false, + "array": false, + "union": false, + "idlType": [ + { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "DOMString" + }, + { + "sequence": false, + "generic": null, + "nullable": true, + "array": false, + "union": true, + "idlType": [ + { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "float" + }, + { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "DOMString" + } + ] + } + ] + }, + "name": "bar", + "arguments": [], + "extAttrs": [] + }, + { + "type": "operation", + "getter": false, + "setter": false, + "creator": false, + "deleter": false, + "legacycaller": false, + "static": false, + "stringifier": false, + "idlType": { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "record" + }, + "name": "baz", + "arguments": [], + "extAttrs": [] + } + ], + "inheritance": null, + "extAttrs": [ + { + "name": "Constructor", + "arguments": [ + { + "optional": false, + "variadic": false, + "extAttrs": [], + "idlType": { + "sequence": false, + "generic": "record", + "nullable": false, + "array": false, + "union": false, + "idlType": [ + { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "USVString" + }, + { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "USVString" + } + ] + }, + "name": "init" + } + ] + } + ] + } +] diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/typedef-nested.json b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/typedef-nested.json deleted file mode 100644 index 76d138408dd..00000000000 --- a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/typedef-nested.json +++ /dev/null @@ -1,226 +0,0 @@ -[ - { - "type": "interface", - "name": "Point", - "partial": false, - "members": [ - { - "type": "attribute", - "static": false, - "stringifier": false, - "inherit": false, - "readonly": false, - "idlType": { - "sequence": false, - "generic": null, - "nullable": false, - "array": false, - "union": false, - "idlType": "float" - }, - "name": "x", - "extAttrs": [] - }, - { - "type": "attribute", - "static": false, - "stringifier": false, - "inherit": false, - "readonly": false, - "idlType": { - "sequence": false, - "generic": null, - "nullable": false, - "array": false, - "union": false, - "idlType": "float" - }, - "name": "y", - "extAttrs": [] - } - ], - "inheritance": null, - "extAttrs": [] - }, - { - "type": "interface", - "name": "Rect", - "partial": false, - "members": [ - { - "type": "attribute", - "static": false, - "stringifier": false, - "inherit": false, - "readonly": false, - "idlType": { - "sequence": false, - "generic": null, - "nullable": false, - "array": false, - "union": false, - "idlType": "Point" - }, - "name": "topleft", - "extAttrs": [] - }, - { - "type": "attribute", - "static": false, - "stringifier": false, - "inherit": false, - "readonly": false, - "idlType": { - "sequence": false, - "generic": null, - "nullable": false, - "array": false, - "union": false, - "idlType": "Point" - }, - "name": "bottomright", - "extAttrs": [] - } - ], - "inheritance": null, - "extAttrs": [] - }, - { - "type": "interface", - "name": "Widget", - "partial": false, - "members": [ - { - "type": "typedef", - "typeExtAttrs": [], - "idlType": { - "sequence": true, - "generic": "sequence", - "nullable": false, - "array": false, - "union": false, - "idlType": { - "sequence": false, - "generic": null, - "nullable": false, - "array": false, - "union": false, - "idlType": "Point" - } - }, - "name": "PointSequence", - "extAttrs": [] - }, - { - "type": "attribute", - "static": false, - "stringifier": false, - "inherit": false, - "readonly": true, - "idlType": { - "sequence": false, - "generic": null, - "nullable": false, - "array": false, - "union": false, - "idlType": "Rect" - }, - "name": "bounds", - "extAttrs": [] - }, - { - "type": "operation", - "getter": false, - "setter": false, - "creator": false, - "deleter": false, - "legacycaller": false, - "static": false, - "stringifier": false, - "idlType": { - "sequence": false, - "generic": null, - "nullable": false, - "array": false, - "union": false, - "idlType": "boolean" - }, - "name": "pointWithinBounds", - "arguments": [ - { - "optional": false, - "variadic": false, - "extAttrs": [], - "idlType": { - "sequence": false, - "generic": null, - "nullable": false, - "array": false, - "union": false, - "idlType": "Point" - }, - "name": "p" - } - ], - "extAttrs": [] - }, - { - "type": "operation", - "getter": false, - "setter": false, - "creator": false, - "deleter": false, - "legacycaller": false, - "static": false, - "stringifier": false, - "idlType": { - "sequence": false, - "generic": null, - "nullable": false, - "array": false, - "union": false, - "idlType": "boolean" - }, - "name": "allPointsWithinBounds", - "arguments": [ - { - "optional": false, - "variadic": false, - "extAttrs": [], - "idlType": { - "sequence": false, - "generic": null, - "nullable": false, - "array": false, - "union": false, - "idlType": "PointSequence" - }, - "name": "ps" - } - ], - "extAttrs": [] - } - ], - "inheritance": null, - "extAttrs": [] - }, - { - "type": "typedef", - "typeExtAttrs": [ - { - "name": "Clamp", - "arguments": null - } - ], - "idlType": { - "sequence": false, - "generic": null, - "nullable": false, - "array": false, - "union": false, - "idlType": "octet" - }, - "name": "value", - "extAttrs": [] - } -] \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/typedef-union.json b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/typedef-union.json new file mode 100644 index 00000000000..9c87672c8ae --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/typedef-union.json @@ -0,0 +1,49 @@ +[ + { + "type" : "typedef", + "idlType" : { + "nullable" : false, + "generic" : null, + "union" : true, + "idlType" : [ + { + "union" : false, + "generic" : null, + "nullable" : false, + "array" : false, + "sequence" : false, + "idlType" : "ImageData" + }, + { + "generic" : null, + "union" : false, + "nullable" : false, + "array" : false, + "idlType" : "HTMLImageElement", + "sequence" : false + }, + { + "array" : false, + "sequence" : false, + "idlType" : "HTMLCanvasElement", + "generic" : null, + "union" : false, + "nullable" : false + }, + { + "union" : false, + "generic" : null, + "nullable" : false, + "array" : false, + "sequence" : false, + "idlType" : "HTMLVideoElement" + } + ], + "sequence" : false, + "array" : false + }, + "name" : "TexImageSource", + "extAttrs" : [], + "typeExtAttrs" : [] + } +] diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/typedef.json b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/typedef.json index ffdeea945d7..d0854fa3d26 100644 --- a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/typedef.json +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/typedef.json @@ -44,7 +44,6 @@ }, { "type": "typedef", - "typeExtAttrs": [], "idlType": { "sequence": true, "generic": "sequence", @@ -206,21 +205,21 @@ }, { "type": "typedef", - "typeExtAttrs": [ - { - "name": "Clamp", - "arguments": null - } - ], "idlType": { "sequence": false, "generic": null, "nullable": false, "array": false, "union": false, - "idlType": "octet" + "idlType": "octet", + "extAttrs": [ + { + "name": "Clamp", + "arguments": null + } + ] }, "name": "value", "extAttrs": [] } -] \ No newline at end of file +] diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/uniontype.json b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/uniontype.json index 43e25fd6bfb..9da5e79f362 100644 --- a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/uniontype.json +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/uniontype.json @@ -1,87 +1,127 @@ [ - { - "type": "interface", - "name": "Union", - "partial": false, - "members": [ - { - "type": "attribute", - "static": false, - "stringifier": false, - "inherit": false, - "readonly": false, - "idlType": { - "sequence": false, - "generic": null, - "nullable": false, - "array": false, - "union": true, - "idlType": [ + { + "partial": false, + "members": [ + { + "idlType": { + "idlType": [ + { + "array": false, + "union": false, + "sequence": false, + "generic": null, + "idlType": "float", + "nullable": false + }, + { + "idlType": [ { - "sequence": false, - "generic": null, - "nullable": false, - "array": false, - "union": false, - "idlType": "float" + "nullable": false, + "idlType": "Date", + "sequence": false, + "generic": null, + "union": false, + "array": false }, { - "sequence": false, - "generic": null, - "nullable": false, - "array": false, - "union": true, - "idlType": [ - { - "sequence": false, - "generic": null, - "nullable": false, - "array": false, - "union": false, - "idlType": "Date" - }, - { - "sequence": false, - "generic": null, - "nullable": false, - "array": false, - "union": false, - "idlType": "Event" - } - ] - }, - { - "sequence": false, - "generic": null, - "nullable": true, - "array": false, - "union": true, - "idlType": [ - { - "sequence": false, - "generic": null, - "nullable": false, - "array": false, - "union": false, - "idlType": "Node" - }, - { - "sequence": false, - "generic": null, - "nullable": false, - "array": false, - "union": false, - "idlType": "DOMString" - } - ] + "nullable": false, + "idlType": "Event", + "generic": null, + "sequence": false, + "array": false, + "union": false } - ] - }, - "name": "test", - "extAttrs": [] - } - ], - "inheritance": null, - "extAttrs": [] - } -] \ No newline at end of file + ], + "nullable": false, + "sequence": false, + "generic": null, + "array": false, + "union": true + }, + { + "generic": null, + "sequence": false, + "idlType": [ + { + "array": false, + "union": false, + "sequence": false, + "generic": null, + "nullable": false, + "idlType": "Node" + }, + { + "nullable": false, + "idlType": "DOMString", + "sequence": false, + "generic": null, + "array": false, + "union": false + } + ], + "nullable": true, + "union": true, + "array": false + } + ], + "nullable": false, + "generic": null, + "sequence": false, + "union": true, + "array": false + }, + "name": "test", + "inherit": false, + "type": "attribute", + "extAttrs": [], + "readonly": false, + "stringifier": false, + "static": false + }, + { + "readonly": false, + "extAttrs": [], + "stringifier": false, + "static": false, + "name": "test2", + "idlType": { + "nullable": false, + "idlType": [ + { + "extAttrs": [ + { + "name": "EnforceRange", + "arguments": null + } + ], + "nullable": false, + "idlType": "long", + "generic": null, + "sequence": false, + "array": false, + "union": false + }, + { + "array": false, + "union": false, + "sequence": false, + "generic": null, + "idlType": "Date", + "nullable": false + } + ], + "generic": null, + "sequence": false, + "union": true, + "array": false + }, + "inherit": false, + "type": "attribute" + } + ], + "inheritance": null, + "name": "Union", + "extAttrs": [], + "type": "interface" + } +] diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/web/make-web-tests.js b/tests/wpt/web-platform-tests/resources/webidl2/test/web/make-web-tests.js index 34c5a5c2b46..1774806994e 100644 --- a/tests/wpt/web-platform-tests/resources/webidl2/test/web/make-web-tests.js +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/web/make-web-tests.js @@ -36,9 +36,10 @@ var pth = require("path") , " " , "
        " , " " - , " " + , " " + , " " , " " - , " " + , " " , " " , " " , " " diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/web/run-tests.js b/tests/wpt/web-platform-tests/resources/webidl2/test/web/run-tests.js index a72800b8bdb..452f799b2a6 100644 --- a/tests/wpt/web-platform-tests/resources/webidl2/test/web/run-tests.js +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/web/run-tests.js @@ -10,7 +10,7 @@ describe("Parses all of the IDLs to produce the correct ASTs", function () { // so we compare based on that var diff = jsondiffpatch.diff(json, WebIDL2.parse(idl)); if (diff && debug) console.log(JSON.stringify(diff, null, 4)); - expect(diff).to.be(undefined); + expect(diff).toBe(undefined); } catch (e) { console.log(e.toString()); @@ -36,11 +36,11 @@ describe("Parses all of the invalid IDLs to check that they blow up correctly", error = e; } finally { - expect(error).to.be.ok(); - expect(error.message).to.equal(err.message); - expect(error.line).to.equal(err.line); + expect(error).toExist(); + expect(error.message).toEqual(err.message); + expect(error.line).toEqual(err.line); } - + }; }(idl, error)); it("should produce the right error for " + i, func); diff --git a/tests/wpt/web-platform-tests/scroll-anchoring/README.md b/tests/wpt/web-platform-tests/scroll-anchoring/README.md new file mode 100644 index 00000000000..a4188667e5e --- /dev/null +++ b/tests/wpt/web-platform-tests/scroll-anchoring/README.md @@ -0,0 +1,8 @@ +## Scroll Anchoring Web Platform Tests + +Scroll anchoring adjusts the scroll position to prevent visible jumps (or +"reflows") when content changes above the viewport. + +* [explainer](https://github.com/WICG/ScrollAnchoring/blob/master/explainer.md) +* [spec](https://wicg.github.io/ScrollAnchoring) +* [file bug / view open issues](https://github.com/WICG/ScrollAnchoring/issues) diff --git a/tests/wpt/web-platform-tests/scroll-anchoring/abspos-containing-block-outside-scroller.html b/tests/wpt/web-platform-tests/scroll-anchoring/abspos-containing-block-outside-scroller.html new file mode 100644 index 00000000000..76a4952383e --- /dev/null +++ b/tests/wpt/web-platform-tests/scroll-anchoring/abspos-containing-block-outside-scroller.html @@ -0,0 +1,55 @@ + + + + +
        +
        +
        +
        +
        +
        +
        + diff --git a/tests/wpt/web-platform-tests/scroll-anchoring/abspos-contributes-to-static-parent-bounds.html b/tests/wpt/web-platform-tests/scroll-anchoring/abspos-contributes-to-static-parent-bounds.html new file mode 100644 index 00000000000..5d8ff9a9110 --- /dev/null +++ b/tests/wpt/web-platform-tests/scroll-anchoring/abspos-contributes-to-static-parent-bounds.html @@ -0,0 +1,40 @@ + + + + +
        +
        +
        +
        +
        +
        + diff --git a/tests/wpt/web-platform-tests/scroll-anchoring/ancestor-change-heuristic.html b/tests/wpt/web-platform-tests/scroll-anchoring/ancestor-change-heuristic.html new file mode 100644 index 00000000000..ffe60ad775a --- /dev/null +++ b/tests/wpt/web-platform-tests/scroll-anchoring/ancestor-change-heuristic.html @@ -0,0 +1,81 @@ + + + + +
        +
        +
        +
        +
        +
        +
        +
        + diff --git a/tests/wpt/web-platform-tests/scroll-anchoring/anchor-updates-after-explicit-scroll.html b/tests/wpt/web-platform-tests/scroll-anchoring/anchor-updates-after-explicit-scroll.html new file mode 100644 index 00000000000..7f0c54d1dcf --- /dev/null +++ b/tests/wpt/web-platform-tests/scroll-anchoring/anchor-updates-after-explicit-scroll.html @@ -0,0 +1,51 @@ + + + + +
        +
        +
        +
        +
        +
        +
        + diff --git a/tests/wpt/web-platform-tests/scroll-anchoring/anchoring-with-bounds-clamping-div.html b/tests/wpt/web-platform-tests/scroll-anchoring/anchoring-with-bounds-clamping-div.html new file mode 100644 index 00000000000..3de725e6836 --- /dev/null +++ b/tests/wpt/web-platform-tests/scroll-anchoring/anchoring-with-bounds-clamping-div.html @@ -0,0 +1,38 @@ + + + + +
        +
        +
        +
        + diff --git a/tests/wpt/web-platform-tests/scroll-anchoring/anchoring-with-bounds-clamping.html b/tests/wpt/web-platform-tests/scroll-anchoring/anchoring-with-bounds-clamping.html new file mode 100644 index 00000000000..3adcfe598a5 --- /dev/null +++ b/tests/wpt/web-platform-tests/scroll-anchoring/anchoring-with-bounds-clamping.html @@ -0,0 +1,28 @@ + + + + +
        +
        + diff --git a/tests/wpt/web-platform-tests/scroll-anchoring/anonymous-block-box.html b/tests/wpt/web-platform-tests/scroll-anchoring/anonymous-block-box.html new file mode 100644 index 00000000000..97542e26132 --- /dev/null +++ b/tests/wpt/web-platform-tests/scroll-anchoring/anonymous-block-box.html @@ -0,0 +1,34 @@ + + + + +
        +
        before
        + inline +
        after
        +
        + diff --git a/tests/wpt/web-platform-tests/scroll-anchoring/basic.html b/tests/wpt/web-platform-tests/scroll-anchoring/basic.html new file mode 100644 index 00000000000..2c46c28dc21 --- /dev/null +++ b/tests/wpt/web-platform-tests/scroll-anchoring/basic.html @@ -0,0 +1,23 @@ + + + + +
        abc
        +
        def
        + diff --git a/tests/wpt/web-platform-tests/scroll-anchoring/clipped-scrollers-skipped.html b/tests/wpt/web-platform-tests/scroll-anchoring/clipped-scrollers-skipped.html new file mode 100644 index 00000000000..594cd604f4c --- /dev/null +++ b/tests/wpt/web-platform-tests/scroll-anchoring/clipped-scrollers-skipped.html @@ -0,0 +1,38 @@ + + + + +
        +
        +
        +
        +
        +
        +
        + diff --git a/tests/wpt/web-platform-tests/scroll-anchoring/descend-into-container-with-float.html b/tests/wpt/web-platform-tests/scroll-anchoring/descend-into-container-with-float.html new file mode 100644 index 00000000000..a86634f9ed3 --- /dev/null +++ b/tests/wpt/web-platform-tests/scroll-anchoring/descend-into-container-with-float.html @@ -0,0 +1,36 @@ + + + + +
        +
        +
        +
        +
        +
        +
        +
        +
        after
        + diff --git a/tests/wpt/web-platform-tests/scroll-anchoring/descend-into-container-with-overflow.html b/tests/wpt/web-platform-tests/scroll-anchoring/descend-into-container-with-overflow.html new file mode 100644 index 00000000000..3b469157dc2 --- /dev/null +++ b/tests/wpt/web-platform-tests/scroll-anchoring/descend-into-container-with-overflow.html @@ -0,0 +1,30 @@ + + + + +
        +
        +
        +
        bottom
        +
        +
        + diff --git a/tests/wpt/web-platform-tests/scroll-anchoring/exclude-fixed-position.html b/tests/wpt/web-platform-tests/scroll-anchoring/exclude-fixed-position.html new file mode 100644 index 00000000000..99686bdee44 --- /dev/null +++ b/tests/wpt/web-platform-tests/scroll-anchoring/exclude-fixed-position.html @@ -0,0 +1,26 @@ + + + + +
        fixed
        +
        +
        content
        + diff --git a/tests/wpt/web-platform-tests/scroll-anchoring/inline-block.html b/tests/wpt/web-platform-tests/scroll-anchoring/inline-block.html new file mode 100644 index 00000000000..fa7655bcd8a --- /dev/null +++ b/tests/wpt/web-platform-tests/scroll-anchoring/inline-block.html @@ -0,0 +1,26 @@ + + + + + + abc +

        + def +
        + diff --git a/tests/wpt/web-platform-tests/scroll-anchoring/negative-layout-overflow.html b/tests/wpt/web-platform-tests/scroll-anchoring/negative-layout-overflow.html new file mode 100644 index 00000000000..e1ce331f1af --- /dev/null +++ b/tests/wpt/web-platform-tests/scroll-anchoring/negative-layout-overflow.html @@ -0,0 +1,44 @@ + + + + + +
        +
        + diff --git a/tests/wpt/web-platform-tests/scroll-anchoring/opt-out.html b/tests/wpt/web-platform-tests/scroll-anchoring/opt-out.html new file mode 100644 index 00000000000..12d46c13f96 --- /dev/null +++ b/tests/wpt/web-platform-tests/scroll-anchoring/opt-out.html @@ -0,0 +1,74 @@ + + + + +
        +
        +
        +
        +
        +
        +
        + diff --git a/tests/wpt/web-platform-tests/scroll-anchoring/position-change-heuristic.html b/tests/wpt/web-platform-tests/scroll-anchoring/position-change-heuristic.html new file mode 100644 index 00000000000..a7ef5525cdf --- /dev/null +++ b/tests/wpt/web-platform-tests/scroll-anchoring/position-change-heuristic.html @@ -0,0 +1,82 @@ + + + + +
        +
        + +
        +
        +
        +
        + diff --git a/tests/wpt/web-platform-tests/scroll-anchoring/start-edge-in-block-layout-direction.html b/tests/wpt/web-platform-tests/scroll-anchoring/start-edge-in-block-layout-direction.html new file mode 100644 index 00000000000..4607c37b720 --- /dev/null +++ b/tests/wpt/web-platform-tests/scroll-anchoring/start-edge-in-block-layout-direction.html @@ -0,0 +1,136 @@ + + + + +
        +

        +
        +
        +
        +
        + diff --git a/tests/wpt/web-platform-tests/scroll-anchoring/subtree-exclusion.html b/tests/wpt/web-platform-tests/scroll-anchoring/subtree-exclusion.html new file mode 100644 index 00000000000..c384280f10f --- /dev/null +++ b/tests/wpt/web-platform-tests/scroll-anchoring/subtree-exclusion.html @@ -0,0 +1,45 @@ + + + + +
        +
        +
        +
        +
        +
        + diff --git a/tests/wpt/web-platform-tests/scroll-anchoring/wrapped-text.html b/tests/wpt/web-platform-tests/scroll-anchoring/wrapped-text.html new file mode 100644 index 00000000000..4bd2cdb3251 --- /dev/null +++ b/tests/wpt/web-platform-tests/scroll-anchoring/wrapped-text.html @@ -0,0 +1,28 @@ + + + + +abc def ghi + diff --git a/tests/wpt/web-platform-tests/secure-contexts/basic-popup-and-iframe-tests.https.js b/tests/wpt/web-platform-tests/secure-contexts/basic-popup-and-iframe-tests.https.js index 93b5e2b3187..ebc9f2b1f14 100644 --- a/tests/wpt/web-platform-tests/secure-contexts/basic-popup-and-iframe-tests.https.js +++ b/tests/wpt/web-platform-tests/secure-contexts/basic-popup-and-iframe-tests.https.js @@ -73,7 +73,7 @@ const loadTypes = [ eResultFromPostMessage), new LoadType("a blob: URI", eLoadInEverything, - URL.createObjectURL(new Blob([""])), + URL.createObjectURL(new Blob([""], {type: "text/html"})), eSecureIfCreatorSecure, eResultFromPostMessage), new LoadType("a srcdoc", diff --git a/tests/wpt/web-platform-tests/selection/collapse-00.html b/tests/wpt/web-platform-tests/selection/collapse-00.html index cc1eb7e6e1e..6adaca4002d 100644 --- a/tests/wpt/web-platform-tests/selection/collapse-00.html +++ b/tests/wpt/web-platform-tests/selection/collapse-00.html @@ -1,5 +1,5 @@ -Selection.collapse() tests +Selection.collapse()/setPosition() tests
        @@ -9,6 +9,6 @@ diff --git a/tests/wpt/web-platform-tests/selection/collapse-15.html b/tests/wpt/web-platform-tests/selection/collapse-15.html new file mode 100644 index 00000000000..377e5044343 --- /dev/null +++ b/tests/wpt/web-platform-tests/selection/collapse-15.html @@ -0,0 +1,14 @@ + +Selection.collapse()/setPosition() tests + +
        + + + + + diff --git a/tests/wpt/web-platform-tests/selection/collapse-30.html b/tests/wpt/web-platform-tests/selection/collapse-30.html index 204586206b2..376633d9103 100644 --- a/tests/wpt/web-platform-tests/selection/collapse-30.html +++ b/tests/wpt/web-platform-tests/selection/collapse-30.html @@ -1,5 +1,5 @@ -Selection.collapse() tests +Selection.collapse()/setPosition() tests
        diff --git a/tests/wpt/web-platform-tests/selection/collapse-45.html b/tests/wpt/web-platform-tests/selection/collapse-45.html new file mode 100644 index 00000000000..28eee4eb797 --- /dev/null +++ b/tests/wpt/web-platform-tests/selection/collapse-45.html @@ -0,0 +1,14 @@ + +Selection.collapse()/setPosition() tests + +
        + + + + + diff --git a/tests/wpt/web-platform-tests/selection/collapse.js b/tests/wpt/web-platform-tests/selection/collapse.js index 7c97e2725d6..7d03f00c8c7 100644 --- a/tests/wpt/web-platform-tests/selection/collapse.js +++ b/tests/wpt/web-platform-tests/selection/collapse.js @@ -1,6 +1,6 @@ "use strict"; -function testCollapse(range, point) { +function testCollapse(range, point, method) { selection.removeAllRanges(); var addedRange; if (range) { @@ -10,46 +10,46 @@ function testCollapse(range, point) { if (point[0].nodeType == Node.DOCUMENT_TYPE_NODE) { assert_throws("INVALID_NODE_TYPE_ERR", function() { - selection.collapse(point[0], point[1]); - }, "Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType"); + selection[method](point[0], point[1]); + }, "Must throw INVALID_NODE_TYPE_ERR when " + method + "()ing if the node is a DocumentType"); return; } if (point[1] < 0 || point[1] > getNodeLength(point[0])) { assert_throws("INDEX_SIZE_ERR", function() { - selection.collapse(point[0], point[1]); - }, "Must throw INDEX_SIZE_ERR when collapse()ing if the offset is negative or greater than the node's length"); + selection[method](point[0], point[1]); + }, "Must throw INDEX_SIZE_ERR when " + method + "()ing if the offset is negative or greater than the node's length"); return; } if (!document.contains(point[0])) { assertSelectionNoChange(function() { - selection.collapse(point[0], point[1]); + selection[method](point[0], point[1]); }); return; } - selection.collapse(point[0], point[1]); + selection[method](point[0], point[1]); assert_equals(selection.rangeCount, 1, - "selection.rangeCount must equal 1 after collapse()"); + "selection.rangeCount must equal 1 after " + method + "()"); assert_equals(selection.focusNode, point[0], - "focusNode must equal the node we collapse()d to"); + "focusNode must equal the node we " + method + "()d to"); assert_equals(selection.focusOffset, point[1], - "focusOffset must equal the offset we collapse()d to"); + "focusOffset must equal the offset we " + method + "()d to"); assert_equals(selection.focusNode, selection.anchorNode, - "focusNode and anchorNode must be equal after collapse()"); + "focusNode and anchorNode must be equal after " + method + "()"); assert_equals(selection.focusOffset, selection.anchorOffset, - "focusOffset and anchorOffset must be equal after collapse()"); + "focusOffset and anchorOffset must be equal after " + method + "()"); if (range) { assert_equals(addedRange.startContainer, range.startContainer, - "collapse() must not change the startContainer of a preexisting Range"); + method + "() must not change the startContainer of a preexisting Range"); assert_equals(addedRange.endContainer, range.endContainer, - "collapse() must not change the endContainer of a preexisting Range"); + method + "() must not change the endContainer of a preexisting Range"); assert_equals(addedRange.startOffset, range.startOffset, - "collapse() must not change the startOffset of a preexisting Range"); + method + "() must not change the startOffset of a preexisting Range"); assert_equals(addedRange.endOffset, range.endOffset, - "collapse() must not change the endOffset of a preexisting Range"); + method + "() must not change the endOffset of a preexisting Range"); } } @@ -91,7 +91,10 @@ function testCollapseSubSet(startIndex, optionalEndIndex) { } }, "Set up range " + i + " " + testRanges[i]); for (var j = 0; j < testPoints.length; j++) { - tests.push(["Range " + i + " " + testRanges[i] + ", point " + j + " " + testPoints[j], range, testPointsCached[j]]); + tests.push(["collapse() on " + testRanges[i] + " to " + testPoints[j], + range, testPointsCached[j], "collapse"]); + tests.push(["setPosition() on " + testRanges[i] + " to " + testPoints[j], + range, testPointsCached[j], "setPosition"]); } } diff --git a/tests/wpt/web-platform-tests/selection/interfaces.html b/tests/wpt/web-platform-tests/selection/interfaces.html index 888b23fd65d..8fed814bf28 100644 --- a/tests/wpt/web-platform-tests/selection/interfaces.html +++ b/tests/wpt/web-platform-tests/selection/interfaces.html @@ -6,7 +6,7 @@ @@ -12,33 +12,38 @@ testRanges.unshift("[]"); var range = rangeFromEndpoints([paras[0].firstChild, 0, paras[0].firstChild, 1]); -for (var i = 0; i < testRanges.length; i++) { +function testRange(rangeDesc, method) { test(function() { - setSelectionForwards(eval(testRanges[i])); - selection.removeAllRanges(); + setSelectionForwards(eval(rangeDesc)); + selection[method](); assert_equals(selection.rangeCount, 0, - "After removeAllRanges(), rangeCount must be 0"); + "After " + method + "(), rangeCount must be 0"); // Test that it's forwards selection.addRange(range); assert_equals(selection.anchorOffset, selection.getRangeAt(0).startOffset, - "After removeAllRanges(), addRange() must be forwards, so anchorOffset must equal startOffset rather than endOffset"); + "After " + method + "(), addRange() must be forwards, so anchorOffset must equal startOffset rather than endOffset"); assert_equals(selection.focusOffset, selection.getRangeAt(0).endOffset, - "After removeAllRanges(), addRange() must be forwards, so focusOffset must equal endOffset rather than startOffset"); - }, "Range " + i + " " + testRanges[i] + " forwards"); + "After " + method + "(), addRange() must be forwards, so focusOffset must equal endOffset rather than startOffset"); + }, method + " on " + rangeDesc + " forwards"); // Copy-pasted from above test(function() { - setSelectionBackwards(eval(testRanges[i])); - selection.removeAllRanges(); + setSelectionBackwards(eval(rangeDesc)); + selection[method](); assert_equals(selection.rangeCount, 0, - "After removeAllRanges(), rangeCount must be 0"); + "After " + method + "(), rangeCount must be 0"); // Test that it's forwards selection.addRange(range); assert_equals(selection.anchorOffset, selection.getRangeAt(0).startOffset, - "After removeAllRanges(), addRange() must be forwards, so anchorOffset must equal startOffset rather than endOffset"); + "After " + method + "(), addRange() must be forwards, so anchorOffset must equal startOffset rather than endOffset"); assert_equals(selection.focusOffset, selection.getRangeAt(0).endOffset, - "After removeAllRanges(), addRange() must be forwards, so focusOffset must equal endOffset rather than startOffset"); - }, "Range " + i + " " + testRanges[i] + " backwards"); + "After " + method + "(), addRange() must be forwards, so focusOffset must equal endOffset rather than startOffset"); + }, method + " on " + rangeDesc + " backwards"); +} + +for (var i = 0; i < testRanges.length; i++) { + testRange(testRanges[i], "removeAllRanges"); + testRange(testRanges[i], "empty"); } testDiv.style.display = "none"; diff --git a/tests/wpt/web-platform-tests/selection/removeRange.html b/tests/wpt/web-platform-tests/selection/removeRange.html index 723f5105ca5..6ddccc66f22 100644 --- a/tests/wpt/web-platform-tests/selection/removeRange.html +++ b/tests/wpt/web-platform-tests/selection/removeRange.html @@ -30,7 +30,9 @@ testRanges.forEach(function(rangeData, index) { var equivalentRange = ownerDocument(endpoints[0]).createRange(); equivalentRange.setStart(endpoints[0], endpoints[1]); equivalentRange.setEnd(endpoints[2], endpoints[3]); - selection.removeRange(equivalentRange); + assert_throws("NotFoundError", + function() { selection.removeRange(equivalentRange) }, + "Removing a different range should throw"); assert_equals(selection.rangeCount, 1, 'Equivalent Range should not remove the registered Range.'); }, 'removeRange() with Range ' + index); diff --git a/tests/wpt/web-platform-tests/selection/type.html b/tests/wpt/web-platform-tests/selection/type.html new file mode 100644 index 00000000000..7be8ba61bc2 --- /dev/null +++ b/tests/wpt/web-platform-tests/selection/type.html @@ -0,0 +1,31 @@ + +Selection.type tests +
        + + + + diff --git a/tests/wpt/web-platform-tests/selectors-api/tests/submissions/Opera/ParentNode-query-queryAll.html b/tests/wpt/web-platform-tests/selectors-api/tests/submissions/Opera/ParentNode-query-queryAll.html deleted file mode 100644 index 95237a6fd97..00000000000 --- a/tests/wpt/web-platform-tests/selectors-api/tests/submissions/Opera/ParentNode-query-queryAll.html +++ /dev/null @@ -1,89 +0,0 @@ - - -Selectors-API Level 2 Test Suite: HTML with Selectors Level 3 - - - - - - - - -
        This test requires JavaScript.
        - - diff --git a/tests/wpt/web-platform-tests/selectors-api/tests/submissions/Opera/ParentNode-query-queryAll.js b/tests/wpt/web-platform-tests/selectors-api/tests/submissions/Opera/ParentNode-query-queryAll.js deleted file mode 100644 index 5fd5d6941ac..00000000000 --- a/tests/wpt/web-platform-tests/selectors-api/tests/submissions/Opera/ParentNode-query-queryAll.js +++ /dev/null @@ -1,275 +0,0 @@ -/* - * Check that the query and queryAll methods exist on the given Node - */ -function interfaceCheckQuery(type, obj) { - test(function() { - var q = typeof obj.query === "function"; - assert_true(q, type + " supports query."); - }, type + " supports query") - - test(function() { - var qa = typeof obj.queryAll === "function"; - assert_true( qa, type + " supports queryAll."); - }, type + " supports queryAll") -} - -/* - * Verify that the NodeList returned by queryAll is static and and that a new list is created after - * each call. A static list should not be affected by subsequent changes to the DOM. - */ -function verifyStaticList(type, doc, root) { - var pre, post, preLength; - - test(function() { - pre = root.queryAll("div"); - preLength = pre.length; - - var div = doc.createElement("div"); - (root.body || root).appendChild(div); - - assert_equals(pre.length, preLength, "The length of the NodeList should not change.") - }, type + ": static NodeList") - - test(function() { - post = root.queryAll("div"), - assert_equals(post.length, preLength + 1, "The length of the new NodeList should be 1 more than the previous list.") - }, type + ": new NodeList") -} - -/* - * Verify handling of special values for the selector parameter, including stringification of - * null and undefined, and the handling of the empty string. - */ -function runSpecialSelectorTests(type, root) { - test(function() { // 1 - assert_equals(root.queryAll(null).length, 1, "This should query one element with the tag name 'NULL'."); - }, type + ".queryAll null") - - test(function() { // 2 - assert_equals(root.queryAll(undefined).length, 1, "This should query one elements with the tag name 'UNDEFINED'."); - }, type + ".queryAll undefined") - - test(function() { // 3 - assert_throws(TypeError(), function() { - root.queryAll(); - }, "This should throw a TypeError.") - }, type + ".queryAll no parameter") - - test(function() { // 4 - var elm = root.query(null) - assert_not_equals(elm, null, "This should query an element."); - assert_equals(elm.tagName.toUpperCase(), "NULL", "The tag name should be 'NULL'.") - }, type + ".query null") - - test(function() { // 5 - var elm = root.query(undefined) - assert_not_equals(elm, undefined, "This should query an element."); - assert_equals(elm.tagName.toUpperCase(), "UNDEFINED", "The tag name should be 'UNDEFINED'.") - }, type + ".query undefined") - - test(function() { // 6 - assert_throws(TypeError(), function() { - root.query(); - }, "This should throw a TypeError.") - }, type + ".query no parameter.") - - test(function() { // 7 - result = root.queryAll("*"); - var i = 0; - traverse(root, function(elem) { - if (elem !== root) { - assert_equals(elem, result[i++], "The result in index " + i + " should be in tree order.") - } - }) - }, type + ".queryAll tree order"); -} - -/* - * Execute queries with the specified valid selectors for both query() and queryAll() - * Only run these tests when results are expected. Don't run for syntax error tests. - * - * context.queryAll(selector, refNodes) - * context.queryAll(selector) // Only if refNodes is not specified - * root.queryAll(selector, context) // Only if refNodes is not specified - * root.queryAll(selector, refNodes) // Only if context is not specified - * root.queryAll(selector) // Only if neither context nor refNodes is specified - * - * Equivalent tests will be run for .query() as well. - */ -function runValidSelectorTest(type, root, selectors, docType) { - var nodeType = getNodeType(root); - - for (var i = 0; i < selectors.length; i++) { - var s = selectors[i]; - var n = s["name"]; - var q = s["selector"]; - var e = s["expect"]; - - var ctx = s["ctx"]; - var ref = s["ref"]; - - if (!s["exclude"] || (s["exclude"].indexOf(nodeType) === -1 && s["exclude"].indexOf(docType) === -1)) { - var foundall, found, context, refNodes, refArray; - - if (s["testType"] & TEST_FIND) { - - - /* - * If ctx and ref are specified: - * context.queryAll(selector, refNodes) - * context.query(selector, refNodes) - */ - if (ctx && ref) { - context = root.querySelector(ctx); - refNodes = root.querySelectorAll(ref); - refArray = Array.prototype.slice.call(refNodes, 0); - - test(function() { - foundall = context.queryAll(q, refNodes); - verifyNodeList(foundall, expect); - }, type + " [Context Element].queryAll: " + n + " (with refNodes NodeList): " + q); - - test(function() { - foundall = context.queryAll(q, refArray); - verifyNodeList(foundall, expect); - }, type + " [Context Element].queryAll: " + n + " (with refNodes Array): " + q); - - test(function() { - found = context.query(q, refNodes); - verifyElement(found, foundall, expect) - }, type + " [Context Element].query: " + n + " (with refNodes NodeList): " + q); - - test(function() { - found = context.query(q, refArray); - verifyElement(found, foundall, expect) - }, type + " [Context Element].query: " + n + " (with refNodes Array): " + q); - } - - - /* - * If ctx is specified, ref is not: - * context.queryAll(selector) - * context.query(selector) - * root.queryAll(selector, context) - * root.query(selector, context) - */ - if (ctx && !ref) { - context = root.querySelector(ctx); - - test(function() { - foundall = context.queryAll(q); - verifyNodeList(foundall, expect); - }, type + " [Context Element].queryAll: " + n + " (with no refNodes): " + q); - - test(function() { - found = context.query(q); - verifyElement(found, foundall, expect) - }, type + " [Context Element].query: " + n + " (with no refNodes): " + q); - - test(function() { - foundall = root.queryAll(q, context); - verifyNodeList(foundall, expect); - }, type + " [Root Node].queryAll: " + n + " (with refNode Element): " + q); - - test(function() { - foundall = root.query(q, context); - verifyElement(found, foundall, expect); - }, type + " [Root Node].query: " + n + " (with refNode Element): " + q); - } - - /* - * If ref is specified, ctx is not: - * root.queryAll(selector, refNodes) - * root.query(selector, refNodes) - */ - if (!ctx && ref) { - refNodes = root.querySelectorAll(ref); - refArray = Array.prototype.slice.call(refNodes, 0); - - test(function() { - foundall = root.queryAll(q, refNodes); - verifyNodeList(foundall, expect); - }, type + " [Root Node].queryAll: " + n + " (with refNodes NodeList): " + q); - - test(function() { - foundall = root.queryAll(q, refArray); - verifyNodeList(foundall, expect); - }, type + " [Root Node].queryAll: " + n + " (with refNodes Array): " + q); - - test(function() { - found = root.query(q, refNodes); - verifyElement(found, foundall, expect); - }, type + " [Root Node].query: " + n + " (with refNodes NodeList): " + q); - - test(function() { - found = root.query(q, refArray); - verifyElement(found, foundall, expect); - }, type + " [Root Node].query: " + n + " (with refNodes Array): " + q); - } - - /* - * If neither ctx nor ref is specified: - * root.queryAll(selector) - * root.query(selector) - */ - if (!ctx && !ref) { - test(function() { - foundall = root.queryAll(q); - verifyNodeList(foundall, expect); - }, type + ".queryAll: " + n + " (with no refNodes): " + q); - - test(function() { - found = root.query(q); - verifyElement(found, foundall, expect); - }, type + ".query: " + n + " (with no refNodes): " + q); - } - } - } - } -} - -/* - * Execute queries with the specified invalid selectors for both query() and queryAll() - * Only run these tests when errors are expected. Don't run for valid selector tests. - */ -function runInvalidSelectorTestQuery(type, root, selectors) { - for (var i = 0; i < selectors.length; i++) { - var s = selectors[i]; - var n = s["name"]; - var q = s["selector"]; - - test(function() { - assert_throws("SyntaxError", function() { - root.query(q) - }) - }, type + ".query: " + n + ": " + q); - - test(function() { - assert_throws("SyntaxError", function() { - root.queryAll(q) - }) - }, type + ".queryAll: " + n + ": " + q); - } -} - -function verifyNodeList(resultAll, expect) { - assert_not_equals(resultAll, null, "The method should not return null."); - assert_equals(resultAll.length, e.length, "The method should return the expected number of matches."); - - for (var i = 0; i < e.length; i++) { - assert_not_equals(resultAll[i], null, "The item in index " + i + " should not be null.") - assert_equals(resultAll[i].getAttribute("id"), e[i], "The item in index " + i + " should have the expected ID."); - assert_false(resultAll[i].hasAttribute("data-clone"), "This should not be a cloned element."); - } -} - -function verifyElement(result, resultAll, expect) { - if (expect.length > 0) { - assert_not_equals(result, null, "The method should return a match.") - assert_equals(found.getAttribute("id"), e[0], "The method should return the first match."); - assert_equals(result, resultAll[0], "The result should match the first item from querySelectorAll."); - assert_false(found.hasAttribute("data-clone"), "This should not be annotated as a cloned element."); - } else { - assert_equals(result, null, "The method should not match anything."); - } -} diff --git a/tests/wpt/web-platform-tests/server-timing/resources/blue.png b/tests/wpt/web-platform-tests/server-timing/resources/blue.png new file mode 100644 index 0000000000000000000000000000000000000000..4498dd258a20b5ea070ae4a05aad77c62d5228a8 GIT binary patch literal 485 zcmeAS@N?(olHy`uVBq!ia0vp^tw5Z`!2~2_SFzdvDaPU;cPEB*=VV?2IV|apzK#qG z8~eHcB(eheoCO|{#S9F5he4R}c>anMpoS_>7srr_xVM)bc^MdZnh*Rk-+S{xp(m?= z$M(5Xd0t#Jy0EA)%r=TG%H-cd_tOsD$LzmkNM>C8(JrUUtSj~Z!s65gu8-xbw(xAp t_~YC^tx>GE9<1pj|EMN>0invwukhxcjw1 + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/server-timing/test_server_timing.html.sub.headers b/tests/wpt/web-platform-tests/server-timing/test_server_timing.html.sub.headers new file mode 100644 index 00000000000..ddff591c1e4 --- /dev/null +++ b/tests/wpt/web-platform-tests/server-timing/test_server_timing.html.sub.headers @@ -0,0 +1 @@ +Server-Timing: metric1=1.2;document diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/client-navigate.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/client-navigate.https.html index b651a20a111..9492335bb29 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/client-navigate.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/client-navigate.https.html @@ -57,6 +57,7 @@ frame.contentWindow.location.href, new URL("resources/client-navigated-frame.html", location).toString()); + frame.remove(); }) .catch(unreached_rejection(t)) .then(___ => service_worker_unregister(t, scope)); @@ -81,7 +82,8 @@ .then(({result, url}) => { assert_equals(result, "test_client_navigate_redirect"); assert_equals(url, ""); - assert_throws(null, function() { return frame.contentWindow.location.href }); + assert_throws("SecurityError", function() { return frame.contentWindow.location.href }); + frame.remove(); }) .catch(unreached_rejection(t)) .then(___ => service_worker_unregister(t, scope)); @@ -102,16 +104,74 @@ return wait_for_message() }) .then(({id}) => clientId = id) - .then(___ => run_test(controller, clientId, "test_client_navigate_failure")) + .then(___ => run_test(controller, clientId, "test_client_navigate_cross_origin")) .then(({result, url}) => { - assert_equals(result, "test_client_navigate_failure"); + assert_equals(result, "test_client_navigate_cross_origin"); + assert_equals(url, ""); + assert_throws("SecurityError", function() { return frame.contentWindow.location.href }); + frame.remove(); + }) + .catch(unreached_rejection(t)) + .then(___ => service_worker_unregister(t, scope)); + }, "Frame location should not be accessible after cross-origin navigation"); + + promise_test(function(t) { + var worker = "resources/client-navigate-worker.js"; + var scope = "resources/client-navigate-frame.html"; + var controller, frame, clientId; + + return service_worker_unregister_and_register(t, worker, scope) + .then(reg => wait_for_state(t, reg.installing, "activated")) + .then(___ => with_iframe(scope)) + .then(f => { + frame = f; + controller = frame.contentWindow.navigator.serviceWorker.controller; + fetch_tests_from_worker(controller); + return wait_for_message() + }) + .then(({id}) => clientId = id) + .then(___ => run_test(controller, clientId, "test_client_navigate_about_blank")) + .then(({result, url}) => { + assert_equals(result, "test_client_navigate_about_blank"); assert_equals( frame.contentWindow.location.href, new URL("resources/client-navigate-frame.html", location).toString()); frame.contentWindow.document.body.style = "background-color: green" + frame.remove(); }) .catch(unreached_rejection(t)) .then(___ => service_worker_unregister(t, scope)); - }, "Frame location should not update on failed navigation"); + }, "Frame location should not update on failed about:blank navigation"); + + promise_test(function(t) { + var worker = "resources/client-navigate-worker.js"; + var scope = "resources/client-navigate-frame.html"; + var controller, frame, clientId; + + return service_worker_unregister_and_register(t, worker, scope) + .then(reg => { + return wait_for_state(t, reg.installing, "activated"); + }) + .then(___ => with_iframe(scope)) + .then(f => { + frame = f; + controller = frame.contentWindow.navigator.serviceWorker.controller; + fetch_tests_from_worker(controller); + return wait_for_message() + }) + .then(({id}) => clientId = id) + .then(___ => run_test(controller, clientId, "test_client_navigate_mixed_content")) + .then(({result, url}) => { + assert_equals(result, "test_client_navigate_mixed_content"); + assert_equals( + frame.contentWindow.location.href, + new URL("resources/client-navigate-frame.html", + location).toString()); + frame.contentWindow.document.body.style = "background-color: green" + frame.remove(); + }) + .catch(unreached_rejection(t)) + .then(___ => service_worker_unregister(t, scope)); + }, "Frame location should not update on failed mixed-content navigation"); diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/clients-get-client-types.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/clients-get-client-types.https.html index 0005f98c4bb..897e3689ed3 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/clients-get-client-types.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/clients-get-client-types.https.html @@ -7,6 +7,7 @@ var scope = 'resources/clients-get-client-types'; var frame_url = scope + '-frame.html'; var shared_worker_url = scope + '-shared-worker.js'; +var worker_url = scope + '-worker.js'; var client_ids = []; var frame; promise_test(function(t) { @@ -34,6 +35,28 @@ promise_test(function(t) { }; }); }) + .then(function(client_id) { + client_ids.push(client_id); + var channel = new MessageChannel(); + var w = new Worker(worker_url); + w.postMessage({cmd:'GetClientId', port:channel.port2}, + [channel.port2]); + return new Promise(function(resolve) { + channel.port1.onmessage = function(e) { + resolve(e.data.clientId); + }; + }); + }) + .then(function(client_id) { + client_ids.push(client_id); + var channel = new MessageChannel(); + frame.contentWindow.postMessage('StartWorker', '*', [channel.port2]); + return new Promise(function(resolve) { + channel.port1.onmessage = function(e) { + resolve(e.data.clientId); + }; + }); + }) .then(function(client_id) { client_ids.push(client_id); var channel = new MessageChannel(); @@ -45,9 +68,23 @@ promise_test(function(t) { return saw_message; }) .then(function(e) { - assert_equals(e.data.length, 2); - assert_array_equals(e.data[0], expected[0]); - assert_array_equals(e.data[1], expected[1]); + assert_equals(e.data.length, expected.length); + // We use these assert_not_equals because assert_array_equals doesn't + // print the error description when passed an undefined value. + assert_not_equals(e.data[0], undefined, + 'Window client should not be undefined'); + assert_array_equals(e.data[0], expected[0], 'Window client'); + assert_not_equals(e.data[1], undefined, + 'Shared worker client should not be undefined'); + assert_array_equals(e.data[1], expected[1], 'Shared worker client'); + assert_not_equals(e.data[2], undefined, + 'Worker(Started by main frame) client should not be undefined'); + assert_array_equals(e.data[2], expected[2], + 'Worker(Started by main frame) client'); + assert_not_equals(e.data[3], undefined, + 'Worker(Started by sub frame) client should not be undefined'); + assert_array_equals(e.data[3], expected[3], + 'Worker(Started by sub frame) client'); }); }, 'Test Clients.get() with window and worker clients'); @@ -62,8 +99,10 @@ function wait_for_clientId() { } var expected = [ - /* visibilityState, focused, url, frameType */ - ['visible', true, normalizeURL(scope) + '-frame.html', 'nested'], - [undefined, undefined, normalizeURL(scope) + '-shared-worker.js', 'none'] + // visibilityState, focused, url, type, frameType + ['visible', true, normalizeURL(scope) + '-frame.html', 'window', 'nested'], + [undefined, undefined, normalizeURL(scope) + '-shared-worker.js', 'sharedworker', 'none'], + [undefined, undefined, normalizeURL(scope) + '-worker.js', 'worker', 'none'], + [undefined, undefined, normalizeURL(scope) + '-frame-worker.js', 'worker', 'none'] ]; diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/clients-get.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/clients-get.https.html index 45da2b35eff..68c6d7f7ac0 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/clients-get.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/clients-get.https.html @@ -60,9 +60,9 @@ function wait_for_clientId() { } var expected = [ - /* visibilityState, focused, url, frameType */ - ['visible', true, normalizeURL(scope) + '#1', 'nested'], - ['visible', false, normalizeURL(scope) + '#2', 'nested'], + // visibilityState, focused, url, type, frameType + ['visible', true, normalizeURL(scope) + '#1', 'window', 'nested'], + ['visible', false, normalizeURL(scope) + '#2', 'window', 'nested'], undefined ]; diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/clients-matchall-client-types.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/clients-matchall-client-types.https.html index 420e4e0d5e3..5bb50ec3db7 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/clients-matchall-client-types.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/clients-matchall-client-types.https.html @@ -7,6 +7,7 @@ var scope = 'resources/clients-matchall-client-types'; var iframe_url = scope + '-iframe.html'; var shared_worker_url = scope + '-shared-worker.js'; +var dedicated_worker_url = scope + '-dedicated-worker.js'; /* visibilityState, focused, url, type, frameType */ var expected_only_window = [ @@ -15,8 +16,12 @@ var expected_only_window = [ var expected_only_shared_worker = [ [undefined, undefined, new URL(shared_worker_url, location).href, 'sharedworker', 'none'] ]; -var expected_window_and_shared_worker = [ - expected_only_window[0], expected_only_shared_worker[0] +var expected_only_dedicated_worker = [ + [undefined, undefined, new URL(dedicated_worker_url, location).href, 'worker', 'none'] +]; +var expected_all_clients = [ + expected_only_window[0], expected_only_shared_worker[0], + expected_only_dedicated_worker[0] ]; function test_matchall(frame, expected, query_options) { @@ -78,6 +83,13 @@ promise_test(function(t) { w.port.onmessage = resolve; }); }) + .then(function() { + return new Promise(function(resolve, reject) { + var w = new Worker(dedicated_worker_url); + w.onmessage = resolve; + w.postMessage('Start'); + }); + }) .then(function() { return test_matchall(frame, expected_only_window, {}); }) @@ -89,12 +101,16 @@ promise_test(function(t) { {type:'sharedworker'}); }) .then(function() { - return test_matchall(frame, expected_window_and_shared_worker, {type:'all'}); + return test_matchall(frame, expected_only_dedicated_worker, + {type:'worker'}); + }) + .then(function() { + return test_matchall(frame, expected_all_clients, {type:'all'}); }) .then(function() { frame.remove(); return service_worker_unregister_and_done(t, scope); }); - }, 'Verify matchAll() with window and sharedworker client types'); +}, 'Verify matchAll() with {window, sharedworker, worker} client types'); diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/clients-matchall-exact-controller.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/clients-matchall-exact-controller.https.html index 3fc2dd5ac84..ee60c4a6077 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/clients-matchall-exact-controller.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/clients-matchall-exact-controller.https.html @@ -28,7 +28,7 @@ function checkWorkerClients(worker, expected) { } let expected = [ - /* visibilityState, focused, url, frameType */ + // visibilityState, focused, url, type, frameType ['visible', true, new URL(scope + '#1', location).toString(), 'window', 'nested'], ['visible', false, new URL(scope + '#2', location).toString(), 'window', 'nested'] ]; diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/clients-matchall-include-uncontrolled.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/clients-matchall-include-uncontrolled.https.html index affd4c656f8..50bd817f568 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/clients-matchall-include-uncontrolled.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/clients-matchall-include-uncontrolled.https.html @@ -27,13 +27,13 @@ function create_iframes(scope) { } var expected_without_include_uncontrolled = [ - /* visibilityState, focused, url, frameType */ + // visibilityState, focused, url, type, frameType ['visible', false, new URL(scope + '#1', location).toString(), 'window', 'nested'], ['visible', true, new URL(scope + '#2', location).toString(), 'window', 'nested'] ]; var expected_with_include_uncontrolled = [ - /* visibilityState, focused, url, frameType */ + // visibilityState, focused, url, type, frameType ['visible', true, location.href, 'window', 'top-level'], ['visible', false, new URL(scope + '#1', location).toString(), 'window', 'nested'], ['visible', true, new URL(scope + '#2', location).toString(), 'window', 'nested'], diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/clients-matchall.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/clients-matchall.https.html index 28348e2e94b..36269b4d98e 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/clients-matchall.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/clients-matchall.https.html @@ -30,7 +30,7 @@ t.step(function() { }); var expected = [ - /* visibilityState, focused, url, frameType */ + // visibilityState, focused, url, type, frameType ['visible', true, new URL(scope + '#1', location).toString(), 'window', 'nested'], ['visible', false, new URL(scope + '#2', location).toString(), 'window', 'nested'] ]; diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/extendable-event-async-waituntil.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/extendable-event-async-waituntil.https.html index a5b643094e8..be4efbbc342 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/extendable-event-async-waituntil.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/extendable-event-async-waituntil.https.html @@ -82,4 +82,20 @@ async_test(function(t) { } runTest(t, 'pending-respondwith-async-waituntil', testBody); }, 'Test calling waitUntil asynchronously with pending respondWith promise.'); + +async_test(function(t) { + var testBody = function(worker) { + return with_iframe('./resources/respondwith-microtask-sync-waituntil/dummy.html'); + } + runTest(t, 'respondwith-microtask-sync-waituntil', testBody); + }, 'Test calling waitUntil synchronously inside microtask of respondWith promise.'); + +async_test(function(t) { + var testBody = function(worker) { + return with_iframe('./resources/respondwith-microtask-async-waituntil/dummy.html'); + } + runTest(t, 'respondwith-microtask-async-waituntil', testBody); + }, 'Test calling waitUntil asynchronously inside microtask of respondWith promise.'); + + diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-csp.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-csp.https.html index 9f3365056a9..91a774a133f 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-csp.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-csp.https.html @@ -5,28 +5,107 @@ diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event-async-respond-with.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event-async-respond-with.https.html index 912e709ca38..a2b93acfc5b 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event-async-respond-with.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event-async-respond-with.https.html @@ -1,6 +1,5 @@ - - + + + diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event-respond-with-readable-stream.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event-respond-with-readable-stream.https.html new file mode 100644 index 00000000000..05afb6bc0fe --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event-respond-with-readable-stream.https.html @@ -0,0 +1,31 @@ + + +respondWith with a response built from a ReadableStream + + + + diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event-respond-with-response-body-with-invalid-chunk.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event-respond-with-response-body-with-invalid-chunk.https.html new file mode 100644 index 00000000000..fd799cddebd --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event-respond-with-response-body-with-invalid-chunk.https.html @@ -0,0 +1,34 @@ + + +respondWith with response body having invalid chunks + + + + diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event-respond-with-stops-propagation.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event-respond-with-stops-propagation.https.html index 5d3346e7b28..cd6861a9d45 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event-respond-with-stops-propagation.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event-respond-with-stops-propagation.https.html @@ -1,6 +1,5 @@ - + + + + diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-request-fallback.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-request-fallback.https.html index 57934d535ad..634b8d6d815 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-request-fallback.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-request-fallback.https.html @@ -3,111 +3,280 @@ - + diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-request-html-imports.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-request-html-imports.https.html new file mode 100644 index 00000000000..b2f56da9f01 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-request-html-imports.https.html @@ -0,0 +1,64 @@ + +Service Worker: FetchEvent for HTMLImports + + + + + diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-request-resources.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-request-resources.https.html index 5536304ff63..92ef4684668 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-request-resources.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-request-resources.https.html @@ -3,7 +3,7 @@ - + + + + diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-request-xhr.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-request-xhr.https.html index 87af4109994..3f24946c8cc 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-request-xhr.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-request-xhr.https.html @@ -3,7 +3,7 @@ - + + + + + + + diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-response-xhr.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-response-xhr.https.html index 24eb44e222e..74173e8b9bd 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-response-xhr.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-response-xhr.https.html @@ -3,7 +3,7 @@ - + - diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/http-to-https-redirect-and-register.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/http-to-https-redirect-and-register.https.html new file mode 100644 index 00000000000..d78b23a49e9 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/http-to-https-redirect-and-register.https.html @@ -0,0 +1,47 @@ + +register on a secure page after redirect from an non-secure url + + + + + + + diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/iframe-sandbox-register-link-element.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/iframe-sandbox-register-link-element.https.html new file mode 100644 index 00000000000..1d1c54e3edc --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/iframe-sandbox-register-link-element.https.html @@ -0,0 +1,53 @@ + + + + +Service worker registration from within sandboxed iframe + + + diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/import-scripts-resource-map.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/import-scripts-resource-map.https.html new file mode 100644 index 00000000000..a5e26785fac --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/import-scripts-resource-map.https.html @@ -0,0 +1,23 @@ + + +Tests for importScripts: script resource map + + + + + + diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/import-scripts-updated-flag.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/import-scripts-updated-flag.https.html new file mode 100644 index 00000000000..506827f89d5 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/import-scripts-updated-flag.https.html @@ -0,0 +1,83 @@ + + +Tests for importScripts: import scripts updated flag + + + + + + diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/indexeddb.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/indexeddb.https.html index 4de2bc43e17..be9be4968f7 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/indexeddb.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/indexeddb.https.html @@ -4,32 +4,75 @@ diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/interfaces.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/interfaces.https.html index 403a005344e..889142fe3af 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/interfaces.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/interfaces.https.html @@ -13,7 +13,9 @@ test(function() { { register: 'function', getRegistration: 'function', - oncontrollerchange: EVENT_HANDLER + oncontrollerchange: EVENT_HANDLER, + onmessage: EVENT_HANDLER, + onmessageerror: EVENT_HANDLER }); }, 'Interfaces and attributes of ServiceWorkerContainer'); diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/invalid-blobtype.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/invalid-blobtype.https.html index 868cf6e78c3..b994859c1c6 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/invalid-blobtype.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/invalid-blobtype.https.html @@ -3,7 +3,7 @@ - + - + + + + + diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/multiple-register.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/multiple-register.https.html index e1d948028f6..752e132fc13 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/multiple-register.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/multiple-register.https.html @@ -71,7 +71,7 @@ async_test(function(t) { assert_not_equals( registration.active, new_registration.active, - 'registration should have the different active worker'); + 'registration should have a different active worker'); assert_equals( registration.active.scriptURL, new_registration.active.scriptURL, diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/navigation-preload/resource-timing.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/navigation-preload/resource-timing.https.html new file mode 100644 index 00000000000..5f0953c76d1 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/navigation-preload/resource-timing.https.html @@ -0,0 +1,92 @@ + + +Navigation Preload Resource Timing + + + + diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/navigation-preload/resources/resource-timing-scope.py b/tests/wpt/web-platform-tests/service-workers/service-worker/navigation-preload/resources/resource-timing-scope.py new file mode 100644 index 00000000000..1820be4400e --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/navigation-preload/resources/resource-timing-scope.py @@ -0,0 +1,19 @@ +import zlib + +def main(request, response): + type = request.GET.first("type") + + if type == "normal": + content = "This is Navigation Preload Resource Timing test." + output = zlib.compress(content, 9) + headers = [("Content-type", "text/plain"), + ("Content-Encoding", "deflate"), + ("X-Decoded-Body-Size", len(content)), + ("X-Encoded-Body-Size", len(output)), + ("Content-Length", len(output))] + return headers, output + + if type == "redirect": + response.status = 302 + response.headers.append("Location", "redirect-redirected.html") + return "" diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/navigation-preload/resources/resource-timing-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/navigation-preload/resources/resource-timing-worker.js new file mode 100644 index 00000000000..46af6456aec --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/navigation-preload/resources/resource-timing-worker.js @@ -0,0 +1,19 @@ +self.addEventListener('activate', event => { + event.waitUntil(self.registration.navigationPreload.enable()); + }); + +self.addEventListener('fetch', event => { + event.respondWith( + event.preloadResponse + .then(response => { + var headers = response.headers; + return response.text().then(text => + new Response( + JSON.stringify({ + decodedBodySize: headers.get('X-Decoded-Body-Size'), + encodedBodySize: headers.get('X-Encoded-Body-Size'), + timingEntries: performance.getEntriesByName(event.request.url) + }), + {headers: {'Content-Type': 'text/html'}})); + })); + }); diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/navigation-redirect-body.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/navigation-redirect-body.https.html new file mode 100644 index 00000000000..0441c610b17 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/navigation-redirect-body.https.html @@ -0,0 +1,53 @@ + +Service Worker: Navigation redirection must clear body + + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/navigation-redirect-to-http.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/navigation-redirect-to-http.https.html new file mode 100644 index 00000000000..d4d2788c589 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/navigation-redirect-to-http.https.html @@ -0,0 +1,25 @@ + +Service Worker: Service Worker can receive HTTP opaqueredirect response. + + + + + + + diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/navigation-redirect.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/navigation-redirect.https.html index 586e9036a3e..e311bb63536 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/navigation-redirect.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/navigation-redirect.https.html @@ -176,7 +176,7 @@ promise_test(function(t) { return test_redirect( SCOPE1 + 'url=' + encodeURIComponent(SCOPE1), SCOPE1, - [[SCOPE1 + 'url=' + encodeURIComponent(SCOPE1)], [], []]); + [[SCOPE1 + 'url=' + encodeURIComponent(SCOPE1), SCOPE1], [], []]); }); }, 'SW-fallbacked redirect to same-origin same-scope.'); promise_test(function(t) { @@ -184,7 +184,7 @@ promise_test(function(t) { return test_redirect( SCOPE1 + 'url=' + encodeURIComponent(SCOPE2), SCOPE2, - [[SCOPE1 + 'url=' + encodeURIComponent(SCOPE2)], [], []]); + [[SCOPE1 + 'url=' + encodeURIComponent(SCOPE2)], [SCOPE2], []]); }); }, 'SW-fallbacked redirect to same-origin other-scope.'); promise_test(function(t) { @@ -204,7 +204,7 @@ promise_test(function(t) { OTHER_ORIGIN_SCOPE, [[SCOPE1 + 'url=' + encodeURIComponent(OTHER_ORIGIN_SCOPE)], [], - []]); + [OTHER_ORIGIN_SCOPE]]); }); }, 'SW-fallbacked redirect to other-origin in-scope.'); @@ -372,6 +372,16 @@ promise_test(function(t) { [OTHER_ORIGIN_SCOPE]]); }); }, 'Redirect to other-origin in-scope with opaque redirect response.'); +promise_test(function(t) { + return setup_environment(t).then(function() { + return test_redirect( + SCOPE1 + 'sw=opaque&noLocationRedirect', + SCOPE1 + 'sw=opaque&noLocationRedirect', + [[SCOPE1 + 'sw=opaque&noLocationRedirect'], + [], + []]); + }); + }, 'No location redirect response.'); // Opaque redirect passed through Cache. // SW responds with an opaque redirectresponse from the Cache API. @@ -445,5 +455,15 @@ promise_test(function(t) { }, 'Redirect to other-origin in-scope with opaque redirect response which ' + 'is passed through Cache.'); +promise_test(function(t) { + return setup_environment(t).then(function() { + return test_redirect( + SCOPE1 + 'sw=opaqueThroughCache&noLocationRedirect', + SCOPE1 + 'sw=opaqueThroughCache&noLocationRedirect', + [[SCOPE1 + 'sw=opaqueThroughCache&noLocationRedirect'], + [], + []]); + }); + }, 'No location redirect response via Cache.'); diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/onactivate-script-error.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/onactivate-script-error.https.html index 23a7f2c8686..6c16357f3cc 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/onactivate-script-error.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/onactivate-script-error.https.html @@ -33,16 +33,15 @@ function make_test(name, script) { return service_worker_unregister_and_register(t, script, scope) .then(function(r) { registration = r; + + t.add_cleanup(function() { + r.unregister(); + }); + return wait_for_install(registration.installing); }) .then(function() { // Activate should succeed regardless of script errors. - if (registration.active && registration.active.state == 'activated') { - return Promise.resolve(); - } else if (registration.active) { - return wait_for_activate(registration.active); - } - return wait_for_activate(registration.waiting); }); }, name); diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/opaque-response-preloaded.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/opaque-response-preloaded.https.html new file mode 100644 index 00000000000..ffe9344ea84 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/opaque-response-preloaded.https.html @@ -0,0 +1,33 @@ + + +Opaque responses should not be reused for XHRs + + + + diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/postmessage-msgport-to-client.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/postmessage-msgport-to-client.https.html index 38b4f56e784..29c056080c7 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/postmessage-msgport-to-client.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/postmessage-msgport-to-client.https.html @@ -1,51 +1,43 @@ -Service Worker: postMessage to Client +Service Worker: postMessage via MessagePort to Client diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/postmessage-to-client.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/postmessage-to-client.https.html index 8eac04a63d9..15d2e889337 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/postmessage-to-client.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/postmessage-to-client.https.html @@ -5,48 +5,50 @@ diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/postmessage.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/postmessage.https.html index a6f66517910..3a6487ea17a 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/postmessage.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/postmessage.https.html @@ -4,57 +4,136 @@ diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/ready.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/ready.https.html index ee6a97ca8fc..8267e6506d2 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/ready.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/ready.https.html @@ -12,31 +12,39 @@ test(function() { 'registrations should return the same Promise object'); }, 'ready returns the same Promise object'); -async_test(function(t) { - with_iframe('resources/blank.html?uncontrolled') +promise_test(function(t) { + return with_iframe('resources/blank.html?uncontrolled') .then(t.step_func(function(frame) { var promise = frame.contentWindow.navigator.serviceWorker.ready; + t.add_cleanup(function() { + frame.remove(); + }); + assert_equals(Object.getPrototypeOf(promise), frame.contentWindow.Promise.prototype, 'the Promise should be in the context of the ' + 'related document'); - frame.remove(); - t.done(); })); }, 'ready returns a Promise object in the context of the related document'); -async_test(function(t) { +promise_test(function(t) { var url = 'resources/empty-worker.js'; var scope = 'resources/blank.html?ready-controlled'; var expected_url = normalizeURL(url); var frame; - service_worker_unregister_and_register(t, url, scope) + return service_worker_unregister_and_register(t, url, scope) .then(function(registration) { + add_completion_callback(function() { + registration.unregister(); + }); return wait_for_state(t, registration.installing, 'activated'); }) .then(function() { return with_iframe(scope); }) .then(function(f) { + t.add_cleanup(function() { + f.remove(); + }); frame = f; return frame.contentWindow.navigator.serviceWorker.ready; }) @@ -47,29 +55,34 @@ async_test(function(t) { 'waiting should be null'); assert_equals(registration.active.scriptURL, expected_url, 'active after ready should not be null'); - assert_equals( - frame.contentWindow.navigator.serviceWorker.controller.scriptURL, - expected_url, - 'controlled document should have a controller'); - - frame.remove(); - service_worker_unregister_and_done(t, scope); - }) - .catch(unreached_rejection(t)); + assert_equals(frame.contentWindow.navigator.serviceWorker.controller, + registration.active, + 'the controller should be the active worker'); + assert_in_array(registration.active.state, + ['activating', 'activated'], + '.ready should be resolved when the registration ' + + 'has an active worker'); + }); }, 'ready on a controlled document'); -async_test(function(t) { +promise_test(function(t) { var url = 'resources/empty-worker.js'; var scope = 'resources/blank.html?ready-potential-controlled'; var expected_url = normalizeURL(url); var frame; - with_iframe(scope) + return with_iframe(scope) .then(function(f) { + t.add_cleanup(function() { + f.remove(); + }); frame = f; return navigator.serviceWorker.register(url, {scope:scope}); }) - .then(function() { + .then(function(r) { + add_completion_callback(function() { + r.unregister(); + }); return frame.contentWindow.navigator.serviceWorker.ready; }) .then(function(registration) { @@ -79,32 +92,99 @@ async_test(function(t) { 'waiting should be null.') assert_equals(registration.active.scriptURL, expected_url, 'active after ready should not be null'); + assert_in_array(registration.active.state, + ['activating', 'activated'], + '.ready should be resolved when the registration ' + + 'has an active worker'); assert_equals(frame.contentWindow.navigator.serviceWorker.controller, null, 'uncontrolled document should not have a controller'); - - frame.remove(); - service_worker_unregister_and_done(t, scope); - }) - .catch(unreached_rejection(t)); + }); }, 'ready on a potential controlled document'); -async_test(function(t) { +promise_test(function(t) { + var url = 'resources/empty-worker.js'; + var scope = 'resources/blank.html?ready-installing'; + + return service_worker_unregister(t, scope) + .then(function() { + return with_iframe(scope); + }) + .then(function(f) { + var promise = f.contentWindow.navigator.serviceWorker.ready; + t.add_cleanup(function() { + f.remove(); + }); + navigator.serviceWorker.register(url, {scope: scope}); + return promise; + }) + .then(function(registration) { + add_completion_callback(function() { + registration.unregister(); + }); + + assert_equals(registration.installing, null, + 'installing should be null'); + assert_equals(registration.waiting, null, 'waiting should be null'); + assert_not_equals(registration.active, null, + 'active after ready should not be null'); + assert_in_array(registration.active.state, + ['activating', 'activated'], + '.ready should be resolved when the registration ' + + 'has an active worker'); + }); + }, 'ready on an iframe whose parent registers a new service worker'); + +promise_test(function(t) { + var url = 'resources/empty-worker.js'; + var scope = 'resources/register-iframe.html'; + var expected_url = normalizeURL(url); + + return with_iframe(scope) + .then(function(f) { + t.add_cleanup(function() { + f.remove(); + }); + return f.contentWindow.navigator.serviceWorker.ready; + }) + .then(function(registration) { + add_completion_callback(function() { + registration.unregister(); + }); + + assert_equals(registration.installing, null, + 'installing should be null'); + assert_equals(registration.waiting, null, 'waiting should be null'); + assert_not_equals(registration.active, null, + 'active after ready should not be null'); + assert_in_array(registration.active.state, + ['activating', 'activated'], + '.ready should be resolved with "active worker"'); + }); + }, 'ready on an iframe that installs a new service worker'); + +promise_test(function(t) { var url = 'resources/empty-worker.js'; var matched_scope = 'resources/blank.html?ready-after-match'; var longer_matched_scope = 'resources/blank.html?ready-after-match-longer'; var frame, registration; - Promise.all([service_worker_unregister(t, matched_scope), - service_worker_unregister(t, longer_matched_scope)]) + return Promise.all([service_worker_unregister(t, matched_scope), + service_worker_unregister(t, longer_matched_scope)]) .then(function() { return with_iframe(longer_matched_scope); }) .then(function(f) { + t.add_cleanup(function() { + f.remove(); + }); frame = f; return navigator.serviceWorker.register(url, {scope: matched_scope}); }) .then(function(r) { + add_completion_callback(function() { + r.unregister(); + }); registration = r; return wait_for_state(t, r.installing, 'activated'); }) @@ -112,7 +192,10 @@ async_test(function(t) { return navigator.serviceWorker.register( url, {scope: longer_matched_scope}); }) - .then(function() { + .then(function(r) { + add_completion_callback(function() { + r.unregister(); + }); return frame.contentWindow.navigator.serviceWorker.ready; }) .then(function(r) { @@ -120,24 +203,21 @@ async_test(function(t) { 'longer matched registration should be returned'); assert_equals(frame.contentWindow.navigator.serviceWorker.controller, null, 'controller should be null'); - return registration.unregister(); - }) - .then(function() { - frame.remove(); - return service_worker_unregister_and_done(t, longer_matched_scope); - }) - .catch(unreached_rejection(t)); + }); }, 'ready after a longer matched registration registered'); -async_test(function(t) { +promise_test(function(t) { var url = 'resources/empty-worker.js'; var matched_scope = 'resources/blank.html?ready-after-resolve'; var longer_matched_scope = 'resources/blank.html?ready-after-resolve-longer'; var frame, registration; - service_worker_unregister_and_register(t, url, matched_scope) + return service_worker_unregister_and_register(t, url, matched_scope) .then(function(r) { + add_completion_callback(function() { + r.unregister(); + }); registration = r; return wait_for_state(t, r.installing, 'activated'); }) @@ -145,6 +225,9 @@ async_test(function(t) { return with_iframe(longer_matched_scope); }) .then(function(f) { + t.add_cleanup(function() { + f.remove(); + }); frame = f; return f.contentWindow.navigator.serviceWorker.ready; }) @@ -154,19 +237,15 @@ async_test(function(t) { return navigator.serviceWorker.register( url, {scope: longer_matched_scope}); }) - .then(function() { + .then(function(r) { + add_completion_callback(function() { + r.unregister(); + }); return frame.contentWindow.navigator.serviceWorker.ready; }) .then(function(r) { assert_equals(r.scope, normalizeURL(matched_scope), 'ready should only be resolved once'); - return registration.unregister(); - }) - .then(function() { - frame.remove(); - return service_worker_unregister_and_done(t, longer_matched_scope); - }) - .catch(unreached_rejection(t)); + }); }, 'access ready after it has been resolved'); - diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/redirected-response.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/redirected-response.https.html new file mode 100644 index 00000000000..b3ee9db4218 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/redirected-response.https.html @@ -0,0 +1,198 @@ + +Service Worker: Redirected response + + + + + 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 new file mode 100644 index 00000000000..f2e91d472c0 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/referrer-policy-header.https.html @@ -0,0 +1,43 @@ + +Service Worker: check referer of fetch() with Referrer Policy + + + + + diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/register-foreign-fetch-errors.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/register-foreign-fetch-errors.https.html new file mode 100644 index 00000000000..8eae074dae8 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/register-foreign-fetch-errors.https.html @@ -0,0 +1,8 @@ + + + + + diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/register-same-scope-different-script-url.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/register-same-scope-different-script-url.https.html index 445be740951..6eb00f3071a 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/register-same-scope-different-script-url.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/register-same-scope-different-script-url.https.html @@ -84,17 +84,10 @@ async_test(function(t) { .then(function() { assert_equals(registration.installing, null, 'on installed, installing should be null'); - // Since the registration is not controlling any document, the new - // worker can immediately transition to active. - if (registration.waiting) { - assert_equals(registration.waiting.scriptURL, script2, - 'on installed, the second script may still be waiting'); - assert_equals(registration.active.scriptURL, script1, - 'on installed, the first script may be active'); - } else { - assert_equals(registration.active.scriptURL, script2, - 'on installed, the second script may be active'); - } + assert_equals(registration.waiting.scriptURL, script2, + 'on installed, the second script should be waiting'); + assert_equals(registration.active.scriptURL, script1, + 'on installed, the first script should be active'); return registration.unregister(); }) .then(function() { diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/registration-service-worker-attributes.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/registration-service-worker-attributes.https.html index a0dea5428db..8fd566dadc6 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/registration-service-worker-attributes.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/registration-service-worker-attributes.https.html @@ -3,14 +3,21 @@ diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/registration-useCache.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/registration-useCache.https.html deleted file mode 100644 index 1976fa117d6..00000000000 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/registration-useCache.https.html +++ /dev/null @@ -1,223 +0,0 @@ - -Service Worker: Registration-useCache - - - - - diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/request-body-blob.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/request-body-blob.https.html new file mode 100644 index 00000000000..7ae2cb0bf93 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/request-body-blob.https.html @@ -0,0 +1,31 @@ + + +request body blob + + + + diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/request-end-to-end.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/request-end-to-end.https.html index 32b42999b5a..7b594aac57d 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/request-end-to-end.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/request-end-to-end.https.html @@ -1,75 +1,40 @@ -Service Worker: Request end-to-end +Service Worker: FetchEvent.request passed to onfetch diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resource-timing.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/resource-timing.https.html index 797896759fe..e1ee541ef59 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/resource-timing.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resource-timing.https.html @@ -5,7 +5,7 @@ diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/clients-get-client-types-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/clients-get-client-types-worker.js new file mode 100644 index 00000000000..0a1461b40e0 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/clients-get-client-types-worker.js @@ -0,0 +1,11 @@ +onmessage = function(e) { + if (e.data.cmd == 'GetClientId') { + fetch('clientId') + .then(function(response) { + return response.text(); + }) + .then(function(text) { + e.data.port.postMessage({clientId: text}); + }); + } +}; diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/clients-get-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/clients-get-worker.js index ca4444f3533..77c99e83521 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/clients-get-worker.js +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/clients-get-worker.js @@ -37,6 +37,7 @@ self.onmessage = function(e) { message.push([client.visibilityState, client.focused, client.url, + client.type, client.frameType]); } else { message.push(client); diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/clients-matchall-client-types-dedicated-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/clients-matchall-client-types-dedicated-worker.js new file mode 100644 index 00000000000..5a3f04d33aa --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/clients-matchall-client-types-dedicated-worker.js @@ -0,0 +1,3 @@ +onmessage = function(e) { + postMessage(e.data); +}; diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/extendable-event-async-waituntil.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/extendable-event-async-waituntil.js index fc64e6ce567..40a4cbba2a2 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/extendable-event-async-waituntil.js +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/extendable-event-async-waituntil.js @@ -50,12 +50,24 @@ self.addEventListener('message', function(event) { }); self.addEventListener('fetch', function(event) { - var resolveFetch; - let response = new Promise((res) => { resolveFetch = res; }); - event.respondWith(response); - async_task_waituntil(event) - .then(reportResultExpecting('OK')) - .then(() => { resolveFetch(new Response('OK')); }); + if (event.request.url.indexOf('pending-respondwith-async-waituntil') != -1) { + var resolveFetch; + let response = new Promise((res) => { resolveFetch = res; }); + event.respondWith(response); + async_task_waituntil(event) + .then(reportResultExpecting('OK')) + .then(() => { resolveFetch(new Response('OK')); }); + } else if (event.request.url.indexOf('respondwith-microtask-sync-waituntil') != -1) { + response = Promise.resolve(new Response('RESP')); + event.respondWith(response); + response.then(() => { return sync_waituntil(event); }) + .then(reportResultExpecting('OK')) + } else if (event.request.url.indexOf('respondwith-microtask-async-waituntil') != -1) { + response = Promise.resolve(new Response('RESP')); + event.respondWith(response); + response.then(() => { return async_microtask_waituntil(event); }) + .then(reportResultExpecting('InvalidStateError')) + } }); function reportResultExpecting(expectedResult) { diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-access-control-login.html b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-access-control-login.html index 0ffab1af598..ee296807ed1 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-access-control-login.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-access-control-login.html @@ -13,4 +13,4 @@ window.addEventListener("message", function(evt) { evt.data.username, evt.data.password); xhr.send(); }, false); - \ No newline at end of file + diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-cors-xhr-iframe.html b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-cors-xhr-iframe.html index 1fd809490f6..51952a988ef 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-cors-xhr-iframe.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-cors-xhr-iframe.html @@ -26,7 +26,6 @@ function create_test_case_promise(url, with_credentials) { }); } - function create_test_promise(url, with_credentials, expected_result) { return new Promise(function(resolve, reject) { create_test_case_promise(url, with_credentials) diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-csp-iframe.html b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-csp-iframe.html index df218364385..33bf0416d58 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-csp-iframe.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-csp-iframe.html @@ -1,72 +1,16 @@ - - diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-respond-with-argument-iframe.html b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-respond-with-argument-iframe.html new file mode 100644 index 00000000000..33b47e78a34 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-respond-with-argument-iframe.html @@ -0,0 +1,55 @@ + + diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-respond-with-argument-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-respond-with-argument-worker.js new file mode 100644 index 00000000000..712c4b73c9b --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-respond-with-argument-worker.js @@ -0,0 +1,14 @@ +self.addEventListener('fetch', function(event) { + var testcase = new URL(event.request.url).search; + switch (testcase) { + case '?response-object': + event.respondWith(new Response('body')); + break; + case '?response-promise-object': + event.respondWith(Promise.resolve(new Response('body'))); + break; + case '?other-value': + event.respondWith(new Object()); + break; + } + }); diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-respond-with-readable-stream-iframe.html b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-respond-with-readable-stream-iframe.html new file mode 100644 index 00000000000..1904d75657d --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-respond-with-readable-stream-iframe.html @@ -0,0 +1,9 @@ + + diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-respond-with-readable-stream-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-respond-with-readable-stream-worker.js new file mode 100644 index 00000000000..ddaba55fa7b --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-respond-with-readable-stream-worker.js @@ -0,0 +1,13 @@ +'use strict'; + +self.addEventListener('fetch', event => { + if (!event.request.url.match(/body-stream$/)) + return; + + const stream = new ReadableStream({start: controller => { + const encoder = new TextEncoder(); + controller.enqueue(encoder.encode('PASS')); + controller.close(); + }}); + event.respondWith(new Response(stream)); + }); diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-respond-with-response-body-with-invalid-chunk-iframe.html b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-respond-with-response-body-with-invalid-chunk-iframe.html new file mode 100644 index 00000000000..d2c7e6180c8 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-respond-with-response-body-with-invalid-chunk-iframe.html @@ -0,0 +1,14 @@ + + +respond-with-response-body-with-invalid-chunk + + diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-respond-with-response-body-with-invalid-chunk-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-respond-with-response-body-with-invalid-chunk-worker.js new file mode 100644 index 00000000000..0254e24f94a --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-respond-with-response-body-with-invalid-chunk-worker.js @@ -0,0 +1,12 @@ +'use strict'; + +self.addEventListener('fetch', event => { + if (!event.request.url.match(/body-stream-with-invalid-chunk$/)) + return; + const stream = new ReadableStream({start: controller => { + // The argument is intentionally a string, not a Uint8Array. + controller.enqueue('hello'); + }}); + const headers = { 'x-content-type-options': 'nosniff' }; + event.respondWith(new Response(stream, { headers })); + }); diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-test-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-test-worker.js index 55ba4ab4d11..61ae85e9898 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-test-worker.js +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-test-worker.js @@ -113,6 +113,11 @@ function handleIntegrity(event) { event.respondWith(new Response(event.request.integrity)); } +function handleHeaders(event) { + const headers = Array.from(event.request.headers); + event.respondWith(new Response(JSON.stringify(headers))); +} + self.addEventListener('fetch', function(event) { var url = event.request.url; var handlers = [ @@ -132,6 +137,7 @@ self.addEventListener('fetch', function(event) { { pattern: '?cache', fn: handleCache }, { pattern: '?eventsource', fn: handleEventSource }, { pattern: '?integrity', fn: handleIntegrity }, + { pattern: '?headers', fn: handleHeaders }, ]; var handler = null; diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-css-cross-origin-mime-check-cross.css b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-css-cross-origin-mime-check-cross.css new file mode 100644 index 00000000000..9a7545d0702 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-css-cross-origin-mime-check-cross.css @@ -0,0 +1 @@ +#crossOriginCss { color: blue; } diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-css-cross-origin-mime-check-cross.html b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-css-cross-origin-mime-check-cross.html new file mode 100644 index 00000000000..3211f78084d --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-css-cross-origin-mime-check-cross.html @@ -0,0 +1 @@ +#crossOriginHtml { color: red; } diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-css-cross-origin-mime-check-iframe.html b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-css-cross-origin-mime-check-iframe.html new file mode 100644 index 00000000000..dcb82871354 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-css-cross-origin-mime-check-iframe.html @@ -0,0 +1,17 @@ + + + + + + +

        I should be blue

        +

        I should be blue

        +

        I should be blue

        +

        I should be blue

        +

        I should be blue

        diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-css-cross-origin-mime-check-same.css b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-css-cross-origin-mime-check-same.css new file mode 100644 index 00000000000..55455bd5da5 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-css-cross-origin-mime-check-same.css @@ -0,0 +1 @@ +#sameOriginCss { color: blue; } diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-css-cross-origin-mime-check-same.html b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-css-cross-origin-mime-check-same.html new file mode 100644 index 00000000000..6fad4b9ff04 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-css-cross-origin-mime-check-same.html @@ -0,0 +1 @@ +#sameOriginHtml { color: blue; } diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-css-cross-origin-mime-check-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-css-cross-origin-mime-check-worker.js new file mode 100644 index 00000000000..274142f5ce4 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-css-cross-origin-mime-check-worker.js @@ -0,0 +1,20 @@ +importScripts('/common/get-host-info.sub.js'); +importScripts('test-helpers.sub.js'); + +self.addEventListener('fetch', function(event) { + if (event.request.url.indexOf('cross-origin-css.css') != -1) { + event.respondWith(fetch( + get_host_info()['HTTPS_REMOTE_ORIGIN'] + base_path() + + 'fetch-request-css-cross-origin-mime-check-cross.css', + {mode: 'no-cors'})); + } else if (event.request.url.indexOf('cross-origin-html.css') != -1) { + event.respondWith(fetch( + get_host_info()['HTTPS_REMOTE_ORIGIN'] + base_path() + + 'fetch-request-css-cross-origin-mime-check-cross.html', + {mode: 'no-cors'})); + } else if (event.request.url.indexOf('synthetic.css') != -1) { + event.respondWith(new Response("#synthetic { color: blue; }")); + } else { + event.respondWith(fetch(event.request)); + } + }); diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-fallback-iframe.html b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-fallback-iframe.html index f00d24e37a8..d117d0f55ef 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-fallback-iframe.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-fallback-iframe.html @@ -4,7 +4,7 @@ function xhr(url) { var request = new XMLHttpRequest(); request.addEventListener( 'error', - function(event) { reject(event); }); + function() { reject(new Error()); }); request.addEventListener( 'load', function(event) { resolve(request.response); }); @@ -12,4 +12,21 @@ function xhr(url) { request.send(); }); } + +function load_image(url, cross_origin) { + return new Promise(function(resolve, reject) { + var img = document.createElement('img'); + document.body.appendChild(img); + img.onload = function() { + resolve(); + }; + img.onerror = function() { + reject(new Error()); + }; + if (cross_origin != '') { + img.crossOrigin = cross_origin; + } + img.src = url; + }); +} diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-html-imports-iframe.html b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-html-imports-iframe.html new file mode 100644 index 00000000000..795185944e9 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-html-imports-iframe.html @@ -0,0 +1,13 @@ + + diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-html-imports-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-html-imports-worker.js new file mode 100644 index 00000000000..5525d526866 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-html-imports-worker.js @@ -0,0 +1,30 @@ +importScripts('/common/get-host-info.sub.js'); +var host_info = get_host_info(); + +self.addEventListener('fetch', function(event) { + var url = event.request.url; + if (url.indexOf('dummy-dir') == -1) { + return; + } + var result = 'mode=' + event.request.mode + + ' credentials=' + event.request.credentials; + if (url == host_info.HTTPS_ORIGIN + '/dummy-dir/same.html') { + event.respondWith(new Response( + result + + '' + + '')); + } else if (url == host_info.HTTPS_REMOTE_ORIGIN + '/dummy-dir/other.html') { + event.respondWith(new Response( + result + + '' + + '')); + } else { + event.respondWith(new Response(result)); + } + }); diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-resources-iframe.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-resources-iframe.https.html index 93b038dd67c..2e5d7dfe972 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-resources-iframe.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-resources-iframe.https.html @@ -63,5 +63,13 @@ function load_css_with_integrity(url, integrity) { document.body.appendChild(link); } +function load_audio(url, cross_origin) { + var audio = document.createElement('audio'); + if (cross_origin != '') { + audio.crossOrigin = cross_origin; + } + audio.src = url; + document.body.appendChild(audio); +} diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-resources-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-resources-worker.js index 900b63c62fc..e732da0f1b1 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-resources-worker.js +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-resources-worker.js @@ -17,6 +17,7 @@ self.addEventListener('fetch', function(event) { port.postMessage({ url: url, mode: event.request.mode, + redirect: event.request.redirect, credentials: event.request.credentials, integrity: event.request.integrity }); diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-xhr-iframe.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-xhr-iframe.https.html index ef2f925aa5f..8afa237dc0e 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-xhr-iframe.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-xhr-iframe.https.html @@ -8,6 +8,10 @@ function assert_equals(a, b) { port.postMessage({results: 'equals', got: a, expected: b}); } +function assert_array_equals(a, b, msg) { + port.postMessage({results: 'array_equals', got: a, expected: b, msg: msg}); +} + function get_boundary(headers) { var reg = new RegExp('multipart\/form-data; boundary=(.*)'); for (var i = 0; i < headers.length; ++i) { @@ -59,6 +63,70 @@ function xhr_send(url_base, method, data, with_credentials) { }); } +function get_sorted_header_name_list(headers) { + var header_names = []; + var idx, name; + + for (idx = 0; idx < headers.length; ++idx) { + name = headers[idx][0]; + // The `Accept-Language` header is optional; its presence should not + // influence test results. + // + // > 4. If request’s header list does not contain `Accept-Language`, user + // > agents should append `Accept-Language`/an appropriate value to + // > request's header list. + // + // https://fetch.spec.whatwg.org/#fetching + if (name === 'accept-language') { + continue; + } + + header_names.push(name); + } + header_names.sort(); + return header_names; +} + +function get_header_test() { + return xhr_send(host_info['HTTPS_ORIGIN'], 'GET', '', false) + .then(function(response) { + assert_array_equals( + get_sorted_header_name_list(response.headers), + ["accept"], + 'event.request has the expected headers for same-origin GET.'); + }); +} + +function post_header_test() { + return xhr_send(host_info['HTTPS_ORIGIN'], 'POST', '', false) + .then(function(response) { + assert_array_equals( + get_sorted_header_name_list(response.headers), + ["accept", "content-type"], + 'event.request has the expected headers for same-origin POST.'); + }); +} + +function cross_origin_get_header_test() { + return xhr_send(host_info['HTTPS_REMOTE_ORIGIN'], 'GET', '', false) + .then(function(response) { + assert_array_equals( + get_sorted_header_name_list(response.headers), + ["accept"], + 'event.request has the expected headers for cross-origin GET.'); + }); +} + +function cross_origin_post_header_test() { + return xhr_send(host_info['HTTPS_REMOTE_ORIGIN'], 'POST', '', false) + .then(function(response) { + assert_array_equals( + get_sorted_header_name_list(response.headers), + ["accept", "content-type"], + 'event.request has the expected headers for cross-origin POST.'); + }); +} + function string_test() { return xhr_send(host_info['HTTPS_ORIGIN'], 'POST', 'test string', false) .then(function(response) { @@ -166,7 +234,11 @@ function data_url_test() { window.addEventListener('message', function(evt) { port = evt.ports[0]; - string_test() + get_header_test() + .then(post_header_test) + .then(cross_origin_get_header_test) + .then(cross_origin_post_header_test) + .then(string_test) .then(blob_test) .then(custom_method_test) .then(options_method_test) @@ -174,6 +246,9 @@ window.addEventListener('message', function(evt) { .then(mode_credentials_test) .then(data_url_test) .then(function() { port.postMessage({results: 'finish'}); }) - .catch(function(e) { port.postMessage({results: 'failure:' + e}); }); + .catch(function(reason) { + var error = String(reason.message || reason); + port.postMessage({results: 'failure', error: error}); + }); }); diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-xhr-sync-iframe.html b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-xhr-sync-iframe.html new file mode 100644 index 00000000000..900762ffc6c --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-xhr-sync-iframe.html @@ -0,0 +1,13 @@ + +Service Worker: Synchronous XHR is intercepted iframe + diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-xhr-sync-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-xhr-sync-worker.js new file mode 100644 index 00000000000..070e572f400 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-request-xhr-sync-worker.js @@ -0,0 +1,7 @@ +'use strict'; + +self.onfetch = function(event) { + if (event.request.url.indexOf('non-existent-file.txt') !== -1) { + event.respondWith(new Response('Response from service worker')); + } +}; diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-response-taint-iframe.html b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-response-taint-iframe.html new file mode 100644 index 00000000000..5f09efe28df --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-response-taint-iframe.html @@ -0,0 +1,2 @@ + + diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-response-xhr-iframe.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-response-xhr-iframe.https.html index 08b887b7de6..1414596c16e 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-response-xhr-iframe.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-response-xhr-iframe.https.html @@ -23,11 +23,29 @@ function coalesce_headers_test() { .then(function(xhr) { window.parent.postMessage({results: xhr.getResponseHeader('foo')}, host_info['HTTPS_ORIGIN']); + + return new Promise(function(resolve) { + window.addEventListener('message', function handle(evt) { + if (event.data !== 'ACK') { + return; + } + + window.removeEventListener('message', handle); + resolve(); + }); + }); }); } window.addEventListener('message', function(evt) { - var port = evt.ports[0]; + var port; + + if (event.data !== 'START') { + return; + } + + port = evt.ports[0]; + coalesce_headers_test() .then(function() { port.postMessage({results: 'finish'}); }) .catch(function(e) { port.postMessage({results: 'failure:' + e}); }); diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-rewrite-worker-referrer-policy.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-rewrite-worker-referrer-policy.js new file mode 100644 index 00000000000..64c99c95d86 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-rewrite-worker-referrer-policy.js @@ -0,0 +1,4 @@ +// This script is intended to be served with the `Referrer-Policy` header as +// defined in the corresponding `.headers` file. + +importScripts('fetch-rewrite-worker.js'); diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-rewrite-worker-referrer-policy.js.headers b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-rewrite-worker-referrer-policy.js.headers new file mode 100644 index 00000000000..5ae4265418e --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-rewrite-worker-referrer-policy.js.headers @@ -0,0 +1,2 @@ +Content-Type: application/javascript +Referrer-Policy: origin diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/http-to-https-redirect-and-register-iframe.html b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/http-to-https-redirect-and-register-iframe.html new file mode 100644 index 00000000000..8c48a18cee4 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/http-to-https-redirect-and-register-iframe.html @@ -0,0 +1,21 @@ + +register, unregister, and report result to opener + + + diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/iframe-register-link-element.html b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/iframe-register-link-element.html new file mode 100644 index 00000000000..db5bf230e89 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/iframe-register-link-element.html @@ -0,0 +1,16 @@ + diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/import-scripts-echo.py b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/import-scripts-echo.py new file mode 100644 index 00000000000..7d92794e31b --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/import-scripts-echo.py @@ -0,0 +1,6 @@ +def main(req, res): + return ([ + ('Cache-Control', 'no-cache, must-revalidate'), + ('Pragma', 'no-cache'), + ('Content-Type', 'application/javascript')], + 'echo_output = "%s";\n' % req.GET['msg']) diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/import-scripts-resource-map-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/import-scripts-resource-map-worker.js new file mode 100644 index 00000000000..b3b9bc46a02 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/import-scripts-resource-map-worker.js @@ -0,0 +1,15 @@ +importScripts('/resources/testharness.js'); + +let version = null; +importScripts('import-scripts-version.py'); +// Once imported, the stored script should be loaded for subsequent importScripts. +const expected_version = version; + +version = null; +importScripts('import-scripts-version.py'); +assert_equals(expected_version, version, 'second import'); + +version = null; +importScripts('import-scripts-version.py', 'import-scripts-version.py', + 'import-scripts-version.py'); +assert_equals(expected_version, version, 'multiple imports'); diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/import-scripts-updated-flag-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/import-scripts-updated-flag-worker.js new file mode 100644 index 00000000000..0f5005d9af4 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/import-scripts-updated-flag-worker.js @@ -0,0 +1,29 @@ +importScripts('/resources/testharness.js'); + +let echo_output = null; + +// Tests importing a script that sets |echo_output| to the query string. +function test_import(str) { + importScripts('import-scripts-echo.py?msg=' + str); + assert_equals(echo_output, str); +} + +test_import('root'); +test_import('root-and-message'); + +self.addEventListener('install', () => { + test_import('install'); + test_import('install-and-message'); + }); + +self.addEventListener('message', e => { + var error = null; + + try { + importScripts('import-scripts-echo.py?msg=' + e.data); + } catch (e) { + error = e && e.name; + } + + e.source.postMessage({ error: error, value: echo_output }); + }); diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/import-scripts-version.py b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/import-scripts-version.py new file mode 100644 index 00000000000..91caa1a41ed --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/import-scripts-version.py @@ -0,0 +1,17 @@ +import datetime +import time + +epoch = datetime.datetime(1970, 1, 1) + +def main(req, res): + # Artificially delay response time in order to ensure uniqueness of + # computed value + time.sleep(0.1) + + now = (datetime.datetime.now() - epoch).total_seconds() + + return ([ + ('Cache-Control', 'no-cache, must-revalidate'), + ('Pragma', 'no-cache'), + ('Content-Type', 'application/javascript')], + 'version = "%s";\n' % now) diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/indexeddb-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/indexeddb-worker.js index ef89550b3e0..9add4768388 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/indexeddb-worker.js +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/indexeddb-worker.js @@ -1,26 +1,57 @@ -var port; self.addEventListener('message', function(e) { var message = e.data; - if ('port' in message) - doIndexedDBTest(message.port); + if (message.action === 'create') { + e.waitUntil(deleteDB() + .then(doIndexedDBTest) + .then(function() { + message.port.postMessage({ type: 'created' }); + }) + .catch(function(reason) { + message.port.postMessage({ type: 'error', value: reason }); + })); + } else if (message.action === 'cleanup') { + e.waitUntil(deleteDB() + .then(function() { + message.port.postMessage({ type: 'done' }); + }) + .catch(function(reason) { + message.port.postMessage({ type: 'error', value: reason }); + })); + } }); -function doIndexedDBTest(port) { - var delete_request = indexedDB.deleteDatabase('db'); - delete_request.onsuccess = function() { - var open_request = indexedDB.open('db'); - open_request.onupgradeneeded = function() { - var db = open_request.result; - db.createObjectStore('store'); - }; - open_request.onsuccess = function() { - var db = open_request.result; - var tx = db.transaction('store', 'readwrite'); - var store = tx.objectStore('store'); - store.put('value', 'key'); - tx.oncomplete = function() { - port.postMessage('done'); - }; - }; - }; +function deleteDB() { + return new Promise(function(resolve, reject) { + var delete_request = indexedDB.deleteDatabase('db'); + + delete_request.onsuccess = resolve; + delete_request.onerror = reject; + }); +} + +function doIndexedDBTest(port) { + return new Promise(function(resolve, reject) { + var open_request = indexedDB.open('db'); + + open_request.onerror = reject; + open_request.onupgradeneeded = function() { + var db = open_request.result; + db.createObjectStore('store'); + }; + open_request.onsuccess = function() { + var db = open_request.result; + var tx = db.transaction('store', 'readwrite'); + var store = tx.objectStore('store'); + store.put('value', 'key'); + + tx.onerror = function() { + db.close(); + reject(tx.error); + }; + tx.oncomplete = function() { + db.close(); + resolve(); + }; + }; + }); } diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/install-event-type-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/install-event-type-worker.js index d729afa090c..1c94ae21ea9 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/install-event-type-worker.js +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/install-event-type-worker.js @@ -1,8 +1,9 @@ importScripts('worker-testharness.js'); self.oninstall = function(event) { - assert_true(event instanceof ExtendableEvent); - assert_equals(event.type, 'install'); - assert_false(event.cancelable); - assert_false(event.bubbles); + assert_true(event instanceof ExtendableEvent, 'instance of ExtendableEvent'); + assert_true(event instanceof InstallEvent, 'instance of InstallEvent'); + assert_equals(event.type, 'install', '`type` property value'); + assert_false(event.cancelable, '`cancelable` property value'); + assert_false(event.bubbles, '`bubbles` property value'); }; diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/interfaces-worker.sub.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/interfaces-worker.sub.js index e5ed36fceba..abb3417a4e5 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/interfaces-worker.sub.js +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/interfaces-worker.sub.js @@ -15,7 +15,8 @@ test(function() { onactivate: EVENT_HANDLER, onfetch: EVENT_HANDLER, oninstall: EVENT_HANDLER, - onmessage: EVENT_HANDLER + onmessage: EVENT_HANDLER, + onmessageerror: EVENT_HANDLER }); }, 'ServiceWorkerGlobalScope'); @@ -76,6 +77,15 @@ test(function() { assert_equals( new ExtendableEvent('ExtendableEvent').type, 'ExtendableEvent', 'Type of ExtendableEvent should be ExtendableEvent'); + assert_throws(new TypeError, function() { + new FetchEvent('FetchEvent'); + }, 'FetchEvent constructor with one argument throws'); + assert_throws(new TypeError, function() { + new FetchEvent('FetchEvent', {}); + }, 'FetchEvent constructor with empty init dict throws'); + assert_throws(new TypeError, function() { + new FetchEvent('FetchEvent', {request: null}); + }, 'FetchEvent constructor with null request member throws'); assert_equals( new FetchEvent('FetchEvent', {request: req}).type, 'FetchEvent', 'Type of FetchEvent should be FetchEvent'); diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/invalid-blobtype-iframe.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/invalid-blobtype-iframe.https.html index f111bd9244e..1e6cacb55d7 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/invalid-blobtype-iframe.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/invalid-blobtype-iframe.https.html @@ -1,4 +1,4 @@ - + + diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/iso-latin1-header-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/iso-latin1-header-worker.js new file mode 100644 index 00000000000..3ab5c7e7318 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/iso-latin1-header-worker.js @@ -0,0 +1,12 @@ +self.addEventListener('fetch', function(event) { + var url = event.request.url; + if (url.indexOf('dummy?test') == -1) { + return; + } + + event.respondWith(new Promise(function(resolve) { + var headers = new Headers; + headers.append('TEST', 'ßÀ¿'); // header value holds the Latin1 (ISO8859-1) string. + resolve(new Response('hello world', {'headers': headers})); + })); + }); diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/navigation-redirect-body-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/navigation-redirect-body-worker.js new file mode 100644 index 00000000000..39f11baf8cb --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/navigation-redirect-body-worker.js @@ -0,0 +1,11 @@ +self.addEventListener('fetch', function(event) { + event.respondWith( + fetch(event.request) + .then( + function(response) { + return response; + }, + function(error) { + return new Response('Error:' + error); + })); + }); diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/navigation-redirect-body.py b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/navigation-redirect-body.py new file mode 100644 index 00000000000..601f818cff6 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/navigation-redirect-body.py @@ -0,0 +1,9 @@ +import os + +filename = os.path.basename(__file__) + +def main(request, response): + if request.method == 'POST': + return 302, [('Location', './%s?redirect' % filename)], '' + + return [('Content-Type', 'text/plain')], request.request_path diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/navigation-redirect-out-scope.py b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/navigation-redirect-out-scope.py index 4b40762d89f..0cd5ef18516 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/navigation-redirect-out-scope.py +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/navigation-redirect-out-scope.py @@ -3,7 +3,12 @@ def main(request, response): headers = [("Location", request.GET["url"])] return 302, headers, '' - return [], ''' + status = 200 + + if "noLocationRedirect" in request.GET: + status = 302 + + return status, [], ''' + + diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/navigation-redirect-to-http-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/navigation-redirect-to-http-worker.js new file mode 100644 index 00000000000..6f2a8ae1d74 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/navigation-redirect-to-http-worker.js @@ -0,0 +1,22 @@ +importScripts('/resources/testharness.js'); + +self.addEventListener('fetch', function(event) { + event.respondWith(new Promise(function(resolve) { + Promise.resolve() + .then(function() { + assert_equals( + event.request.redirect, 'manual', + 'The redirect mode of navigation request must be manual.'); + return fetch(event.request); + }) + .then(function(response) { + assert_equals( + response.type, 'opaqueredirect', + 'The response type of 302 response must be opaqueredirect.'); + resolve(new Response('OK')); + }) + .catch(function(error) { + resolve(new Response('Failed in SW: ' + error)); + }); + })); + }); diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/opaque-response-preloaded-iframe.html b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/opaque-response-preloaded-iframe.html new file mode 100644 index 00000000000..d4d3024ede6 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/opaque-response-preloaded-iframe.html @@ -0,0 +1,34 @@ + + + + + diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/opaque-response-preloaded-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/opaque-response-preloaded-worker.js new file mode 100644 index 00000000000..1615be2fede --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/opaque-response-preloaded-worker.js @@ -0,0 +1,12 @@ +importScripts('/common/get-host-info.sub.js'); + +var remoteUrl = get_host_info()['HTTPS_REMOTE_ORIGIN'] + + '/service-workers/service-worker/resources/simple.txt' + +self.addEventListener('fetch', event => { + if (!event.request.url.match(/opaque-response$/)) { + return; + } + + event.respondWith(fetch(remoteUrl, {mode: 'no-cors'})); + }); diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/postmessage-msgport-to-client-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/postmessage-msgport-to-client-worker.js index 3475321f4a6..7af935f4f8f 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/postmessage-msgport-to-client-worker.js +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/postmessage-msgport-to-client-worker.js @@ -1,20 +1,19 @@ self.onmessage = function(e) { - self.clients.matchAll().then(function(clients) { + e.waitUntil(self.clients.matchAll().then(function(clients) { clients.forEach(function(client) { var messageChannel = new MessageChannel(); messageChannel.port1.onmessage = - onMessageViaMessagePort.bind(null, client); - client.postMessage({port: messageChannel.port2}, - [messageChannel.port2]); + onMessageViaMessagePort.bind(null, messageChannel.port1); + client.postMessage(undefined, [messageChannel.port2]); }); - }); + })); }; -function onMessageViaMessagePort(client, e) { +function onMessageViaMessagePort(port, e) { var message = e.data; if ('value' in message) { - client.postMessage({ack: 'Acking value: ' + message.value}); + port.postMessage({ack: 'Acking value: ' + message.value}); } else if ('done' in message) { - client.postMessage({done: true}); + port.postMessage({done: true}); } } diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/postmessage-to-client-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/postmessage-to-client-worker.js index 290a4a9b3e9..17913063583 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/postmessage-to-client-worker.js +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/postmessage-to-client-worker.js @@ -1,10 +1,10 @@ self.onmessage = function(e) { - self.clients.matchAll().then(function(clients) { + e.waitUntil(self.clients.matchAll().then(function(clients) { clients.forEach(function(client) { client.postMessage('Sending message via clients'); if (!Array.isArray(clients)) client.postMessage('clients is not an array'); client.postMessage('quit'); }); - }); + })); }; diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/postmessage-transferables-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/postmessage-transferables-worker.js new file mode 100644 index 00000000000..d35c1c952b8 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/postmessage-transferables-worker.js @@ -0,0 +1,24 @@ +var messageHandler = function(port, e) { + var text_decoder = new TextDecoder; + port.postMessage({ + content: text_decoder.decode(e.data), + byteLength: e.data.byteLength + }); + + // Send back the array buffer via Client.postMessage. + port.postMessage(e.data, [e.data.buffer]); + + port.postMessage({ + content: text_decoder.decode(e.data), + byteLength: e.data.byteLength + }); +}; + +self.addEventListener('message', e => { + if (e.ports[0]) { + // Wait for messages sent via MessagePort. + e.ports[0].onmessage = messageHandler.bind(null, e.ports[0]); + return; + } + messageHandler(e.source, e); + }); diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/referrer-policy-iframe.html b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/referrer-policy-iframe.html new file mode 100644 index 00000000000..9ef3cd19a98 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/referrer-policy-iframe.html @@ -0,0 +1,32 @@ + + + diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/register-foreign-fetch-errors-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/register-foreign-fetch-errors-worker.js new file mode 100644 index 00000000000..d1facc89ca8 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/register-foreign-fetch-errors-worker.js @@ -0,0 +1,134 @@ +self.addEventListener('install', function(event) { + var scope = registration.scope; + var scope_url = new URL(scope); + + test(function() { + assert_throws(new TypeError(), function() { + event.registerForeignFetch({}); + }); + }, 'Invalid options'); + + test(function() { + assert_throws(new TypeError(), function() { + event.registerForeignFetch({scopes: scope, origins: ['*']}); + }); + }, 'Scopes not an array'); + + test(function() { + assert_throws(new TypeError(), function() { + event.registerForeignFetch({scopes: [{}], origins: ['*']}); + }); + }, 'Scopes not a string in array'); + + test(function() { + assert_throws(new TypeError(), function() { + event.registerForeignFetch({scopes: ['/foo'], origins: ['*']}); + }); + }, 'Relative url not under scope'); + + test(function() { + var url = new URL(scope_url); + url.host = 'example.com'; + assert_throws(new TypeError(), function() { + event.registerForeignFetch({scopes: [url.href], origins: ['*']}); + }); + }, 'Absolute url not under scope'); + + test(function() { + assert_throws(new TypeError(), function() { + event.registerForeignFetch({scopes: [], origins: ['*']}); + }); + }, 'Empty scope array'); + + async_test(function(t) { + self.setTimeout(t.step_func(function() { + assert_throws('InvalidStateError', function() { + event.registerForeignFetch({scopes: [scope], origins: ['*']}); + }); + t.done(); + }), 1); + }, 'Call after event returned'); + + test(function() { + event.registerForeignFetch({scopes: [scope], origins: ['*']}); + }, 'Valid scopes with wildcard origin string'); + + test(function() { + event.registerForeignFetch({scopes: [scope, scope + '/foo'], origins: ['*']}); + }, 'Absolute urls'); + + test(function() { + // Figure out scope relative to location of this script: + var local_dir = location.pathname; + local_dir = local_dir.substr(0, local_dir.lastIndexOf('/')); + assert_true(scope_url.pathname.startsWith(local_dir)); + var relative_scope = scope_url.pathname.substr(local_dir.length + 1); + + event.registerForeignFetch({scopes: [ + scope_url.pathname, + relative_scope, + './' + relative_scope, + relative_scope + '/foo'], origins: ['*']}); + }, 'Relative urls'); + + test(function() { + assert_throws(new TypeError(), function() { + event.registerForeignFetch({scopes: [scope]}); + }); + }, 'No origins specified'); + + test(function() { + assert_throws(new TypeError(), function() { + event.registerForeignFetch({scopes: [scope], origins: {}}); + }); + }, 'Origins not a string or array'); + + test(function() { + assert_throws(new TypeError(), function() { + event.registerForeignFetch({scopes: [scope], origins: [{}]}); + }); + }, 'Origins contains something not a string'); + + test(function() { + assert_throws(new TypeError(), function() { + event.registerForeignFetch({scopes: [scope], origins: ['/foo']}); + }); + }, 'Origin not an absolute URL'); + + test(function() { + event.registerForeignFetch({scopes: [scope], origins: ['*']}); + }, 'Wildcard origin string in array'); + + test(function() { + assert_throws(new TypeError(), function() { + event.registerForeignFetch({scopes: [scope], origins: 'https://example.com/'}); + }); + }, 'Origin string'); + + test(function() { + event.registerForeignFetch({scopes: [scope], origins: ['https://example.com/']}); + }, 'Origin string in array'); + + test(function() { + event.registerForeignFetch({ + scopes: [scope], origins: ['https://example.com/', 'https://chromium.org']}); + }, 'Array with multiple origins'); + + test(function() { + assert_throws(new TypeError(), function() { + event.registerForeignFetch({scopes: [scope], + origins: ['*', 'https://example.com/']}); + }); + }, 'Origins includes wildcard and other strings'); + + test(function() { + assert_throws(new TypeError(), function() { + event.registerForeignFetch({scopes: [scope], + origins: ['https://example.com/', '*']}); + }); + }, 'Origins includes other strings and wildcard'); + }); + +// Import testharness after install handler to make sure our install handler +// runs first. Otherwise only one test will run. +importScripts('/resources/testharness.js'); diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/register-iframe.html b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/register-iframe.html new file mode 100644 index 00000000000..f5a040e41d9 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/register-iframe.html @@ -0,0 +1,4 @@ + diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/request-body-blob-iframe.html b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/request-body-blob-iframe.html new file mode 100644 index 00000000000..4abf5812c91 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/request-body-blob-iframe.html @@ -0,0 +1,20 @@ + + +request-body-blob-iframe + + diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/request-body-blob-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/request-body-blob-worker.js new file mode 100644 index 00000000000..1eb9144e7de --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/request-body-blob-worker.js @@ -0,0 +1,11 @@ +self.addEventListener('fetch', event => { + if (event.request.url.indexOf('?post-with-blob-body') == -1) + return; + event.respondWith(event.request.text().then(body => { + if (body.indexOf('it\'s me the blob') == -1) + return new Response('fail'); + if (body.indexOf('and more blob!') == -1) + return new Response('fail'); + return new Response('Pass'); + })); + }); diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/request-end-to-end-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/request-end-to-end-worker.js index dcf6feefd7d..6bd2b72137e 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/request-end-to-end-worker.js +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/request-end-to-end-worker.js @@ -1,43 +1,34 @@ -var port = undefined; -// Create a then-able object that is never resolved. -function createPending() { - return { then: createPending }; -} - -onmessage = function(e) { - var message = e.data; - if (typeof message === 'object' && 'port' in message) { - port = message.port; - - port.postMessage('received port'); - // The ServiceWorker which handles the "message" event must persist long - // enough to handle the subsequent "fetch" event. To promote test - // simplicity, the worker prevents its own termination indefinitely via a - // then-able that is never resolved. - e.waitUntil(createPending()); - } -}; +'use strict'; onfetch = function(e) { var headers = {}; - var errorNameWhileAppendingHeader; for (var header of e.request.headers) { var key = header[0], value = header[1]; headers[key] = value; } - var errorNameWhileAddingHeader = ''; + var append_header_error = ''; try { e.request.headers.append('Test-Header', 'TestValue'); - } catch (e) { - errorNameWhileAppendingHeader = e.name; + } catch (error) { + append_header_error = error.name; } - port.postMessage({ - url: e.request.url, - mode: e.request.mode, - method: e.request.method, - referrer: e.request.referrer, - headers: headers, - headerSize: e.request.headers.size, - errorNameWhileAppendingHeader: errorNameWhileAppendingHeader - }); + + var request_construct_error = ''; + try { + new Request(e.request, {method: 'GET'}); + } catch (error) { + request_construct_error = error.name; + } + + e.respondWith(new Response(JSON.stringify({ + url: e.request.url, + method: e.request.method, + referrer: e.request.referrer, + headers: headers, + mode: e.request.mode, + credentials: e.request.credentials, + redirect: e.request.redirect, + append_header_error: append_header_error, + request_construct_error: request_construct_error + }))); }; diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/skip-waiting-installed-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/skip-waiting-installed-worker.js index bf582c77074..eb63026d5c4 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/skip-waiting-installed-worker.js +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/skip-waiting-installed-worker.js @@ -4,21 +4,32 @@ self.addEventListener('install', function() { self.state = 'installing'; }); +self.addEventListener('activate', function() { + self.state = 'activating'; + }); + self.addEventListener('message', function(event) { var port = event.data.port; if (self.state !== 'installing') { port.postMessage('FAIL: Worker should be waiting in installed state'); return; } - self.skipWaiting() + event.waitUntil(self.skipWaiting() .then(function(result) { if (result !== undefined) { port.postMessage('FAIL: Promise should be resolved with undefined'); return; } + + if (self.state === 'activating') { + port.postMessage( + 'FAIL: Promise should be resolved before worker is activated'); + return; + } + port.postMessage('PASS'); }) .catch(function(e) { port.postMessage('FAIL: unexpected exception: ' + e); - }); + })); }); diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/update-max-aged-worker-imported-script.py b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/update-max-aged-worker-imported-script.py deleted file mode 100644 index e166143e2bb..00000000000 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/update-max-aged-worker-imported-script.py +++ /dev/null @@ -1,22 +0,0 @@ -import time - -def main(request, response): - headers = [('Cache-Control', 'max-age=86400'), - ('Content-Type', 'application/javascript'), - ('Last-Modified', time.strftime("%a, %d %b %Y %H:%M:%S GMT", - time.gmtime()))] - - - revalidate = request.headers.has_key('if-modified-since'); - - body = ''' - self.addEventListener('message', function(e) { - e.data.port.postMessage({ - from: "imported", - type: "%s", - value: %s - }); - }); - ''' % ('revalidate' if revalidate else 'normal', time.time()) - - return headers, body diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/update-max-aged-worker.py b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/update-max-aged-worker.py deleted file mode 100644 index 6eb7c343a26..00000000000 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/update-max-aged-worker.py +++ /dev/null @@ -1,26 +0,0 @@ -import time - -def main(request, response): - headers = [('Content-Type', 'application/javascript'), - ('Cache-Control', 'max-age=86400'), - ('Last-Modified', time.strftime("%a, %d %b %Y %H:%M:%S GMT", time.gmtime()))] - - test = ''; - if 'Test' in request.GET: - test = request.GET['Test']; - - revalidate = request.headers.has_key('if-modified-since'); - - body = ''' - importScripts('update-max-aged-worker-imported-script.py?Test=%s'); - - self.addEventListener('message', function(e) { - e.data.port.postMessage({ - from: "main", - type: "%s", - value: %s - }); - }); - ''' % (test, 'revalidate' if revalidate else 'normal', time.time()) - - return headers, body diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/windowclient-navigate-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/windowclient-navigate-worker.js new file mode 100644 index 00000000000..8c2c2c66d75 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/windowclient-navigate-worker.js @@ -0,0 +1,66 @@ +function match_query(query_string) { + return self.location.search.substr(1) == query_string; +} + +function navigate_test(e) { + var port = e.data.port; + var url = e.data.url; + + return clients.matchAll({ includeUncontrolled : true }) + .then(function(client_list) { + for (var i = 0; i < client_list.length; i++) { + var client = client_list[i]; + if (client.frameType == 'nested') { + return client.navigate(url); + } + } + port.postMessage('Could not locate window client.'); + }) + .then(function(new_client) { + if (new_client === null) + port.postMessage(new_client); + else + port.postMessage(new_client.url); + }) + .catch(function(error) { + port.postMessage(error.name); + }); +} + +function getTestClient() { + return clients.matchAll({ includeUncontrolled: true }) + .then(function(client_list) { + for (var i = 0; i < client_list.length; i++) { + var client = client_list[i]; + + if (/windowclient-navigate\.https\.html/.test(client.url)) { + return client; + } + } + + throw new Error('Service worker was unable to locate test client.'); + }); +} + +function waitForMessage(client) { + var channel = new MessageChannel(); + client.postMessage({ port: channel.port2 }, [channel.port2]); + + return new Promise(function(resolve) { + channel.port1.onmessage = resolve; + }); +} + +// The worker must remain in the "installing" state for the duration of some +// sub-tests. In order to achieve this coordination without relying on global +// state, the worker must create a message channel with the client from within +// the "install" event handler. +if (match_query('installing')) { + self.addEventListener('install', function(e) { + e.waitUntil(getTestClient().then(waitForMessage)); + }); +} + +self.addEventListener('message', function(e) { + e.waitUntil(navigate_test(e)); + }); diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/serviceworkerobject-scripturl.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/serviceworkerobject-scripturl.https.html index 95587a5a42d..58f25f3a442 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/serviceworkerobject-scripturl.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/serviceworkerobject-scripturl.https.html @@ -4,23 +4,28 @@ diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/skip-waiting-installed.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/skip-waiting-installed.https.html index 42e4000b1f6..93dc06d1033 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/skip-waiting-installed.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/skip-waiting-installed.https.html @@ -1,28 +1,29 @@ Service Worker: Skip waiting installed worker - - - - - diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/unregister-then-register.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/unregister-then-register.https.html index d75904d158f..6c0a0aecf3f 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/unregister-then-register.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/unregister-then-register.https.html @@ -55,6 +55,45 @@ async_test(function(t) { }, 'Unregister then register resolves to the original value if the ' + 'registration is in use.'); +async_test(function(t) { + var scope = 'resources/scope/complete-unregistration-followed-by-' + + 'reloading-controllee-iframe'; + var registration; + var frame; + var service_worker; + service_worker_unregister_and_register(t, worker_url, scope) + .then(function(r) { + registration = r; + return wait_for_state(t, r.installing, 'activated'); + }) + .then(function() { + return with_iframe(scope); + }) + .then(function(f) { + frame = f; + return registration.unregister(); + }) + .then(function() { + return new Promise(function(resolve) { + frame.onload = resolve; + frame.contentWindow.location.reload(); + }); + }) + .then(function() { + var c = frame.contentWindow.navigator.serviceWorker.controller; + assert_equals(c, null, 'a page after unregistration should not be ' + + 'controlled by service worker'); + return navigator.serviceWorker.getRegistration(scope); + }) + .then(function(r) { + assert_equals(r, undefined, 'getRegistration should return ' + + 'undefined after unregistration'); + service_worker_unregister_and_done(t, scope); + }) + .catch(unreached_rejection(t)); +}, 'Reloading the last controlled iframe after unregistration should ensure ' + + 'the deletion of the registration'); + async_test(function(t) { var scope = 'resources/scope/re-register-does-not-affect-existing-controllee'; var iframe; @@ -116,8 +155,6 @@ async_test(function(t) { return with_iframe(scope); }) .then(function(frame) { - // FIXME: When crbug.com/400602 is fixed, assert that controller - // equals the original worker. assert_not_equals( frame.contentWindow.navigator.serviceWorker.controller, null, 'document should have a controller'); diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/update-after-oneday.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/update-after-oneday.https.html index 151a59ebc3f..08065d22ce4 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/update-after-oneday.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/update-after-oneday.https.html @@ -46,5 +46,3 @@ promise_test(function(t) { }, 'Update should be triggered after a functional event when last update time is over 24 hours'); - - diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/update.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/update.https.html index 213b72ac837..6717d4d7ac2 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/update.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/update.https.html @@ -5,12 +5,14 @@ diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/windowclient-navigate.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/windowclient-navigate.https.html new file mode 100644 index 00000000000..8fb467a3f9b --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/windowclient-navigate.https.html @@ -0,0 +1,178 @@ + +Service Worker: WindowClient.navigate() tests + + + + + + + diff --git a/tests/wpt/web-platform-tests/shadow-dom/Range-prototype-insertNode.html b/tests/wpt/web-platform-tests/shadow-dom/Range-prototype-insertNode.html new file mode 100644 index 00000000000..b55ef68dcbc --- /dev/null +++ b/tests/wpt/web-platform-tests/shadow-dom/Range-prototype-insertNode.html @@ -0,0 +1,18 @@ + + + + + + diff --git a/tests/wpt/web-platform-tests/shadow-dom/slotchange-event.html b/tests/wpt/web-platform-tests/shadow-dom/slotchange-event.html index 62675dea488..167d600a3bd 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/slotchange-event.html +++ b/tests/wpt/web-platform-tests/shadow-dom/slotchange-event.html @@ -241,11 +241,11 @@ testSlotchangeDoesNotFireWhenOtherSlotsChange('closed', true); testSlotchangeDoesNotFireWhenOtherSlotsChange('open', false); testSlotchangeDoesNotFireWhenOtherSlotsChange('closed', false); -function testSlotchangeDoesNotFireForMutationBeforeOrAfterSlotWasPresent(mode, connectedToDocument) +function testSlotchangeDoesFireAtInsertedAndDoesNotFireForMutationAfterRemoved(mode, connectedToDocument) { - var test = async_test('slotchange event must not fire on a slot element inside ' - + treeName(mode, connectedToDocument) - + ' when the shadow host was mutated before the slot was inserted or after the slot was removed'); + var test = async_test('slotchange event must fire on a slot element when a shadow host has a slotable and the slot was inserted' + + ' and must not fire when the shadow host was mutated after the slot was removed inside ' + + treeName(mode, connectedToDocument)); var host; var slot; @@ -273,32 +273,32 @@ function testSlotchangeDoesNotFireForMutationBeforeOrAfterSlotWasPresent(mode, c setTimeout(function () { test.step(function () { - assert_equals(eventCount, 0, - 'slotchange must not be fired on a slot element if the assigned nodes changed before the slot was inserted'); + assert_equals(eventCount, 1, + 'slotchange must be fired on a slot element if there is assigned nodes when the slot was inserted'); host.removeChild(host.firstChild); }); setTimeout(function () { test.step(function () { - assert_equals(eventCount, 1, - 'slotchange must be fired exactly once after the assigned nodes change on a slot while the slot element was in the tree'); + assert_equals(eventCount, 2, + 'slotchange must be fired after the assigned nodes change on a slot while the slot element was in the tree'); slot.parentNode.removeChild(slot); host.appendChild(document.createElement('span')); }); setTimeout(function () { - assert_equals(eventCount, 1, - 'slotchange must not be fired on a slot element if the assigned nodes changed after the slot was removed'); + assert_equals(eventCount, 2, + 'slotchange must not be fired on a slot element if the assigned nodes changed after the slot was removed'); test.done(); }, 1); }, 1); }, 1); } -testSlotchangeDoesNotFireForMutationBeforeOrAfterSlotWasPresent('open', true); -testSlotchangeDoesNotFireForMutationBeforeOrAfterSlotWasPresent('closed', true); -testSlotchangeDoesNotFireForMutationBeforeOrAfterSlotWasPresent('open', false); -testSlotchangeDoesNotFireForMutationBeforeOrAfterSlotWasPresent('closed', false); +testSlotchangeDoesFireAtInsertedAndDoesNotFireForMutationAfterRemoved('open', true); +testSlotchangeDoesFireAtInsertedAndDoesNotFireForMutationAfterRemoved('closed', true); +testSlotchangeDoesFireAtInsertedAndDoesNotFireForMutationAfterRemoved('open', false); +testSlotchangeDoesFireAtInsertedAndDoesNotFireForMutationAfterRemoved('closed', false); function testSlotchangeFiresOnTransientlyPresentSlot(mode, connectedToDocument) { @@ -505,7 +505,11 @@ function testSlotchangeFiresWhenNestedSlotChange(mode, connectedToDocument) innerSlot.addEventListener('slotchange', function (event) { event.stopPropagation(); test.step(function () { - assert_equals(event.target, outerSlot, 'slotchange event\'s target must be the outer slot element'); + if (innerSlotEventCount === 0) { + assert_equals(event.target, innerSlot, 'slotchange event\'s target must be the inner slot element at 1st slotchange'); + } else if (innerSlotEventCount === 1) { + assert_equals(event.target, outerSlot, 'slotchange event\'s target must be the outer slot element at 2nd sltochange'); + } }); innerSlotEventCount++; }); @@ -521,7 +525,7 @@ function testSlotchangeFiresWhenNestedSlotChange(mode, connectedToDocument) test.step(function () { assert_equals(outerSlotEventCount, 1, 'slotchange must be fired on a slot element if the assigned nodes changed'); - assert_equals(innerSlotEventCount, 1, + assert_equals(innerSlotEventCount, 2, 'slotchange must be fired on a slot element and must bubble'); }); test.done(); diff --git a/tests/wpt/web-platform-tests/shadow-dom/slots-fallback-in-document.html b/tests/wpt/web-platform-tests/shadow-dom/slots-fallback-in-document.html new file mode 100644 index 00000000000..846f3e03a05 --- /dev/null +++ b/tests/wpt/web-platform-tests/shadow-dom/slots-fallback-in-document.html @@ -0,0 +1,55 @@ + +Shadow DOM: Slots and fallback contents in Document tree + + + + + +
        +
        + +
        This is fallback content
        +
        +
        + + + +
        +
        + +
        +
        + + diff --git a/tests/wpt/web-platform-tests/shadow-dom/slots-fallback.html b/tests/wpt/web-platform-tests/shadow-dom/slots-fallback.html index 8721fe92069..a8d60e88182 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/slots-fallback.html +++ b/tests/wpt/web-platform-tests/shadow-dom/slots-fallback.html @@ -213,7 +213,8 @@ test(() => { assert_array_equals(n.s1.assignedNodes(), []); - assert_array_equals(n.s1.assignedNodes({ flatten: true }), [n.f1]); + assert_array_equals(n.s1.assignedNodes({ flatten: true }), [], + 'fall back contents should be empty because s1 is not in a shadow tree.'); assert_array_equals(n.s2.assignedNodes({ flatten: true }), [n.f2]); assert_array_equals(n.s3.assignedNodes({ flatten: true }), [n.f2]); assert_array_equals(n.s4.assignedNodes({ flatten: true }), [n.f2, n.f4]); diff --git a/tests/wpt/web-platform-tests/shadow-dom/slots.html b/tests/wpt/web-platform-tests/shadow-dom/slots.html index 67e1589ed73..550d7d454aa 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/slots.html +++ b/tests/wpt/web-platform-tests/shadow-dom/slots.html @@ -83,9 +83,9 @@ test(() => { assert_array_equals(n.s2.assignedNodes(), []); assert_array_equals(n.s3.assignedNodes(), []); - assert_array_equals(n.s1.assignedNodes({ flatten: true }), [n.c1]); - assert_array_equals(n.s2.assignedNodes({ flatten: true }), [n.c2, n.c3_1, n.c3_2]); - assert_array_equals(n.s3.assignedNodes({ flatten: true }), [n.c3_1, n.c3_2]); + assert_array_equals(n.s1.assignedNodes({ flatten: true }), []); + assert_array_equals(n.s2.assignedNodes({ flatten: true }), []); + assert_array_equals(n.s3.assignedNodes({ flatten: true }), []); }, 'Slots: Distributed nooes for Slots not in a shadow tree.'); diff --git a/tests/wpt/web-platform-tests/storage/persist-permission-manual.https.html b/tests/wpt/web-platform-tests/storage/persist-permission-manual.https.html new file mode 100644 index 00000000000..aa49900d695 --- /dev/null +++ b/tests/wpt/web-platform-tests/storage/persist-permission-manual.https.html @@ -0,0 +1,27 @@ + + + + + StorageManager: permission state is granted +

        Clear all persistent storage permissions before running this test.

        +

        Test passes if there is a permission prompt and click allow store persistent data

        + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/storage/persisted-worker.https.html b/tests/wpt/web-platform-tests/storage/persisted-worker.https.html new file mode 100644 index 00000000000..21f5c8bd92d --- /dev/null +++ b/tests/wpt/web-platform-tests/storage/persisted-worker.https.html @@ -0,0 +1,16 @@ + + + + + StorageManager: persisted() from worker + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/storage/persisted.https.html b/tests/wpt/web-platform-tests/storage/persisted.https.html new file mode 100644 index 00000000000..a5a91ff0b26 --- /dev/null +++ b/tests/wpt/web-platform-tests/storage/persisted.https.html @@ -0,0 +1,14 @@ + + + + + StorageManager: persisted() + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/storage/storage-persisted.js b/tests/wpt/web-platform-tests/storage/storage-persisted.js new file mode 100644 index 00000000000..5bc86fea951 --- /dev/null +++ b/tests/wpt/web-platform-tests/storage/storage-persisted.js @@ -0,0 +1,18 @@ +if (this.document === undefined) { + importScripts("/resources/testharness.js"); +} + +test(function(t) { + assert_true('persisted' in navigator.storage); + assert_equals(typeof navigator.storage.persisted, 'function'); + assert_true(navigator.storage.persisted() instanceof Promise); +}, 'persisted() method exists and returns a Promise'); + +promise_test(function(t) { + return navigator.storage.persisted().then(function(result) { + assert_equals(typeof result, 'boolean'); + assert_equals(result, false); + }); +}, 'persisted() returns a promise and resolves as boolean with false'); + +done(); diff --git a/tests/wpt/web-platform-tests/streams/piping/flow-control.js b/tests/wpt/web-platform-tests/streams/piping/flow-control.js index 2bb04090820..04c56ec40d0 100644 --- a/tests/wpt/web-platform-tests/streams/piping/flow-control.js +++ b/tests/wpt/web-platform-tests/streams/piping/flow-control.js @@ -170,16 +170,44 @@ promise_test(() => { }, 'Piping from a ReadableStream to a WritableStream that desires more chunks before finishing with previous ones'); -promise_test(() => { +class StepTracker { + constructor() { + this.waiters = []; + this.wakers = []; + } + // Returns promise which resolves when step `n` is reached. Also schedules step n + 1 to happen shortly after the + // promise is resolved. + waitThenAdvance(n) { + if (this.waiters[n] === undefined) { + this.waiters[n] = new Promise(resolve => { + this.wakers[n] = resolve; + }); + this.waiters[n] + .then(() => flushAsyncEvents()) + .then(() => { + if (this.wakers[n + 1] !== undefined) { + this.wakers[n + 1](); + } + }); + } + if (n == 0) { + this.wakers[0](); + } + return this.waiters[n]; + } +} + +promise_test(() => { + const steps = new StepTracker(); const desiredSizes = []; const rs = recordingReadableStream({ start(controller) { - delay(100).then(() => enqueue('a')); - delay(200).then(() => enqueue('b')); - delay(300).then(() => enqueue('c')); - delay(400).then(() => enqueue('d')); - delay(500).then(() => controller.close()); + steps.waitThenAdvance(1).then(() => enqueue('a')); + steps.waitThenAdvance(3).then(() => enqueue('b')); + steps.waitThenAdvance(5).then(() => enqueue('c')); + steps.waitThenAdvance(7).then(() => enqueue('d')); + steps.waitThenAdvance(11).then(() => controller.close()); function enqueue(chunk) { controller.enqueue(chunk); @@ -190,80 +218,86 @@ promise_test(() => { const chunksFinishedWriting = []; const writableStartPromise = Promise.resolve(); + let writeCalled = false; const ws = recordingWritableStream({ start() { return writableStartPromise; }, write(chunk) { - return delay(350).then(() => { + const waitForStep = writeCalled ? 12 : 9; + writeCalled = true; + return steps.waitThenAdvance(waitForStep).then(() => { chunksFinishedWriting.push(chunk); }); } }); return writableStartPromise.then(() => { + const pipePromise = rs.pipeTo(ws); + steps.waitThenAdvance(0); + return Promise.all([ - rs.pipeTo(ws).then(() => { - assert_array_equals(desiredSizes, [1, 0, -1, -2], 'backpressure must have been exerted at the source'); - assert_array_equals(chunksFinishedWriting, ['a', 'b', 'c', 'd'], 'all chunks started writing'); - - assert_array_equals(rs.eventsWithoutPulls, [], 'nothing unexpected should happen to the ReadableStream'); - assert_array_equals(ws.events, ['write', 'a', 'write', 'b', 'write', 'c', 'write', 'd', 'close'], - 'all chunks were written (and the WritableStream closed)'); - }), - - delay(125).then(() => { - assert_array_equals(chunksFinishedWriting, [], 'at t = 125 ms, zero chunks must have finished writing'); - assert_array_equals(ws.events, ['write', 'a'], 'at t = 125 ms, one chunk must have been written'); + steps.waitThenAdvance(2).then(() => { + assert_array_equals(chunksFinishedWriting, [], 'at step 2, zero chunks must have finished writing'); + assert_array_equals(ws.events, ['write', 'a'], 'at step 2, one chunk must have been written'); // When 'a' (the very first chunk) was enqueued, it was immediately used to fulfill the outstanding read request // promise, leaving the queue empty. assert_array_equals(desiredSizes, [1], - 'at t = 125 ms, the desiredSize at the last enqueue (100 ms) must have been 1'); - assert_equals(rs.controller.desiredSize, 1, 'at t = 125 ms, the current desiredSize must be 1'); + 'at step 2, the desiredSize at the last enqueue (step 1) must have been 1'); + assert_equals(rs.controller.desiredSize, 1, 'at step 2, the current desiredSize must be 1'); }), - delay(225).then(() => { - assert_array_equals(chunksFinishedWriting, [], 'at t = 225 ms, zero chunks must have finished writing'); - assert_array_equals(ws.events, ['write', 'a'], 'at t = 225 ms, one chunk must have been written'); + steps.waitThenAdvance(4).then(() => { + assert_array_equals(chunksFinishedWriting, [], 'at step 4, zero chunks must have finished writing'); + assert_array_equals(ws.events, ['write', 'a'], 'at step 4, one chunk must have been written'); - // When 'b' was enqueued at 200 ms, the queue was also empty, since immediately after enqueuing 'a' at - // t = 100 ms, it was dequeued in order to fulfill the read() call that was made at time t = 0. Thus the queue + // When 'b' was enqueued at step 3, the queue was also empty, since immediately after enqueuing 'a' at + // step 1, it was dequeued in order to fulfill the read() call that was made at step 0. Thus the queue // had size 1 (thus desiredSize of 0). assert_array_equals(desiredSizes, [1, 0], - 'at t = 225 ms, the desiredSize at the last enqueue (200 ms) must have been 0'); - assert_equals(rs.controller.desiredSize, 0, 'at t = 225 ms, the current desiredSize must be 0'); + 'at step 4, the desiredSize at the last enqueue (step 3) must have been 0'); + assert_equals(rs.controller.desiredSize, 0, 'at step 4, the current desiredSize must be 0'); }), - delay(325).then(() => { - assert_array_equals(chunksFinishedWriting, [], 'at t = 325 ms, zero chunks must have finished writing'); - assert_array_equals(ws.events, ['write', 'a'], 'at t = 325 ms, one chunk must have been written'); + steps.waitThenAdvance(6).then(() => { + assert_array_equals(chunksFinishedWriting, [], 'at step 6, zero chunks must have finished writing'); + assert_array_equals(ws.events, ['write', 'a'], 'at step 6, one chunk must have been written'); - // When 'c' was enqueued at 300 ms, the queue was not empty; it had 'b' in it, since 'b' will not be read until - // the first write completes at 450 ms. Thus, the queue size is 2 after enqueuing 'c', giving a desiredSize of + // When 'c' was enqueued at step 5, the queue was not empty; it had 'b' in it, since 'b' will not be read until + // the first write completes at step 9. Thus, the queue size is 2 after enqueuing 'c', giving a desiredSize of // -1. assert_array_equals(desiredSizes, [1, 0, -1], - 'at t = 325 ms, the desiredSize at the last enqueue (300 ms) must have been -1'); - assert_equals(rs.controller.desiredSize, -1, 'at t = 325 ms, the current desiredSize must be -1'); + 'at step 6, the desiredSize at the last enqueue (step 5) must have been -1'); + assert_equals(rs.controller.desiredSize, -1, 'at step 6, the current desiredSize must be -1'); }), - delay(425).then(() => { - assert_array_equals(chunksFinishedWriting, [], 'at t = 425 ms, zero chunks must have finished writing'); - assert_array_equals(ws.events, ['write', 'a'], 'at t = 425 ms, one chunk must have been written'); + steps.waitThenAdvance(8).then(() => { + assert_array_equals(chunksFinishedWriting, [], 'at step 8, zero chunks must have finished writing'); + assert_array_equals(ws.events, ['write', 'a'], 'at step 8, one chunk must have been written'); - // When 'd' was enqueued at 400 ms, the situation is the same as before, leading to a queue containing 'b', 'c', - // and 'd'. (Remember the first write will only finish at 100 ms + 350 ms = 450 ms.) + // When 'd' was enqueued at step 7, the situation is the same as before, leading to a queue containing 'b', 'c', + // and 'd'. assert_array_equals(desiredSizes, [1, 0, -1, -2], - 'at t = 425 ms, the desiredSize at the last enqueue (400 ms) must have been -2'); - assert_equals(rs.controller.desiredSize, -2, 'at t = 425 ms, the current desiredSize must be -2'); + 'at step 8, the desiredSize at the last enqueue (step 7) must have been -2'); + assert_equals(rs.controller.desiredSize, -2, 'at step 8, the current desiredSize must be -2'); }), - delay(475).then(() => { - assert_array_equals(chunksFinishedWriting, ['a'], 'at t = 475 ms, one chunk must have finished writing'); + steps.waitThenAdvance(10).then(() => { + assert_array_equals(chunksFinishedWriting, ['a'], 'at step 10, one chunk must have finished writing'); assert_array_equals(ws.events, ['write', 'a', 'write', 'b'], - 'at t = 475 ms, two chunks must have been written'); + 'at step 10, two chunks must have been written'); - assert_equals(rs.controller.desiredSize, -1, 'at t = 475 ms, the current desiredSize must be -1'); + assert_equals(rs.controller.desiredSize, -1, 'at step 10, the current desiredSize must be -1'); + }), + + pipePromise.then(() => { + assert_array_equals(desiredSizes, [1, 0, -1, -2], 'backpressure must have been exerted at the source'); + assert_array_equals(chunksFinishedWriting, ['a', 'b', 'c', 'd'], 'all chunks finished writing'); + + assert_array_equals(rs.eventsWithoutPulls, [], 'nothing unexpected should happen to the ReadableStream'); + assert_array_equals(ws.events, ['write', 'a', 'write', 'b', 'write', 'c', 'write', 'd', 'close'], + 'all chunks were written (and the WritableStream closed)'); }) ]); }); diff --git a/tests/wpt/web-platform-tests/streams/readable-byte-streams/general.js b/tests/wpt/web-platform-tests/streams/readable-byte-streams/general.js index 374c52ca2e8..23989113509 100644 --- a/tests/wpt/web-platform-tests/streams/readable-byte-streams/general.js +++ b/tests/wpt/web-platform-tests/streams/readable-byte-streams/general.js @@ -1897,6 +1897,28 @@ promise_test(t => { }, 'ReadableStream with byte source: Throwing in pull in response to read(view) must be ignored if the stream is ' + 'errored in it'); +promise_test(() => { + // Tests https://github.com/whatwg/streams/issues/686 + + let controller; + const rs = new ReadableStream({ + autoAllocateChunkSize: 128, + start(c) { + controller = c; + }, + type: "bytes" + }); + + const readPromise = rs.getReader().read(); + + const br = controller.byobRequest; + controller.close(); + + br.respond(0); + + return readPromise; +}, 'ReadableStream with byte source: default reader + autoAllocateChunkSize + byobRequest interaction'); + test(() => { const ReadableStreamBYOBReader = new ReadableStream({ type: 'bytes' }).getReader({ mode: 'byob' }).constructor; const stream = new ReadableStream({ type: 'bytes' }); diff --git a/tests/wpt/web-platform-tests/streams/readable-streams/floating-point-total-queue-size.js b/tests/wpt/web-platform-tests/streams/readable-streams/floating-point-total-queue-size.js index 3bb3b6a90d0..f7c76248b0b 100644 --- a/tests/wpt/web-platform-tests/streams/readable-streams/floating-point-total-queue-size.js +++ b/tests/wpt/web-platform-tests/streams/readable-streams/floating-point-total-queue-size.js @@ -117,3 +117,5 @@ function setupTestStream() { return { reader: rs.getReader(), controller }; } + +done(); diff --git a/tests/wpt/web-platform-tests/streams/writable-streams/floating-point-total-queue-size.js b/tests/wpt/web-platform-tests/streams/writable-streams/floating-point-total-queue-size.js index 44cf5fb22fd..932ac2715e7 100644 --- a/tests/wpt/web-platform-tests/streams/writable-streams/floating-point-total-queue-size.js +++ b/tests/wpt/web-platform-tests/streams/writable-streams/floating-point-total-queue-size.js @@ -88,3 +88,5 @@ function setupTestStream() { return ws.getWriter(); } + +done(); diff --git a/tests/wpt/web-platform-tests/svg/interfaces.html b/tests/wpt/web-platform-tests/svg/interfaces.html index 98346c4abf1..36132e2dcf1 100644 --- a/tests/wpt/web-platform-tests/svg/interfaces.html +++ b/tests/wpt/web-platform-tests/svg/interfaces.html @@ -984,14 +984,6 @@ interface SVGScriptElement : SVGElement { SVGScriptElement implements SVGURIReference; -interface SVGZoomEvent : UIEvent { - [SameObject] readonly attribute DOMRectReadOnly zoomRectScreen; - readonly attribute float previousScale; - [SameObject] readonly attribute DOMPointReadOnly previousTranslate; - readonly attribute float newScale; - [SameObject] readonly attribute DOMPointReadOnly newTranslate; -}; - interface SVGAElement : SVGGraphicsElement { [SameObject] readonly attribute SVGAnimatedString target; }; diff --git a/tests/wpt/web-platform-tests/tools/.gitmodules b/tests/wpt/web-platform-tests/tools/.gitmodules index 12cee69142f..021adfc6de4 100644 --- a/tests/wpt/web-platform-tests/tools/.gitmodules +++ b/tests/wpt/web-platform-tests/tools/.gitmodules @@ -1,7 +1,3 @@ -[submodule "tools/wptserve"] - path = wptserve - url = https://github.com/w3c/wptserve.git - ignore = dirty [submodule "tools/pywebsocket"] path = pywebsocket url = https://github.com/w3c/pywebsocket.git @@ -15,6 +11,3 @@ [submodule "pytest"] path = pytest url = https://github.com/pytest-dev/pytest.git -[submodule "webdriver"] - path = webdriver - url = https://github.com/w3c/wdclient.git diff --git a/tests/wpt/web-platform-tests/tools/.travis.yml b/tests/wpt/web-platform-tests/tools/.travis.yml deleted file mode 100644 index 37319bf0f5e..00000000000 --- a/tests/wpt/web-platform-tests/tools/.travis.yml +++ /dev/null @@ -1,37 +0,0 @@ -language: python - -sudo: false - -cache: - directories: - - $HOME/.cache/pip - -matrix: - include: - - python: 2.7 - env: TOXENV=py27 HYPOTHESIS_PROFILE=ci - - python: 3.5 - env: TOXENV=py35 HYPOTHESIS_PROFILE=ci - - python: 3.6 - env: TOXENV=py36 HYPOTHESIS_PROFILE=ci - - python: pypy - env: TOXENV=pypy HYPOTHESIS_PROFILE=ci_pypy - -# An ugly hack needed to make py.test believe our top level can be -# imported (on Travis CI, we end up in a wpt-tools directory, and of -# course you cannot import a name including a hyphen in Python, so it -# ignores the fact we have a __init__.py at the top level). -before_install: - - mv `pwd` /tmp/tools - - cd /tmp/tools - - export TRAVIS_BUILD_DIR=/tmp/tools - -install: - - pip install -U tox codecov - -script: - - tox - -after_success: - - coverage combine - - codecov diff --git a/tests/wpt/web-platform-tests/tools/OWNERS b/tests/wpt/web-platform-tests/tools/OWNERS new file mode 100644 index 00000000000..28149be7fca --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/OWNERS @@ -0,0 +1,2 @@ +@jgraham +@gsnedders diff --git a/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-command-element/.gitkeep b/tests/wpt/web-platform-tests/tools/browserutils/__init__.py similarity index 100% rename from tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-command-element/.gitkeep rename to tests/wpt/web-platform-tests/tools/browserutils/__init__.py diff --git a/tests/wpt/web-platform-tests/tools/browserutils/browser.py b/tests/wpt/web-platform-tests/tools/browserutils/browser.py new file mode 100644 index 00000000000..75f5421e6dd --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/browserutils/browser.py @@ -0,0 +1,325 @@ +import logging +import os +import platform +import re +import stat +from abc import ABCMeta, abstractmethod +from ConfigParser import RawConfigParser +from distutils.spawn import find_executable + +from utils import call, get, untar, unzip + +logger = logging.getLogger(__name__) + +uname = platform.uname() + +def path(path, exe): + path = path.replace("/", os.path.sep) + if exe and uname[0] == "Windows": + path += ".exe" + return path + + +class Browser(object): + __metaclass__ = ABCMeta + + @abstractmethod + def install(self): + return NotImplemented + + @abstractmethod + def install_webdriver(self): + return NotImplemented + + @abstractmethod + def version(self): + return NotImplemented + + @abstractmethod + def requirements(self): + """Name of the browser-specific wptrunner requirements file""" + return NotImplemented + + def prepare_environment(self): + """Do any additional setup of the environment required to start the + browser successfully + """ + pass + + +class Firefox(Browser): + """Firefox-specific interface. + + Includes installation, webdriver installation, and wptrunner setup methods. + """ + + product = "firefox" + binary = "firefox/firefox" + platform_ini = "firefox/platform.ini" + requirements = "requirements_firefox.txt" + + + def platform_string(self): + platform = { + "Linux": "linux", + "Windows": "win", + "Darwin": "mac" + }.get(uname[0]) + + if platform is None: + raise ValueError("Unable to construct a valid Firefox package name for current platform") + + if platform == "linux": + bits = "-%s" % uname[-1] + elif platform == "win": + bits = "64" if uname[-1] == "x86_64" else "32" + else: + bits = "" + + return "%s%s" % (platform, bits) + + def platform_string_geckodriver(self): + platform = { + "Linux": "linux", + "Windows": "win", + "Darwin": "macos" + }.get(uname[0]) + + if platform is None: + raise ValueError("Unable to construct a valid Geckodriver package name for current platform") + + if platform in ("linux", "win"): + bits = "64" if uname[-1] == "x86_64" else "32" + else: + bits = "" + + return "%s%s" % (platform, bits) + + def latest_nightly_listing(self): + return get("https://archive.mozilla.org/pub/firefox/nightly/latest-mozilla-central/") + + def get_from_nightly(self, pattern): + index = self.latest_nightly_listing() + filename = re.compile(pattern).search(index.text).group(1) + return get("https://archive.mozilla.org/pub/firefox/nightly/latest-mozilla-central/%s" % + filename) + + + def install(self, dest=None): + """Install Firefox.""" + if dest is None: + dest = os.getcwd() + + resp = self.get_from_nightly("]*>(firefox-\d+\.\d(?:\w\d)?.en-US.%s\.tar\.bz2)" % self.platform_string()) + untar(resp.raw, dest=dest) + return os.path.join(dest, "firefox") + + def find_binary(self): + return find_executable("firefox") + + def find_certutil(self): + path = find_executable("certutil") + if os.path.splitdrive(path)[1].split(os.path.sep) == ["", "Windows", "system32", "certutil.exe"]: + return None + return path + + def find_webdriver(self): + return find_executable("geckodriver") + + def install_certutil(self, dest=None): + # TODO: this doesn't really work because it just gets the binary, and is missing the + # libnss3 library. Getting that means either downloading the corresponding Firefox + # and extracting the library (which is hard on mac becase DMG), or maybe downloading from + # nss's treeherder builds? + if dest is None: + dest = os.pwd + + # Don't create a path like bin/bin/certutil + split = os.path.split(dest) + if split[1] == "bin": + dest = split[0] + + resp = self.get_from_nightly( + "]*>(firefox-\d+\.\d(?:\w\d)?.en-US.%s\.common\.tests.zip)" % self.platform_string()) + bin_path = path("bin/certutil", exe=True) + unzip(resp.raw, dest=dest, limit=[bin_path]) + + return os.path.join(dest, bin_path) + + def install_prefs(self, dest=None): + if dest is None: + dest = os.pwd + + dest = os.path.join(dest, "profiles") + if not os.path.exists(dest): + os.makedirs(dest) + with open(os.path.join(dest, "prefs_general.js"), "wb") as f: + resp = get("https://hg.mozilla.org/mozilla-central/raw-file/tip/testing/profiles/prefs_general.js") + f.write(resp.content) + + return dest + + def _latest_geckodriver_version(self): + """Get and return latest version number for geckodriver.""" + # This is used rather than an API call to avoid rate limits + tags = call("git", "ls-remote", "--tags", "--refs", + "https://github.com/mozilla/geckodriver.git") + release_re = re.compile(".*refs/tags/v(\d+)\.(\d+)\.(\d+)") + latest_release = 0 + for item in tags.split("\n"): + m = release_re.match(item) + if m: + version = [int(item) for item in m.groups()] + if version > latest_release: + latest_release = version + assert latest_release != 0 + return "v%s.%s.%s" % tuple(str(item) for item in latest_release) + + def install_webdriver(self, dest=None): + """Install latest Geckodriver.""" + if dest is None: + dest = os.getcwd() + + version = self._latest_geckodriver_version() + format = "zip" if uname[0] == "Windows" else "tar.gz" + logger.debug("Latest geckodriver release %s" % version) + url = ("https://github.com/mozilla/geckodriver/releases/download/%s/geckodriver-%s-%s.%s" % + (version, version, self.platform_string_geckodriver(), format)) + if format == "zip": + unzip(get(url).raw, dest=dest) + else: + untar(get(url).raw, dest=dest) + return find_executable(os.path.join(dest, "geckodriver")) + + def version(self, root): + """Retrieve the release version of the installed browser.""" + platform_info = RawConfigParser() + + with open(os.path.join(root, self.platform_ini), "r") as fp: + platform_info.readfp(BytesIO(fp.read())) + return "BuildID %s; SourceStamp %s" % ( + platform_info.get("Build", "BuildID"), + platform_info.get("Build", "SourceStamp")) + + +class Chrome(Browser): + """Chrome-specific interface. + + Includes installation, webdriver installation, and wptrunner setup methods. + """ + + product = "chrome" + binary = "/usr/bin/google-chrome" + requirements = "requirements_chrome.txt" + + def platform_string(self): + platform = { + "Linux": "linux", + "Windows": "win", + "Darwin": "mac" + }.get(uname[0]) + + if platform is None: + raise ValueError("Unable to construct a valid Chrome package name for current platform") + + if platform == "linux": + bits = "64" if uname[-1] == "x86_64" else "32" + elif platform == "mac": + bits = "64" + elif platform == "win": + bits = "32" + + return "%s%s" % (platform, bits) + + def install(self): + return None + + def find_webdriver(self): + return find_executable("chromedriver") + + def install_webdriver(self, dest=None): + """Install latest Webdriver.""" + if dest is None: + dest = os.pwd + latest = get("http://chromedriver.storage.googleapis.com/LATEST_RELEASE").text.strip() + url = "http://chromedriver.storage.googleapis.com/%s/chromedriver_%s.zip" % (latest, + self.platform_string()) + unzip(get(url).raw, dest) + path = find_executable(dest, "chromedriver") + st = os.stat(path) + os.chmod(path, st.st_mode | stat.S_IEXEC) + return path + + def version(self, root): + """Retrieve the release version of the installed browser.""" + output = call(self.binary, "--version") + return re.search(r"[0-9\.]+( [a-z]+)?$", output.strip()).group(0) + + def prepare_environment(self): + # https://bugs.chromium.org/p/chromium/issues/detail?id=713947 + logger.debug("DBUS_SESSION_BUS_ADDRESS %s" % os.environ.get("DBUS_SESSION_BUS_ADDRESS")) + if "DBUS_SESSION_BUS_ADDRESS" not in os.environ: + if find_executable("dbus-launch"): + logger.debug("Attempting to start dbus") + dbus_conf = subprocess.check_output(["dbus-launch"]) + logger.debug(dbus_conf) + + # From dbus-launch(1): + # + # > When dbus-launch prints bus information to standard output, + # > by default it is in a simple key-value pairs format. + for line in dbus_conf.strip().split("\n"): + key, _, value = line.partition("=") + os.environ[key] = value + else: + logger.critical("dbus not running and can't be started") + sys.exit(1) + + +class Edge(Browser): + """Edge-specific interface. + + Includes installation, webdriver installation, and wptrunner setup methods. + """ + + product = "edge" + requirements = "requirements_edge.txt" + + def install(self): + return None + + def find_webdriver(self): + return find_executable("MicrosoftWebDriver") + + def install_webdriver(self, dest=None): + """Install latest Webdriver.""" + raise NotImplementedError + + def version(self): + raise NotImplementedError + + +class Servo(Browser): + """Firefox-specific interface. + + Includes installation, webdriver installation, and wptrunner setup methods. + """ + + product = "servo" + requirements = "requirements_servo.txt" + + def install(self, platform, dest=None): + """Install Servo.""" + raise NotImplementedError + + def find_binary(self): + return find_executable("servo") + + def find_webdriver(self): + return None + + def install_webdriver(self): + raise NotImplementedError + + def version(self, root): + return None diff --git a/tests/wpt/web-platform-tests/tools/browserutils/install.py b/tests/wpt/web-platform-tests/tools/browserutils/install.py new file mode 100644 index 00000000000..ee4e6015e8f --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/browserutils/install.py @@ -0,0 +1,23 @@ +import argparse +import browser +import sys + +parser = argparse.ArgumentParser() +parser.add_argument('browser', choices=['firefox', 'chrome'], + help='name of web browser product') +parser.add_argument('component', choices=['browser', 'webdriver'], + help='name of component') +parser.add_argument('-d', '--destination', + help='filesystem directory to place the component') + +if __name__ == '__main__': + args = parser.parse_args() + + Subclass = getattr(browser, args.browser.title()) + if args.component == 'webdriver': + method = 'install_webdriver' + else: + method = 'install' + + sys.stdout.write('Now installing %s %s...\n' % (args.browser, args.component)) + getattr(Subclass(), method)(dest=args.destination) diff --git a/tests/wpt/web-platform-tests/tools/browserutils/requirements.txt b/tests/wpt/web-platform-tests/tools/browserutils/requirements.txt new file mode 100644 index 00000000000..7369cb8e02c --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/browserutils/requirements.txt @@ -0,0 +1 @@ +requests==2.14.2 diff --git a/tests/wpt/web-platform-tests/tools/browserutils/utils.py b/tests/wpt/web-platform-tests/tools/browserutils/utils.py new file mode 100644 index 00000000000..32e780f4e17 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/browserutils/utils.py @@ -0,0 +1,113 @@ +import logging +import os +import subprocess +import sys +import tarfile +import zipfile +from io import BytesIO + +logger = logging.getLogger(__name__) + + +class Kwargs(dict): + def set_if_none(self, name, value, err_fn=None, desc=None, extra_cond=None): + if desc is None: + desc = name + + if self[name] is None: + if extra_cond is not None and not extra_cond(self): + return + if callable(value): + value = value() + if not value: + if err_fn is not None: + return err_fn(kwargs, "Failed to find %s" % desc) + else: + return + self[name] = value + logger.info("Set %s to %s" % (desc, value)) + + +def call(*args): + """Log terminal command, invoke it as a subprocess. + + Returns a bytestring of the subprocess output if no error. + """ + logger.debug("%s" % " ".join(args)) + try: + return subprocess.check_output(args) + except subprocess.CalledProcessError as e: + logger.critical("%s exited with return code %i" % + (e.cmd, e.returncode)) + logger.critical(e.output) + raise + + +def get_git_cmd(repo_path): + """Create a function for invoking git commands as a subprocess.""" + def git(cmd, *args): + full_cmd = ["git", cmd] + list(args) + try: + logger.debug(" ".join(full_cmd)) + return subprocess.check_output(full_cmd, cwd=repo_path, stderr=subprocess.STDOUT).strip() + except subprocess.CalledProcessError as e: + logger.error("Git command exited with status %i" % e.returncode) + logger.error(e.output) + sys.exit(1) + return git + + +def seekable(fileobj): + """Attempt to use file.seek on given file, with fallbacks.""" + try: + fileobj.seek(fileobj.tell()) + except Exception: + return BytesIO(fileobj.read()) + else: + return fileobj + + +def untar(fileobj, dest="."): + """Extract tar archive.""" + logger.debug("untar") + fileobj = seekable(fileobj) + with tarfile.open(fileobj=fileobj) as tar_data: + tar_data.extractall(path=dest) + + +def unzip(fileobj, dest=None, limit=None): + """Extract zip archive.""" + logger.debug("unzip") + fileobj = seekable(fileobj) + with zipfile.ZipFile(fileobj) as zip_data: + for info in zip_data.infolist(): + if limit is not None and info.filename not in limit: + continue + zip_data.extract(info, path=dest) + perm = info.external_attr >> 16 & 0x1FF + os.chmod(os.path.join(dest, info.filename), perm) + + +class pwd(object): + """Create context for temporarily changing present working directory.""" + def __init__(self, dir): + self.dir = dir + self.old_dir = None + + def __enter__(self): + self.old_dir = os.path.abspath(os.curdir) + os.chdir(self.dir) + + def __exit__(self, *args, **kwargs): + os.chdir(self.old_dir) + self.old_dir = None + + +def get(url): + """Issue GET request to a given URL and return the response.""" + import requests + + logger.debug("GET %s" % url) + resp = requests.get(url, stream=True) + resp.raise_for_status() + return resp diff --git a/tests/wpt/web-platform-tests/tools/browserutils/virtualenv.py b/tests/wpt/web-platform-tests/tools/browserutils/virtualenv.py new file mode 100644 index 00000000000..bcae5c331fb --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/browserutils/virtualenv.py @@ -0,0 +1,52 @@ +import os +import sys +import logging +from distutils.spawn import find_executable + +from utils import call + +logger = logging.getLogger(__name__) + +class Virtualenv(object): + def __init__(self, path): + self.path = path + self.virtualenv = find_executable("virtualenv") + if not self.virtualenv: + raise ValueError("virtualenv must be installed and on the PATH") + + @property + def exists(self): + return os.path.isdir(self.path) + + def create(self): + if os.path.exists(self.path): + shutil.rmtree(self.path) + call(self.virtualenv, self.path) + + @property + def bin_path(self): + if sys.platform in ("win32", "cygwin"): + return os.path.join(self.path, "Scripts") + return os.path.join(self.path, "bin") + + @property + def pip_path(self): + path = find_executable("pip", self.bin_path) + if path is None: + raise ValueError("pip not found") + return path + + def activate(self): + path = os.path.join(self.bin_path, "activate_this.py") + execfile(path, {"__file__": path}) + + def start(self): + if not self.exists: + self.create() + self.activate() + + def install(self, *requirements): + call(self.pip_path, "install", *requirements) + + def install_requirements(self, requirements_path): + call(self.pip_path, "install", "-r", requirements_path) diff --git a/tests/wpt/web-platform-tests/tools/conftest.py b/tests/wpt/web-platform-tests/tools/conftest.py index 010786f1a18..894fe6223ea 100644 --- a/tests/wpt/web-platform-tests/tools/conftest.py +++ b/tests/wpt/web-platform-tests/tools/conftest.py @@ -5,9 +5,8 @@ from hypothesis import settings, HealthCheck impl = platform.python_implementation() -settings.register_profile("ci", settings(max_examples=1000)) -settings.register_profile("ci_pypy", settings(max_examples=1000, - suppress_health_check=[HealthCheck.too_slow])) +settings.register_profile("ci", settings(max_examples=1000, + suppress_health_check=[HealthCheck.too_slow])) settings.register_profile("pypy", settings(suppress_health_check=[HealthCheck.too_slow])) settings.load_profile(os.getenv("HYPOTHESIS_PROFILE", diff --git a/tests/wpt/web-platform-tests/tools/lint/lint.py b/tests/wpt/web-platform-tests/tools/lint/lint.py index 00fa6a9f011..c4c54939770 100644 --- a/tests/wpt/web-platform-tests/tools/lint/lint.py +++ b/tests/wpt/web-platform-tests/tools/lint/lint.py @@ -13,7 +13,7 @@ import sys from collections import defaultdict from . import fnmatch -from ..localpaths import repo_root +from .. import localpaths from ..gitignore.gitignore import PathFilter from manifest.sourcefile import SourceFile, js_meta_re, python_meta_re @@ -45,7 +45,7 @@ setup_logging() ERROR_MSG = """You must fix all errors; for details on how to fix them, see -https://github.com/w3c/web-platform-tests/blob/master/docs/lint-tool.md +http://web-platform-tests.org/writing-tests/lint-tool.html However, instead of fixing a particular error, it's sometimes OK to add a line to the lint.whitelist file in the root of the @@ -679,6 +679,8 @@ def parse_args(): help="Output markdown") parser.add_argument("--css-mode", action="store_true", help="Run CSS testsuite specific lints") + parser.add_argument("--repo-root", help="The WPT directory. Use this" + "option if the lint script exists outside the repository") return parser.parse_args() @@ -687,6 +689,7 @@ def main(**kwargs): logger.critical("Cannot specify --json and --markdown") sys.exit(2) + repo_root = kwargs.get('repo_root') or localpaths.repo_root output_format = {(True, False): "json", (False, True): "markdown", (False, False): "normal"}[(kwargs.get("json", False), diff --git a/tests/wpt/web-platform-tests/tools/localpaths.py b/tests/wpt/web-platform-tests/tools/localpaths.py index a4930015c05..c932ef4b92f 100644 --- a/tests/wpt/web-platform-tests/tools/localpaths.py +++ b/tests/wpt/web-platform-tests/tools/localpaths.py @@ -5,6 +5,7 @@ here = os.path.abspath(os.path.split(__file__)[0]) repo_root = os.path.abspath(os.path.join(here, os.pardir)) sys.path.insert(0, os.path.join(here)) +sys.path.insert(0, os.path.join(here, "browserutils")) sys.path.insert(0, os.path.join(here, "six")) sys.path.insert(0, os.path.join(here, "html5lib")) sys.path.insert(0, os.path.join(here, "wptserve")) @@ -12,3 +13,4 @@ sys.path.insert(0, os.path.join(here, "pywebsocket", "src")) sys.path.insert(0, os.path.join(here, "py")) sys.path.insert(0, os.path.join(here, "pytest")) sys.path.insert(0, os.path.join(here, "webdriver")) +sys.path.insert(0, os.path.join(here, "wptrunner")) diff --git a/tests/wpt/web-platform-tests/tools/pytest.ini b/tests/wpt/web-platform-tests/tools/pytest.ini index 1fb328e1f97..8cc3d6f2239 100644 --- a/tests/wpt/web-platform-tests/tools/pytest.ini +++ b/tests/wpt/web-platform-tests/tools/pytest.ini @@ -1,2 +1,2 @@ [pytest] -norecursedirs = .* {arch} *.egg html5lib py pytest pywebsocket six webdriver wptserve +norecursedirs = .* {arch} *.egg html5lib py pytest pywebsocket six wptrunner diff --git a/tests/wpt/web-platform-tests/tools/runner/index.html b/tests/wpt/web-platform-tests/tools/runner/index.html index 9cb648ed9b7..c46c963c0e7 100644 --- a/tests/wpt/web-platform-tests/tools/runner/index.html +++ b/tests/wpt/web-platform-tests/tools/runner/index.html @@ -135,7 +135,9 @@ 0%
        -
        +
        + +
        @@ -193,6 +195,7 @@ diff --git a/tests/wpt/web-platform-tests/tools/runner/runner.css b/tests/wpt/web-platform-tests/tools/runner/runner.css index 2ed7e1dd69e..85460177ea1 100644 --- a/tests/wpt/web-platform-tests/tools/runner/runner.css +++ b/tests/wpt/web-platform-tests/tools/runner/runner.css @@ -99,6 +99,19 @@ html.done section + section { background: rgba(255, 200, 0, 0.5); } +#current_test { + visibility: hidden; +} + +#current_test a { + display: inline-block; + margin-left: 1em; +} + +#current_test .match { + background-color: #BDF1FF; +} + #manualUI .panel { max-width: 800px; margin: auto; diff --git a/tests/wpt/web-platform-tests/tools/runner/runner.js b/tests/wpt/web-platform-tests/tools/runner/runner.js index 39b26341925..8969105641c 100644 --- a/tests/wpt/web-platform-tests/tools/runner/runner.js +++ b/tests/wpt/web-platform-tests/tools/runner/runner.js @@ -112,14 +112,48 @@ ManifestIterator.prototype = { } }, - matches: function(manifest_item) { - if (this.regex_pattern !== null) { - return manifest_item.url.match(this.regex_pattern); - } else { - return this.paths.some(function(p) { - return manifest_item.url.indexOf(p) === 0; - }); + // Calculate the location of a match within a provided URL. + // + // @param {string} url - Valid URL + // + // @returns {null|object} - null if the URL does not satisfy the iterator's + // filtering criteria. Otherwise, an object with + // the following properties: + // + // - index - the zero-indexed offset of the start + // of the match + // - width - the total number of matching + // characters + match_location: function(url) { + var match; + + if (this.regex_pattern) { + match = url.match(this.regex_pattern); + + if (!match) { + return null; + } + + return { index: match.index, width: match[0].length }; } + + this.paths.some(function(path) { + if (url.indexOf(path) === 0) { + match = path; + return true; + } + return false; + }); + + if (!match) { + return null; + } + + return { index: 0, width: match.length }; + }, + + matches: function(manifest_item) { + return this.match_location(manifest_item.url) !== null; }, to_test: function(manifest_item) { @@ -231,7 +265,8 @@ VisualOutput.prototype = { if (subtest_pass_count === subtests_count && (status == "OK" || status == "PASS")) { test_status = "PASS"; - } else if (subtest_notrun_count == subtests_count) { + } else if ((!subtests_count && status === "NOTRUN") || + (subtests_count && (subtest_notrun_count == subtests_count) ) ) { test_status = "NOTRUN"; } else if (subtests_count > 0 && status === "OK") { test_status = "FAIL"; @@ -292,7 +327,7 @@ VisualOutput.prototype = { this.meter.textContent = textContent; this.meter.classList.remove("progress-striped", "active", "stopped", "loading-manifest"); this.meter.classList.add(statusName); - this.runner.test_div.textContent = ""; + this.runner.display_current_test(null); }, on_done: function() { @@ -363,6 +398,7 @@ function ManualUI(elem, runner) { this.runner = runner; this.pass_button = this.elem.querySelector("button.pass"); this.fail_button = this.elem.querySelector("button.fail"); + this.skip_button = this.elem.querySelector("button.skip"); this.ref_buttons = this.elem.querySelector(".reftestUI"); this.ref_type = this.ref_buttons.querySelector(".refType"); this.ref_warning = this.elem.querySelector(".reftestWarn"); @@ -380,6 +416,11 @@ function ManualUI(elem, runner) { this.runner.on_result("PASS", "", []); }.bind(this); + this.skip_button.onclick = function() { + this.disable_buttons(); + this.runner.on_result("NOTRUN", "", []); + }.bind(this); + this.fail_button.onclick = function() { this.disable_buttons(); this.runner.on_result("FAIL", "", []); @@ -620,7 +661,8 @@ function Runner(manifest_path) { this.manifest_iterator = null; this.test_window = null; - this.test_div = document.getElementById('test_url'); + this.test_div = document.getElementById('current_test'); + this.test_url = this.test_div.getElementsByTagName('a')[0]; this.current_test = null; this.timeout = null; this.num_tests = null; @@ -757,7 +799,7 @@ Runner.prototype = { this.timeout = setTimeout(this.on_timeout.bind(this), this.test_timeout * window.testharness_properties.timeout_multiplier); } - this.test_div.textContent = this.current_test.url; + this.display_current_test(this.current_test.url); this.load(this.current_test.url); this.test_start_callbacks.forEach(function(callback) { @@ -765,6 +807,29 @@ Runner.prototype = { }.bind(this)); }, + display_current_test: function(url) { + var match_location, index, width; + + if (url === null) { + this.test_div.style.visibility = "hidden"; + this.test_url.removeAttribute("href"); + this.test_url.textContent = ""; + return; + } + + match_location = this.manifest_iterator.match_location(url); + index = match_location.index; + width = match_location.width; + + this.test_url.setAttribute("href", url); + this.test_url.innerHTML = url.substring(0, index) + + "" + + url.substring(index, index + width) + + "" + + url.substring(index + width); + this.test_div.style.visibility = "visible"; + }, + load: function(path) { this.ensure_test_window(); this.test_window.location.href = this.server + path; diff --git a/tests/wpt/web-platform-tests/tools/tox.ini b/tests/wpt/web-platform-tests/tools/tox.ini index 1a88108dc3d..1ea30a5da18 100644 --- a/tests/wpt/web-platform-tests/tools/tox.ini +++ b/tests/wpt/web-platform-tests/tools/tox.ini @@ -6,13 +6,13 @@ skipsdist=True deps = flake8 pytest - coverage + pytest-cov mock hypothesis pytest-catchlog commands = - coverage run -m pytest + pytest --cov flake8 passenv = @@ -21,4 +21,4 @@ passenv = [flake8] ignore = E128,E129,E221,E226,E231,E251,E265,E302,E303,E305,E402,E901,F401,F821,F841 max-line-length = 141 -exclude = .tox,html5lib,py,pytest,pywebsocket,six,webdriver,wptserve +exclude = .tox,html5lib,py,pytest,pywebsocket,six,_venv,webencodings,wptserve/docs,wptserve/tests/functional/docroot/,wptrunner diff --git a/tests/wpt/web-platform-tests/tools/webdriver/COPYING b/tests/wpt/web-platform-tests/tools/webdriver/COPYING deleted file mode 100644 index 14e2f777f6c..00000000000 --- a/tests/wpt/web-platform-tests/tools/webdriver/COPYING +++ /dev/null @@ -1,373 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -1. Definitions --------------- - -1.1. "Contributor" - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -1.2. "Contributor Version" - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -1.3. "Contribution" - means Covered Software of a particular Contributor. - -1.4. "Covered Software" - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -1.5. "Incompatible With Secondary Licenses" - means - - (a) that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or - - (b) that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -1.6. "Executable Form" - means any form of the work other than Source Code Form. - -1.7. "Larger Work" - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -1.8. "License" - means this document. - -1.9. "Licensable" - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -1.10. "Modifications" - means any of the following: - - (a) any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or - - (b) any new file in Source Code Form that contains any Covered - Software. - -1.11. "Patent Claims" of a Contributor - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -1.12. "Secondary License" - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -1.13. "Source Code Form" - means the form of the work preferred for making modifications. - -1.14. "You" (or "Your") - means an individual or a legal entity exercising rights under this - License. For legal entities, "You" includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, "control" means (a) the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or (b) ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - -2. License Grants and Conditions --------------------------------- - -2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -(a) under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and - -(b) under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -(a) for any code that a Contributor has removed from Covered Software; - or - -(b) for infringements caused by: (i) Your and any other third party's - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or - -(c) under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - -3. Responsibilities -------------------- - -3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -(a) such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -(b) You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - -4. Inability to Comply Due to Statute or Regulation ---------------------------------------------------- - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: (a) comply with -the terms of this License to the maximum extent possible; and (b) -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - -5. Termination --------------- - -5.1. The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated (a) provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and (b) on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -5.2. If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -5.3. In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - -************************************************************************ -* * -* 6. Disclaimer of Warranty * -* ------------------------- * -* * -* Covered Software is provided under this License on an "as is" * -* basis, without warranty of any kind, either expressed, implied, or * -* statutory, including, without limitation, warranties that the * -* Covered Software is free of defects, merchantable, fit for a * -* particular purpose or non-infringing. The entire risk as to the * -* quality and performance of the Covered Software is with You. * -* Should any Covered Software prove defective in any respect, You * -* (not any Contributor) assume the cost of any necessary servicing, * -* repair, or correction. This disclaimer of warranty constitutes an * -* essential part of this License. No use of any Covered Software is * -* authorized under this License except under this disclaimer. * -* * -************************************************************************ - -************************************************************************ -* * -* 7. Limitation of Liability * -* -------------------------- * -* * -* Under no circumstances and under no legal theory, whether tort * -* (including negligence), contract, or otherwise, shall any * -* Contributor, or anyone who distributes Covered Software as * -* permitted above, be liable to You for any direct, indirect, * -* special, incidental, or consequential damages of any character * -* including, without limitation, damages for lost profits, loss of * -* goodwill, work stoppage, computer failure or malfunction, or any * -* and all other commercial damages or losses, even if such party * -* shall have been informed of the possibility of such damages. This * -* limitation of liability shall not apply to liability for death or * -* personal injury resulting from such party's negligence to the * -* extent applicable law prohibits such limitation. Some * -* jurisdictions do not allow the exclusion or limitation of * -* incidental or consequential damages, so this exclusion and * -* limitation may not apply to You. * -* * -************************************************************************ - -8. Litigation -------------- - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - -9. Miscellaneous ----------------- - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - -10. Versions of the License ---------------------------- - -10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -10.4. Distributing Source Code Form that is Incompatible With Secondary -Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -Exhibit A - Source Code Form License Notice -------------------------------------------- - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -Exhibit B - "Incompatible With Secondary Licenses" Notice ---------------------------------------------------------- - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. diff --git a/tests/wpt/web-platform-tests/tools/webdriver/README.md b/tests/wpt/web-platform-tests/tools/webdriver/README.md index 194009f8a04..015b31b254c 100644 --- a/tests/wpt/web-platform-tests/tools/webdriver/README.md +++ b/tests/wpt/web-platform-tests/tools/webdriver/README.md @@ -33,9 +33,7 @@ which is useful if you want to contribute patches back: If you are writing WebDriver specification tests for [WPT](https://github.com/w3c/web-platform-tests), there is no need to install the client manually -as it is picked up as a submodule to -[wpt-tools](https://github.com/w3c/wpt-tools) -that is checked out in `./tools`. +as it is included in the `tools/webdriver` directory. ## Usage diff --git a/tests/wpt/web-platform-tests/tools/webdriver/setup.py b/tests/wpt/web-platform-tests/tools/webdriver/setup.py index 720fcf05cd2..c473961cb64 100644 --- a/tests/wpt/web-platform-tests/tools/webdriver/setup.py +++ b/tests/wpt/web-platform-tests/tools/webdriver/setup.py @@ -1,7 +1,3 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this file, -# You can obtain one at http://mozilla.org/MPL/2.0/. - from setuptools import setup, find_packages setup(name="webdriver", @@ -10,7 +6,7 @@ setup(name="webdriver", "the W3C browser automation specification.", author="Mozilla Engineering Productivity", author_email="tools@lists.mozilla.org", - license="MPL 2.0", + license="BSD", packages=find_packages(), classifiers=["Development Status :: 4 - Beta", "Intended Audience :: Developers", diff --git a/tests/wpt/web-platform-tests/tools/webdriver/webdriver/__init__.py b/tests/wpt/web-platform-tests/tools/webdriver/webdriver/__init__.py index c827f59f138..30243f7205d 100644 --- a/tests/wpt/web-platform-tests/tools/webdriver/webdriver/__init__.py +++ b/tests/wpt/web-platform-tests/tools/webdriver/webdriver/__init__.py @@ -1,7 +1,3 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this file, -# You can obtain one at http://mozilla.org/MPL/2.0/. - from client import Cookies, Element, Find, Session, Timeouts, Window from error import ( ElementNotSelectableException, diff --git a/tests/wpt/web-platform-tests/tools/webdriver/webdriver/client.py b/tests/wpt/web-platform-tests/tools/webdriver/webdriver/client.py index 3c3bf359be8..b90a58c9d73 100644 --- a/tests/wpt/web-platform-tests/tools/webdriver/webdriver/client.py +++ b/tests/wpt/web-platform-tests/tools/webdriver/webdriver/client.py @@ -1,7 +1,3 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - import urlparse import error @@ -20,7 +16,7 @@ def command(func): if session.session_id is None: session.start() - assert session.session_id != None + assert session.session_id is not None return func(self, *args, **kwargs) @@ -125,6 +121,10 @@ class ActionSequence(object): def _pointer_action(self, subtype, button): self._actions.append({"type": subtype, "button": button}) + def pause(self, duration): + self._actions.append({"type": "pause", "duration": duration}) + return self + def pointer_move(self, x, y, duration=None, origin=None): """Queue a pointerMove action. @@ -147,22 +147,38 @@ class ActionSequence(object): self._actions.append(action) return self - def pointer_up(self, button): + def pointer_up(self, button=0): """Queue a pointerUp action for `button`. :param button: Pointer button to perform action with. + Default: 0, which represents main device button. """ self._pointer_action("pointerUp", button) return self - def pointer_down(self, button): + def pointer_down(self, button=0): """Queue a pointerDown action for `button`. :param button: Pointer button to perform action with. + Default: 0, which represents main device button. """ self._pointer_action("pointerDown", button) return self + def click(self, element=None, button=0): + """Queue a click with the specified button. + + If an element is given, move the pointer to that element first, + otherwise click current pointer coordinates. + + :param element: Optional element to click. + :param button: Integer representing pointer button to perform action + with. Default: 0, which represents main device button. + """ + if element: + self.pointer_move(0, 0, origin=element) + return self.pointer_down(button).pointer_up(button) + def key_up(self, value): """Queue a keyUp action for `value`. @@ -216,6 +232,7 @@ class Actions(object): """ return ActionSequence(self.session, *args, **kwargs) + class Window(object): def __init__(self, session): self.session = session @@ -228,7 +245,8 @@ class Window(object): @size.setter @command - def size(self, (width, height)): + def size(self, data): + width, height = data body = {"width": width, "height": height} self.session.send_session_command("POST", "window/rect", body) @@ -240,7 +258,8 @@ class Window(object): @position.setter @command - def position(self, (x, y)): + def position(self, data): + data = x, y body = {"x": x, "y": y} self.session.send_session_command("POST", "window/rect", body) @@ -596,12 +615,8 @@ class Element(object): self.send_element_command("POST", self.url("clear"), {}) @command - def send_keys(self, keys): - if isinstance(keys, (str, unicode)): - keys = [char for char in keys] - - body = {"value": keys} - return self.send_element_command("POST", "value", body) + def send_keys(self, text): + return self.send_element_command("POST", "value", {"text": text}) @property @command diff --git a/tests/wpt/web-platform-tests/tools/webdriver/webdriver/error.py b/tests/wpt/web-platform-tests/tools/webdriver/webdriver/error.py index a6a703d674b..0530ff9c5da 100644 --- a/tests/wpt/web-platform-tests/tools/webdriver/webdriver/error.py +++ b/tests/wpt/web-platform-tests/tools/webdriver/webdriver/error.py @@ -1,8 +1,3 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this file, -# You can obtain one at http://mozilla.org/MPL/2.0/. - - import collections diff --git a/tests/wpt/web-platform-tests/tools/webdriver/webdriver/servo.py b/tests/wpt/web-platform-tests/tools/webdriver/webdriver/servo.py index fd1539f7bc7..2e0b722abab 100644 --- a/tests/wpt/web-platform-tests/tools/webdriver/webdriver/servo.py +++ b/tests/wpt/web-platform-tests/tools/webdriver/webdriver/servo.py @@ -1,7 +1,3 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this file, -# You can obtain one at http://mozilla.org/MPL/2.0/. - class ServoExtensionCommands(object): def __init__(self, session): self.session = session diff --git a/tests/wpt/web-platform-tests/tools/webdriver/webdriver/transport.py b/tests/wpt/web-platform-tests/tools/webdriver/webdriver/transport.py index 8ed51301603..a2412643e04 100644 --- a/tests/wpt/web-platform-tests/tools/webdriver/webdriver/transport.py +++ b/tests/wpt/web-platform-tests/tools/webdriver/webdriver/transport.py @@ -1,7 +1,3 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this file, -# You can obtain one at http://mozilla.org/MPL/2.0/. - import httplib import json import urlparse @@ -45,6 +41,7 @@ class Response(object): return cls(status, body) + class HTTPWireProtocol(object): """Transports messages (commands and responses) over the WebDriver wire protocol. diff --git a/tests/wpt/web-platform-tests/tools/wptrun.py b/tests/wpt/web-platform-tests/tools/wptrun.py new file mode 100644 index 00000000000..611fc4af0d6 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrun.py @@ -0,0 +1,308 @@ +import argparse +import os +import platform +import shutil +import subprocess +import sys +import tarfile +from distutils.spawn import find_executable + +import localpaths +from browserutils import browser, utils, virtualenv +logger = None + +wpt_root = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) + + +class WptrunnerHelpAction(argparse.Action): + def __init__(self, + option_strings, + dest=argparse.SUPPRESS, + default=argparse.SUPPRESS, + help=None): + super(WptrunnerHelpAction, self).__init__( + option_strings=option_strings, + dest=dest, + default=default, + nargs=0, + help=help) + + def __call__(self, parser, namespace, values, option_string=None): + from wptrunner import wptcommandline + wptparser = wptcommandline.create_parser() + wptparser.usage = parser.usage + wptparser.print_help() + parser.exit() + + +def create_parser(): + parser = argparse.ArgumentParser() + parser.add_argument("product", action="store", + help="Browser to run tests in") + parser.add_argument("tests", action="store", nargs="*", + help="Path to tests to run") + parser.add_argument("wptrunner_args", nargs=argparse.REMAINDER, + help="Arguments to pass through to wptrunner") + parser.add_argument("--yes", "-y", dest="prompt", action="store_false", default=True, + help="Don't prompt before installing components") + parser.add_argument("--wptrunner-help", + action=WptrunnerHelpAction, default=argparse.SUPPRESS, + help="Print wptrunner help") + return parser + + +def exit(msg): + logger.error(msg) + sys.exit(1) + + +def args_general(kwargs): + kwargs.set_if_none("tests_root", wpt_root) + kwargs.set_if_none("metadata_root", wpt_root) + kwargs.set_if_none("manifest_update", True) + + if kwargs["ssl_type"] == "openssl": + if not find_executable(kwargs["openssl_binary"]): + if os.uname()[0] == "Windows": + exit("""OpenSSL binary not found. If you need HTTPS tests, install OpenSSL from + +https://slproweb.com/products/Win32OpenSSL.html + +Ensuring that libraries are added to /bin and add the resulting bin directory to +your PATH. + +Otherwise run with --ssl-type=none""") + else: + exit("""OpenSSL not found. If you don't need HTTPS support run with --ssl-type=none, +otherwise install OpenSSL and ensure that it's on your $PATH.""") + + +def check_environ(product): + if product != "firefox": + expected_hosts = set(["web-platform.test", + "www.web-platform.test", + "www1.web-platform.test", + "www2.web-platform.test", + "xn--n8j6ds53lwwkrqhv28a.web-platform.test", + "xn--lve-6lad.web-platform.test", + "nonexistent-origin.web-platform.test"]) + if platform.uname()[0] != "Windows": + hosts_path = "/etc/hosts" + else: + hosts_path = "C:\Windows\System32\drivers\etc\hosts" + with open(hosts_path, "r") as f: + for line in f: + line = line.split("#", 1)[0].strip() + parts = line.split() + if len(parts) == 2: + host = parts[1] + expected_hosts.discard(host) + if expected_hosts: + exit("""Missing hosts file configuration for %s. +See README.md for more details.""" % ",".join(expected_hosts)) + +def prompt_install(component, prompt): + if not prompt: + return True + while True: + resp = raw_input("Download and install %s [Y/n]? " % component).strip().lower() + if not resp or resp == "y": + return True + elif resp == "n": + return False + + +def args_firefox(venv, kwargs, firefox, prompt=True): + if kwargs["binary"] is None: + binary = firefox.find_binary() + if binary is None: + exit("""Firefox binary not found on $PATH. + +Install Firefox or use --binary to set the binary path""") + kwargs["binary"] = binary + + if kwargs["certutil_binary"] is None and kwargs["ssl_type"] != "none": + certutil = firefox.find_certutil() + + if certutil is None: + # Can't download this for now because it's missing the libnss3 library + exit("""Can't find certutil. + +This must be installed using your OS package manager or directly e.g. + +Debian/Ubuntu: +sudo apt install libnss3-tools + +macOS/Homebrew: +brew install nss + +Others: +Download the firefox archive and common.tests.zip archive for your platform +from +https://archive.mozilla.org/pub/firefox/nightly/latest-mozilla-central/ +Then extract certutil[.exe] from the tests.zip package and +libnss3[.so|.dll|.dynlib] and but the former on your path and the latter on +your library path. +""") + else: + print("Using certutil %s" % certutil) + + if certutil is not None: + kwargs["certutil_binary"] = certutil + else: + print("Unable to find or install certutil, setting ssl-type to none") + kwargs["ssl_type"] = "none" + + if kwargs["webdriver_binary"] is None and "wdspec" in kwargs["test_types"]: + webdriver_binary = firefox.find_webdriver() + + if webdriver_binary is None: + install = prompt_install("geckodriver", prompt) + + if install: + print("Downloading geckodriver") + webdriver_binary = firefox.install_webdriver(dest=venv.bin_path) + else: + print("Using webdriver binary %s" % webdriver_binary) + + if webdriver_binary: + kwargs["webdriver_binary"] = webdriver_binary + else: + print("Unable to find or install geckodriver, skipping wdspec tests") + kwargs["test_types"].remove("wdspec") + + if kwargs["prefs_root"] is None: + print("Downloading gecko prefs") + prefs_root = firefox.install_prefs(venv.path) + kwargs["prefs_root"] = prefs_root + + +def setup_firefox(venv, kwargs, prompt=True): + firefox = browser.Firefox() + args_firefox(venv, kwargs, firefox, prompt) + venv.install_requirements(os.path.join(wpt_root, "tools", "wptrunner", firefox.requirements)) + + +def args_chrome(venv, kwargs, chrome, prompt=True): + if kwargs["webdriver_binary"] is None: + webdriver_binary = chrome.find_webdriver() + + if webdriver_binary is None: + install = prompt_install("chromedriver", prompt) + + if install: + print("Downloading chromedriver") + webdriver_binary = chrome.install_webdriver(dest=venv.bin_path) + else: + print("Using webdriver binary %s" % webdriver_binary) + + if webdriver_binary: + kwargs["webdriver_binary"] = webdriver_binary + else: + exit("Unable to locate or install chromedriver binary") + + +def setup_chrome(venv, kwargs, prompt=True): + chrome = browser.Chrome() + args_chrome(venv, kwargs, chrome, prompt) + venv.install_requirements(os.path.join(wpt_root, "tools", "wptrunner", chrome.requirements)) + + +def args_edge(venv, kwargs, edge, prompt=True): + if kwargs["webdriver_binary"] is None: + webdriver_binary = edge.find_webdriver() + + if webdriver_binary is None: + exit("""Unable to find WebDriver and we aren't yet clever enough to work out which +version to download. Please go to the following URL and install the correct +version for your Edge/Windows release somewhere on the %PATH%: + +https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/ + """) + kwargs["webdriver_binary"] = webdriver_binary + + +def setup_edge(venv, kwargs, prompt=True): + edge = browser.Edge() + args_edge(venv, kwargs, edge, prompt) + venv.install_requirements(os.path.join(wpt_root, "tools", "wptrunner", edge.requirements)) + + +def setup_sauce(kwargs): + raise NotImplementedError + + +def args_servo(venv, kwargs, servo, prompt=True): + if kwargs["binary"] is None: + binary = servo.find_binary() + + if binary is None: + exit("Unable to find servo binary on the PATH") + kwargs["binary"] = binary + + +def setup_servo(venv, kwargs, prompt=True): + servo = browser.Servo() + args_servo(venv, kwargs, servo, prompt) + venv.install_requirements(os.path.join(wpt_root, "tools", "wptrunner", servo.requirements)) + + +product_setup = { + "firefox": setup_firefox, + "chrome": setup_chrome, + "edge": setup_edge, + "servo": setup_servo +} + + +def setup_wptrunner(venv, product, tests, wptrunner_args, prompt=True,): + from wptrunner import wptrunner, wptcommandline + + global logger + + wptparser = wptcommandline.create_parser() + kwargs = utils.Kwargs(vars(wptparser.parse_args(wptrunner_args)).iteritems()) + + wptrunner.setup_logging(kwargs, {"mach": sys.stdout}) + logger = wptrunner.logger + + kwargs["product"] = product + kwargs["test_list"] = tests + + check_environ(product) + args_general(kwargs) + + if product not in product_setup: + exit("Unsupported product %s" % product) + + product_setup[product](venv, kwargs, prompt) + + wptcommandline.check_args(kwargs) + + wptrunner_path = os.path.join(wpt_root, "tools", "wptrunner") + + venv.install_requirements(os.path.join(wptrunner_path, "requirements.txt")) + + return kwargs + + +def main(): + parser = create_parser() + args = parser.parse_args() + + venv = virtualenv.Virtualenv(os.path.join(wpt_root, "_venv_%s") % platform.uname()[0]) + venv.start() + venv.install_requirements(os.path.join(wpt_root, "tools", "wptrunner", "requirements.txt")) + venv.install("requests") + + kwargs = setup_wptrunner(venv, args.product, args.tests, args.wptrunner_args, prompt=args.prompt) + from wptrunner import wptrunner + wptrunner.start(**kwargs) + + +if __name__ == "__main__": + import pdb + try: + main() + except: + pdb.post_mortem() diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/.gitignore b/tests/wpt/web-platform-tests/tools/wptrunner/.gitignore new file mode 100644 index 00000000000..495616ef1d1 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/.gitignore @@ -0,0 +1,8 @@ +*.py[co] +*~ +*# +\#* +_virtualenv +test/test.cfg +test/metadata/MANIFEST.json +wptrunner.egg-info diff --git a/tests/wpt/web-platform-tests/tools/LICENSE b/tests/wpt/web-platform-tests/tools/wptrunner/LICENSE similarity index 100% rename from tests/wpt/web-platform-tests/tools/LICENSE rename to tests/wpt/web-platform-tests/tools/wptrunner/LICENSE diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/MANIFEST.in b/tests/wpt/web-platform-tests/tools/wptrunner/MANIFEST.in new file mode 100644 index 00000000000..0c5e38bf265 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/MANIFEST.in @@ -0,0 +1,17 @@ +exclude MANIFEST.in +include requirements.txt +include wptrunner/browsers/b2g_setup/* +include wptrunner.default.ini +include wptrunner/testharness_runner.html +include wptrunner/testharnessreport.js +include wptrunner/testharnessreport-servo.js +include wptrunner/testharnessreport-servodriver.js +include wptrunner/executors/testharness_marionette.js +include wptrunner/executors/testharness_servodriver.js +include wptrunner/executors/testharness_webdriver.js +include wptrunner/executors/reftest.js +include wptrunner/executors/reftest-wait.js +include wptrunner/executors/reftest-wait_servodriver.js +include wptrunner/executors/reftest-wait_webdriver.js +include wptrunner/config.json +include wptrunner/browsers/server-locations.txt \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/OWNERS b/tests/wpt/web-platform-tests/tools/wptrunner/OWNERS new file mode 100644 index 00000000000..4bf48ad76e5 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/OWNERS @@ -0,0 +1 @@ +@bobholt diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/README.rst b/tests/wpt/web-platform-tests/tools/wptrunner/README.rst new file mode 100644 index 00000000000..fc650eec45a --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/README.rst @@ -0,0 +1,242 @@ +wptrunner: A web-platform-tests harness +======================================= + +wptrunner is a harness for running the W3C `web-platform-tests testsuite`_. + +.. contents:: + +Installation +~~~~~~~~~~~~ + +wptrunner is expected to be installed into a virtualenv using pip. For +development, it can be installed using the `-e` option:: + + pip install -e ./ + +Running the Tests +~~~~~~~~~~~~~~~~~ + +After installation, the command ``wptrunner`` should be available to run +the tests. + +The ``wptrunner`` command takes multiple options, of which the +following are most significant: + +``--product`` (defaults to `firefox`) + The product to test against: `b2g`, `chrome`, `firefox`, or `servo`. + +``--binary`` (required if product is `firefox` or `servo`) + The path to a binary file for the product (browser) to test against. + +``--webdriver-binary`` (required if product is `chrome`) + The path to a `driver` binary; e.g., a `chromedriver` binary. + +``--certutil-binary`` (required if product is `firefox` [#]_) + The path to a `certutil` binary (for tests that must be run over https). + +``--metadata`` (required) + The path to a directory containing test metadata. [#]_ + +``--tests`` (required) + The path to a directory containing a web-platform-tests checkout. + +``--prefs-root`` (required only when testing a Firefox binary) + The path to a directory containing Firefox test-harness preferences. [#]_ + +``--config`` (should default to `wptrunner.default.ini`) + The path to the config (ini) file. + +.. [#] The ``--certutil-binary`` option is required when the product is + ``firefox`` unless ``--ssl-type=none`` is specified. + +.. [#] The ``--metadata`` path is to a directory that contains: + + * a ``MANIFEST.json`` file (instructions on generating this file are + available in the `detailed documentation + `_); + and + * (optionally) any expectation files (see below) + +.. [#] Example ``--prefs-root`` value: ``~/mozilla-central/testing/profiles``. + +There are also a variety of other options available; use ``--help`` to +list them. + +------------------------------- +Example: How to start wptrunner +------------------------------- + +To test a Firefox Nightly build in an OS X environment, you might start +wptrunner using something similar to the following example:: + + wptrunner --metadata=~/web-platform-tests/ --tests=~/web-platform-tests/ \ + --binary=~/mozilla-central/obj-x86_64-apple-darwin14.3.0/dist/Nightly.app/Contents/MacOS/firefox \ + --certutil-binary=~/mozilla-central/obj-x86_64-apple-darwin14.3.0/security/nss/cmd/certutil/certutil \ + --prefs-root=~/mozilla-central/testing/profiles + +And to test a Chromium build in an OS X environment, you might start +wptrunner using something similar to the following example:: + + wptrunner --metadata=~/web-platform-tests/ --tests=~/web-platform-tests/ \ + --binary=~/chromium/src/out/Release/Chromium.app/Contents/MacOS/Chromium \ + --webdriver-binary=/usr/local/bin/chromedriver --product=chrome + +------------------------------------- +Example: How to run a subset of tests +------------------------------------- + +To restrict a test run just to tests in a particular web-platform-tests +subdirectory, specify the directory name in the positional arguments after +the options; for example, run just the tests in the `dom` subdirectory:: + + wptrunner --metadata=~/web-platform-tests/ --tests=~/web-platform-tests/ \ + --binary=/path/to/firefox --certutil-binary=/path/to/certutil \ + --prefs-root=/path/to/testing/profiles \ + dom + +Output +~~~~~~ + +By default wptrunner just dumps its entire output as raw JSON messages +to stdout. This is convenient for piping into other tools, but not ideal +for humans reading the output. + +As an alternative, you can use the ``--log-mach`` option, which provides +output in a reasonable format for humans. The option requires a value: +either the path for a file to write the `mach`-formatted output to, or +"`-`" (a hyphen) to write the `mach`-formatted output to stdout. + +When using ``--log-mach``, output of the full raw JSON log is still +available, from the ``--log-raw`` option. So to output the full raw JSON +log to a file and a human-readable summary to stdout, you might start +wptrunner using something similar to the following example:: + + wptrunner --metadata=~/web-platform-tests/ --tests=~/web-platform-tests/ \ + --binary=/path/to/firefox --certutil-binary=/path/to/certutil \ + --prefs-root=/path/to/testing/profiles \ + --log-raw=output.log --log-mach=- + +Expectation Data +~~~~~~~~~~~~~~~~ + +wptrunner is designed to be used in an environment where it is not +just necessary to know which tests passed, but to compare the results +between runs. For this reason it is possible to store the results of a +previous run in a set of ini-like "expectation files". This format is +documented below. To generate the expectation files use `wptrunner` with +the `--log-raw=/path/to/log/file` option. This can then be used as +input to the `wptupdate` tool. + +Expectation File Format +~~~~~~~~~~~~~~~~~~~~~~~ + +Metadata about tests, notably including their expected results, is +stored in a modified ini-like format that is designed to be human +editable, but also to be machine updatable. + +Each test file that requires metadata to be specified (because it has +a non-default expectation or because it is disabled, for example) has +a corresponding expectation file in the `metadata` directory. For +example a test file `html/test1.html` containing a failing test would +have an expectation file called `html/test1.html.ini` in the +`metadata` directory. + +An example of an expectation file is:: + + example_default_key: example_value + + [filename.html] + type: testharness + + [subtest1] + expected: FAIL + + [subtest2] + expected: + if platform == 'win': TIMEOUT + if platform == 'osx': ERROR + FAIL + + [filename.html?query=something] + type: testharness + disabled: bug12345 + +The file consists of two elements, key-value pairs and +sections. + +Sections are delimited by headings enclosed in square brackets. Any +closing square bracket in the heading itself my be escaped with a +backslash. Each section may then contain any number of key-value pairs +followed by any number of subsections. So that it is clear which data +belongs to each section without the use of end-section markers, the +data for each section (i.e. the key-value pairs and subsections) must +be indented using spaces. Indentation need only be consistent, but +using two spaces per level is recommended. + +In a test expectation file, each resource provided by the file has a +single section, with the section heading being the part after the last +`/` in the test url. Tests that have subsections may have subsections +for those subtests in which the heading is the name of the subtest. + +Simple key-value pairs are of the form:: + + key: value + +Note that unlike ini files, only `:` is a valid seperator; `=` will +not work as expected. Key-value pairs may also have conditional +values of the form:: + + key: + if condition1: value1 + if condition2: value2 + default + +In this case each conditional is evaluated in turn and the value is +that on the right hand side of the first matching conditional. In the +case that no condition matches, the unconditional default is used. If +no condition matches and no default is provided it is equivalent to +the key not being present. Conditionals use a simple python-like expression +language e.g.:: + + if debug and (platform == "linux" or platform == "osx"): FAIL + +For test expectations the avaliable variables are those in the +`run_info` which for desktop are `version`, `os`, `bits`, `processor`, +`debug` and `product`. + +Key-value pairs specified at the top level of the file before any +sections are special as they provide defaults for the rest of the file +e.g.:: + + key1: value1 + + [section 1] + key2: value2 + + [section 2] + key1: value3 + +In this case, inside section 1, `key1` would have the value `value1` +and `key2` the value `value2` whereas in section 2 `key1` would have +the value `value3` and `key2` would be undefined. + +The web-platform-test harness knows about several keys: + +`expected` + Must evaluate to a possible test status indicating the expected + result of the test. The implicit default is PASS or OK when the + field isn't present. + +`disabled` + Any value indicates that the test is disabled. + +`type` + The test type e.g. `testharness`, `reftest`, or `wdspec`. + +`reftype` + The type of comparison for reftests; either `==` or `!=`. + +`refurl` + The reference url for reftests. + +.. _`web-platform-tests testsuite`: https://github.com/w3c/web-platform-tests diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/docs/Makefile b/tests/wpt/web-platform-tests/tools/wptrunner/docs/Makefile new file mode 100644 index 00000000000..d02b6c5e7c4 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/docs/Makefile @@ -0,0 +1,177 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +PAPER = +BUILDDIR = _build + +# User-friendly check for sphinx-build +ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) +$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) +endif + +# Internal variables. +PAPEROPT_a4 = -D latex_paper_size=a4 +PAPEROPT_letter = -D latex_paper_size=letter +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . +# the i18n builder cannot share the environment and doctrees with the others +I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . + +.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext + +help: + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " dirhtml to make HTML files named index.html in directories" + @echo " singlehtml to make a single large HTML file" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " qthelp to make HTML files and a qthelp project" + @echo " devhelp to make HTML files and a Devhelp project" + @echo " epub to make an epub" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " latexpdf to make LaTeX files and run them through pdflatex" + @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" + @echo " text to make text files" + @echo " man to make manual pages" + @echo " texinfo to make Texinfo files" + @echo " info to make Texinfo files and run them through makeinfo" + @echo " gettext to make PO message catalogs" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " xml to make Docutils-native XML files" + @echo " pseudoxml to make pseudoxml-XML files for display purposes" + @echo " linkcheck to check all external links for integrity" + @echo " doctest to run all doctests embedded in the documentation (if enabled)" + +clean: + rm -rf $(BUILDDIR)/* + +html: + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + +dirhtml: + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." + +singlehtml: + $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml + @echo + @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." + +pickle: + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle + @echo + @echo "Build finished; now you can process the pickle files." + +json: + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json + @echo + @echo "Build finished; now you can process the JSON files." + +htmlhelp: + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in $(BUILDDIR)/htmlhelp." + +qthelp: + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp + @echo + @echo "Build finished; now you can run "qcollectiongenerator" with the" \ + ".qhcp project file in $(BUILDDIR)/qthelp, like this:" + @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/wptrunner.qhcp" + @echo "To view the help file:" + @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/wptrunner.qhc" + +devhelp: + $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp + @echo + @echo "Build finished." + @echo "To view the help file:" + @echo "# mkdir -p $$HOME/.local/share/devhelp/wptrunner" + @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/wptrunner" + @echo "# devhelp" + +epub: + $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub + @echo + @echo "Build finished. The epub file is in $(BUILDDIR)/epub." + +latex: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo + @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." + @echo "Run \`make' in that directory to run these through (pdf)latex" \ + "(use \`make latexpdf' here to do that automatically)." + +latexpdf: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through pdflatex..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +latexpdfja: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through platex and dvipdfmx..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +text: + $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text + @echo + @echo "Build finished. The text files are in $(BUILDDIR)/text." + +man: + $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man + @echo + @echo "Build finished. The manual pages are in $(BUILDDIR)/man." + +texinfo: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo + @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." + @echo "Run \`make' in that directory to run these through makeinfo" \ + "(use \`make info' here to do that automatically)." + +info: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo "Running Texinfo files through makeinfo..." + make -C $(BUILDDIR)/texinfo info + @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." + +gettext: + $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale + @echo + @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." + +changes: + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes + @echo + @echo "The overview file is in $(BUILDDIR)/changes." + +linkcheck: + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in $(BUILDDIR)/linkcheck/output.txt." + +doctest: + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest + @echo "Testing of doctests in the sources finished, look at the " \ + "results in $(BUILDDIR)/doctest/output.txt." + +xml: + $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml + @echo + @echo "Build finished. The XML files are in $(BUILDDIR)/xml." + +pseudoxml: + $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml + @echo + @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/docs/architecture.svg b/tests/wpt/web-platform-tests/tools/wptrunner/docs/architecture.svg new file mode 100644 index 00000000000..b8d5aa21c19 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/docs/architecture.svg @@ -0,0 +1 @@ +
        TestRunner
        [Not supported by viewer]
        Product under test
        [Not supported by viewer]
        TestRunnerManager
        [Not supported by viewer]
        ManagerGroup
        [Not supported by viewer]
        Executor
        [Not supported by viewer]
        Browser
        [Not supported by viewer]
        ExecutorBrowser
        [Not supported by viewer]
        run_tests
        [Not supported by viewer]
        TestLoader
        [Not supported by viewer]
        TestEnvironment
        [Not supported by viewer]
        wptserve
        [Not supported by viewer]
        pywebsocket
        [Not supported by viewer]
        Queue.get
        serve.py
        [Not supported by viewer]
        Communication (cross process)Ownership (same process)Ownership (cross process)wptrunner classPer-product wptrunner classPer-protocol wptrunner classWeb-platform-tests componentBrowser process
        TestRunnerManager
        [Not supported by viewer]
        TestRunnerManager
        [Not supported by viewer]
        Browser controlprotocol(e.g. WebDriver)HTTPwebsockets
        Tests Queue
        [Not supported by viewer]
        diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/docs/conf.py b/tests/wpt/web-platform-tests/tools/wptrunner/docs/conf.py new file mode 100644 index 00000000000..39e5cc4f0d2 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/docs/conf.py @@ -0,0 +1,267 @@ +# -*- coding: utf-8 -*- +# +# wptrunner documentation build configuration file, created by +# sphinx-quickstart on Mon May 19 18:14:20 2014. +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +import sys +import os + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +#sys.path.insert(0, os.path.abspath('.')) + +# -- General configuration ------------------------------------------------ + +# If your documentation needs a minimal Sphinx version, state it here. +#needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + 'sphinx.ext.autodoc', + 'sphinx.ext.intersphinx', + 'sphinx.ext.viewcode', +] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix of source filenames. +source_suffix = '.rst' + +# The encoding of source files. +#source_encoding = 'utf-8-sig' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = u'wptrunner' +copyright = u'' + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = '0.3' +# The full version, including alpha/beta/rc tags. +release = '0.3' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +#language = None + +# There are two options for replacing |today|: either, you set today to some +# non-false value, then it is used: +#today = '' +# Else, today_fmt is used as the format for a strftime call. +#today_fmt = '%B %d, %Y' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +exclude_patterns = ['_build'] + +# The reST default role (used for this markup: `text`) to use for all +# documents. +#default_role = None + +# If true, '()' will be appended to :func: etc. cross-reference text. +#add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +#add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +#show_authors = False + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# A list of ignored prefixes for module index sorting. +#modindex_common_prefix = [] + +# If true, keep warnings as "system message" paragraphs in the built documents. +#keep_warnings = False + + +# -- Options for HTML output ---------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +html_theme = 'default' + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +#html_theme_options = {} + +# Add any paths that contain custom themes here, relative to this directory. +#html_theme_path = [] + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +#html_title = None + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = None + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +#html_logo = None + +# The name of an image file (within the static path) to use as favicon of the +# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 +# pixels large. +#html_favicon = None + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# Add any extra paths that contain custom files (such as robots.txt or +# .htaccess) here, relative to this directory. These files are copied +# directly to the root of the documentation. +#html_extra_path = [] + +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, +# using the given strftime format. +#html_last_updated_fmt = '%b %d, %Y' + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +#html_use_smartypants = True + +# Custom sidebar templates, maps document names to template names. +#html_sidebars = {} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +#html_additional_pages = {} + +# If false, no module index is generated. +#html_domain_indices = True + +# If false, no index is generated. +#html_use_index = True + +# If true, the index is split into individual pages for each letter. +#html_split_index = False + +# If true, links to the reST sources are added to the pages. +#html_show_sourcelink = True + +# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. +#html_show_sphinx = True + +# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. +#html_show_copyright = True + +# If true, an OpenSearch description file will be output, and all pages will +# contain a tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +#html_use_opensearch = '' + +# This is the file name suffix for HTML files (e.g. ".xhtml"). +#html_file_suffix = None + +# Output file base name for HTML help builder. +htmlhelp_basename = 'wptrunnerdoc' + + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { +# The paper size ('letterpaper' or 'a4paper'). +#'papersize': 'letterpaper', + +# The font size ('10pt', '11pt' or '12pt'). +#'pointsize': '10pt', + +# Additional stuff for the LaTeX preamble. +#'preamble': '', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + ('index', 'wptrunner.tex', u'wptrunner Documentation', + u'James Graham', 'manual'), +] + +# The name of an image file (relative to this directory) to place at the top of +# the title page. +#latex_logo = None + +# For "manual" documents, if this is true, then toplevel headings are parts, +# not chapters. +#latex_use_parts = False + +# If true, show page references after internal links. +#latex_show_pagerefs = False + +# If true, show URL addresses after external links. +#latex_show_urls = False + +# Documents to append as an appendix to all manuals. +#latex_appendices = [] + +# If false, no module index is generated. +#latex_domain_indices = True + + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + ('index', 'wptrunner', u'wptrunner Documentation', + [u'James Graham'], 1) +] + +# If true, show URL addresses after external links. +#man_show_urls = False + + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + ('index', 'wptrunner', u'wptrunner Documentation', + u'James Graham', 'wptrunner', 'One line description of project.', + 'Miscellaneous'), +] + +# Documents to append as an appendix to all manuals. +#texinfo_appendices = [] + +# If false, no module index is generated. +#texinfo_domain_indices = True + +# How to display URL addresses: 'footnote', 'no', or 'inline'. +#texinfo_show_urls = 'footnote' + +# If true, do not generate a @detailmenu in the "Top" node's menu. +#texinfo_no_detailmenu = False + + +# Example configuration for intersphinx: refer to the Python standard library. +intersphinx_mapping = {'python': ('http://docs.python.org/', None), + 'mozlog': ('http://mozbase.readthedocs.org/en/latest/', None)} diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/docs/design.rst b/tests/wpt/web-platform-tests/tools/wptrunner/docs/design.rst new file mode 100644 index 00000000000..bf108a0087d --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/docs/design.rst @@ -0,0 +1,106 @@ +wptrunner Design +================ + +The design of wptrunner is intended to meet the following +requirements: + + * Possible to run tests from W3C web-platform-tests. + + * Tests should be run as fast as possible. In particular it should + not be necessary to restart the browser between tests, or similar. + + * As far as possible, the tests should run in a "normal" browser and + browsing context. In particular many tests assume that they are + running in a top-level browsing context, so we must avoid the use + of an ``iframe`` test container. + + * It must be possible to deal with all kinds of behaviour of the + browser runder test, for example, crashing, hanging, etc. + + * It should be possible to add support for new platforms and browsers + with minimal code changes. + + * It must be possible to run tests in parallel to further improve + performance. + + * Test output must be in a machine readable form. + +Architecture +------------ + +In order to meet the above requirements, wptrunner is designed to +push as much of the test scheduling as possible into the harness. This +allows the harness to monitor the state of the browser and perform +appropriate action if it gets into an unwanted state e.g. kill the +browser if it appears to be hung. + +The harness will typically communicate with the browser via some remote +control protocol such as WebDriver. However for browsers where no such +protocol is supported, other implementation strategies are possible, +typically at the expense of speed. + +The overall architecture of wptrunner is shown in the diagram below: + +.. image:: architecture.svg + +The main entry point to the code is :py:func:`run_tests` in +``wptrunner.py``. This is responsible for setting up the test +environment, loading the list of tests to be executed, and invoking +the remainder of the code to actually execute some tests. + +The test environment is encapsulated in the +:py:class:`TestEnvironment` class. This defers to code in +``web-platform-tests`` which actually starts the required servers to +run the tests. + +The set of tests to run is defined by the +:py:class:`TestLoader`. This is constructed with a +:py:class:`TestFilter` (not shown), which takes any filter arguments +from the command line to restrict the set of tests that will be +run. The :py:class:`TestLoader` reads both the ``web-platform-tests`` +JSON manifest and the expectation data stored in ini files and +produces a :py:class:`multiprocessing.Queue` of tests to run, and +their expected results. + +Actually running the tests happens through the +:py:class:`ManagerGroup` object. This takes the :py:class:`Queue` of +tests to be run and starts a :py:class:`testrunner.TestRunnerManager` for each +instance of the browser under test that will be started. These +:py:class:`TestRunnerManager` instances are each started in their own +thread. + +A :py:class:`TestRunnerManager` coordinates starting the product under +test, and outputting results from the test. In the case that the test +has timed out or the browser has crashed, it has to restart the +browser to ensure the test run can continue. The functionality for +initialising the browser under test, and probing its state +(e.g. whether the process is still alive) is implemented through a +:py:class:`Browser` object. An implementation of this class must be +provided for each product that is supported. + +The functionality for actually running the tests is provided by a +:py:class:`TestRunner` object. :py:class:`TestRunner` instances are +run in their own child process created with the +:py:mod:`multiprocessing` module. This allows them to run concurrently +and to be killed and restarted as required. Communication between the +:py:class:`TestRunnerManager` and the :py:class:`TestRunner` is +provided by a pair of queues, one for sending messages in each +direction. In particular test results are sent from the +:py:class:`TestRunner` to the :py:class:`TestRunnerManager` using one +of these queues. + +The :py:class:`TestRunner` object is generic in that the same +:py:class:`TestRunner` is used regardless of the product under +test. However the details of how to run the test may vary greatly with +the product since different products support different remote control +protocols (or none at all). These protocol-specific parts are placed +in the :py:class:`Executor` object. There is typically a different +:py:class:`Executor` class for each combination of control protocol +and test type. The :py:class:`TestRunner` is responsible for pulling +each test off the :py:class:`Queue` of tests and passing it down to +the :py:class:`Executor`. + +The executor often requires access to details of the particular +browser instance that it is testing so that it knows e.g. which port +to connect to to send commands to the browser. These details are +encapsulated in the :py:class:`ExecutorBrowser` class. diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/docs/expectation.rst b/tests/wpt/web-platform-tests/tools/wptrunner/docs/expectation.rst new file mode 100644 index 00000000000..6a0c77684a3 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/docs/expectation.rst @@ -0,0 +1,248 @@ +Expectation Data +================ + +Introduction +------------ + +For use in continuous integration systems, and other scenarios where +regression tracking is required, wptrunner supports storing and +loading the expected result of each test in a test run. Typically +these expected results will initially be generated by running the +testsuite in a baseline build. They may then be edited by humans as +new features are added to the product that change the expected +results. The expected results may also vary for a single product +depending on the platform on which it is run. Therefore, the raw +structured log data is not a suitable format for storing these +files. Instead something is required that is: + + * Human readable + + * Human editable + + * Machine readable / writable + + * Capable of storing test id / result pairs + + * Suitable for storing in a version control system (i.e. text-based) + +The need for different results per platform means either having +multiple expectation files for each platform, or having a way to +express conditional values within a certain file. The former would be +rather cumbersome for humans updating the expectation files, so the +latter approach has been adopted, leading to the requirement: + + * Capable of storing result values that are conditional on the platform. + +There are few extant formats that meet these requirements, so +wptrunner uses a bespoke ``expectation manifest`` format, which is +closely based on the standard ``ini`` format. + +Directory Layout +---------------- + +Expectation manifest files must be stored under the ``metadata`` +directory passed to the test runner. The directory layout follows that +of web-platform-tests with each test path having a corresponding +manifest file. Tests that differ only by query string, or reftests +with the same test path but different ref paths share the same +reference file. The file name is taken from the last /-separated part +of the path, suffixed with ``.ini``. + +As an optimisation, files which produce only default results +(i.e. ``PASS`` or ``OK``) don't require a corresponding manifest file. + +For example a test with url:: + + /spec/section/file.html?query=param + +would have an expectation file :: + + metadata/spec/section/file.html.ini + + +.. _wptupdate-label: + +Generating Expectation Files +---------------------------- + +wptrunner provides the tool ``wptupdate`` to generate expectation +files from the results of a set of baseline test runs. The basic +syntax for this is:: + + wptupdate [options] [logfile]... + +Each ``logfile`` is a structured log file from a previous run. These +can be generated from wptrunner using the ``--log-raw`` option +e.g. ``--log-raw=structured.log``. The default behaviour is to update +all the test data for the particular combination of hardware and OS +used in the run corresponding to the log data, whilst leaving any +other expectations untouched. + +wptupdate takes several useful options: + +``--sync`` + Pull the latest version of web-platform-tests from the + upstream specified in the config file. If this is specified in + combination with logfiles, it is assumed that the results in the log + files apply to the post-update tests. + +``--no-check-clean`` + Don't attempt to check if the working directory is clean before + doing the update (assuming that the working directory is a git or + mercurial tree). + +``--patch`` + Create a a git commit, or a mq patch, with the changes made by wptupdate. + +``--ignore-existing`` + Overwrite all the expectation data for any tests that have a result + in the passed log files, not just data for the same platform. + +Examples +~~~~~~~~ + +Update the local copy of web-platform-tests without changing the +expectation data and commit (or create a mq patch for) the result:: + + wptupdate --patch --sync + +Update all the expectations from a set of cross-platform test runs:: + + wptupdate --no-check-clean --patch osx.log linux.log windows.log + +Add expectation data for some new tests that are expected to be +platform-independent:: + + wptupdate --no-check-clean --patch --ignore-existing tests.log + +Manifest Format +--------------- +The format of the manifest files is based on the ini format. Files are +divided into sections, each (apart from the root section) having a +heading enclosed in square braces. Within each section are key-value +pairs. There are several notable differences from standard .ini files, +however: + + * Sections may be hierarchically nested, with significant whitespace + indicating nesting depth. + + * Only ``:`` is valid as a key/value separator + +A simple example of a manifest file is:: + + root_key: root_value + + [section] + section_key: section_value + + [subsection] + subsection_key: subsection_value + + [another_section] + another_key: another_value + +Conditional Values +~~~~~~~~~~~~~~~~~~ + +In order to support values that depend on some external data, the +right hand side of a key/value pair can take a set of conditionals +rather than a plain value. These values are placed on a new line +following the key, with significant indentation. Conditional values +are prefixed with ``if`` and terminated with a colon, for example:: + + key: + if cond1: value1 + if cond2: value2 + value3 + +In this example, the value associated with ``key`` is determined by +first evaluating ``cond1`` against external data. If that is true, +``key`` is assigned the value ``value1``, otherwise ``cond2`` is +evaluated in the same way. If both ``cond1`` and ``cond2`` are false, +the unconditional ``value3`` is used. + +Conditions themselves use a Python-like expression syntax. Operands +can either be variables, corresponding to data passed in, numbers +(integer or floating point; exponential notation is not supported) or +quote-delimited strings. Equality is tested using ``==`` and +inequality by ``!=``. The operators ``and``, ``or`` and ``not`` are +used in the expected way. Parentheses can also be used for +grouping. For example:: + + key: + if (a == 2 or a == 3) and b == "abc": value1 + if a == 1 or b != "abc": value2 + value3 + +Here ``a`` and ``b`` are variables, the value of which will be +supplied when the manifest is used. + +Expectation Manifests +--------------------- + +When used for expectation data, manifests have the following format: + + * A section per test URL described by the manifest, with the section + heading being the part of the test URL following the last ``/`` in + the path (this allows multiple tests in a single manifest file with + the same path part of the URL, but different query parts). + + * A subsection per subtest, with the heading being the title of the + subtest. + + * A key ``type`` indicating the test type. This takes the values + ``testharness`` and ``reftest``. + + * For reftests, keys ``reftype`` indicating the reference type + (``==`` or ``!=``) and ``refurl`` indicating the URL of the + reference. + + * A key ``expected`` giving the expectation value of each (sub)test. + + * A key ``disabled`` which can be set to any value to indicate that + the (sub)test is disabled and should either not be run (for tests) + or that its results should be ignored (subtests). + + * A key ``restart-after`` which can be set to any value to indicate that + the runner should restart the browser after running this test (e.g. to + clear out unwanted state). + + * Variables ``debug``, ``os``, ``version``, ``processor`` and + ``bits`` that describe the configuration of the browser under + test. ``debug`` is a boolean indicating whether a build is a debug + build. ``os`` is a string indicating the operating system, and + ``version`` a string indicating the particular version of that + operating system. ``processor`` is a string indicating the + processor architecture and ``bits`` an integer indicating the + number of bits. This information is typically provided by + :py:mod:`mozinfo`. + + * Top level keys are taken as defaults for the whole file. So, for + example, a top level key with ``expected: FAIL`` would indicate + that all tests and subtests in the file are expected to fail, + unless they have an ``expected`` key of their own. + +An simple example manifest might look like:: + + [test.html?variant=basic] + type: testharness + + [Test something unsupported] + expected: FAIL + + [test.html?variant=broken] + expected: ERROR + + [test.html?variant=unstable] + disabled: http://test.bugs.example.org/bugs/12345 + +A more complex manifest with conditional properties might be:: + + [canvas_test.html] + expected: + if os == "osx": FAIL + if os == "windows" and version == "XP": FAIL + PASS + +Note that ``PASS`` in the above works, but is unnecessary; ``PASS`` +(or ``OK``) is always the default expectation for (sub)tests. diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/docs/index.rst b/tests/wpt/web-platform-tests/tools/wptrunner/docs/index.rst new file mode 100644 index 00000000000..5147d3e31c3 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/docs/index.rst @@ -0,0 +1,24 @@ +.. wptrunner documentation master file, created by + sphinx-quickstart on Mon May 19 18:14:20 2014. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to wptrunner's documentation! +===================================== + +Contents: + +.. toctree:: + :maxdepth: 2 + + usage + expectation + design + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` + diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/docs/make.bat b/tests/wpt/web-platform-tests/tools/wptrunner/docs/make.bat new file mode 100644 index 00000000000..959c1615a28 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/docs/make.bat @@ -0,0 +1,242 @@ +@ECHO OFF + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set BUILDDIR=_build +set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . +set I18NSPHINXOPTS=%SPHINXOPTS% . +if NOT "%PAPER%" == "" ( + set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% + set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% +) + +if "%1" == "" goto help + +if "%1" == "help" ( + :help + echo.Please use `make ^` where ^ is one of + echo. html to make standalone HTML files + echo. dirhtml to make HTML files named index.html in directories + echo. singlehtml to make a single large HTML file + echo. pickle to make pickle files + echo. json to make JSON files + echo. htmlhelp to make HTML files and a HTML help project + echo. qthelp to make HTML files and a qthelp project + echo. devhelp to make HTML files and a Devhelp project + echo. epub to make an epub + echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter + echo. text to make text files + echo. man to make manual pages + echo. texinfo to make Texinfo files + echo. gettext to make PO message catalogs + echo. changes to make an overview over all changed/added/deprecated items + echo. xml to make Docutils-native XML files + echo. pseudoxml to make pseudoxml-XML files for display purposes + echo. linkcheck to check all external links for integrity + echo. doctest to run all doctests embedded in the documentation if enabled + goto end +) + +if "%1" == "clean" ( + for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i + del /q /s %BUILDDIR%\* + goto end +) + + +%SPHINXBUILD% 2> nul +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +if "%1" == "html" ( + %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/html. + goto end +) + +if "%1" == "dirhtml" ( + %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. + goto end +) + +if "%1" == "singlehtml" ( + %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. + goto end +) + +if "%1" == "pickle" ( + %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can process the pickle files. + goto end +) + +if "%1" == "json" ( + %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can process the JSON files. + goto end +) + +if "%1" == "htmlhelp" ( + %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can run HTML Help Workshop with the ^ +.hhp project file in %BUILDDIR%/htmlhelp. + goto end +) + +if "%1" == "qthelp" ( + %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can run "qcollectiongenerator" with the ^ +.qhcp project file in %BUILDDIR%/qthelp, like this: + echo.^> qcollectiongenerator %BUILDDIR%\qthelp\wptrunner.qhcp + echo.To view the help file: + echo.^> assistant -collectionFile %BUILDDIR%\qthelp\wptrunner.ghc + goto end +) + +if "%1" == "devhelp" ( + %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. + goto end +) + +if "%1" == "epub" ( + %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The epub file is in %BUILDDIR%/epub. + goto end +) + +if "%1" == "latex" ( + %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. + goto end +) + +if "%1" == "latexpdf" ( + %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex + cd %BUILDDIR%/latex + make all-pdf + cd %BUILDDIR%/.. + echo. + echo.Build finished; the PDF files are in %BUILDDIR%/latex. + goto end +) + +if "%1" == "latexpdfja" ( + %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex + cd %BUILDDIR%/latex + make all-pdf-ja + cd %BUILDDIR%/.. + echo. + echo.Build finished; the PDF files are in %BUILDDIR%/latex. + goto end +) + +if "%1" == "text" ( + %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The text files are in %BUILDDIR%/text. + goto end +) + +if "%1" == "man" ( + %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The manual pages are in %BUILDDIR%/man. + goto end +) + +if "%1" == "texinfo" ( + %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. + goto end +) + +if "%1" == "gettext" ( + %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The message catalogs are in %BUILDDIR%/locale. + goto end +) + +if "%1" == "changes" ( + %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes + if errorlevel 1 exit /b 1 + echo. + echo.The overview file is in %BUILDDIR%/changes. + goto end +) + +if "%1" == "linkcheck" ( + %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck + if errorlevel 1 exit /b 1 + echo. + echo.Link check complete; look for any errors in the above output ^ +or in %BUILDDIR%/linkcheck/output.txt. + goto end +) + +if "%1" == "doctest" ( + %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest + if errorlevel 1 exit /b 1 + echo. + echo.Testing of doctests in the sources finished, look at the ^ +results in %BUILDDIR%/doctest/output.txt. + goto end +) + +if "%1" == "xml" ( + %SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The XML files are in %BUILDDIR%/xml. + goto end +) + +if "%1" == "pseudoxml" ( + %SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml. + goto end +) + +:end diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/docs/usage.rst b/tests/wpt/web-platform-tests/tools/wptrunner/docs/usage.rst new file mode 100644 index 00000000000..8e74a4320c8 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/docs/usage.rst @@ -0,0 +1,238 @@ +Getting Started +=============== + +Installing wptrunner +-------------------- + +The easiest way to install wptrunner is into a virtualenv, using pip:: + + virtualenv wptrunner + cd wptrunner + source bin/activate + pip install wptrunner + +This will install the base dependencies for wptrunner, but not any +extra dependencies required to test against specific browsers. In +order to do this you must use use the extra requirements files in +``$VIRTUAL_ENV/requirements/requirements_browser.txt``. For example, +in order to test against Firefox you would have to run:: + + pip install -r requirements/requirements_firefox.txt + +If you intend to work on the code, the ``-e`` option to pip should be +used in combination with a source checkout i.e. inside a virtual +environment created as above:: + + git clone https://github.com/w3c/wptrunner.git + cd wptrunner + pip install -e ./ + +In addition to the dependencies installed by pip, wptrunner requires +a copy of the web-platform-tests repository. This can be located +anywhere on the filesystem, but the easiest option is to put it +under the same parent directory as the wptrunner checkout:: + + git clone https://github.com/w3c/web-platform-tests.git + +It is also necessary to generate a web-platform-tests ``MANIFEST.json`` +file. It's recommended to also put that under the same parent directory as +the wptrunner checkout, in a directory named ``meta``:: + + mkdir meta + cd web-platform-tests + python manifest --path ../meta/MANIFEST.json + +The ``MANIFEST.json`` file needs to be regenerated each time the +web-platform-tests checkout is updated. To aid with the update process +there is a tool called ``wptupdate``, which is described in +:ref:`wptupdate-label`. + +Running the Tests +----------------- + +A test run is started using the ``wptrunner`` command. The command +takes multiple options, of which the following are most significant: + +``--product`` (defaults to `firefox`) + The product to test against: `b2g`, `chrome`, `firefox`, or `servo`. + +``--binary`` (required if product is `firefox` or `servo`) + The path to a binary file for the product (browser) to test against. + +``--webdriver-binary`` (required if product is `chrome`) + The path to a `*driver` binary; e.g., a `chromedriver` binary. + +``--certutil-binary`` (required if product is `firefox` [#]_) + The path to a `certutil` binary (for tests that must be run over https). + +``--metadata`` (required only when not `using default paths`_) + The path to a directory containing test metadata. [#]_ + +``--tests`` (required only when not `using default paths`_) + The path to a directory containing a web-platform-tests checkout. + +``--prefs-root`` (required only when testing a Firefox binary) + The path to a directory containing Firefox test-harness preferences. [#]_ + +``--config`` (should default to `wptrunner.default.ini`) + The path to the config (ini) file. + +.. [#] The ``--certutil-binary`` option is required when the product is + ``firefox`` unless ``--ssl-type=none`` is specified. + +.. [#] The ``--metadata`` path is to a directory that contains: + + * a ``MANIFEST.json`` file (the web-platform-tests documentation has + instructions on generating this file) + * (optionally) any expectation files (see :ref:`wptupdate-label`) + +.. [#] Example ``--prefs-root`` value: ``~/mozilla-central/testing/profiles``. + +There are also a variety of other command-line options available; use +``--help`` to list them. + +The following examples show how to start wptrunner with various options. + +------------------ +Starting wptrunner +------------------ + +The examples below assume the following directory layout, +though no specific folder structure is required:: + + ~/testtwf/wptrunner # wptrunner checkout + ~/testtwf/web-platform-tests # web-platform-tests checkout + ~/testtwf/meta # metadata + +To test a Firefox Nightly build in an OS X environment, you might start +wptrunner using something similar to the following example:: + + wptrunner --metadata=~/testtwf/meta/ --tests=~/testtwf/web-platform-tests/ \ + --binary=~/mozilla-central/obj-x86_64-apple-darwin14.3.0/dist/Nightly.app/Contents/MacOS/firefox \ + --certutil-binary=~/mozilla-central/obj-x86_64-apple-darwin14.3.0/security/nss/cmd/certutil/certutil \ + --prefs-root=~/mozilla-central/testing/profiles + + +And to test a Chromium build in an OS X environment, you might start +wptrunner using something similar to the following example:: + + wptrunner --metadata=~/testtwf/meta/ --tests=~/testtwf/web-platform-tests/ \ + --binary=~/chromium/src/out/Release/Chromium.app/Contents/MacOS/Chromium \ + --webdriver-binary=/usr/local/bin/chromedriver --product=chrome + +-------------------- +Running test subsets +-------------------- + +To restrict a test run just to tests in a particular web-platform-tests +subdirectory, specify the directory name in the positional arguments after +the options; for example, run just the tests in the `dom` subdirectory:: + + wptrunner --metadata=~/testtwf/meta --tests=~/testtwf/web-platform-tests/ \ + --binary=/path/to/firefox --certutil-binary=/path/to/certutil \ + --prefs-root=/path/to/testing/profiles \ + dom + +------------------- +Running in parallel +------------------- + +To speed up the testing process, use the ``--processes`` option to have +wptrunner run multiple browser instances in parallel. For example, to +have wptrunner attempt to run tests against with six browser instances +in parallel, specify ``--processes=6``. But note that behaviour in this +mode is necessarily less deterministic than with ``--processes=1`` (the +default), so there may be more noise in the test results. + +------------------- +Using default paths +------------------- + +The (otherwise-required) ``--tests`` and ``--metadata`` command-line +options/flags be omitted if any configuration file is found that +contains a section specifying the ``tests`` and ``metadata`` keys. + +See the `Configuration File`_ section for more information about +configuration files, including information about their expected +locations. + +The content of the ``wptrunner.default.ini`` default configuration file +makes wptrunner look for tests (that is, a web-platform-tests checkout) +as a subdirectory of the current directory named ``tests``, and for +metadata files in a subdirectory of the current directory named ``meta``. + +Output +------ + +wptrunner uses the :py:mod:`mozlog` package for output. This +structures events such as test results or log messages as JSON objects +that can then be fed to other tools for interpretation. More details +about the message format are given in the +:py:mod:`mozlog` documentation. + +By default the raw JSON messages are dumped to stdout. This is +convenient for piping into other tools, but not ideal for humans +reading the output. :py:mod:`mozlog` comes with several other +formatters, which are accessible through command line options. The +general format of these options is ``--log-name=dest``, where ``name`` +is the name of the format and ``dest`` is a path to a destination +file, or ``-`` for stdout. The raw JSON data is written by the ``raw`` +formatter so, the default setup corresponds to ``--log-raw=-``. + +A reasonable output format for humans is provided as ``mach``. So in +order to output the full raw log to a file and a human-readable +summary to stdout, one might pass the options:: + + --log-raw=output.log --log-mach=- + +Configuration File +------------------ + +wptrunner uses a ``.ini`` file to control some configuration +sections. The file has three sections; ``[products]``, +``[manifest:default]`` and ``[web-platform-tests]``. + +``[products]`` is used to +define the set of available products. By default this section is empty +which means that all the products distributed with wptrunner are +enabled (although their dependencies may not be installed). The set +of enabled products can be set by using the product name as the +key. For built in products the value is empty. It is also possible to +provide the path to a script implementing the browser functionality +e.g.:: + + [products] + chrome = + netscape4 = path/to/netscape.py + +``[manifest:default]`` specifies the default paths for the tests and metadata, +relative to the config file. For example:: + + [manifest:default] + tests = ~/testtwf/web-platform-tests + metadata = ~/testtwf/meta + + +``[web-platform-tests]`` is used to set the properties of the upstream +repository when updating the paths. ``remote_url`` specifies the git +url to pull from; ``branch`` the branch to sync against and +``sync_path`` the local path, relative to the configuration file, to +use when checking out the tests e.g.:: + + [web-platform-tests] + remote_url = https://github.com/w3c/web-platform-tests.git + branch = master + sync_path = sync + +A configuration file must contain all the above fields; falling back +to the default values for unspecified fields is not yet supported. + +The ``wptrunner`` and ``wptupdate`` commands will use configuration +files in the following order: + + * Any path supplied with a ``--config`` flag to the command. + + * A file called ``wptrunner.ini`` in the current directory + + * The default configuration file (``wptrunner.default.ini`` in the + source directory) diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements.txt new file mode 100644 index 00000000000..319a2ff984a --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements.txt @@ -0,0 +1,4 @@ +html5lib >= 0.99 +mozinfo >= 0.7 +mozlog >= 3.3 +mozdebug >= 0.1 diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_chrome.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_chrome.txt new file mode 100644 index 00000000000..a2f54425f3e --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_chrome.txt @@ -0,0 +1,2 @@ +mozprocess >= 0.19 +selenium >= 2.41.0 diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_edge.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_edge.txt new file mode 100644 index 00000000000..a2f54425f3e --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_edge.txt @@ -0,0 +1,2 @@ +mozprocess >= 0.19 +selenium >= 2.41.0 diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_firefox.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_firefox.txt new file mode 100644 index 00000000000..d8d268f127b --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_firefox.txt @@ -0,0 +1,6 @@ +marionette_driver >= 0.4 +mozprofile >= 0.21 +mozprocess >= 0.19 +mozcrash >= 0.13 +mozrunner >= 6.7 +mozleak >= 0.1 diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_sauce.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_sauce.txt new file mode 100644 index 00000000000..7b828f84b08 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_sauce.txt @@ -0,0 +1,2 @@ +mozprocess >= 0.19 +selenium >= 3.3.0 diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_servo.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_servo.txt new file mode 100644 index 00000000000..22bcfa123a5 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_servo.txt @@ -0,0 +1 @@ +mozprocess >= 0.19 diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/setup.py b/tests/wpt/web-platform-tests/tools/wptrunner/setup.py new file mode 100644 index 00000000000..7ec189fefd9 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/setup.py @@ -0,0 +1,74 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this file, +# You can obtain one at http://mozilla.org/MPL/2.0/. + +import glob +import os +import sys +import textwrap + +from setuptools import setup, find_packages + +here = os.path.split(__file__)[0] + +PACKAGE_NAME = 'wptrunner' +PACKAGE_VERSION = '1.14' + +# Dependencies +with open(os.path.join(here, "requirements.txt")) as f: + deps = f.read().splitlines() + +# Browser-specific requirements +requirements_files = glob.glob("requirements_*.txt") + +profile_dest = None +dest_exists = False + +setup(name=PACKAGE_NAME, + version=PACKAGE_VERSION, + description="Harness for running the W3C web-platform-tests against various products", + author='Mozilla Automation and Testing Team', + author_email='tools@lists.mozilla.org', + license='MPL 2.0', + packages=find_packages(exclude=["tests", "metadata", "prefs"]), + entry_points={ + 'console_scripts': [ + 'wptrunner = wptrunner.wptrunner:main', + 'wptupdate = wptrunner.update:main', + ] + }, + zip_safe=False, + platforms=['Any'], + classifiers=['Development Status :: 4 - Beta', + 'Environment :: Console', + 'Intended Audience :: Developers', + 'License :: OSI Approved :: BSD License', + 'Operating System :: OS Independent'], + package_data={"wptrunner": ["executors/testharness_marionette.js", + "executors/testharness_webdriver.js", + "executors/reftest.js", + "executors/reftest-wait.js", + "testharnessreport.js", + "testharness_runner.html", + "config.json", + "wptrunner.default.ini", + "browsers/server-locations.txt", + "browsers/b2g_setup/*", + "browsers/sauce_setup/*", + "prefs/*"]}, + include_package_data=True, + data_files=[("requirements", requirements_files)], + install_requires=deps + ) + +if "install" in sys.argv: + path = os.path.relpath(os.path.join(sys.prefix, "requirements"), os.curdir) + print textwrap.fill("""In order to use with one of the built-in browser +products, you will need to install the extra dependencies. These are provided +as requirements_[name].txt in the %s directory and can be installed using +e.g.""" % path, 80) + + print """ + +pip install -r %s/requirements_firefox.txt +""" % path diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/reftest/reftest_and_fail.html.ini b/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/reftest/reftest_and_fail.html.ini new file mode 100644 index 00000000000..81aef049cd1 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/reftest/reftest_and_fail.html.ini @@ -0,0 +1,3 @@ +[reftest_and_fail.html] + type: reftest + expected: FAIL diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/reftest/reftest_cycle_fail.html.ini b/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/reftest/reftest_cycle_fail.html.ini new file mode 100644 index 00000000000..472b33f7764 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/reftest/reftest_cycle_fail.html.ini @@ -0,0 +1,3 @@ +[reftest_cycle_fail.html] + type: reftest + expected: FAIL diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/reftest/reftest_match_fail.html.ini b/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/reftest/reftest_match_fail.html.ini new file mode 100644 index 00000000000..f3dc3362fac --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/reftest/reftest_match_fail.html.ini @@ -0,0 +1,3 @@ +[reftest_match_fail.html] + type: reftest + expected: FAIL diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/reftest/reftest_mismatch_fail.html.ini b/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/reftest/reftest_mismatch_fail.html.ini new file mode 100644 index 00000000000..1055337e2d6 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/reftest/reftest_mismatch_fail.html.ini @@ -0,0 +1,3 @@ +[reftest_mismatch_fail.html] + type: reftest + expected: FAIL diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/reftest/reftest_ref_timeout.html.ini b/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/reftest/reftest_ref_timeout.html.ini new file mode 100644 index 00000000000..8936241ad29 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/reftest/reftest_ref_timeout.html.ini @@ -0,0 +1,3 @@ +[reftest_ref_timeout.html] + type: reftest + expected: TIMEOUT diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/reftest/reftest_timeout.html.ini b/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/reftest/reftest_timeout.html.ini new file mode 100644 index 00000000000..0d1b9bade95 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/reftest/reftest_timeout.html.ini @@ -0,0 +1,3 @@ +[reftest_timeout.html] + type: reftest + expected: TIMEOUT diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/testharness/firefox/__dir__.ini b/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/testharness/firefox/__dir__.ini new file mode 100644 index 00000000000..c9d164cd418 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/testharness/firefox/__dir__.ini @@ -0,0 +1,2 @@ +prefs: ["browser.display.foreground_color:#FF0000", + "browser.display.background_color:#000000"] \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/testharness/firefox/subdir/test_pref_reset.html.ini b/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/testharness/firefox/subdir/test_pref_reset.html.ini new file mode 100644 index 00000000000..6c9198d9bbf --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/testharness/firefox/subdir/test_pref_reset.html.ini @@ -0,0 +1,2 @@ +[test_pref_reset.html] + prefs: [@Reset] diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/testharness/firefox/test_pref_set.html.ini b/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/testharness/firefox/test_pref_set.html.ini new file mode 100644 index 00000000000..bc9bfb9c413 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/testharness/firefox/test_pref_set.html.ini @@ -0,0 +1,3 @@ +[test_pref_set.html] + prefs: ["browser.display.foreground_color:#00FF00", + "browser.display.background_color:#000000"] diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/testharness/subdir/__dir__.ini b/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/testharness/subdir/__dir__.ini new file mode 100644 index 00000000000..a9157fbc6a9 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/testharness/subdir/__dir__.ini @@ -0,0 +1 @@ +disabled: true \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/testharness/subdir/testharness_1.html.ini b/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/testharness/subdir/testharness_1.html.ini new file mode 100644 index 00000000000..db9393987b6 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/testharness/subdir/testharness_1.html.ini @@ -0,0 +1,2 @@ +[testharness_1.html] + disabled: @False \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/testharness/tags/__dir__.ini b/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/testharness/tags/__dir__.ini new file mode 100644 index 00000000000..f599adda92b --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/testharness/tags/__dir__.ini @@ -0,0 +1 @@ +tags: [dir-tag-1, dir-tag-2] \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/testharness/tags/testharness_0.html.ini b/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/testharness/tags/testharness_0.html.ini new file mode 100644 index 00000000000..fe8ffa48dd0 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/testharness/tags/testharness_0.html.ini @@ -0,0 +1,4 @@ +tags: [file-tag] + +[testharness_0.html] + tags: [test-tag] diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/testharness/tags/testharness_1.html.ini b/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/testharness/tags/testharness_1.html.ini new file mode 100644 index 00000000000..d6006a1551c --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/testharness/tags/testharness_1.html.ini @@ -0,0 +1,2 @@ +[testharness_0.html] + tags: [test-1-tag] diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/testharness/tags/testharness_2.html.ini b/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/testharness/tags/testharness_2.html.ini new file mode 100644 index 00000000000..25fbf55362d --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/testharness/tags/testharness_2.html.ini @@ -0,0 +1,4 @@ +tags: [file-tag] + +[testharness_2.html] + tags: [test-2-tag, @Reset] diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/testharness/testharness_0.html.ini b/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/testharness/testharness_0.html.ini new file mode 100644 index 00000000000..90b9a6e9f01 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/testharness/testharness_0.html.ini @@ -0,0 +1,4 @@ +[testharness_0.html] + type: testharness + [Test that should fail] + expected: FAIL diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/testharness/testharness_error.html.ini b/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/testharness/testharness_error.html.ini new file mode 100644 index 00000000000..fa53e0733ab --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/testharness/testharness_error.html.ini @@ -0,0 +1,3 @@ +[testharness_error.html] + type: testharness + expected: ERROR diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/testharness/testharness_timeout.html.ini b/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/testharness/testharness_timeout.html.ini new file mode 100644 index 00000000000..55eca5191ab --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/metadata/testharness/testharness_timeout.html.ini @@ -0,0 +1,3 @@ +[testharness_timeout.html] + type: testharness + expected: TIMEOUT diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/test.cfg.example b/tests/wpt/web-platform-tests/tools/wptrunner/test/test.cfg.example new file mode 100644 index 00000000000..db48226216c --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/test.cfg.example @@ -0,0 +1,20 @@ +[general] +tests=/path/to/web-platform-tests/ +metadata=/path/to/web-platform-tests/ +ssl-type=none + +# [firefox] +# binary=/path/to/firefox +# prefs-root=/path/to/gecko-src/testing/profiles/ + +# [servo] +# binary=/path/to/servo-src/target/release/servo +# exclude=testharness # Because it needs a special testharness.js + +# [servodriver] +# binary=/path/to/servo-src/target/release/servo +# exclude=testharness # Because it needs a special testharness.js + +# [chrome] +# binary=/path/to/chrome +# webdriver-binary=/path/to/chromedriver diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/test.py b/tests/wpt/web-platform-tests/tools/wptrunner/test/test.py new file mode 100644 index 00000000000..034e317bd52 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/test.py @@ -0,0 +1,166 @@ +import ConfigParser +import argparse +import json +import os +import sys +import tempfile +import threading +import time +from StringIO import StringIO + +from mozlog import structuredlog, reader +from mozlog.handlers import BaseHandler, StreamHandler, StatusHandler +from mozlog.formatters import MachFormatter +from wptrunner import wptcommandline, wptrunner + +here = os.path.abspath(os.path.dirname(__file__)) + +def setup_wptrunner_logging(logger): + structuredlog.set_default_logger(logger) + wptrunner.logger = logger + wptrunner.wptlogging.setup_stdlib_logger() + +class ResultHandler(BaseHandler): + def __init__(self, verbose=False, logger=None): + self.inner = StreamHandler(sys.stdout, MachFormatter()) + BaseHandler.__init__(self, self.inner) + self.product = None + self.verbose = verbose + self.logger = logger + + self.register_message_handlers("wptrunner-test", {"set-product": self.set_product}) + + def set_product(self, product): + self.product = product + + def __call__(self, data): + if self.product is not None and data["action"] in ["suite_start", "suite_end"]: + # Hack: mozlog sets some internal state to prevent multiple suite_start or + # suite_end messages. We actually want that here (one from the metaharness + # and one from the individual test type harness), so override that internal + # state (a better solution might be to not share loggers, but this works well + # enough) + self.logger._state.suite_started = True + return + + if (not self.verbose and + (data["action"] == "process_output" or + data["action"] == "log" and data["level"] not in ["error", "critical"])): + return + + if "test" in data: + data = data.copy() + data["test"] = "%s: %s" % (self.product, data["test"]) + + return self.inner(data) + +def test_settings(): + return { + "include": "_test", + "manifest-update": "", + "no-capture-stdio": "" + } + +def read_config(): + parser = ConfigParser.ConfigParser() + parser.read("test.cfg") + + rv = {"general":{}, + "products":{}} + + rv["general"].update(dict(parser.items("general"))) + + # This only allows one product per whatever for now + for product in parser.sections(): + if product != "general": + dest = rv["products"][product] = {} + for key, value in parser.items(product): + rv["products"][product][key] = value + + return rv + +def run_tests(product, kwargs): + kwargs["test_paths"]["/_test/"] = {"tests_path": os.path.join(here, "testdata"), + "metadata_path": os.path.join(here, "metadata")} + + wptrunner.run_tests(**kwargs) + +def settings_to_argv(settings): + rv = [] + for name, value in settings.iteritems(): + key = "--%s" % name + if not value: + rv.append(key) + elif isinstance(value, list): + for item in value: + rv.extend([key, item]) + else: + rv.extend([key, value]) + return rv + +def set_from_args(settings, args): + if args.test: + settings["include"] = args.test + if args.tags: + settings["tags"] = args.tags + +def run(config, args): + logger = structuredlog.StructuredLogger("web-platform-tests") + logger.add_handler(ResultHandler(logger=logger, verbose=args.verbose)) + setup_wptrunner_logging(logger) + + parser = wptcommandline.create_parser() + + logger.suite_start(tests=[]) + + for product, product_settings in config["products"].iteritems(): + if args.product and product not in args.product: + continue + + settings = test_settings() + settings.update(config["general"]) + settings.update(product_settings) + settings["product"] = product + set_from_args(settings, args) + + kwargs = vars(parser.parse_args(settings_to_argv(settings))) + wptcommandline.check_args(kwargs) + + logger.send_message("wptrunner-test", "set-product", product) + + run_tests(product, kwargs) + + logger.send_message("wptrunner-test", "set-product", None) + logger.suite_end() + +def get_parser(): + parser = argparse.ArgumentParser() + parser.add_argument("-v", "--verbose", action="store_true", default=False, + help="verbose log output") + parser.add_argument("--product", action="append", + help="Specific product to include in test run") + parser.add_argument("--pdb", action="store_true", + help="Invoke pdb on uncaught exception") + parser.add_argument("--tag", action="append", dest="tags", + help="tags to select tests") + parser.add_argument("test", nargs="*", + help="Specific tests to include in test run") + return parser + +def main(): + config = read_config() + + args = get_parser().parse_args() + + try: + run(config, args) + except Exception: + if args.pdb: + import pdb, traceback + print traceback.format_exc() + pdb.post_mortem() + else: + raise + +if __name__ == "__main__": + main() diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/green-ref.html b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/green-ref.html new file mode 100644 index 00000000000..0e145d60b55 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/green-ref.html @@ -0,0 +1,4 @@ + + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/green.html b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/green.html new file mode 100644 index 00000000000..38167bb58d5 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/green.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/red.html b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/red.html new file mode 100644 index 00000000000..2b677e00634 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/red.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest.https.html b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest.https.html new file mode 100644 index 00000000000..5a45f10f35e --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest.https.html @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_and_fail.html b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_and_fail.html new file mode 100644 index 00000000000..29601953562 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_and_fail.html @@ -0,0 +1,5 @@ +Reftest chain that should fail + + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_and_fail_0-ref.html b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_and_fail_0-ref.html new file mode 100644 index 00000000000..04fb9aa1517 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_and_fail_0-ref.html @@ -0,0 +1,5 @@ +Reftest chain that should fail + + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_cycle.html b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_cycle.html new file mode 100644 index 00000000000..4a84a3b6741 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_cycle.html @@ -0,0 +1,5 @@ +Reftest with cycle, all match + + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_cycle_0-ref.html b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_cycle_0-ref.html new file mode 100644 index 00000000000..118bfd88447 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_cycle_0-ref.html @@ -0,0 +1,5 @@ +OR match that should pass + + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_cycle_1-ref.html b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_cycle_1-ref.html new file mode 100644 index 00000000000..59be0b641de --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_cycle_1-ref.html @@ -0,0 +1,5 @@ +Reftest with cycle, all match + + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_cycle_fail.html b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_cycle_fail.html new file mode 100644 index 00000000000..175e76c4cc9 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_cycle_fail.html @@ -0,0 +1,5 @@ +Reftest with cycle, fails + + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_cycle_fail_0-ref.html b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_cycle_fail_0-ref.html new file mode 100644 index 00000000000..c8e548c4622 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_cycle_fail_0-ref.html @@ -0,0 +1,5 @@ +Reftest with cycle, fails + + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_match.html b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_match.html new file mode 100644 index 00000000000..333cc6c1ecd --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_match.html @@ -0,0 +1,5 @@ +rel=match that should pass + + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_match_fail.html b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_match_fail.html new file mode 100644 index 00000000000..a9272ef74da --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_match_fail.html @@ -0,0 +1,5 @@ +rel=match that should fail + + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_mismatch.html b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_mismatch.html new file mode 100644 index 00000000000..af5fa0750d8 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_mismatch.html @@ -0,0 +1,5 @@ +rel=mismatch that should pass + + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_mismatch_fail.html b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_mismatch_fail.html new file mode 100644 index 00000000000..8d160c4fc20 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_mismatch_fail.html @@ -0,0 +1,5 @@ +rel=mismatch that should fail + + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_or_0.html b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_or_0.html new file mode 100644 index 00000000000..3a51de21644 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_or_0.html @@ -0,0 +1,6 @@ +OR match that should pass + + + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_ref_timeout-ref.html b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_ref_timeout-ref.html new file mode 100644 index 00000000000..04cbb71e0c3 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_ref_timeout-ref.html @@ -0,0 +1,6 @@ + +rel=match that should time out in the ref + + diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_ref_timeout.html b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_ref_timeout.html new file mode 100644 index 00000000000..aaf68f5cb5f --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_ref_timeout.html @@ -0,0 +1,6 @@ + +rel=match that should time out in the ref + + diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_timeout.html b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_timeout.html new file mode 100644 index 00000000000..b10e676bf00 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_timeout.html @@ -0,0 +1,6 @@ + +rel=match that should timeout + + diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_wait_0.html b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_wait_0.html new file mode 100644 index 00000000000..4f92715c61e --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/reftest/reftest_wait_0.html @@ -0,0 +1,13 @@ + +rel=match that should fail + + + + diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/firefox/subdir/test_pref_inherit.html b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/firefox/subdir/test_pref_inherit.html new file mode 100644 index 00000000000..10b285194b4 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/firefox/subdir/test_pref_inherit.html @@ -0,0 +1,10 @@ + +Example pref test + + +

        Test requires the pref browser.display.foreground_color to be set to #00FF00

        + diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/firefox/subdir/test_pref_reset.html b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/firefox/subdir/test_pref_reset.html new file mode 100644 index 00000000000..5c75c116052 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/firefox/subdir/test_pref_reset.html @@ -0,0 +1,10 @@ + +Example pref test + + +

        Test requires the pref browser.display.foreground_color to be set to #00FF00

        + diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/firefox/test_pref_dir.html b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/firefox/test_pref_dir.html new file mode 100644 index 00000000000..105d9070c9d --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/firefox/test_pref_dir.html @@ -0,0 +1,10 @@ + +Example pref test + + +

        Test requires the pref browser.display.foreground_color to be set to #FF0000

        + diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/firefox/test_pref_set.html b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/firefox/test_pref_set.html new file mode 100644 index 00000000000..8e5e2989bf7 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/firefox/test_pref_set.html @@ -0,0 +1,10 @@ + +Example pref test + + +

        Test requires the pref browser.display.foreground_color to be set to #00FF00

        + diff --git a/tests/wpt/web-platform-tests/html/webappapis/system-state-and-capabilities/the-navigator-object/NavigatorID.html b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/subdir/testharness_1.html similarity index 54% rename from tests/wpt/web-platform-tests/html/webappapis/system-state-and-capabilities/the-navigator-object/NavigatorID.html rename to tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/subdir/testharness_1.html index 1956a202cee..fd2fc431d39 100644 --- a/tests/wpt/web-platform-tests/html/webappapis/system-state-and-capabilities/the-navigator-object/NavigatorID.html +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/subdir/testharness_1.html @@ -1,10 +1,9 @@ - -NavigatorID +Test should be enabled - -
        diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/tags/testharness_0.html b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/tags/testharness_0.html new file mode 100644 index 00000000000..5daf02a77d9 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/tags/testharness_0.html @@ -0,0 +1,9 @@ + +Test + + + diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/tags/testharness_1.html b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/tags/testharness_1.html new file mode 100644 index 00000000000..5daf02a77d9 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/tags/testharness_1.html @@ -0,0 +1,9 @@ + +Test + + + diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/tags/testharness_2.html b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/tags/testharness_2.html new file mode 100644 index 00000000000..5daf02a77d9 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/tags/testharness_2.html @@ -0,0 +1,9 @@ + +Test + + + diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/testharness.https.html b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/testharness.https.html new file mode 100644 index 00000000000..5871eac0014 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/testharness.https.html @@ -0,0 +1,10 @@ + +Example https test + + + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/testharness_0.html b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/testharness_0.html new file mode 100644 index 00000000000..ff0654cb9a0 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/testharness_0.html @@ -0,0 +1,9 @@ + +Test should be disabled + + + diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/testharness_error.html b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/testharness_error.html new file mode 100644 index 00000000000..0ac5ba46a33 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/testharness_error.html @@ -0,0 +1,7 @@ + +testharness.js test that should error + + + diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/testharness_long_timeout.html b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/testharness_long_timeout.html new file mode 100644 index 00000000000..fc94e055be0 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/testharness_long_timeout.html @@ -0,0 +1,9 @@ + +testharness.js test with long timeout + + + + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/testharness_timeout.html b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/testharness_timeout.html new file mode 100644 index 00000000000..b99915ac745 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/test/testdata/testharness/testharness_timeout.html @@ -0,0 +1,6 @@ + +Simple testharness.js usage + + + +// This file should time out, obviously \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/tox.ini b/tests/wpt/web-platform-tests/tools/wptrunner/tox.ini new file mode 100644 index 00000000000..790970409f3 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/tox.ini @@ -0,0 +1,17 @@ +[pytest] +xfail_strict=true + +[tox] +envlist = {py27,pypy}-{base,b2g,chrome,firefox,servo} + +[testenv] +deps = + pytest>=2.9 + pytest-cov + pytest-xdist + -r{toxinidir}/requirements.txt + chrome: -r{toxinidir}/requirements_chrome.txt + firefox: -r{toxinidir}/requirements_firefox.txt + servo: -r{toxinidir}/requirements_servo.txt + +commands = pytest --cov diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner.default.ini b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner.default.ini new file mode 100644 index 00000000000..34d25f8056b --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner.default.ini @@ -0,0 +1,11 @@ +[products] + +[web-platform-tests] +remote_url = https://github.com/w3c/web-platform-tests.git +branch = master +sync_path = %(pwd)s/sync + +[manifest:default] +tests = %(pwd)s/tests +metadata = %(pwd)s/meta +url_base = / \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/__init__.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/__init__.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/__init__.py new file mode 100644 index 00000000000..e3606d23cf0 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/__init__.py @@ -0,0 +1,30 @@ +"""Subpackage where each product is defined. Each product is created by adding a +a .py file containing a __wptrunner__ variable in the global scope. This must be +a dictionary with the fields + +"product": Name of the product, assumed to be unique. +"browser": String indicating the Browser implementation used to launch that + product. +"executor": Dictionary with keys as supported test types and values as the name + of the Executor implemantation that will be used to run that test + type. +"browser_kwargs": String naming function that takes product, binary, + prefs_root and the wptrunner.run_tests kwargs dict as arguments + and returns a dictionary of kwargs to use when creating the + Browser class. +"executor_kwargs": String naming a function that takes http server url and + timeout multiplier and returns kwargs to use when creating + the executor class. +"env_options": String naming a funtion of no arguments that returns the + arguments passed to the TestEnvironment. + +All classes and functions named in the above dict must be imported into the +module global scope. +""" + +product_list = ["chrome", + "edge", + "firefox", + "sauce", + "servo", + "servodriver"] diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/b2g_setup/certtest_app.zip b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/b2g_setup/certtest_app.zip new file mode 100644 index 0000000000000000000000000000000000000000..f9cbd5300ad650f8369ab02a4adc8866a5f0dea1 GIT binary patch literal 1237 zcmWIWW@Zs#U|`^2FjvWODfzT}tqYJB1;ktoG7On{DXA5D86~+np&^_M%$mjW!KOD9 zgG(#885miQ`K^1nb|J`DV6_Ye0Ljc?zViomnVjn)nc``FF?BZfz z;0L-RH!&|WEw#8ruRJv=v7i9#7#TOIP~N;YQ=Q1Ba2l6>NryUr^gg-aWS;d*}m8IMs@%GHN~&wF4z6O zA?W2)QhB&xyCS3f+uU<81@nS6mQRx3cYoPpQNfmtYj0kY><(J(5!>YY;YCI$$Ac#Y zH%xOrO{@HHQvMgS+WI@{?~Ll!Uh|&aG>P}O(Lw$@EPP4b4?|qvOtE_-Tz2pTk7Dwv z)#rF#W|&^FyUy6ZV@>fk)i<9PF`TvbS!LExEVHa9Y^U5Y2XS9j>*;GvpKO}u%ar;n zh12Yj%*iX(0>}E*k`&Yuv?XqSbI)cFKX8u8f||D{mT1JQ^PjzSX4>20Gc0Q&Pg{wk zF!i%+N?&?tUy)u*%C=8?n=bs6U2-~hW~)-teh-1&G52TlxYU&9E4Y0ty(Hr(tH66} z(gv~qPUfvor*Qt+U;j7uric5?K=}o6PiJ{e_}X39cY?Pn_4O3y?bky#r7Q9M4O6=z zS{CaPH7paYRB@RkX-h=dwFH%Xa7884+t!e0KN?m*z2V z3TU!5`kZoDeEo$L8~WeOHAPIAX&mZLjHiP}=d_QK4@3 zmrZ}BXTGn$@Z)LE&dPtE6TKd{cKkGdJKekTd)asU0B=SnIc8jCg9NaIU|;~201QhS wK`i8wf)!Fypk+*C^Dy%`vUwdq^DuHe&`?m0$1s$Y4P-qN5H1DMQY;`I0L69!3IG5A literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/base.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/base.py new file mode 100644 index 00000000000..52527599ffb --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/base.py @@ -0,0 +1,162 @@ +import os +import platform +import socket +from abc import ABCMeta, abstractmethod + +from ..wptcommandline import require_arg + +here = os.path.split(__file__)[0] + + +def cmd_arg(name, value=None): + prefix = "-" if platform.system() == "Windows" else "--" + rv = prefix + name + if value is not None: + rv += "=" + value + return rv + + +def get_free_port(start_port, exclude=None): + """Get the first port number after start_port (inclusive) that is + not currently bound. + + :param start_port: Integer port number at which to start testing. + :param exclude: Set of port numbers to skip""" + port = start_port + while True: + if exclude and port in exclude: + port += 1 + continue + s = socket.socket() + try: + s.bind(("127.0.0.1", port)) + except socket.error: + port += 1 + else: + return port + finally: + s.close() + +def browser_command(binary, args, debug_info): + if debug_info: + if debug_info.requiresEscapedArgs: + args = [item.replace("&", "\\&") for item in args] + debug_args = [debug_info.path] + debug_info.args + else: + debug_args = [] + + command = [binary] + args + + return debug_args, command + + +class BrowserError(Exception): + pass + + +class Browser(object): + __metaclass__ = ABCMeta + + process_cls = None + init_timeout = 30 + + def __init__(self, logger): + """Abstract class serving as the basis for Browser implementations. + + The Browser is used in the TestRunnerManager to start and stop the browser + process, and to check the state of that process. This class also acts as a + context manager, enabling it to do browser-specific setup at the start of + the testrun and cleanup after the run is complete. + + :param logger: Structured logger to use for output. + """ + self.logger = logger + + def __enter__(self): + self.setup() + return self + + def __exit__(self, *args, **kwargs): + self.cleanup() + + def setup(self): + """Used for browser-specific setup that happens at the start of a test run""" + pass + + def settings(self, test): + return {} + + @abstractmethod + def start(self, **kwargs): + """Launch the browser object and get it into a state where is is ready to run tests""" + pass + + @abstractmethod + def stop(self, force=False): + """Stop the running browser process.""" + pass + + @abstractmethod + def pid(self): + """pid of the browser process or None if there is no pid""" + pass + + @abstractmethod + def is_alive(self): + """Boolean indicating whether the browser process is still running""" + pass + + def setup_ssl(self, hosts): + """Return a certificate to use for tests requiring ssl that will be trusted by the browser""" + raise NotImplementedError("ssl testing not supported") + + def cleanup(self): + """Browser-specific cleanup that is run after the testrun is finished""" + pass + + def executor_browser(self): + """Returns the ExecutorBrowser subclass for this Browser subclass and the keyword arguments + with which it should be instantiated""" + return ExecutorBrowser, {} + + def log_crash(self, process, test): + """Return a list of dictionaries containing information about crashes that happend + in the browser, or an empty list if no crashes occurred""" + self.logger.crash(process, test) + + +class NullBrowser(Browser): + def __init__(self, logger, **kwargs): + super(NullBrowser, self).__init__(logger) + + def start(self, **kwargs): + """No-op browser to use in scenarios where the TestRunnerManager shouldn't + actually own the browser process (e.g. Servo where we start one browser + per test)""" + pass + + def stop(self, force=False): + pass + + def pid(self): + return None + + def is_alive(self): + return True + + def on_output(self, line): + raise NotImplementedError + + +class ExecutorBrowser(object): + def __init__(self, **kwargs): + """View of the Browser used by the Executor object. + This is needed because the Executor runs in a child process and + we can't ship Browser instances between processes on Windows. + + Typically this will have a few product-specific properties set, + but in some cases it may have more elaborate methods for setting + up the browser from the runner process. + """ + for k, v in kwargs.iteritems(): + setattr(self, k, v) diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome.py new file mode 100644 index 00000000000..1c08c27922b --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome.py @@ -0,0 +1,94 @@ +from .base import Browser, ExecutorBrowser, require_arg +from ..webdriver_server import ChromeDriverServer +from ..executors import executor_kwargs as base_executor_kwargs +from ..executors.executorselenium import (SeleniumTestharnessExecutor, + SeleniumRefTestExecutor) + + +__wptrunner__ = {"product": "chrome", + "check_args": "check_args", + "browser": "ChromeBrowser", + "executor": {"testharness": "SeleniumTestharnessExecutor", + "reftest": "SeleniumRefTestExecutor"}, + "browser_kwargs": "browser_kwargs", + "executor_kwargs": "executor_kwargs", + "env_extras": "env_extras", + "env_options": "env_options"} + + +def check_args(**kwargs): + require_arg(kwargs, "webdriver_binary") + + +def browser_kwargs(test_type, run_info_data, **kwargs): + return {"binary": kwargs["binary"], + "webdriver_binary": kwargs["webdriver_binary"], + "webdriver_args": kwargs.get("webdriver_args")} + + +def executor_kwargs(test_type, server_config, cache_manager, run_info_data, + **kwargs): + from selenium.webdriver import DesiredCapabilities + + executor_kwargs = base_executor_kwargs(test_type, server_config, + cache_manager, **kwargs) + executor_kwargs["close_after_done"] = True + capabilities = dict(DesiredCapabilities.CHROME.items()) + capabilities.setdefault("chromeOptions", {})["prefs"] = { + "profile": { + "default_content_setting_values": { + "popups": 1 + } + } + } + for (kwarg, capability) in [("binary", "binary"), ("binary_args", "args")]: + if kwargs[kwarg] is not None: + capabilities["chromeOptions"][capability] = kwargs[kwarg] + executor_kwargs["capabilities"] = capabilities + return executor_kwargs + + +def env_extras(**kwargs): + return [] + + +def env_options(): + return {"host": "web-platform.test", + "bind_hostname": "true"} + + +class ChromeBrowser(Browser): + """Chrome is backed by chromedriver, which is supplied through + ``wptrunner.webdriver.ChromeDriverServer``. + """ + + def __init__(self, logger, binary, webdriver_binary="chromedriver", + webdriver_args=None): + """Creates a new representation of Chrome. The `binary` argument gives + the browser binary to use for testing.""" + Browser.__init__(self, logger) + self.binary = binary + self.server = ChromeDriverServer(self.logger, + binary=webdriver_binary, + args=webdriver_args) + + def start(self, **kwargs): + self.server.start(block=False) + + def stop(self, force=False): + self.server.stop(force=force) + + def pid(self): + return self.server.pid + + def is_alive(self): + # TODO(ato): This only indicates the driver is alive, + # and doesn't say anything about whether a browser session + # is active. + return self.server.is_alive() + + def cleanup(self): + self.stop() + + def executor_browser(self): + return ExecutorBrowser, {"webdriver_url": self.server.url} diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/edge.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/edge.py new file mode 100644 index 00000000000..b46e5288729 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/edge.py @@ -0,0 +1,74 @@ +from .base import Browser, ExecutorBrowser, require_arg +from ..webdriver_server import EdgeDriverServer +from ..executors import executor_kwargs as base_executor_kwargs +from ..executors.executorselenium import (SeleniumTestharnessExecutor, + SeleniumRefTestExecutor) + +__wptrunner__ = {"product": "edge", + "check_args": "check_args", + "browser": "EdgeBrowser", + "executor": {"testharness": "SeleniumTestharnessExecutor", + "reftest": "SeleniumRefTestExecutor"}, + "browser_kwargs": "browser_kwargs", + "executor_kwargs": "executor_kwargs", + "env_extras": "env_extras", + "env_options": "env_options"} + + +def check_args(**kwargs): + require_arg(kwargs, "webdriver_binary") + +def browser_kwargs(test_type, run_info_data, **kwargs): + return {"webdriver_binary": kwargs["webdriver_binary"], + "webdriver_args": kwargs.get("webdriver_args")} + +def executor_kwargs(test_type, server_config, cache_manager, run_info_data, + **kwargs): + from selenium.webdriver import DesiredCapabilities + + executor_kwargs = base_executor_kwargs(test_type, server_config, + cache_manager, **kwargs) + executor_kwargs["close_after_done"] = True + executor_kwargs["capabilities"] = dict(DesiredCapabilities.EDGE.items()) + return executor_kwargs + +def env_extras(**kwargs): + return [] + +def env_options(): + return {"host": "web-platform.test", + "bind_hostname": "true", + "supports_debugger": False} + +class EdgeBrowser(Browser): + used_ports = set() + + def __init__(self, logger, webdriver_binary, webdriver_args=None): + Browser.__init__(self, logger) + self.server = EdgeDriverServer(self.logger, + binary=webdriver_binary, + args=webdriver_args) + self.webdriver_host = "localhost" + self.webdriver_port = self.server.port + + def start(self, **kwargs): + print self.server.url + self.server.start() + + def stop(self): + self.server.stop() + + def pid(self): + return self.server.pid + + def is_alive(self): + # TODO(ato): This only indicates the server is alive, + # and doesn't say anything about whether a browser session + # is active. + return self.server.is_alive() + + def cleanup(self): + self.stop() + + def executor_browser(self): + return ExecutorBrowser, {"webdriver_url": self.server.url} 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 new file mode 100644 index 00000000000..2d45a69dbe7 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/firefox.py @@ -0,0 +1,357 @@ +import os +import platform +import signal +import subprocess +import sys + +import mozinfo +import mozleak +from mozprocess import ProcessHandler +from mozprofile import FirefoxProfile, Preferences +from mozprofile.permissions import ServerLocations +from mozrunner import FirefoxRunner +from mozrunner.utils import get_stack_fixer_function +from mozcrash import mozcrash + +from .base import (get_free_port, + Browser, + ExecutorBrowser, + require_arg, + cmd_arg, + browser_command) +from ..executors import executor_kwargs as base_executor_kwargs +from ..executors.executormarionette import (MarionetteTestharnessExecutor, + MarionetteRefTestExecutor, + MarionetteWdspecExecutor) +from ..environment import hostnames + + +here = os.path.join(os.path.split(__file__)[0]) + +__wptrunner__ = {"product": "firefox", + "check_args": "check_args", + "browser": "FirefoxBrowser", + "executor": {"testharness": "MarionetteTestharnessExecutor", + "reftest": "MarionetteRefTestExecutor", + "wdspec": "MarionetteWdspecExecutor"}, + "browser_kwargs": "browser_kwargs", + "executor_kwargs": "executor_kwargs", + "env_extras": "env_extras", + "env_options": "env_options", + "run_info_extras": "run_info_extras", + "update_properties": "update_properties"} + + +def get_timeout_multiplier(test_type, run_info_data, **kwargs): + if kwargs["timeout_multiplier"] is not None: + return kwargs["timeout_multiplier"] + if test_type == "reftest": + if run_info_data["debug"] or run_info_data.get("asan"): + return 4 + else: + return 2 + elif run_info_data["debug"] or run_info_data.get("asan"): + return 3 + return 1 + + +def check_args(**kwargs): + require_arg(kwargs, "binary") + if kwargs["ssl_type"] != "none": + require_arg(kwargs, "certutil_binary") + + +def browser_kwargs(test_type, run_info_data, **kwargs): + return {"binary": kwargs["binary"], + "prefs_root": kwargs["prefs_root"], + "extra_prefs": kwargs["extra_prefs"], + "debug_info": kwargs["debug_info"], + "symbols_path": kwargs["symbols_path"], + "stackwalk_binary": kwargs["stackwalk_binary"], + "certutil_binary": kwargs["certutil_binary"], + "ca_certificate_path": kwargs["ssl_env"].ca_cert_path(), + "e10s": kwargs["gecko_e10s"], + "stackfix_dir": kwargs["stackfix_dir"], + "binary_args": kwargs["binary_args"], + "timeout_multiplier": get_timeout_multiplier(test_type, + run_info_data, + **kwargs), + "leak_check": kwargs["leak_check"]} + + +def executor_kwargs(test_type, server_config, cache_manager, run_info_data, + **kwargs): + executor_kwargs = base_executor_kwargs(test_type, server_config, + cache_manager, **kwargs) + executor_kwargs["close_after_done"] = test_type != "reftest" + executor_kwargs["timeout_multiplier"] = get_timeout_multiplier(test_type, + run_info_data, + **kwargs) + if test_type == "wdspec": + executor_kwargs["binary"] = kwargs["binary"] + executor_kwargs["webdriver_binary"] = kwargs.get("webdriver_binary") + executor_kwargs["webdriver_args"] = kwargs.get("webdriver_args") + fxOptions = {} + if kwargs["binary"]: + fxOptions["binary"] = kwargs["binary"] + if kwargs["binary_args"]: + fxOptions["args"] = kwargs["binary_args"] + fxOptions["prefs"] = { + "network.dns.localDomains": ",".join(hostnames) + } + capabilities = {"moz:firefoxOptions": fxOptions} + executor_kwargs["capabilities"] = capabilities + return executor_kwargs + + +def env_extras(**kwargs): + return [] + + +def env_options(): + return {"host": "127.0.0.1", + "external_host": "web-platform.test", + "bind_hostname": "false", + "certificate_domain": "web-platform.test", + "supports_debugger": True} + + +def run_info_extras(**kwargs): + return {"e10s": kwargs["gecko_e10s"]} + + +def update_properties(): + return ["debug", "e10s", "os", "version", "processor", "bits"], {"debug", "e10s"} + + +class FirefoxBrowser(Browser): + used_ports = set() + init_timeout = 60 + shutdown_timeout = 60 + + def __init__(self, logger, binary, prefs_root, extra_prefs=None, debug_info=None, + symbols_path=None, stackwalk_binary=None, certutil_binary=None, + ca_certificate_path=None, e10s=False, stackfix_dir=None, + binary_args=None, timeout_multiplier=None, leak_check=False): + Browser.__init__(self, logger) + self.binary = binary + self.prefs_root = prefs_root + self.extra_prefs = extra_prefs + self.marionette_port = None + self.runner = None + self.debug_info = debug_info + self.profile = None + self.symbols_path = symbols_path + self.stackwalk_binary = stackwalk_binary + self.ca_certificate_path = ca_certificate_path + self.certutil_binary = certutil_binary + self.e10s = e10s + self.binary_args = binary_args + if self.symbols_path and stackfix_dir: + self.stack_fixer = get_stack_fixer_function(stackfix_dir, + self.symbols_path) + else: + self.stack_fixer = None + + if timeout_multiplier: + self.init_timeout = self.init_timeout * timeout_multiplier + + self.leak_report_file = None + self.leak_check = leak_check + + def settings(self, test): + return {"check_leaks": self.leak_check and not test.leaks} + + def start(self, **kwargs): + if self.marionette_port is None: + self.marionette_port = get_free_port(2828, exclude=self.used_ports) + self.used_ports.add(self.marionette_port) + + env = os.environ.copy() + env["MOZ_DISABLE_NONLOCAL_CONNECTIONS"] = "1" + + locations = ServerLocations(filename=os.path.join(here, "server-locations.txt")) + + preferences = self.load_prefs() + + self.profile = FirefoxProfile(locations=locations, + preferences=preferences) + self.profile.set_preferences({"marionette.port": self.marionette_port, + "dom.disable_open_during_load": False, + "network.dns.localDomains": ",".join(hostnames), + "network.proxy.type": 0, + "places.history.enabled": False}) + if self.e10s: + self.profile.set_preferences({"browser.tabs.remote.autostart": True}) + + if self.leak_check and kwargs.get("check_leaks", True): + self.leak_report_file = os.path.join(self.profile.profile, "runtests_leaks.log") + if os.path.exists(self.leak_report_file): + os.remove(self.leak_report_file) + env["XPCOM_MEM_BLOAT_LOG"] = self.leak_report_file + else: + self.leak_report_file = None + + # Bug 1262954: winxp + e10s, disable hwaccel + if (self.e10s and platform.system() in ("Windows", "Microsoft") and + '5.1' in platform.version()): + self.profile.set_preferences({"layers.acceleration.disabled": True}) + + if self.ca_certificate_path is not None: + self.setup_ssl() + + debug_args, cmd = browser_command(self.binary, + self.binary_args if self.binary_args else [] + + [cmd_arg("marionette"), "about:blank"], + self.debug_info) + + self.runner = FirefoxRunner(profile=self.profile, + binary=cmd[0], + cmdargs=cmd[1:], + env=env, + process_class=ProcessHandler, + process_args={"processOutputLine": [self.on_output]}) + + self.logger.debug("Starting Firefox") + + self.runner.start(debug_args=debug_args, interactive=self.debug_info and self.debug_info.interactive) + self.logger.debug("Firefox Started") + + def load_prefs(self): + prefs = Preferences() + + prefs_path = os.path.join(self.prefs_root, "prefs_general.js") + if os.path.exists(prefs_path): + prefs.add(Preferences.read_prefs(prefs_path)) + else: + self.logger.warning("Failed to find base prefs file in %s" % prefs_path) + + # Add any custom preferences + prefs.add(self.extra_prefs, cast=True) + + return prefs() + + def stop(self, force=False): + if self.runner is not None and self.runner.is_running(): + try: + # For Firefox we assume that stopping the runner prompts the + # browser to shut down. This allows the leak log to be written + for clean, stop_f in [(True, lambda: self.runner.wait(self.shutdown_timeout)), + (False, lambda: self.runner.stop(signal.SIGTERM)), + (False, lambda: self.runner.stop(signal.SIGKILL))]: + if not force or not clean: + retcode = stop_f() + if retcode is not None: + self.logger.info("Browser exited with return code %s" % retcode) + break + except OSError: + # This can happen on Windows if the process is already dead + pass + self.logger.debug("stopped") + + def process_leaks(self): + self.logger.debug("PROCESS LEAKS %s" % self.leak_report_file) + if self.leak_report_file is None: + return + mozleak.process_leak_log( + self.leak_report_file, + leak_thresholds={ + "default": 0, + "tab": 10000, # See dependencies of bug 1051230. + # GMP rarely gets a log, but when it does, it leaks a little. + "geckomediaplugin": 20000, + }, + ignore_missing_leaks=["geckomediaplugin"], + log=self.logger, + stack_fixer=self.stack_fixer + ) + + def pid(self): + if self.runner.process_handler is None: + return None + + try: + return self.runner.process_handler.pid + except AttributeError: + return None + + def on_output(self, line): + """Write a line of output from the firefox process to the log""" + data = line.decode("utf8", "replace") + if self.stack_fixer: + data = self.stack_fixer(data) + self.logger.process_output(self.pid(), + data, + command=" ".join(self.runner.command)) + + def is_alive(self): + if self.runner: + return self.runner.is_running() + return False + + def cleanup(self): + self.stop() + self.process_leaks() + + def executor_browser(self): + assert self.marionette_port is not None + return ExecutorBrowser, {"marionette_port": self.marionette_port} + + def log_crash(self, process, test): + dump_dir = os.path.join(self.profile.profile, "minidumps") + + mozcrash.log_crashes(self.logger, + dump_dir, + symbols_path=self.symbols_path, + stackwalk_binary=self.stackwalk_binary, + process=process, + test=test) + + def setup_ssl(self): + """Create a certificate database to use in the test profile. This is configured + to trust the CA Certificate that has signed the web-platform.test server + certificate.""" + + self.logger.info("Setting up ssl") + + # Make sure the certutil libraries from the source tree are loaded when using a + # local copy of certutil + # TODO: Maybe only set this if certutil won't launch? + env = os.environ.copy() + certutil_dir = os.path.dirname(self.binary) + if mozinfo.isMac: + env_var = "DYLD_LIBRARY_PATH" + elif mozinfo.isUnix: + env_var = "LD_LIBRARY_PATH" + else: + env_var = "PATH" + + + env[env_var] = (os.path.pathsep.join([certutil_dir, env[env_var]]) + if env_var in env else certutil_dir).encode( + sys.getfilesystemencoding() or 'utf-8', 'replace') + + def certutil(*args): + cmd = [self.certutil_binary] + list(args) + self.logger.process_output("certutil", + subprocess.check_output(cmd, + env=env, + stderr=subprocess.STDOUT), + " ".join(cmd)) + + pw_path = os.path.join(self.profile.profile, ".crtdbpw") + with open(pw_path, "w") as f: + # Use empty password for certificate db + f.write("\n") + + cert_db_path = self.profile.profile + + # Create a new certificate db + certutil("-N", "-d", cert_db_path, "-f", pw_path) + + # Add the CA certificate to the database and mark as trusted to issue server certs + certutil("-A", "-d", cert_db_path, "-f", pw_path, "-t", "CT,,", + "-n", "web-platform-tests", "-i", self.ca_certificate_path) + + # List all certs in the database + certutil("-L", "-d", cert_db_path) diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/sauce.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/sauce.py new file mode 100644 index 00000000000..a2f29a4c54f --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/sauce.py @@ -0,0 +1,208 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this file, +# You can obtain one at http://mozilla.org/MPL/2.0/. + +import glob +import os +import shutil +import subprocess +import tarfile +import tempfile +import time +from cStringIO import StringIO as CStringIO + +import requests + +from .base import Browser, ExecutorBrowser, require_arg +from ..executors import executor_kwargs as base_executor_kwargs +from ..executors.executorselenium import (SeleniumTestharnessExecutor, + SeleniumRefTestExecutor) + +here = os.path.split(__file__)[0] + + +__wptrunner__ = {"product": "sauce", + "check_args": "check_args", + "browser": "SauceBrowser", + "executor": {"testharness": "SeleniumTestharnessExecutor", + "reftest": "SeleniumRefTestExecutor"}, + "browser_kwargs": "browser_kwargs", + "executor_kwargs": "executor_kwargs", + "env_extras": "env_extras", + "env_options": "env_options"} + + +def get_capabilities(**kwargs): + browser_name = kwargs["sauce_browser"] + platform = kwargs["sauce_platform"] + version = kwargs["sauce_version"] + build = kwargs["sauce_build"] + tags = kwargs["sauce_tags"] + tunnel_id = kwargs["sauce_tunnel_id"] + prerun_script = { + "MicrosoftEdge": { + "executable": "sauce-storage:edge-prerun.bat", + "background": False, + }, + "safari": { + "executable": "sauce-storage:safari-prerun.sh", + "background": False, + } + } + capabilities = { + "browserName": browser_name, + "build": build, + "disablePopupHandler": True, + "name": "%s %s on %s" % (browser_name, version, platform), + "platform": platform, + "public": "public", + "selenium-version": "3.3.1", + "tags": tags, + "tunnel-identifier": tunnel_id, + "version": version, + "prerun": prerun_script.get(browser_name) + } + + if browser_name == 'MicrosoftEdge': + capabilities['selenium-version'] = '2.4.8' + + return capabilities + + +def get_sauce_config(**kwargs): + browser_name = kwargs["sauce_browser"] + sauce_user = kwargs["sauce_user"] + sauce_key = kwargs["sauce_key"] + + hub_url = "%s:%s@localhost:4445" % (sauce_user, sauce_key) + data = { + "url": "http://%s/wd/hub" % hub_url, + "browserName": browser_name, + "capabilities": get_capabilities(**kwargs) + } + + return data + + +def check_args(**kwargs): + require_arg(kwargs, "sauce_browser") + require_arg(kwargs, "sauce_platform") + require_arg(kwargs, "sauce_version") + require_arg(kwargs, "sauce_user") + require_arg(kwargs, "sauce_key") + + +def browser_kwargs(test_type, run_info_data, **kwargs): + sauce_config = get_sauce_config(**kwargs) + + return {"sauce_config": sauce_config} + + +def executor_kwargs(test_type, server_config, cache_manager, run_info_data, + **kwargs): + executor_kwargs = base_executor_kwargs(test_type, server_config, + cache_manager, **kwargs) + + executor_kwargs["capabilities"] = get_capabilities(**kwargs) + + return executor_kwargs + + +def env_extras(**kwargs): + return [SauceConnect(**kwargs)] + + +def env_options(): + return {"host": "web-platform.test", + "bind_hostname": "true", + "supports_debugger": False} + + +def get_tar(url, dest): + resp = requests.get(url, stream=True) + resp.raise_for_status() + with tarfile.open(fileobj=CStringIO(resp.raw.read())) as f: + f.extractall(path=dest) + + +class SauceConnect(): + + def __init__(self, **kwargs): + self.sauce_user = kwargs["sauce_user"] + self.sauce_key = kwargs["sauce_key"] + self.sauce_tunnel_id = kwargs["sauce_tunnel_id"] + self.sauce_connect_binary = kwargs.get("sauce_connect_binary") + self.sc_process = None + self.temp_dir = None + + def __enter__(self, options): + if not self.sauce_connect_binary: + self.temp_dir = tempfile.mkdtemp() + get_tar("https://saucelabs.com/downloads/sc-latest-linux.tar.gz", self.temp_dir) + self.sauce_connect_binary = glob.glob(os.path.join(self.temp_dir, "sc-*-linux/bin/sc"))[0] + + self.upload_prerun_exec('edge-prerun.bat') + self.upload_prerun_exec('safari-prerun.sh') + + self.sc_process = subprocess.Popen([ + self.sauce_connect_binary, + "--user=%s" % self.sauce_user, + "--api-key=%s" % self.sauce_key, + "--no-remove-colliding-tunnels", + "--tunnel-identifier=%s" % self.sauce_tunnel_id, + "--readyfile=./sauce_is_ready", + "--tunnel-domains", + "web-platform.test", + "*.web-platform.test" + ]) + while not os.path.exists('./sauce_is_ready') and not self.sc_process.poll(): + time.sleep(5) + + if self.sc_process.returncode is not None and self.sc_process.returncode > 0: + raise SauceException("Unable to start Sauce Connect Proxy. Process exited with code %s", self.sc_process.returncode) + + def __exit__(self, *args): + self.sc_process.terminate() + if os.path.exists(self.temp_dir): + try: + shutil.rmtree(self.temp_dir) + except OSError: + pass + + def upload_prerun_exec(self, file_name): + auth = (self.sauce_user, self.sauce_key) + url = "https://saucelabs.com/rest/v1/storage/%s/%s?overwrite=true" % (self.sauce_user, file_name) + + with open(os.path.join(here, 'sauce_setup', file_name), 'rb') as f: + requests.post(url, data=f, auth=auth) + + +class SauceException(Exception): + pass + + +class SauceBrowser(Browser): + init_timeout = 300 + + def __init__(self, logger, sauce_config): + Browser.__init__(self, logger) + self.sauce_config = sauce_config + + def start(self): + pass + + def stop(self, force=False): + pass + + def pid(self): + return None + + def is_alive(self): + # TODO: Should this check something about the connection? + return True + + def cleanup(self): + pass + + def executor_browser(self): + return ExecutorBrowser, {"webdriver_url": self.sauce_config["url"]} diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/sauce_setup/edge-prerun.bat b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/sauce_setup/edge-prerun.bat new file mode 100644 index 00000000000..4554894896b --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/sauce_setup/edge-prerun.bat @@ -0,0 +1,2 @@ +@echo off +reg add "HKCU\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppContainer\Storage\microsoft.microsoftedge_8wekyb3d8bbwe\MicrosoftEdge\New Windows" /v "PopupMgr" /t REG_SZ /d no diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/sauce_setup/safari-prerun.sh b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/sauce_setup/safari-prerun.sh new file mode 100644 index 00000000000..85c72e6be6a --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/sauce_setup/safari-prerun.sh @@ -0,0 +1,2 @@ +#!/bin/bash +defaults write com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2JavaScriptCanOpenWindowsAutomatically -bool true diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/server-locations.txt b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/server-locations.txt new file mode 100644 index 00000000000..5dcaf4bb6a4 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/server-locations.txt @@ -0,0 +1,31 @@ +http://localhost:8000 primary + +http://web-platform.test:8000 +http://www.web-platform.test:8000 +http://www1.web-platform.test:8000 +http://www2.web-platform.test:8000 +http://xn--n8j6ds53lwwkrqhv28a.web-platform.test:8000 +http://xn--lve-6lad.web-platform.test:8000 + +http://web-platform.test:8001 +http://www.web-platform.test:8001 +http://www1.web-platform.test:8001 +http://www2.web-platform.test:8001 +http://xn--n8j6ds53lwwkrqhv28a.web-platform.test:8001 +http://xn--lve-6lad.web-platform.test:8001 + +https://web-platform.test:8443 +https://www.web-platform.test:8443 +https://www1.web-platform.test:8443 +https://www2.web-platform.test:8443 +https://xn--n8j6ds53lwwkrqhv28a.web-platform.test:8443 +https://xn--lve-6lad.web-platform.test:8443 + +# These are actually ws servers, but until mozprofile is +# fixed we have to pretend that they are http servers +http://web-platform.test:8888 +http://www.web-platform.test:8888 +http://www1.web-platform.test:8888 +http://www2.web-platform.test:8888 +http://xn--n8j6ds53lwwkrqhv28a.web-platform.test:8888 +http://xn--lve-6lad.web-platform.test:8888 diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/servo.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/servo.py new file mode 100644 index 00000000000..89d69ab9e54 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/servo.py @@ -0,0 +1,81 @@ +import os + +from .base import NullBrowser, ExecutorBrowser, require_arg +from ..executors import executor_kwargs as base_executor_kwargs +from ..executors.executorservo import ServoTestharnessExecutor, ServoRefTestExecutor, ServoWdspecExecutor + +here = os.path.join(os.path.split(__file__)[0]) + +__wptrunner__ = { + "product": "servo", + "check_args": "check_args", + "browser": "ServoBrowser", + "executor": { + "testharness": "ServoTestharnessExecutor", + "reftest": "ServoRefTestExecutor", + "wdspec": "ServoWdspecExecutor", + }, + "browser_kwargs": "browser_kwargs", + "executor_kwargs": "executor_kwargs", + "env_extras": "env_extras", + "env_options": "env_options", + "update_properties": "update_properties", +} + + +def check_args(**kwargs): + require_arg(kwargs, "binary") + + +def browser_kwargs(test_type, run_info_data, **kwargs): + return { + "binary": kwargs["binary"], + "debug_info": kwargs["debug_info"], + "binary_args": kwargs["binary_args"], + "user_stylesheets": kwargs.get("user_stylesheets"), + "ca_certificate_path": kwargs["ssl_env"].ca_cert_path(), + } + + +def executor_kwargs(test_type, server_config, cache_manager, run_info_data, + **kwargs): + rv = base_executor_kwargs(test_type, server_config, + cache_manager, **kwargs) + rv["pause_after_test"] = kwargs["pause_after_test"] + return rv + + +def env_extras(**kwargs): + return [] + + +def env_options(): + return {"host": "127.0.0.1", + "external_host": "web-platform.test", + "bind_hostname": "true", + "testharnessreport": "testharnessreport-servo.js", + "supports_debugger": True} + + +def update_properties(): + return ["debug", "os", "version", "processor", "bits"], None + + +class ServoBrowser(NullBrowser): + def __init__(self, logger, binary, debug_info=None, binary_args=None, + user_stylesheets=None, ca_certificate_path=None): + NullBrowser.__init__(self, logger) + self.binary = binary + self.debug_info = debug_info + self.binary_args = binary_args or [] + self.user_stylesheets = user_stylesheets or [] + self.ca_certificate_path = ca_certificate_path + + def executor_browser(self): + return ExecutorBrowser, { + "binary": self.binary, + "debug_info": self.debug_info, + "binary_args": self.binary_args, + "user_stylesheets": self.user_stylesheets, + "ca_certificate_path": self.ca_certificate_path, + } diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/servodriver.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/servodriver.py new file mode 100644 index 00000000000..c251de84d16 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/servodriver.py @@ -0,0 +1,165 @@ +import os +import subprocess +import tempfile + +from mozprocess import ProcessHandler + +from .base import Browser, require_arg, get_free_port, browser_command, ExecutorBrowser +from ..executors import executor_kwargs as base_executor_kwargs +from ..executors.executorservodriver import (ServoWebDriverTestharnessExecutor, + ServoWebDriverRefTestExecutor) + +here = os.path.join(os.path.split(__file__)[0]) + +__wptrunner__ = { + "product": "servodriver", + "check_args": "check_args", + "browser": "ServoWebDriverBrowser", + "executor": { + "testharness": "ServoWebDriverTestharnessExecutor", + "reftest": "ServoWebDriverRefTestExecutor", + }, + "browser_kwargs": "browser_kwargs", + "executor_kwargs": "executor_kwargs", + "env_extras": "env_extras", + "env_options": "env_options", + "update_properties": "update_properties", +} + +hosts_text = """127.0.0.1 web-platform.test +127.0.0.1 www.web-platform.test +127.0.0.1 www1.web-platform.test +127.0.0.1 www2.web-platform.test +127.0.0.1 xn--n8j6ds53lwwkrqhv28a.web-platform.test +127.0.0.1 xn--lve-6lad.web-platform.test +""" + + +def check_args(**kwargs): + require_arg(kwargs, "binary") + + +def browser_kwargs(test_type, run_info_data, **kwargs): + return { + "binary": kwargs["binary"], + "debug_info": kwargs["debug_info"], + "user_stylesheets": kwargs.get("user_stylesheets"), + } + + +def executor_kwargs(test_type, server_config, cache_manager, run_info_data, **kwargs): + rv = base_executor_kwargs(test_type, server_config, + cache_manager, **kwargs) + return rv + + +def env_extras(**kwargs): + return [] + + +def env_options(): + return {"host": "127.0.0.1", + "external_host": "web-platform.test", + "bind_hostname": "true", + "testharnessreport": "testharnessreport-servodriver.js", + "supports_debugger": True} + + +def update_properties(): + return ["debug", "os", "version", "processor", "bits"], None + + +def make_hosts_file(): + hosts_fd, hosts_path = tempfile.mkstemp() + with os.fdopen(hosts_fd, "w") as f: + f.write(hosts_text) + return hosts_path + + +class ServoWebDriverBrowser(Browser): + used_ports = set() + + def __init__(self, logger, binary, debug_info=None, webdriver_host="127.0.0.1", + user_stylesheets=None): + Browser.__init__(self, logger) + self.binary = binary + self.webdriver_host = webdriver_host + self.webdriver_port = None + self.proc = None + self.debug_info = debug_info + self.hosts_path = make_hosts_file() + self.command = None + self.user_stylesheets = user_stylesheets if user_stylesheets else [] + + def start(self, **kwargs): + self.webdriver_port = get_free_port(4444, exclude=self.used_ports) + self.used_ports.add(self.webdriver_port) + + env = os.environ.copy() + env["HOST_FILE"] = self.hosts_path + env["RUST_BACKTRACE"] = "1" + + debug_args, command = browser_command( + self.binary, + [ + "--hard-fail", + "--webdriver", str(self.webdriver_port), + "about:blank", + ], + self.debug_info + ) + + for stylesheet in self.user_stylesheets: + command += ["--user-stylesheet", stylesheet] + + self.command = command + + self.command = debug_args + self.command + + if not self.debug_info or not self.debug_info.interactive: + self.proc = ProcessHandler(self.command, + processOutputLine=[self.on_output], + env=env, + storeOutput=False) + self.proc.run() + else: + self.proc = subprocess.Popen(self.command, env=env) + + self.logger.debug("Servo Started") + + def stop(self, force=False): + self.logger.debug("Stopping browser") + if self.proc is not None: + try: + self.proc.kill() + except OSError: + # This can happen on Windows if the process is already dead + pass + + def pid(self): + if self.proc is None: + return None + + try: + return self.proc.pid + except AttributeError: + return None + + def on_output(self, line): + """Write a line of output from the process to the log""" + self.logger.process_output(self.pid(), + line.decode("utf8", "replace"), + command=" ".join(self.command)) + + def is_alive(self): + if self.runner: + return self.runner.is_running() + return False + + def cleanup(self): + self.stop() + + def executor_browser(self): + assert self.webdriver_port is not None + return ExecutorBrowser, {"webdriver_host": self.webdriver_host, + "webdriver_port": self.webdriver_port} diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/config.json b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/config.json new file mode 100644 index 00000000000..d146424a0f0 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/config.json @@ -0,0 +1,7 @@ +{"host": "%(host)s", + "ports":{"http":[8000, 8001], + "https":[8443], + "ws":[8888]}, + "check_subdomains":false, + "bind_hostname":%(bind_hostname)s, + "ssl":{}} diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/config.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/config.py new file mode 100644 index 00000000000..5bd3f467f3e --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/config.py @@ -0,0 +1,60 @@ +import ConfigParser +import os +import sys +from collections import OrderedDict + +here = os.path.split(__file__)[0] + +class ConfigDict(dict): + def __init__(self, base_path, *args, **kwargs): + self.base_path = base_path + dict.__init__(self, *args, **kwargs) + + def get_path(self, key, default=None): + if key not in self: + return default + path = self[key] + os.path.expanduser(path) + return os.path.abspath(os.path.join(self.base_path, path)) + +def read(config_path): + config_path = os.path.abspath(config_path) + config_root = os.path.split(config_path)[0] + parser = ConfigParser.SafeConfigParser() + success = parser.read(config_path) + assert config_path in success, success + + subns = {"pwd": os.path.abspath(os.path.curdir)} + + rv = OrderedDict() + for section in parser.sections(): + rv[section] = ConfigDict(config_root) + for key in parser.options(section): + rv[section][key] = parser.get(section, key, False, subns) + + return rv + +def path(argv=None): + if argv is None: + argv = [] + path = None + + for i, arg in enumerate(argv): + if arg == "--config": + if i + 1 < len(argv): + path = argv[i + 1] + elif arg.startswith("--config="): + path = arg.split("=", 1)[1] + if path is not None: + break + + if path is None: + if os.path.exists("wptrunner.ini"): + path = os.path.abspath("wptrunner.ini") + else: + path = os.path.join(here, "..", "wptrunner.default.ini") + + return os.path.abspath(path) + +def load(): + return read(path(sys.argv)) diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/environment.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/environment.py new file mode 100644 index 00000000000..558a44582b8 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/environment.py @@ -0,0 +1,223 @@ +import json +import os +import multiprocessing +import signal +import socket +import sys +import time + +from mozlog import get_default_logger, handlers + +from wptlogging import LogLevelRewriter + +here = os.path.split(__file__)[0] + +serve = None +sslutils = None + + +hostnames = ["web-platform.test", + "www.web-platform.test", + "www1.web-platform.test", + "www2.web-platform.test", + "xn--n8j6ds53lwwkrqhv28a.web-platform.test", + "xn--lve-6lad.web-platform.test"] + + +def do_delayed_imports(logger, test_paths): + global serve, sslutils + + serve_root = serve_path(test_paths) + sys.path.insert(0, serve_root) + + failed = [] + + try: + from tools.serve import serve + except ImportError: + from wpt_tools.serve import serve + except ImportError: + failed.append("serve") + + try: + import sslutils + except ImportError: + failed.append("sslutils") + + if failed: + logger.critical( + "Failed to import %s. Ensure that tests path %s contains web-platform-tests" % + (", ".join(failed), serve_root)) + sys.exit(1) + + +def serve_path(test_paths): + return test_paths["/"]["tests_path"] + + +def get_ssl_kwargs(**kwargs): + if kwargs["ssl_type"] == "openssl": + args = {"openssl_binary": kwargs["openssl_binary"]} + elif kwargs["ssl_type"] == "pregenerated": + args = {"host_key_path": kwargs["host_key_path"], + "host_cert_path": kwargs["host_cert_path"], + "ca_cert_path": kwargs["ca_cert_path"]} + else: + args = {} + return args + + +def ssl_env(logger, **kwargs): + ssl_env_cls = sslutils.environments[kwargs["ssl_type"]] + return ssl_env_cls(logger, **get_ssl_kwargs(**kwargs)) + + +class TestEnvironmentError(Exception): + pass + + +class TestEnvironment(object): + def __init__(self, test_paths, ssl_env, pause_after_test, debug_info, options, env_extras): + """Context manager that owns the test environment i.e. the http and + websockets servers""" + self.test_paths = test_paths + self.ssl_env = ssl_env + self.server = None + self.config = None + self.external_config = None + self.pause_after_test = pause_after_test + self.test_server_port = options.pop("test_server_port", True) + self.debug_info = debug_info + self.options = options if options is not None else {} + + self.cache_manager = multiprocessing.Manager() + self.stash = serve.stash.StashServer() + self.env_extras = env_extras + + + def __enter__(self): + self.stash.__enter__() + self.ssl_env.__enter__() + self.cache_manager.__enter__() + for cm in self.env_extras: + cm.__enter__(self.options) + self.setup_server_logging() + self.config = self.load_config() + serve.set_computed_defaults(self.config) + self.external_config, self.servers = serve.start(self.config, self.ssl_env, + self.get_routes()) + if self.options.get("supports_debugger") and self.debug_info and self.debug_info.interactive: + self.ignore_interrupts() + return self + + def __exit__(self, exc_type, exc_val, exc_tb): + self.process_interrupts() + + for scheme, servers in self.servers.iteritems(): + for port, server in servers: + server.kill() + for cm in self.env_extras: + cm.__exit__() + self.cache_manager.__exit__(exc_type, exc_val, exc_tb) + self.ssl_env.__exit__(exc_type, exc_val, exc_tb) + self.stash.__exit__() + + def ignore_interrupts(self): + signal.signal(signal.SIGINT, signal.SIG_IGN) + + def process_interrupts(self): + signal.signal(signal.SIGINT, signal.SIG_DFL) + + def load_config(self): + default_config_path = os.path.join(serve_path(self.test_paths), "config.default.json") + local_config_path = os.path.join(here, "config.json") + + with open(default_config_path) as f: + default_config = json.load(f) + + with open(local_config_path) as f: + data = f.read() + local_config = json.loads(data % self.options) + + #TODO: allow non-default configuration for ssl + + local_config["external_host"] = self.options.get("external_host", None) + local_config["ssl"]["encrypt_after_connect"] = self.options.get("encrypt_after_connect", False) + + config = serve.merge_json(default_config, local_config) + config["doc_root"] = serve_path(self.test_paths) + + if not self.ssl_env.ssl_enabled: + config["ports"]["https"] = [None] + + host = self.options.get("certificate_domain", config["host"]) + hosts = [host] + hosts.extend("%s.%s" % (item[0], host) for item in serve.get_subdomains(host).values()) + key_file, certificate = self.ssl_env.host_cert_path(hosts) + + config["key_file"] = key_file + config["certificate"] = certificate + + return config + + def setup_server_logging(self): + server_logger = get_default_logger(component="wptserve") + assert server_logger is not None + log_filter = handlers.LogLevelFilter(lambda x:x, "info") + # Downgrade errors to warnings for the server + log_filter = LogLevelRewriter(log_filter, ["error"], "warning") + server_logger.component_filter = log_filter + + try: + #Set as the default logger for wptserve + serve.set_logger(server_logger) + serve.logger = server_logger + except Exception: + # This happens if logging has already been set up for wptserve + pass + + def get_routes(self): + route_builder = serve.RoutesBuilder() + + for path, format_args, content_type, route in [ + ("testharness_runner.html", {}, "text/html", "/testharness_runner.html"), + (self.options.get("testharnessreport", "testharnessreport.js"), + {"output": self.pause_after_test}, "text/javascript", + "/resources/testharnessreport.js")]: + path = os.path.normpath(os.path.join(here, path)) + route_builder.add_static(path, format_args, content_type, route) + + for url_base, paths in self.test_paths.iteritems(): + if url_base == "/": + continue + route_builder.add_mount_point(url_base, paths["tests_path"]) + + if "/" not in self.test_paths: + del route_builder.mountpoint_routes["/"] + + return route_builder.get_routes() + + def ensure_started(self): + # Pause for a while to ensure that the server has a chance to start + for _ in xrange(20): + failed = self.test_servers() + if not failed: + return + time.sleep(0.5) + raise EnvironmentError("Servers failed to start (scheme:port): %s" % ("%s:%s" for item in failed)) + + def test_servers(self): + failed = [] + for scheme, servers in self.servers.iteritems(): + for port, server in servers: + if self.test_server_port: + s = socket.socket() + try: + s.connect((self.config["host"], port)) + except socket.error: + failed.append((scheme, port)) + finally: + s.close() + + if not server.is_alive(): + failed.append((scheme, port)) diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/__init__.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/__init__.py new file mode 100644 index 00000000000..24761b83830 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/__init__.py @@ -0,0 +1,4 @@ +from base import (executor_kwargs, + testharness_result_converter, + reftest_result_converter, + TestExecutor) diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/base.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/base.py new file mode 100644 index 00000000000..a4bda4faafa --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/base.py @@ -0,0 +1,325 @@ +import hashlib +import json +import os +import traceback +import urlparse +from abc import ABCMeta, abstractmethod + +from ..testrunner import Stop + +here = os.path.split(__file__)[0] + + +def executor_kwargs(test_type, server_config, cache_manager, **kwargs): + timeout_multiplier = kwargs["timeout_multiplier"] + if timeout_multiplier is None: + timeout_multiplier = 1 + + executor_kwargs = {"server_config": server_config, + "timeout_multiplier": timeout_multiplier, + "debug_info": kwargs["debug_info"]} + + if test_type == "reftest": + executor_kwargs["screenshot_cache"] = cache_manager.dict() + + return executor_kwargs + + +def strip_server(url): + """Remove the scheme and netloc from a url, leaving only the path and any query + or fragment. + + url - the url to strip + + e.g. http://example.org:8000/tests?id=1#2 becomes /tests?id=1#2""" + + url_parts = list(urlparse.urlsplit(url)) + url_parts[0] = "" + url_parts[1] = "" + return urlparse.urlunsplit(url_parts) + + +class TestharnessResultConverter(object): + harness_codes = {0: "OK", + 1: "ERROR", + 2: "TIMEOUT"} + + test_codes = {0: "PASS", + 1: "FAIL", + 2: "TIMEOUT", + 3: "NOTRUN"} + + def __call__(self, test, result): + """Convert a JSON result into a (TestResult, [SubtestResult]) tuple""" + result_url, status, message, stack, subtest_results = result + assert result_url == test.url, ("Got results from %s, expected %s" % + (result_url, test.url)) + harness_result = test.result_cls(self.harness_codes[status], message) + return (harness_result, + [test.subtest_result_cls(name, self.test_codes[status], message, stack) + for name, status, message, stack in subtest_results]) + + +testharness_result_converter = TestharnessResultConverter() + + +def reftest_result_converter(self, test, result): + return (test.result_cls(result["status"], result["message"], + extra=result.get("extra")), []) + + +def pytest_result_converter(self, test, data): + harness_data, subtest_data = data + + if subtest_data is None: + subtest_data = [] + + harness_result = test.result_cls(*harness_data) + subtest_results = [test.subtest_result_cls(*item) for item in subtest_data] + + return (harness_result, subtest_results) + + +class ExecutorException(Exception): + def __init__(self, status, message): + self.status = status + self.message = message + + +class TestExecutor(object): + __metaclass__ = ABCMeta + + test_type = None + convert_result = None + + def __init__(self, browser, server_config, timeout_multiplier=1, + debug_info=None): + """Abstract Base class for object that actually executes the tests in a + specific browser. Typically there will be a different TestExecutor + subclass for each test type and method of executing tests. + + :param browser: ExecutorBrowser instance providing properties of the + browser that will be tested. + :param server_config: Dictionary of wptserve server configuration of the + form stored in TestEnvironment.external_config + :param timeout_multiplier: Multiplier relative to base timeout to use + when setting test timeout. + """ + self.runner = None + self.browser = browser + self.server_config = server_config + self.timeout_multiplier = timeout_multiplier + self.debug_info = debug_info + self.last_environment = {"protocol": "http", + "prefs": {}} + self.protocol = None # This must be set in subclasses + + @property + def logger(self): + """StructuredLogger for this executor""" + if self.runner is not None: + return self.runner.logger + + def setup(self, runner): + """Run steps needed before tests can be started e.g. connecting to + browser instance + + :param runner: TestRunner instance that is going to run the tests""" + self.runner = runner + if self.protocol is not None: + self.protocol.setup(runner) + + def teardown(self): + """Run cleanup steps after tests have finished""" + if self.protocol is not None: + self.protocol.teardown() + + def run_test(self, test): + """Run a particular test. + + :param test: The test to run""" + if test.environment != self.last_environment: + self.on_environment_change(test.environment) + + try: + result = self.do_test(test) + except Exception as e: + result = self.result_from_exception(test, e) + + if result is Stop: + return result + + # log result of parent test + if result[0].status == "ERROR": + self.logger.debug(result[0].message) + + self.last_environment = test.environment + + self.runner.send_message("test_ended", test, result) + + def server_url(self, protocol): + return "%s://%s:%s" % (protocol, + self.server_config["host"], + self.server_config["ports"][protocol][0]) + + def test_url(self, test): + return urlparse.urljoin(self.server_url(test.environment["protocol"]), test.url) + + @abstractmethod + def do_test(self, test): + """Test-type and protocol specific implementation of running a + specific test. + + :param test: The test to run.""" + pass + + def on_environment_change(self, new_environment): + pass + + def result_from_exception(self, test, e): + if hasattr(e, "status") and e.status in test.result_cls.statuses: + status = e.status + else: + status = "ERROR" + message = unicode(getattr(e, "message", "")) + if message: + message += "\n" + message += traceback.format_exc(e) + return test.result_cls(status, message), [] + + +class TestharnessExecutor(TestExecutor): + convert_result = testharness_result_converter + + +class RefTestExecutor(TestExecutor): + convert_result = reftest_result_converter + + def __init__(self, browser, server_config, timeout_multiplier=1, screenshot_cache=None, + debug_info=None): + TestExecutor.__init__(self, browser, server_config, + timeout_multiplier=timeout_multiplier, + debug_info=debug_info) + + self.screenshot_cache = screenshot_cache + + +class RefTestImplementation(object): + def __init__(self, executor): + self.timeout_multiplier = executor.timeout_multiplier + self.executor = executor + # Cache of url:(screenshot hash, screenshot). Typically the + # screenshot is None, but we set this value if a test fails + # and the screenshot was taken from the cache so that we may + # retrieve the screenshot from the cache directly in the future + self.screenshot_cache = self.executor.screenshot_cache + self.message = None + + @property + def logger(self): + return self.executor.logger + + def get_hash(self, test, viewport_size, dpi): + timeout = test.timeout * self.timeout_multiplier + key = (test.url, viewport_size, dpi) + + if key not in self.screenshot_cache: + success, data = self.executor.screenshot(test, viewport_size, dpi) + + if not success: + return False, data + + screenshot = data + hash_value = hashlib.sha1(screenshot).hexdigest() + + self.screenshot_cache[key] = (hash_value, None) + + rv = (hash_value, screenshot) + else: + rv = self.screenshot_cache[key] + + self.message.append("%s %s" % (test.url, rv[0])) + return True, rv + + def is_pass(self, lhs_hash, rhs_hash, relation): + assert relation in ("==", "!=") + self.message.append("Testing %s %s %s" % (lhs_hash, relation, rhs_hash)) + return ((relation == "==" and lhs_hash == rhs_hash) or + (relation == "!=" and lhs_hash != rhs_hash)) + + def run_test(self, test): + viewport_size = test.viewport_size + dpi = test.dpi + self.message = [] + + # Depth-first search of reference tree, with the goal + # of reachings a leaf node with only pass results + + stack = list(((test, item[0]), item[1]) for item in reversed(test.references)) + while stack: + hashes = [None, None] + screenshots = [None, None] + + nodes, relation = stack.pop() + + for i, node in enumerate(nodes): + success, data = self.get_hash(node, viewport_size, dpi) + if success is False: + return {"status": data[0], "message": data[1]} + + hashes[i], screenshots[i] = data + + if self.is_pass(hashes[0], hashes[1], relation): + if nodes[1].references: + stack.extend(list(((nodes[1], item[0]), item[1]) for item in reversed(nodes[1].references))) + else: + # We passed + return {"status":"PASS", "message": None} + + # We failed, so construct a failure message + + for i, (node, screenshot) in enumerate(zip(nodes, screenshots)): + if screenshot is None: + success, screenshot = self.retake_screenshot(node, viewport_size, dpi) + if success: + screenshots[i] = screenshot + + log_data = [{"url": nodes[0].url, "screenshot": screenshots[0]}, relation, + {"url": nodes[1].url, "screenshot": screenshots[1]}] + + return {"status": "FAIL", + "message": "\n".join(self.message), + "extra": {"reftest_screenshots": log_data}} + + def retake_screenshot(self, node, viewport_size, dpi): + success, data = self.executor.screenshot(node, viewport_size, dpi) + if not success: + return False, data + + key = (node.url, viewport_size, dpi) + hash_val, _ = self.screenshot_cache[key] + self.screenshot_cache[key] = hash_val, data + return True, data + + +class WdspecExecutor(TestExecutor): + convert_result = pytest_result_converter + + +class Protocol(object): + def __init__(self, executor, browser): + self.executor = executor + self.browser = browser + + @property + def logger(self): + return self.executor.logger + + def setup(self, runner): + pass + + def teardown(self): + pass + + def wait(self): + pass diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executormarionette.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executormarionette.py new file mode 100644 index 00000000000..51b9f30f470 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executormarionette.py @@ -0,0 +1,621 @@ +import hashlib +import httplib +import os +import socket +import threading +import time +import traceback +import urlparse +import uuid +from collections import defaultdict + +from ..wpttest import WdspecResult, WdspecSubtestResult + +errors = None +marionette = None +pytestrunner = None + +here = os.path.join(os.path.split(__file__)[0]) + +from .base import (ExecutorException, + Protocol, + RefTestExecutor, + RefTestImplementation, + TestExecutor, + TestharnessExecutor, + testharness_result_converter, + reftest_result_converter, + strip_server, + WdspecExecutor) +from ..testrunner import Stop +from ..webdriver_server import GeckoDriverServer + +# Extra timeout to use after internal test timeout at which the harness +# should force a timeout +extra_timeout = 5 # seconds + + +def do_delayed_imports(): + global errors, marionette + + # Marionette client used to be called marionette, recently it changed + # to marionette_driver for unfathomable reasons + try: + import marionette + from marionette import errors + except ImportError: + from marionette_driver import marionette, errors + + +class MarionetteProtocol(Protocol): + def __init__(self, executor, browser, timeout_multiplier=1): + do_delayed_imports() + + Protocol.__init__(self, executor, browser) + self.marionette = None + self.marionette_port = browser.marionette_port + self.timeout_multiplier = timeout_multiplier + self.timeout = None + self.runner_handle = None + + def setup(self, runner): + """Connect to browser via Marionette.""" + Protocol.setup(self, runner) + + self.logger.debug("Connecting to Marionette on port %i" % self.marionette_port) + startup_timeout = marionette.Marionette.DEFAULT_STARTUP_TIMEOUT * self.timeout_multiplier + self.marionette = marionette.Marionette(host='localhost', + port=self.marionette_port, + socket_timeout=None, + startup_timeout=startup_timeout) + + # XXX Move this timeout somewhere + self.logger.debug("Waiting for Marionette connection") + while True: + success = self.marionette.wait_for_port(60 * self.timeout_multiplier) + #When running in a debugger wait indefinitely for firefox to start + if success or self.executor.debug_info is None: + break + + session_started = False + if success: + try: + self.logger.debug("Starting Marionette session") + self.marionette.start_session() + except Exception as e: + self.logger.warning("Starting marionette session failed: %s" % e) + else: + self.logger.debug("Marionette session started") + session_started = True + + if not success or not session_started: + self.logger.warning("Failed to connect to Marionette") + self.executor.runner.send_message("init_failed") + else: + try: + self.after_connect() + except Exception: + self.logger.warning("Post-connection steps failed") + self.logger.error(traceback.format_exc()) + self.executor.runner.send_message("init_failed") + else: + self.executor.runner.send_message("init_succeeded") + + def teardown(self): + try: + self.marionette._request_in_app_shutdown() + self.marionette.delete_session(send_request=False, reset_session_id=True) + except Exception: + # This is typically because the session never started + pass + if self.marionette is not None: + del self.marionette + + @property + def is_alive(self): + """Check if the Marionette connection is still active.""" + try: + self.marionette.current_window_handle + except Exception: + return False + return True + + def after_connect(self): + self.load_runner(self.executor.last_environment["protocol"]) + + def set_timeout(self, timeout): + """Set the Marionette script timeout. + + :param timeout: Script timeout in seconds + + """ + self.marionette.timeout.script = timeout + self.timeout = timeout + + def load_runner(self, protocol): + # Check if we previously had a test window open, and if we did make sure it's closed + self.marionette.execute_script("if (window.wrappedJSObject.win) {window.wrappedJSObject.win.close()}") + url = urlparse.urljoin(self.executor.server_url(protocol), "/testharness_runner.html") + self.logger.debug("Loading %s" % url) + self.runner_handle = self.marionette.current_window_handle + try: + self.marionette.navigate(url) + except Exception as e: + self.logger.critical( + "Loading initial page %s failed. Ensure that the " + "there are no other programs bound to this port and " + "that your firewall rules or network setup does not " + "prevent access.\e%s" % (url, traceback.format_exc(e))) + self.marionette.execute_script( + "document.title = '%s'" % threading.current_thread().name.replace("'", '"')) + + def close_old_windows(self, protocol): + handles = self.marionette.window_handles + runner_handle = None + try: + handles.remove(self.runner_handle) + runner_handle = self.runner_handle + except ValueError: + # The runner window probably changed id but we can restore it + # This isn't supposed to happen, but marionette ids are not yet stable + # We assume that the first handle returned corresponds to the runner, + # but it hopefully doesn't matter too much if that assumption is + # wrong since we reload the runner in that tab anyway. + runner_handle = handles.pop(0) + + for handle in handles: + self.marionette.switch_to_window(handle) + self.marionette.close() + + self.marionette.switch_to_window(runner_handle) + if runner_handle != self.runner_handle: + self.load_runner(protocol) + + def wait(self): + socket_timeout = self.marionette.client.sock.gettimeout() + if socket_timeout: + self.marionette.timeout.script = socket_timeout / 2 + + while True: + try: + self.marionette.execute_async_script("") + except errors.ScriptTimeoutException: + self.logger.debug("Script timed out") + pass + except (socket.timeout, IOError): + self.logger.debug("Socket closed") + break + except Exception as e: + self.logger.error(traceback.format_exc(e)) + break + + def on_environment_change(self, old_environment, new_environment): + #Unset all the old prefs + for name in old_environment.get("prefs", {}).iterkeys(): + value = self.executor.original_pref_values[name] + if value is None: + self.clear_user_pref(name) + else: + self.set_pref(name, value) + + for name, value in new_environment.get("prefs", {}).iteritems(): + self.executor.original_pref_values[name] = self.get_pref(name) + self.set_pref(name, value) + + def set_pref(self, name, value): + if value.lower() not in ("true", "false"): + try: + int(value) + except ValueError: + value = "'%s'" % value + else: + value = value.lower() + + self.logger.info("Setting pref %s (%s)" % (name, value)) + + script = """ + let prefInterface = Components.classes["@mozilla.org/preferences-service;1"] + .getService(Components.interfaces.nsIPrefBranch); + let pref = '%s'; + let type = prefInterface.getPrefType(pref); + let value = %s; + switch(type) { + case prefInterface.PREF_STRING: + prefInterface.setCharPref(pref, value); + break; + case prefInterface.PREF_BOOL: + prefInterface.setBoolPref(pref, value); + break; + case prefInterface.PREF_INT: + prefInterface.setIntPref(pref, value); + break; + } + """ % (name, value) + with self.marionette.using_context(self.marionette.CONTEXT_CHROME): + self.marionette.execute_script(script) + + def clear_user_pref(self, name): + self.logger.info("Clearing pref %s" % (name)) + script = """ + let prefInterface = Components.classes["@mozilla.org/preferences-service;1"] + .getService(Components.interfaces.nsIPrefBranch); + let pref = '%s'; + prefInterface.clearUserPref(pref); + """ % name + with self.marionette.using_context(self.marionette.CONTEXT_CHROME): + self.marionette.execute_script(script) + + def get_pref(self, name): + script = """ + let prefInterface = Components.classes["@mozilla.org/preferences-service;1"] + .getService(Components.interfaces.nsIPrefBranch); + let pref = '%s'; + let type = prefInterface.getPrefType(pref); + switch(type) { + case prefInterface.PREF_STRING: + return prefInterface.getCharPref(pref); + case prefInterface.PREF_BOOL: + return prefInterface.getBoolPref(pref); + case prefInterface.PREF_INT: + return prefInterface.getIntPref(pref); + case prefInterface.PREF_INVALID: + return null; + } + """ % name + with self.marionette.using_context(self.marionette.CONTEXT_CHROME): + self.marionette.execute_script(script) + + def clear_origin(self, url): + self.logger.info("Clearing origin %s" % (url)) + script = """ + let url = '%s'; + let uri = Components.classes["@mozilla.org/network/io-service;1"] + .getService(Ci.nsIIOService) + .newURI(url); + let ssm = Components.classes["@mozilla.org/scriptsecuritymanager;1"] + .getService(Ci.nsIScriptSecurityManager); + let principal = ssm.createCodebasePrincipal(uri, {}); + let qms = Components.classes["@mozilla.org/dom/quota-manager-service;1"] + .getService(Components.interfaces.nsIQuotaManagerService); + qms.clearStoragesForPrincipal(principal, "default", true); + """ % url + with self.marionette.using_context(self.marionette.CONTEXT_CHROME): + self.marionette.execute_script(script) + + +class RemoteMarionetteProtocol(Protocol): + def __init__(self, executor, browser): + do_delayed_imports() + Protocol.__init__(self, executor, browser) + self.webdriver_binary = executor.webdriver_binary + self.webdriver_args = executor.webdriver_args + self.capabilities = self.executor.capabilities + self.session_config = None + self.server = None + + def setup(self, runner): + """Connect to browser via the Marionette HTTP server.""" + try: + self.server = GeckoDriverServer( + self.logger, + binary=self.webdriver_binary, + args=self.webdriver_args) + self.server.start(block=False) + self.logger.info( + "WebDriver HTTP server listening at %s" % self.server.url) + self.session_config = {"host": self.server.host, + "port": self.server.port, + "capabilities": self.capabilities} + except Exception: + self.logger.error(traceback.format_exc()) + self.executor.runner.send_message("init_failed") + else: + self.executor.runner.send_message("init_succeeded") + + def teardown(self): + if self.server is not None and self.server.is_alive: + self.server.stop() + + @property + def is_alive(self): + """Test that the Marionette connection is still alive. + + Because the remote communication happens over HTTP we need to + make an explicit request to the remote. It is allowed for + WebDriver spec tests to not have a WebDriver session, since this + may be what is tested. + + An HTTP request to an invalid path that results in a 404 is + proof enough to us that the server is alive and kicking. + """ + conn = httplib.HTTPConnection(self.server.host, self.server.port) + conn.request("HEAD", self.server.base_path + "invalid") + res = conn.getresponse() + return res.status == 404 + + +class ExecuteAsyncScriptRun(object): + def __init__(self, logger, func, protocol, url, timeout): + self.logger = logger + self.result = (None, None) + self.protocol = protocol + self.marionette = protocol.marionette + self.func = func + self.url = url + self.timeout = timeout + self.result_flag = threading.Event() + + def run(self): + index = self.url.rfind("/storage/"); + if index != -1: + # Clear storage + self.protocol.clear_origin(self.url) + + timeout = self.timeout + + try: + if timeout is not None: + if timeout + extra_timeout != self.protocol.timeout: + self.protocol.set_timeout(timeout + extra_timeout) + else: + # We just want it to never time out, really, but marionette doesn't + # make that possible. It also seems to time out immediately if the + # timeout is set too high. This works at least. + self.protocol.set_timeout(2**28 - 1) + except IOError: + self.logger.error("Lost marionette connection before starting test") + return Stop + + executor = threading.Thread(target = self._run) + executor.start() + + if timeout is not None: + wait_timeout = timeout + 2 * extra_timeout + else: + wait_timeout = None + + flag = self.result_flag.wait(wait_timeout) + if self.result[1] is None: + self.logger.debug("Timed out waiting for a result") + self.result = False, ("EXTERNAL-TIMEOUT", None) + return self.result + + def _run(self): + try: + self.result = True, self.func(self.marionette, self.url, self.timeout) + except errors.ScriptTimeoutException: + self.logger.debug("Got a marionette timeout") + self.result = False, ("EXTERNAL-TIMEOUT", None) + except (socket.timeout, IOError): + # This can happen on a crash + # Also, should check after the test if the firefox process is still running + # and otherwise ignore any other result and set it to crash + self.result = False, ("CRASH", None) + except Exception as e: + message = getattr(e, "message", "") + if message: + message += "\n" + message += traceback.format_exc(e) + self.result = False, ("ERROR", e) + + finally: + self.result_flag.set() + + +class MarionetteTestharnessExecutor(TestharnessExecutor): + def __init__(self, browser, server_config, timeout_multiplier=1, + close_after_done=True, debug_info=None, **kwargs): + """Marionette-based executor for testharness.js tests""" + TestharnessExecutor.__init__(self, browser, server_config, + timeout_multiplier=timeout_multiplier, + debug_info=debug_info) + + self.protocol = MarionetteProtocol(self, browser, timeout_multiplier) + self.script = open(os.path.join(here, "testharness_marionette.js")).read() + self.close_after_done = close_after_done + self.window_id = str(uuid.uuid4()) + + self.original_pref_values = {} + + if marionette is None: + do_delayed_imports() + + def is_alive(self): + return self.protocol.is_alive + + def on_environment_change(self, new_environment): + self.protocol.on_environment_change(self.last_environment, new_environment) + + if new_environment["protocol"] != self.last_environment["protocol"]: + self.protocol.load_runner(new_environment["protocol"]) + + def do_test(self, test): + timeout = (test.timeout * self.timeout_multiplier if self.debug_info is None + else None) + + success, data = ExecuteAsyncScriptRun(self.logger, + self.do_testharness, + self.protocol, + self.test_url(test), + timeout).run() + if success: + return self.convert_result(test, data) + + return (test.result_cls(*data), []) + + def do_testharness(self, marionette, url, timeout): + if self.close_after_done: + marionette.execute_script("if (window.wrappedJSObject.win) {window.wrappedJSObject.win.close()}") + self.protocol.close_old_windows(self.protocol) + + if timeout is not None: + timeout_ms = str(timeout * 1000) + else: + timeout_ms = "null" + + script = self.script % {"abs_url": url, + "url": strip_server(url), + "window_id": self.window_id, + "timeout_multiplier": self.timeout_multiplier, + "timeout": timeout_ms, + "explicit_timeout": timeout is None} + + rv = marionette.execute_async_script(script, new_sandbox=False) + return rv + + +class MarionetteRefTestExecutor(RefTestExecutor): + def __init__(self, browser, server_config, timeout_multiplier=1, + screenshot_cache=None, close_after_done=True, + debug_info=None, **kwargs): + + """Marionette-based executor for reftests""" + RefTestExecutor.__init__(self, + browser, + server_config, + screenshot_cache=screenshot_cache, + timeout_multiplier=timeout_multiplier, + debug_info=debug_info) + self.protocol = MarionetteProtocol(self, browser) + self.implementation = RefTestImplementation(self) + self.close_after_done = close_after_done + self.has_window = False + self.original_pref_values = {} + + with open(os.path.join(here, "reftest.js")) as f: + self.script = f.read() + with open(os.path.join(here, "reftest-wait.js")) as f: + self.wait_script = f.read() + + def is_alive(self): + return self.protocol.is_alive + + def on_environment_change(self, new_environment): + self.protocol.on_environment_change(self.last_environment, new_environment) + + def do_test(self, test): + if self.close_after_done and self.has_window: + self.protocol.marionette.close() + self.protocol.marionette.switch_to_window( + self.protocol.marionette.window_handles[-1]) + self.has_window = False + + if not self.has_window: + self.protocol.marionette.execute_script(self.script) + self.protocol.marionette.switch_to_window(self.protocol.marionette.window_handles[-1]) + self.has_window = True + + result = self.implementation.run_test(test) + return self.convert_result(test, result) + + def screenshot(self, test, viewport_size, dpi): + # https://github.com/w3c/wptrunner/issues/166 + assert viewport_size is None + assert dpi is None + + timeout = self.timeout_multiplier * test.timeout if self.debug_info is None else None + + test_url = self.test_url(test) + + return ExecuteAsyncScriptRun(self.logger, + self._screenshot, + self.protocol, + test_url, + timeout).run() + + def _screenshot(self, marionette, url, timeout): + marionette.navigate(url) + + marionette.execute_async_script(self.wait_script) + + screenshot = marionette.screenshot(full=False) + # strip off the data:img/png, part of the url + if screenshot.startswith("data:image/png;base64,"): + screenshot = screenshot.split(",", 1)[1] + + return screenshot + + +class WdspecRun(object): + def __init__(self, func, session, path, timeout): + self.func = func + self.result = (None, None) + self.session = session + self.path = path + self.timeout = timeout + self.result_flag = threading.Event() + + def run(self): + """Runs function in a thread and interrupts it if it exceeds the + given timeout. Returns (True, (Result, [SubtestResult ...])) in + case of success, or (False, (status, extra information)) in the + event of failure. + """ + + executor = threading.Thread(target=self._run) + executor.start() + + flag = self.result_flag.wait(self.timeout) + if self.result[1] is None: + self.result = False, ("EXTERNAL-TIMEOUT", None) + + return self.result + + def _run(self): + try: + self.result = True, self.func(self.session, self.path, self.timeout) + except (socket.timeout, IOError): + self.result = False, ("CRASH", None) + except Exception as e: + message = getattr(e, "message") + if message: + message += "\n" + message += traceback.format_exc(e) + self.result = False, ("ERROR", message) + finally: + self.result_flag.set() + + +class MarionetteWdspecExecutor(WdspecExecutor): + def __init__(self, browser, server_config, webdriver_binary, + timeout_multiplier=1, close_after_done=True, debug_info=None, + capabilities=None, webdriver_args=None, binary=None): + self.do_delayed_imports() + WdspecExecutor.__init__(self, browser, server_config, + timeout_multiplier=timeout_multiplier, + debug_info=debug_info) + self.webdriver_binary = webdriver_binary + self.webdriver_args = webdriver_args + ["--binary", binary] + self.capabilities = capabilities + self.protocol = RemoteMarionetteProtocol(self, browser) + + def is_alive(self): + return self.protocol.is_alive + + def on_environment_change(self, new_environment): + pass + + def do_test(self, test): + timeout = test.timeout * self.timeout_multiplier + extra_timeout + + success, data = WdspecRun(self.do_wdspec, + self.protocol.session_config, + test.abs_path, + timeout).run() + + if success: + return self.convert_result(test, data) + + return (test.result_cls(*data), []) + + def do_wdspec(self, session_config, path, timeout): + harness_result = ("OK", None) + subtest_results = pytestrunner.run(path, + self.server_config, + session_config, + timeout=timeout) + return (harness_result, subtest_results) + + def do_delayed_imports(self): + global pytestrunner + from . import pytestrunner diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorselenium.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorselenium.py new file mode 100644 index 00000000000..b5edbec2f6f --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorselenium.py @@ -0,0 +1,260 @@ +import os +import socket +import sys +import threading +import time +import traceback +import urlparse +import uuid + +from .base import (ExecutorException, + Protocol, + RefTestExecutor, + RefTestImplementation, + TestExecutor, + TestharnessExecutor, + testharness_result_converter, + reftest_result_converter, + strip_server) +from ..testrunner import Stop + +here = os.path.join(os.path.split(__file__)[0]) + +webdriver = None +exceptions = None +RemoteConnection = None + +extra_timeout = 5 + +def do_delayed_imports(): + global webdriver + global exceptions + global RemoteConnection + from selenium import webdriver + from selenium.common import exceptions + from selenium.webdriver.remote.remote_connection import RemoteConnection + +class SeleniumProtocol(Protocol): + def __init__(self, executor, browser, capabilities, **kwargs): + do_delayed_imports() + + Protocol.__init__(self, executor, browser) + self.capabilities = capabilities + self.url = browser.webdriver_url + self.webdriver = None + + def setup(self, runner): + """Connect to browser via Selenium's WebDriver implementation.""" + self.runner = runner + self.logger.debug("Connecting to Selenium on URL: %s" % self.url) + + session_started = False + try: + self.webdriver = webdriver.Remote(command_executor=RemoteConnection(self.url.strip("/"), + resolve_ip=False), + desired_capabilities=self.capabilities) + except: + self.logger.warning( + "Connecting to Selenium failed:\n%s" % traceback.format_exc()) + else: + self.logger.debug("Selenium session started") + session_started = True + + if not session_started: + self.logger.warning("Failed to connect to Selenium") + self.executor.runner.send_message("init_failed") + else: + try: + self.after_connect() + except: + print >> sys.stderr, traceback.format_exc() + self.logger.warning( + "Failed to connect to navigate initial page") + self.executor.runner.send_message("init_failed") + else: + self.executor.runner.send_message("init_succeeded") + + def teardown(self): + self.logger.debug("Hanging up on Selenium session") + try: + self.webdriver.quit() + except: + pass + del self.webdriver + + def is_alive(self): + try: + # Get a simple property over the connection + self.webdriver.current_window_handle + # TODO what exception? + except (socket.timeout, exceptions.ErrorInResponseException): + return False + return True + + def after_connect(self): + self.load_runner("http") + + def load_runner(self, protocol): + url = urlparse.urljoin(self.executor.server_url(protocol), + "/testharness_runner.html") + self.logger.debug("Loading %s" % url) + self.webdriver.get(url) + self.webdriver.execute_script("document.title = '%s'" % + threading.current_thread().name.replace("'", '"')) + + def wait(self): + while True: + try: + self.webdriver.execute_async_script(""); + except exceptions.TimeoutException: + pass + except (socket.timeout, exceptions.NoSuchWindowException, + exceptions.ErrorInResponseException, IOError): + break + except Exception as e: + self.logger.error(traceback.format_exc(e)) + break + + +class SeleniumRun(object): + def __init__(self, func, webdriver, url, timeout): + self.func = func + self.result = None + self.webdriver = webdriver + self.url = url + self.timeout = timeout + self.result_flag = threading.Event() + + def run(self): + timeout = self.timeout + + try: + self.webdriver.set_script_timeout((timeout + extra_timeout) * 1000) + except exceptions.ErrorInResponseException: + self.logger.error("Lost WebDriver connection") + return Stop + + executor = threading.Thread(target=self._run) + executor.start() + + flag = self.result_flag.wait(timeout + 2 * extra_timeout) + if self.result is None: + assert not flag + self.result = False, ("EXTERNAL-TIMEOUT", None) + + return self.result + + def _run(self): + try: + self.result = True, self.func(self.webdriver, self.url, self.timeout) + except exceptions.TimeoutException: + self.result = False, ("EXTERNAL-TIMEOUT", None) + except (socket.timeout, exceptions.ErrorInResponseException): + self.result = False, ("CRASH", None) + except Exception as e: + message = getattr(e, "message", "") + if message: + message += "\n" + message += traceback.format_exc(e) + self.result = False, ("ERROR", e) + finally: + self.result_flag.set() + + +class SeleniumTestharnessExecutor(TestharnessExecutor): + def __init__(self, browser, server_config, timeout_multiplier=1, + close_after_done=True, capabilities=None, debug_info=None): + """Selenium-based executor for testharness.js tests""" + TestharnessExecutor.__init__(self, browser, server_config, + timeout_multiplier=timeout_multiplier, + debug_info=debug_info) + self.protocol = SeleniumProtocol(self, browser, capabilities) + with open(os.path.join(here, "testharness_webdriver.js")) as f: + self.script = f.read() + self.close_after_done = close_after_done + self.window_id = str(uuid.uuid4()) + + def is_alive(self): + return self.protocol.is_alive() + + def on_environment_change(self, new_environment): + if new_environment["protocol"] != self.last_environment["protocol"]: + self.protocol.load_runner(new_environment["protocol"]) + + def do_test(self, test): + url = self.test_url(test) + + success, data = SeleniumRun(self.do_testharness, + self.protocol.webdriver, + url, + test.timeout * self.timeout_multiplier).run() + + if success: + return self.convert_result(test, data) + + return (test.result_cls(*data), []) + + def do_testharness(self, webdriver, url, timeout): + return webdriver.execute_async_script( + self.script % {"abs_url": url, + "url": strip_server(url), + "window_id": self.window_id, + "timeout_multiplier": self.timeout_multiplier, + "timeout": timeout * 1000}) + +class SeleniumRefTestExecutor(RefTestExecutor): + def __init__(self, browser, server_config, timeout_multiplier=1, + screenshot_cache=None, close_after_done=True, + debug_info=None, capabilities=None): + """Selenium WebDriver-based executor for reftests""" + RefTestExecutor.__init__(self, + browser, + server_config, + screenshot_cache=screenshot_cache, + timeout_multiplier=timeout_multiplier, + debug_info=debug_info) + self.protocol = SeleniumProtocol(self, browser, + capabilities=capabilities) + self.implementation = RefTestImplementation(self) + self.close_after_done = close_after_done + self.has_window = False + + with open(os.path.join(here, "reftest.js")) as f: + self.script = f.read() + with open(os.path.join(here, "reftest-wait_webdriver.js")) as f: + self.wait_script = f.read() + + def is_alive(self): + return self.protocol.is_alive() + + def do_test(self, test): + self.logger.info("Test requires OS-level window focus") + + self.protocol.webdriver.set_window_size(600, 600) + + result = self.implementation.run_test(test) + + return self.convert_result(test, result) + + def screenshot(self, test, viewport_size, dpi): + # https://github.com/w3c/wptrunner/issues/166 + assert viewport_size is None + assert dpi is None + + return SeleniumRun(self._screenshot, + self.protocol.webdriver, + self.test_url(test), + test.timeout).run() + + def _screenshot(self, webdriver, url, timeout): + webdriver.get(url) + + webdriver.execute_async_script(self.wait_script) + + screenshot = webdriver.get_screenshot_as_base64() + + # strip off the data:img/png, part of the url + if screenshot.startswith("data:image/png;base64,"): + screenshot = screenshot.split(",", 1)[1] + + return screenshot diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorservo.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorservo.py new file mode 100644 index 00000000000..eca35b179c0 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorservo.py @@ -0,0 +1,367 @@ +import base64 +import hashlib +import httplib +import json +import os +import subprocess +import tempfile +import threading +import traceback +import urlparse +import uuid +from collections import defaultdict + +from mozprocess import ProcessHandler + +from .base import (ExecutorException, + Protocol, + RefTestImplementation, + testharness_result_converter, + reftest_result_converter, + WdspecExecutor) +from .process import ProcessTestExecutor +from ..browsers.base import browser_command +from ..wpttest import WdspecResult, WdspecSubtestResult +from ..webdriver_server import ServoDriverServer +from .executormarionette import WdspecRun + +pytestrunner = None +webdriver = None + +extra_timeout = 5 # seconds + +hosts_text = """127.0.0.1 web-platform.test +127.0.0.1 www.web-platform.test +127.0.0.1 www1.web-platform.test +127.0.0.1 www2.web-platform.test +127.0.0.1 xn--n8j6ds53lwwkrqhv28a.web-platform.test +127.0.0.1 xn--lve-6lad.web-platform.test +""" + +def make_hosts_file(): + hosts_fd, hosts_path = tempfile.mkstemp() + with os.fdopen(hosts_fd, "w") as f: + f.write(hosts_text) + return hosts_path + + +class ServoTestharnessExecutor(ProcessTestExecutor): + convert_result = testharness_result_converter + + def __init__(self, browser, server_config, timeout_multiplier=1, debug_info=None, + pause_after_test=False): + ProcessTestExecutor.__init__(self, browser, server_config, + timeout_multiplier=timeout_multiplier, + debug_info=debug_info) + self.pause_after_test = pause_after_test + self.result_data = None + self.result_flag = None + self.protocol = Protocol(self, browser) + self.hosts_path = make_hosts_file() + + def teardown(self): + try: + os.unlink(self.hosts_path) + except OSError: + pass + ProcessTestExecutor.teardown(self) + + def do_test(self, test): + self.result_data = None + self.result_flag = threading.Event() + + args = [ + "--hard-fail", "-u", "Servo/wptrunner", + "-Z", "replace-surrogates", "-z", self.test_url(test), + ] + for stylesheet in self.browser.user_stylesheets: + args += ["--user-stylesheet", stylesheet] + for pref, value in test.environment.get('prefs', {}).iteritems(): + args += ["--pref", "%s=%s" % (pref, value)] + if self.browser.ca_certificate_path: + args += ["--certificate-path", self.browser.ca_certificate_path] + args += self.browser.binary_args + debug_args, command = browser_command(self.binary, args, self.debug_info) + + self.command = command + + if self.pause_after_test: + self.command.remove("-z") + + self.command = debug_args + self.command + + env = os.environ.copy() + env["HOST_FILE"] = self.hosts_path + env["RUST_BACKTRACE"] = "1" + + + if not self.interactive: + self.proc = ProcessHandler(self.command, + processOutputLine=[self.on_output], + onFinish=self.on_finish, + env=env, + storeOutput=False) + self.proc.run() + else: + self.proc = subprocess.Popen(self.command, env=env) + + try: + timeout = test.timeout * self.timeout_multiplier + + # Now wait to get the output we expect, or until we reach the timeout + if not self.interactive and not self.pause_after_test: + wait_timeout = timeout + 5 + self.result_flag.wait(wait_timeout) + else: + wait_timeout = None + self.proc.wait() + + proc_is_running = True + + if self.result_flag.is_set(): + if self.result_data is not None: + result = self.convert_result(test, self.result_data) + else: + self.proc.wait() + result = (test.result_cls("CRASH", None), []) + proc_is_running = False + else: + result = (test.result_cls("TIMEOUT", None), []) + + + if proc_is_running: + if self.pause_after_test: + self.logger.info("Pausing until the browser exits") + self.proc.wait() + else: + self.proc.kill() + except KeyboardInterrupt: + self.proc.kill() + raise + + return result + + def on_output(self, line): + prefix = "ALERT: RESULT: " + line = line.decode("utf8", "replace") + if line.startswith(prefix): + self.result_data = json.loads(line[len(prefix):]) + self.result_flag.set() + else: + if self.interactive: + print line + else: + self.logger.process_output(self.proc.pid, + line, + " ".join(self.command)) + + def on_finish(self): + self.result_flag.set() + + +class TempFilename(object): + def __init__(self, directory): + self.directory = directory + self.path = None + + def __enter__(self): + self.path = os.path.join(self.directory, str(uuid.uuid4())) + return self.path + + def __exit__(self, *args, **kwargs): + try: + os.unlink(self.path) + except OSError: + pass + + +class ServoRefTestExecutor(ProcessTestExecutor): + convert_result = reftest_result_converter + + def __init__(self, browser, server_config, binary=None, timeout_multiplier=1, + screenshot_cache=None, debug_info=None, pause_after_test=False): + do_delayed_imports() + ProcessTestExecutor.__init__(self, + browser, + server_config, + timeout_multiplier=timeout_multiplier, + debug_info=debug_info) + + self.protocol = Protocol(self, browser) + self.screenshot_cache = screenshot_cache + self.implementation = RefTestImplementation(self) + self.tempdir = tempfile.mkdtemp() + self.hosts_path = make_hosts_file() + + def teardown(self): + try: + os.unlink(self.hosts_path) + except OSError: + pass + os.rmdir(self.tempdir) + ProcessTestExecutor.teardown(self) + + def screenshot(self, test, viewport_size, dpi): + full_url = self.test_url(test) + + with TempFilename(self.tempdir) as output_path: + debug_args, command = browser_command( + self.binary, + [ + "--hard-fail", "--exit", + "-u", "Servo/wptrunner", + "-Z", "disable-text-aa,load-webfonts-synchronously,replace-surrogates", + "--output=%s" % output_path, full_url + ] + self.browser.binary_args, + self.debug_info) + + for stylesheet in self.browser.user_stylesheets: + command += ["--user-stylesheet", stylesheet] + + for pref, value in test.environment.get('prefs', {}).iteritems(): + command += ["--pref", "%s=%s" % (pref, value)] + + command += ["--resolution", viewport_size or "800x600"] + + if self.browser.ca_certificate_path: + command += ["--certificate-path", self.browser.ca_certificate_path] + + if dpi: + command += ["--device-pixel-ratio", dpi] + + # Run ref tests in headless mode + command += ["-z"] + + self.command = debug_args + command + + env = os.environ.copy() + env["HOST_FILE"] = self.hosts_path + env["RUST_BACKTRACE"] = "1" + + if not self.interactive: + self.proc = ProcessHandler(self.command, + processOutputLine=[self.on_output], + env=env) + + + try: + self.proc.run() + timeout = test.timeout * self.timeout_multiplier + 5 + rv = self.proc.wait(timeout=timeout) + except KeyboardInterrupt: + self.proc.kill() + raise + else: + self.proc = subprocess.Popen(self.command, + env=env) + try: + rv = self.proc.wait() + except KeyboardInterrupt: + self.proc.kill() + raise + + if rv is None: + self.proc.kill() + return False, ("EXTERNAL-TIMEOUT", None) + + if rv != 0 or not os.path.exists(output_path): + return False, ("CRASH", None) + + with open(output_path) as f: + # Might need to strip variable headers or something here + data = f.read() + return True, base64.b64encode(data) + + def do_test(self, test): + result = self.implementation.run_test(test) + + return self.convert_result(test, result) + + def on_output(self, line): + line = line.decode("utf8", "replace") + if self.interactive: + print line + else: + self.logger.process_output(self.proc.pid, + line, + " ".join(self.command)) + +class ServoWdspecProtocol(Protocol): + def __init__(self, executor, browser): + self.do_delayed_imports() + Protocol.__init__(self, executor, browser) + self.session = None + self.server = None + + def setup(self, runner): + try: + self.server = ServoDriverServer(self.logger, binary=self.browser.binary, binary_args=self.browser.binary_args) + self.server.start(block=False) + self.logger.info( + "WebDriver HTTP server listening at %s" % self.server.url) + + self.logger.info( + "Establishing new WebDriver session with %s" % self.server.url) + self.session = webdriver.Session( + self.server.host, self.server.port, self.server.base_path) + except Exception: + self.logger.error(traceback.format_exc()) + self.executor.runner.send_message("init_failed") + else: + self.executor.runner.send_message("init_succeeded") + + def teardown(self): + if self.server is not None: + try: + if self.session.session_id is not None: + self.session.end() + except Exception: + pass + if self.server.is_alive: + self.server.stop() + + @property + def is_alive(self): + conn = httplib.HTTPConnection(self.server.host, self.server.port) + conn.request("HEAD", self.server.base_path + "invalid") + res = conn.getresponse() + return res.status == 404 + + def do_delayed_imports(self): + global pytestrunner, webdriver + from . import pytestrunner + import webdriver + + +class ServoWdspecExecutor(WdspecExecutor): + def __init__(self, browser, server_config, + timeout_multiplier=1, close_after_done=True, debug_info=None, + **kwargs): + WdspecExecutor.__init__(self, browser, server_config, + timeout_multiplier=timeout_multiplier, + debug_info=debug_info) + self.protocol = ServoWdspecProtocol(self, browser) + + def is_alive(self): + return self.protocol.is_alive + + def on_environment_change(self, new_environment): + pass + + def do_test(self, test): + timeout = test.timeout * self.timeout_multiplier + extra_timeout + + success, data = WdspecRun(self.do_wdspec, + self.protocol.session, + test.path, + timeout).run() + + if success: + return self.convert_result(test, data) + + return (test.result_cls(*data), []) + + def do_wdspec(self, session, path, timeout): + harness_result = ("OK", None) + subtest_results = pytestrunner.run(path, session, timeout=timeout) + return (harness_result, subtest_results) diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorservodriver.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorservodriver.py new file mode 100644 index 00000000000..8dd331c7509 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorservodriver.py @@ -0,0 +1,257 @@ +import json +import os +import socket +import threading +import time +import traceback + +from .base import (Protocol, + RefTestExecutor, + RefTestImplementation, + TestharnessExecutor, + strip_server) +from ..testrunner import Stop + +webdriver = None + +here = os.path.join(os.path.split(__file__)[0]) + +extra_timeout = 5 + + +def do_delayed_imports(): + global webdriver + import webdriver + + +class ServoWebDriverProtocol(Protocol): + def __init__(self, executor, browser, capabilities, **kwargs): + do_delayed_imports() + Protocol.__init__(self, executor, browser) + self.capabilities = capabilities + self.host = browser.webdriver_host + self.port = browser.webdriver_port + self.session = None + + def setup(self, runner): + """Connect to browser via WebDriver.""" + self.runner = runner + + url = "http://%s:%d" % (self.host, self.port) + session_started = False + try: + self.session = webdriver.Session(self.host, self.port, + extension=webdriver.servo.ServoCommandExtensions) + self.session.start() + except: + self.logger.warning( + "Connecting with WebDriver failed:\n%s" % traceback.format_exc()) + else: + self.logger.debug("session started") + session_started = True + + if not session_started: + self.logger.warning("Failed to connect via WebDriver") + self.executor.runner.send_message("init_failed") + else: + self.executor.runner.send_message("init_succeeded") + + def teardown(self): + self.logger.debug("Hanging up on WebDriver session") + try: + self.session.end() + except: + pass + + def is_alive(self): + try: + # Get a simple property over the connection + self.session.window_handle + # TODO what exception? + except Exception: + return False + return True + + def after_connect(self): + pass + + def wait(self): + while True: + try: + self.session.execute_async_script("") + except webdriver.TimeoutException: + pass + except (socket.timeout, IOError): + break + except Exception as e: + self.logger.error(traceback.format_exc(e)) + break + + def on_environment_change(self, old_environment, new_environment): + #Unset all the old prefs + self.session.extension.reset_prefs(*old_environment.get("prefs", {}).keys()) + self.session.extension.set_prefs(new_environment.get("prefs", {})) + + +class ServoWebDriverRun(object): + def __init__(self, func, session, url, timeout, current_timeout=None): + self.func = func + self.result = None + self.session = session + self.url = url + self.timeout = timeout + self.result_flag = threading.Event() + + def run(self): + executor = threading.Thread(target=self._run) + executor.start() + + flag = self.result_flag.wait(self.timeout + extra_timeout) + if self.result is None: + assert not flag + self.result = False, ("EXTERNAL-TIMEOUT", None) + + return self.result + + def _run(self): + try: + self.result = True, self.func(self.session, self.url, self.timeout) + except webdriver.TimeoutException: + self.result = False, ("EXTERNAL-TIMEOUT", None) + except (socket.timeout, IOError): + self.result = False, ("CRASH", None) + except Exception as e: + message = getattr(e, "message", "") + if message: + message += "\n" + message += traceback.format_exc(e) + self.result = False, ("ERROR", e) + finally: + self.result_flag.set() + + +def timeout_func(timeout): + if timeout: + t0 = time.time() + return lambda: time.time() - t0 > timeout + extra_timeout + else: + return lambda: False + + +class ServoWebDriverTestharnessExecutor(TestharnessExecutor): + def __init__(self, browser, server_config, timeout_multiplier=1, + close_after_done=True, capabilities=None, debug_info=None): + TestharnessExecutor.__init__(self, browser, server_config, timeout_multiplier=1, + debug_info=None) + self.protocol = ServoWebDriverProtocol(self, browser, capabilities=capabilities) + with open(os.path.join(here, "testharness_servodriver.js")) as f: + self.script = f.read() + self.timeout = None + + def on_protocol_change(self, new_protocol): + pass + + def is_alive(self): + return self.protocol.is_alive() + + def do_test(self, test): + url = self.test_url(test) + + timeout = test.timeout * self.timeout_multiplier + extra_timeout + + if timeout != self.timeout: + try: + self.protocol.session.timeouts.script = timeout + self.timeout = timeout + except IOError: + self.logger.error("Lost webdriver connection") + return Stop + + success, data = ServoWebDriverRun(self.do_testharness, + self.protocol.session, + url, + timeout).run() + + if success: + return self.convert_result(test, data) + + return (test.result_cls(*data), []) + + def do_testharness(self, session, url, timeout): + session.url = url + result = json.loads( + session.execute_async_script( + self.script % {"abs_url": url, + "url": strip_server(url), + "timeout_multiplier": self.timeout_multiplier, + "timeout": timeout * 1000})) + # Prevent leaking every page in history until Servo develops a more sane + # page cache + session.back() + return result + + +class TimeoutError(Exception): + pass + + +class ServoWebDriverRefTestExecutor(RefTestExecutor): + def __init__(self, browser, server_config, timeout_multiplier=1, + screenshot_cache=None, capabilities=None, debug_info=None): + """Selenium WebDriver-based executor for reftests""" + RefTestExecutor.__init__(self, + browser, + server_config, + screenshot_cache=screenshot_cache, + timeout_multiplier=timeout_multiplier, + debug_info=debug_info) + self.protocol = ServoWebDriverProtocol(self, browser, + capabilities=capabilities) + self.implementation = RefTestImplementation(self) + self.timeout = None + with open(os.path.join(here, "reftest-wait_servodriver.js")) as f: + self.wait_script = f.read() + + def is_alive(self): + return self.protocol.is_alive() + + def do_test(self, test): + try: + result = self.implementation.run_test(test) + return self.convert_result(test, result) + except IOError: + return test.result_cls("CRASH", None), [] + except TimeoutError: + return test.result_cls("TIMEOUT", None), [] + except Exception as e: + message = getattr(e, "message", "") + if message: + message += "\n" + message += traceback.format_exc(e) + return test.result_cls("ERROR", message), [] + + def screenshot(self, test, viewport_size, dpi): + # https://github.com/w3c/wptrunner/issues/166 + assert viewport_size is None + assert dpi is None + + timeout = (test.timeout * self.timeout_multiplier + extra_timeout + if self.debug_info is None else None) + + if self.timeout != timeout: + try: + self.protocol.session.timeouts.script = timeout + self.timeout = timeout + except IOError: + self.logger.error("Lost webdriver connection") + return Stop + + return ServoWebDriverRun(self._screenshot, + self.protocol.session, + self.test_url(test), + timeout).run() + + def _screenshot(self, session, url, timeout): + session.url = url + session.execute_async_script(self.wait_script) + return session.screenshot() diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/process.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/process.py new file mode 100644 index 00000000000..fb8c17a96ba --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/process.py @@ -0,0 +1,20 @@ +from .base import TestExecutor + + +class ProcessTestExecutor(TestExecutor): + def __init__(self, *args, **kwargs): + TestExecutor.__init__(self, *args, **kwargs) + self.binary = self.browser.binary + self.interactive = (False if self.debug_info is None + else self.debug_info.interactive) + + def setup(self, runner): + self.runner = runner + self.runner.send_message("init_succeeded") + return True + + def is_alive(self): + return True + + def do_test(self, test): + raise NotImplementedError diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/pytestrunner/__init__.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/pytestrunner/__init__.py new file mode 100644 index 00000000000..a92b3a8151d --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/pytestrunner/__init__.py @@ -0,0 +1 @@ +from .runner import run diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/pytestrunner/runner.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/pytestrunner/runner.py new file mode 100644 index 00000000000..3a97d40e066 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/pytestrunner/runner.py @@ -0,0 +1,115 @@ +"""Provides interface to deal with pytest. + +Usage:: + + session = webdriver.client.Session("127.0.0.1", "4444", "/") + harness_result = ("OK", None) + subtest_results = pytestrunner.run("/path/to/test", session.url) + return (harness_result, subtest_results) +""" + +import errno +import json +import os +import shutil +import tempfile + + +pytest = None + + +def do_delayed_imports(): + global pytest + import pytest + + +def run(path, server_config, session_config, timeout=0): + """Run Python test at ``path`` in pytest. The provided ``session`` + is exposed as a fixture available in the scope of the test functions. + + :param path: Path to the test file. + :param session_config: dictionary of host, port,capabilities parameters + to pass through to the webdriver session + :param timeout: Duration before interrupting potentially hanging + tests. If 0, there is no timeout. + + :returns: List of subtest results, which are tuples of (test id, + status, message, stacktrace). + """ + + if pytest is None: + do_delayed_imports() + + recorder = SubtestResultRecorder() + + os.environ["WD_HOST"] = session_config["host"] + os.environ["WD_PORT"] = str(session_config["port"]) + os.environ["WD_CAPABILITIES"] = json.dumps(session_config["capabilities"]) + os.environ["WD_SERVER_CONFIG"] = json.dumps(server_config) + + plugins = [recorder] + + # TODO(ato): Deal with timeouts + + with TemporaryDirectory() as cache: + pytest.main(["--strict", # turn warnings into errors + "--verbose", # show each individual subtest + "--capture", "no", # enable stdout/stderr from tests + "--basetemp", cache, # temporary directory + path], + plugins=plugins) + + return recorder.results + + +class SubtestResultRecorder(object): + def __init__(self): + self.results = [] + + def pytest_runtest_logreport(self, report): + if report.passed and report.when == "call": + self.record_pass(report) + elif report.failed: + if report.when != "call": + self.record_error(report) + else: + self.record_fail(report) + elif report.skipped: + self.record_skip(report) + + def record_pass(self, report): + self.record(report.nodeid, "PASS") + + def record_fail(self, report): + self.record(report.nodeid, "FAIL", stack=report.longrepr) + + def record_error(self, report): + # error in setup/teardown + if report.when != "call": + message = "%s error" % report.when + self.record(report.nodeid, "ERROR", message, report.longrepr) + + def record_skip(self, report): + self.record(report.nodeid, "ERROR", + "In-test skip decorators are disallowed, " + "please use WPT metadata to ignore tests.") + + def record(self, test, status, message=None, stack=None): + if stack is not None: + stack = str(stack) + new_result = (test, status, message, stack) + self.results.append(new_result) + + +class TemporaryDirectory(object): + def __enter__(self): + self.path = tempfile.mkdtemp(prefix="pytest-") + return self.path + + def __exit__(self, *args): + try: + shutil.rmtree(self.path) + except OSError as e: + # no such file or directory + if e.errno != errno.ENOENT: + raise diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/reftest-wait.js b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/reftest-wait.js new file mode 100644 index 00000000000..7dd96df7803 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/reftest-wait.js @@ -0,0 +1,18 @@ +function test(x) { + log("classList: " + root.classList); + if (!root.classList.contains("reftest-wait")) { + observer.disconnect(); + marionetteScriptFinished(); + } +} + +var root = document.documentElement; +var observer = new MutationObserver(test); + +observer.observe(root, {attributes: true}); + +if (document.readyState != "complete") { + onload = test +} else { + test(); +} diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/reftest-wait_servodriver.js b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/reftest-wait_servodriver.js new file mode 100644 index 00000000000..5848433b540 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/reftest-wait_servodriver.js @@ -0,0 +1,15 @@ +callback = arguments[arguments.length - 1]; + +function check_done() { + if (!document.documentElement.classList.contains('reftest-wait')) { + callback(); + } else { + setTimeout(check_done, 50); + } +} + +if (document.readyState === 'complete') { + check_done(); +} else { + addEventListener("load", check_done); +} diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/reftest-wait_webdriver.js b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/reftest-wait_webdriver.js new file mode 100644 index 00000000000..c3cc453bd49 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/reftest-wait_webdriver.js @@ -0,0 +1,33 @@ +var callback = arguments[arguments.length - 1]; + +function test(x) { + if (!root.classList.contains("reftest-wait")) { + observer.disconnect(); + + // As of 2017-04-05, the Chromium web browser exhibits a rendering bug + // (https://bugs.chromium.org/p/chromium/issues/detail?id=708757) that + // produces instability during screen capture. The following use of + // `requestAnimationFrame` is intended as a short-term workaround, though + // it is not guaranteed to resolve the issue. + // + // For further detail, see: + // https://github.com/jugglinmike/chrome-screenshot-race/issues/1 + + requestAnimationFrame(function() { + requestAnimationFrame(function() { + callback(); + }); + }); + } +} + +var root = document.documentElement; +var observer = new MutationObserver(test); + +observer.observe(root, {attributes: true}); + +if (document.readyState != "complete") { + onload = test; +} else { + test(); +} diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/reftest.js b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/reftest.js new file mode 100644 index 00000000000..5bd5c609cbd --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/reftest.js @@ -0,0 +1 @@ +var win = window.open("about:blank", "test", "width=600,height=600"); diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/testharness_marionette.js b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/testharness_marionette.js new file mode 100644 index 00000000000..1cfa85f8949 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/testharness_marionette.js @@ -0,0 +1,32 @@ +window.wrappedJSObject.timeout_multiplier = %(timeout_multiplier)d; +window.wrappedJSObject.explicit_timeout = %(explicit_timeout)d; + +window.wrappedJSObject.addEventListener("message", function listener(event) { + if (event.data.type != "complete") { + return; + } + window.wrappedJSObject.removeEventListener("message", listener); + clearTimeout(timer); + var tests = event.data.tests; + var status = event.data.status; + + var subtest_results = tests.map(function (x) { + return [x.name, x.status, x.message, x.stack] + }); + + marionetteScriptFinished(["%(url)s", + status.status, + status.message, + status.stack, + subtest_results]); +}, false); + +window.wrappedJSObject.win = window.open("%(abs_url)s", "%(window_id)s"); + +var timer = null; +if (%(timeout)s) { + timer = setTimeout(function() { + log("Timeout fired"); + window.wrappedJSObject.win.timeout(); + }, %(timeout)s); +} diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/testharness_servodriver.js b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/testharness_servodriver.js new file mode 100644 index 00000000000..d731cc04d70 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/testharness_servodriver.js @@ -0,0 +1,2 @@ +window.__wd_results_callback__ = arguments[arguments.length - 1]; +window.__wd_results_timer__ = setTimeout(timeout, %(timeout)s); diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/testharness_webdriver.js b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/testharness_webdriver.js new file mode 100644 index 00000000000..f5cbff9ef77 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/testharness_webdriver.js @@ -0,0 +1,29 @@ +var callback = arguments[arguments.length - 1]; +window.timeout_multiplier = %(timeout_multiplier)d; + +window.addEventListener("message", function f(event) { + if (event.data.type != "complete") { + return; + } + window.removeEventListener("message", f); + + var tests = event.data.tests; + var status = event.data.status; + + var subtest_results = tests.map(function(x) { + return [x.name, x.status, x.message, x.stack] + }); + clearTimeout(timer); + callback(["%(url)s", + status.status, + status.message, + status.stack, + subtest_results]); +}, false); + +window.win = window.open("%(abs_url)s", "%(window_id)s"); + +var timer = setTimeout(function() { + window.win.timeout(); + window.win.close(); +}, %(timeout)s); diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/expected.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/expected.py new file mode 100644 index 00000000000..f06abb946af --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/expected.py @@ -0,0 +1,14 @@ +import os + + +def expected_path(metadata_path, test_path): + """Path to the expectation data file for a given test path. + + This is defined as metadata_path + relative_test_path + .ini + + :param metadata_path: Path to the root of the metadata directory + :param test_path: Relative path to the test file from the test root + """ + args = list(test_path.split("/")) + args[-1] += ".ini" + return os.path.join(metadata_path, *args) diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/hosts.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/hosts.py new file mode 100644 index 00000000000..915c17f1b31 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/hosts.py @@ -0,0 +1,100 @@ +from __future__ import unicode_literals + + +class HostsLine(object): + def __init__(self, ip_address, canonical_hostname, aliases=None, comment=None): + self.ip_address = ip_address + self.canonical_hostname = canonical_hostname + self.aliases = aliases if aliases is not None else [] + self.comment = comment + if self.ip_address is None: + assert self.canonical_hostname is None + assert not self.aliases + assert self.comment is not None + + @classmethod + def from_string(cls, line): + if not line.strip(): + return + + line = line.strip() + + ip_address = None + canonical_hostname = None + aliases = [] + comment = None + + comment_parts = line.split("#", 1) + if len(comment_parts) > 1: + comment = comment_parts[1] + + data = comment_parts[0].strip() + + if data: + fields = data.split() + if len(fields) < 2: + raise ValueError("Invalid hosts line") + + ip_address = fields[0] + canonical_hostname = fields[1] + aliases = fields[2:] + + return cls(ip_address, canonical_hostname, aliases, comment) + + +class HostsFile(object): + def __init__(self): + self.data = [] + self.by_hostname = {} + + def set_host(self, host): + if host.canonical_hostname is None: + self.data.append(host) + elif host.canonical_hostname in self.by_hostname: + old_host = self.by_hostname[host.canonical_hostname] + old_host.ip_address = host.ip_address + old_host.aliases = host.aliases + old_host.comment = host.comment + else: + self.data.append(host) + self.by_hostname[host.canonical_hostname] = host + + @classmethod + def from_file(cls, f): + rv = cls() + for line in f: + host = HostsLine.from_string(line) + if host is not None: + rv.set_host(host) + return rv + + def to_string(self): + field_widths = [0, 0] + for line in self.data: + if line.ip_address is not None: + field_widths[0] = max(field_widths[0], len(line.ip_address)) + field_widths[1] = max(field_widths[1], len(line.canonical_hostname)) + + lines = [] + + for host in self.data: + line = "" + if host.ip_address is not None: + ip_string = host.ip_address.ljust(field_widths[0]) + hostname_str = host.canonical_hostname + if host.aliases: + hostname_str = "%s %s" % (hostname_str.ljust(field_widths[1]), + " ".join(host.aliases)) + line = "%s %s" % (ip_string, hostname_str) + if host.comment: + if line: + line += " " + line += "#%s" % host.comment + lines.append(line) + + lines.append("") + + return "\n".join(lines) + + def to_file(self, f): + f.write(self.to_string().encode("utf8")) diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/manifestexpected.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/manifestexpected.py new file mode 100644 index 00000000000..5d57b70e517 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/manifestexpected.py @@ -0,0 +1,262 @@ +import os +import urlparse + +from wptmanifest.backends import static +from wptmanifest.backends.static import ManifestItem + +import expected + +"""Manifest structure used to store expected results of a test. + +Each manifest file is represented by an ExpectedManifest that +has one or more TestNode children, one per test in the manifest. +Each TestNode has zero or more SubtestNode children, one for each +known subtest of the test. +""" + +def data_cls_getter(output_node, visited_node): + # visited_node is intentionally unused + if output_node is None: + return ExpectedManifest + if isinstance(output_node, ExpectedManifest): + return TestNode + if isinstance(output_node, TestNode): + return SubtestNode + raise ValueError + + +def bool_prop(name, node): + """Boolean property""" + try: + return node.get(name) + except KeyError: + return None + + +def tags(node): + """Set of tags that have been applied to the test""" + try: + value = node.get("tags") + if isinstance(value, (str, unicode)): + return {value} + return set(value) + except KeyError: + return set() + + +def prefs(node): + def value(ini_value): + if isinstance(ini_value, (str, unicode)): + return tuple(ini_value.split(":", 1)) + else: + return (ini_value, None) + + try: + node_prefs = node.get("prefs") + if type(node_prefs) in (str, unicode): + prefs = {value(node_prefs)} + rv = dict(value(item) for item in node_prefs) + except KeyError: + rv = {} + return rv + + +class ExpectedManifest(ManifestItem): + def __init__(self, name, test_path, url_base): + """Object representing all the tests in a particular manifest + + :param name: Name of the AST Node associated with this object. + Should always be None since this should always be associated with + the root node of the AST. + :param test_path: Path of the test file associated with this manifest. + :param url_base: Base url for serving the tests in this manifest + """ + if name is not None: + raise ValueError("ExpectedManifest should represent the root node") + if test_path is None: + raise ValueError("ExpectedManifest requires a test path") + if url_base is None: + raise ValueError("ExpectedManifest requires a base url") + ManifestItem.__init__(self, name) + self.child_map = {} + self.test_path = test_path + self.url_base = url_base + + def append(self, child): + """Add a test to the manifest""" + ManifestItem.append(self, child) + self.child_map[child.id] = child + + def _remove_child(self, child): + del self.child_map[child.id] + ManifestItem.remove_child(self, child) + assert len(self.child_map) == len(self.children) + + def get_test(self, test_id): + """Get a test from the manifest by ID + + :param test_id: ID of the test to return.""" + return self.child_map.get(test_id) + + @property + def url(self): + return urlparse.urljoin(self.url_base, + "/".join(self.test_path.split(os.path.sep))) + + @property + def disabled(self): + return bool_prop("disabled", self) + + @property + def restart_after(self): + return bool_prop("restart-after", self) + + @property + def leaks(self): + return bool_prop("leaks", self) + + @property + def tags(self): + return tags(self) + + @property + def prefs(self): + return prefs(self) + + +class DirectoryManifest(ManifestItem): + @property + def disabled(self): + return bool_prop("disabled", self) + + @property + def restart_after(self): + return bool_prop("restart-after", self) + + @property + def leaks(self): + return bool_prop("leaks", self) + + @property + def tags(self): + return tags(self) + + @property + def prefs(self): + return prefs(self) + + +class TestNode(ManifestItem): + def __init__(self, name): + """Tree node associated with a particular test in a manifest + + :param name: name of the test""" + assert name is not None + ManifestItem.__init__(self, name) + self.updated_expected = [] + self.new_expected = [] + self.subtests = {} + self.default_status = None + self._from_file = True + + @property + def is_empty(self): + required_keys = set(["type"]) + if set(self._data.keys()) != required_keys: + return False + return all(child.is_empty for child in self.children) + + @property + def test_type(self): + return self.get("type") + + @property + def id(self): + return urlparse.urljoin(self.parent.url, self.name) + + @property + def disabled(self): + return bool_prop("disabled", self) + + @property + def restart_after(self): + return bool_prop("restart-after", self) + + @property + def leaks(self): + return bool_prop("leaks", self) + + @property + def tags(self): + return tags(self) + + @property + def prefs(self): + return prefs(self) + + def append(self, node): + """Add a subtest to the current test + + :param node: AST Node associated with the subtest""" + child = ManifestItem.append(self, node) + self.subtests[child.name] = child + + def get_subtest(self, name): + """Get the SubtestNode corresponding to a particular subtest, by name + + :param name: Name of the node to return""" + if name in self.subtests: + return self.subtests[name] + return None + + +class SubtestNode(TestNode): + def __init__(self, name): + """Tree node associated with a particular subtest in a manifest + + :param name: name of the subtest""" + TestNode.__init__(self, name) + + @property + def is_empty(self): + if self._data: + return False + return True + + +def get_manifest(metadata_root, test_path, url_base, run_info): + """Get the ExpectedManifest for a particular test path, or None if there is no + metadata stored for that test path. + + :param metadata_root: Absolute path to the root of the metadata directory + :param test_path: Path to the test(s) relative to the test root + :param url_base: Base url for serving the tests in this manifest + :param run_info: Dictionary of properties of the test run for which the expectation + values should be computed. + """ + manifest_path = expected.expected_path(metadata_root, test_path) + try: + with open(manifest_path) as f: + return static.compile(f, + run_info, + data_cls_getter=data_cls_getter, + test_path=test_path, + url_base=url_base) + except IOError: + return None + +def get_dir_manifest(path, run_info): + """Get the ExpectedManifest for a particular test path, or None if there is no + metadata stored for that test path. + + :param path: Full path to the ini file + :param run_info: Dictionary of properties of the test run for which the expectation + values should be computed. + """ + try: + with open(path) as f: + return static.compile(f, + run_info, + data_cls_getter=lambda x,y: DirectoryManifest) + except IOError: + return None diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/manifestinclude.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/manifestinclude.py new file mode 100644 index 00000000000..f7229d504f1 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/manifestinclude.py @@ -0,0 +1,149 @@ +"""Manifest structure used to store paths that should be included in a test run. + +The manifest is represented by a tree of IncludeManifest objects, the root +representing the file and each subnode representing a subdirectory that should +be included or excluded. +""" +import glob +import os +import urlparse + +from wptmanifest.node import DataNode +from wptmanifest.backends import conditional +from wptmanifest.backends.conditional import ManifestItem + + +class IncludeManifest(ManifestItem): + def __init__(self, node): + """Node in a tree structure representing the paths + that should be included or excluded from the test run. + + :param node: AST Node corresponding to this Node. + """ + ManifestItem.__init__(self, node) + self.child_map = {} + + @classmethod + def create(cls): + """Create an empty IncludeManifest tree""" + node = DataNode(None) + return cls(node) + + def append(self, child): + ManifestItem.append(self, child) + self.child_map[child.name] = child + assert len(self.child_map) == len(self.children) + + def include(self, test): + """Return a boolean indicating whether a particular test should be + included in a test run, based on the IncludeManifest tree rooted on + this object. + + :param test: The test object""" + path_components = self._get_components(test.url) + return self._include(test, path_components) + + def _include(self, test, path_components): + if path_components: + next_path_part = path_components.pop() + if next_path_part in self.child_map: + return self.child_map[next_path_part]._include(test, path_components) + + node = self + while node: + try: + skip_value = self.get("skip", {"test_type": test.item_type}).lower() + assert skip_value in ("true", "false") + return skip_value != "true" + except KeyError: + if node.parent is not None: + node = node.parent + else: + # Include by default + return True + + def _get_components(self, url): + rv = [] + url_parts = urlparse.urlsplit(url) + variant = "" + if url_parts.query: + variant += "?" + url_parts.query + if url_parts.fragment: + variant += "#" + url_parts.fragment + if variant: + rv.append(variant) + rv.extend([item for item in reversed(url_parts.path.split("/")) if item]) + return rv + + def _add_rule(self, test_manifests, url, direction): + maybe_path = os.path.join(os.path.abspath(os.curdir), url) + rest, last = os.path.split(maybe_path) + fragment = query = None + if "#" in last: + last, fragment = last.rsplit("#", 1) + if "?" in last: + last, query = last.rsplit("?", 1) + + maybe_path = os.path.join(rest, last) + paths = glob.glob(maybe_path) + + if paths: + urls = [] + for path in paths: + for manifest, data in test_manifests.iteritems(): + found = False + rel_path = os.path.relpath(path, data["tests_path"]) + for test in manifest.iterpath(rel_path): + if not hasattr(test, "url"): + continue + url = test.url + if query or fragment: + parsed = urlparse.urlparse(url) + if ((query and query != parsed.query) or + (fragment and fragment != parsed.fragment)): + continue + urls.append(url) + found = True + if found: + break + else: + urls = [url] + + assert direction in ("include", "exclude") + + for url in urls: + components = self._get_components(url) + + node = self + while components: + component = components.pop() + if component not in node.child_map: + new_node = IncludeManifest(DataNode(component)) + node.append(new_node) + new_node.set("skip", node.get("skip", {})) + + node = node.child_map[component] + + skip = False if direction == "include" else True + node.set("skip", str(skip)) + + def add_include(self, test_manifests, url_prefix): + """Add a rule indicating that tests under a url path + should be included in test runs + + :param url_prefix: The url prefix to include + """ + return self._add_rule(test_manifests, url_prefix, "include") + + def add_exclude(self, test_manifests, url_prefix): + """Add a rule indicating that tests under a url path + should be excluded from test runs + + :param url_prefix: The url prefix to exclude + """ + return self._add_rule(test_manifests, url_prefix, "exclude") + + +def get_manifest(manifest_path): + with open(manifest_path) as f: + return conditional.compile(f, data_cls_getter=lambda x, y: IncludeManifest) diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/manifestupdate.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/manifestupdate.py new file mode 100644 index 00000000000..07e623c5d1b --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/manifestupdate.py @@ -0,0 +1,460 @@ +import os +import urlparse +from collections import namedtuple, defaultdict + +from wptmanifest.node import (DataNode, ConditionalNode, BinaryExpressionNode, + BinaryOperatorNode, VariableNode, StringNode, NumberNode, + UnaryExpressionNode, UnaryOperatorNode, KeyValueNode) +from wptmanifest.backends import conditional +from wptmanifest.backends.conditional import ManifestItem + +import expected + +"""Manifest structure used to update the expected results of a test + +Each manifest file is represented by an ExpectedManifest that has one +or more TestNode children, one per test in the manifest. Each +TestNode has zero or more SubtestNode children, one for each known +subtest of the test. + +In these representations, conditionals expressions in the manifest are +not evaluated upfront but stored as python functions to be evaluated +at runtime. + +When a result for a test is to be updated set_result on the +[Sub]TestNode is called to store the new result, alongside the +existing conditional that result's run info matched, if any. Once all +new results are known, coalesce_expected is called to compute the new +set of results and conditionals. The AST of the underlying parsed manifest +is updated with the changes, and the result is serialised to a file. +""" + +class ConditionError(Exception): + pass + +Result = namedtuple("Result", ["run_info", "status"]) + + +def data_cls_getter(output_node, visited_node): + # visited_node is intentionally unused + if output_node is None: + return ExpectedManifest + elif isinstance(output_node, ExpectedManifest): + return TestNode + elif isinstance(output_node, TestNode): + return SubtestNode + else: + raise ValueError + + +class ExpectedManifest(ManifestItem): + def __init__(self, node, test_path=None, url_base=None, property_order=None, + boolean_properties=None): + """Object representing all the tests in a particular manifest + + :param node: AST Node associated with this object. If this is None, + a new AST is created to associate with this manifest. + :param test_path: Path of the test file associated with this manifest. + :param url_base: Base url for serving the tests in this manifest. + :param property_order: List of properties to use in expectation metadata + from most to least significant. + :param boolean_properties: Set of properties in property_order that should + be treated as boolean. + """ + if node is None: + node = DataNode(None) + ManifestItem.__init__(self, node) + self.child_map = {} + self.test_path = test_path + self.url_base = url_base + assert self.url_base is not None + self.modified = False + self.boolean_properties = boolean_properties + self.property_order = property_order + + def append(self, child): + ManifestItem.append(self, child) + if child.id in self.child_map: + print "Warning: Duplicate heading %s" % child.id + self.child_map[child.id] = child + + def _remove_child(self, child): + del self.child_map[child.id] + ManifestItem._remove_child(self, child) + + def get_test(self, test_id): + """Return a TestNode by test id, or None if no test matches + + :param test_id: The id of the test to look up""" + + return self.child_map[test_id] + + def has_test(self, test_id): + """Boolean indicating whether the current test has a known child test + with id test id + + :param test_id: The id of the test to look up""" + + return test_id in self.child_map + + @property + def url(self): + return urlparse.urljoin(self.url_base, + "/".join(self.test_path.split(os.path.sep))) + +class TestNode(ManifestItem): + def __init__(self, node): + """Tree node associated with a particular test in a manifest + + :param node: AST node associated with the test""" + + ManifestItem.__init__(self, node) + self.updated_expected = [] + self.new_expected = [] + self.subtests = {} + self.default_status = None + self._from_file = True + + @classmethod + def create(cls, test_type, test_id): + """Create a TestNode corresponding to a given test + + :param test_type: The type of the test + :param test_id: The id of the test""" + + url = test_id + name = url.split("/")[-1] + node = DataNode(name) + self = cls(node) + + self.set("type", test_type) + self._from_file = False + return self + + @property + def is_empty(self): + required_keys = set(["type"]) + if set(self._data.keys()) != required_keys: + return False + return all(child.is_empty for child in self.children) + + @property + def test_type(self): + """The type of the test represented by this TestNode""" + + return self.get("type", None) + + @property + def id(self): + """The id of the test represented by this TestNode""" + return urlparse.urljoin(self.parent.url, self.name) + + def disabled(self, run_info): + """Boolean indicating whether this test is disabled when run in an + environment with the given run_info + + :param run_info: Dictionary of run_info parameters""" + + return self.get("disabled", run_info) is not None + + def set_result(self, run_info, result): + """Set the result of the test in a particular run + + :param run_info: Dictionary of run_info parameters corresponding + to this run + :param result: Status of the test in this run""" + + if self.default_status is not None: + assert self.default_status == result.default_expected + else: + self.default_status = result.default_expected + + # Add this result to the list of results satisfying + # any condition in the list of updated results it matches + for (cond, values) in self.updated_expected: + if cond(run_info): + values.append(Result(run_info, result.status)) + if result.status != cond.value: + self.root.modified = True + break + else: + # We didn't find a previous value for this + self.new_expected.append(Result(run_info, result.status)) + self.root.modified = True + + def coalesce_expected(self): + """Update the underlying manifest AST for this test based on all the + added results. + + This will update existing conditionals if they got the same result in + all matching runs in the updated results, will delete existing conditionals + that get more than one different result in the updated run, and add new + conditionals for anything that doesn't match an existing conditional. + + Conditionals not matched by any added result are not changed.""" + + final_conditionals = [] + + try: + unconditional_status = self.get("expected") + except KeyError: + unconditional_status = self.default_status + + for conditional_value, results in self.updated_expected: + if not results: + # The conditional didn't match anything in these runs so leave it alone + final_conditionals.append(conditional_value) + elif all(results[0].status == result.status for result in results): + # All the new values for this conditional matched, so update the node + result = results[0] + if (result.status == unconditional_status and + conditional_value.condition_node is not None): + if "expected" in self: + self.remove_value("expected", conditional_value) + else: + conditional_value.value = result.status + final_conditionals.append(conditional_value) + elif conditional_value.condition_node is not None: + # Blow away the existing condition and rebuild from scratch + # This isn't sure to work if we have a conditional later that matches + # these values too, but we can hope, verify that we get the results + # we expect, and if not let a human sort it out + self.remove_value("expected", conditional_value) + self.new_expected.extend(results) + elif conditional_value.condition_node is None: + self.new_expected.extend(result for result in results + if result.status != unconditional_status) + + # It is an invariant that nothing in new_expected matches an existing + # condition except for the default condition + + if self.new_expected: + if all(self.new_expected[0].status == result.status + for result in self.new_expected) and not self.updated_expected: + status = self.new_expected[0].status + if status != self.default_status: + self.set("expected", status, condition=None) + final_conditionals.append(self._data["expected"][-1]) + else: + try: + conditionals = group_conditionals( + self.new_expected, + property_order=self.root.property_order, + boolean_properties=self.root.boolean_properties) + except ConditionError: + print "Conflicting test results for %s, cannot update" % self.root.test_path + return + for conditional_node, status in conditionals: + if status != unconditional_status: + self.set("expected", status, condition=conditional_node.children[0]) + final_conditionals.append(self._data["expected"][-1]) + + if ("expected" in self._data and + len(self._data["expected"]) > 0 and + self._data["expected"][-1].condition_node is None and + self._data["expected"][-1].value == self.default_status): + + self.remove_value("expected", self._data["expected"][-1]) + + if ("expected" in self._data and + len(self._data["expected"]) == 0): + for child in self.node.children: + if (isinstance(child, KeyValueNode) and + child.data == "expected"): + child.remove() + break + + def _add_key_value(self, node, values): + ManifestItem._add_key_value(self, node, values) + if node.data == "expected": + self.updated_expected = [] + for value in values: + self.updated_expected.append((value, [])) + + def clear_expected(self): + """Clear all the expected data for this test and all of its subtests""" + + self.updated_expected = [] + if "expected" in self._data: + for child in self.node.children: + if (isinstance(child, KeyValueNode) and + child.data == "expected"): + child.remove() + del self._data["expected"] + break + + for subtest in self.subtests.itervalues(): + subtest.clear_expected() + + def append(self, node): + child = ManifestItem.append(self, node) + self.subtests[child.name] = child + + def get_subtest(self, name): + """Return a SubtestNode corresponding to a particular subtest of + the current test, creating a new one if no subtest with that name + already exists. + + :param name: Name of the subtest""" + + if name in self.subtests: + return self.subtests[name] + else: + subtest = SubtestNode.create(name) + self.append(subtest) + return subtest + + +class SubtestNode(TestNode): + def __init__(self, node): + assert isinstance(node, DataNode) + TestNode.__init__(self, node) + + @classmethod + def create(cls, name): + node = DataNode(name) + self = cls(node) + return self + + @property + def is_empty(self): + if self._data: + return False + return True + + +def group_conditionals(values, property_order=None, boolean_properties=None): + """Given a list of Result objects, return a list of + (conditional_node, status) pairs representing the conditional + expressions that are required to match each status + + :param values: List of Results + :param property_order: List of properties to use in expectation metadata + from most to least significant. + :param boolean_properties: Set of properties in property_order that should + be treated as boolean.""" + + by_property = defaultdict(set) + for run_info, status in values: + for prop_name, prop_value in run_info.iteritems(): + by_property[(prop_name, prop_value)].add(status) + + if property_order is None: + property_order = ["debug", "os", "version", "processor", "bits"] + + if boolean_properties is None: + boolean_properties = set(["debug"]) + else: + boolean_properties = set(boolean_properties) + + # If we have more than one value, remove any properties that are common + # for all the values + if len(values) > 1: + for key, statuses in by_property.copy().iteritems(): + if len(statuses) == len(values): + del by_property[key] + if not by_property: + raise ConditionError + + properties = set(item[0] for item in by_property.iterkeys()) + include_props = [] + + for prop in property_order: + if prop in properties: + include_props.append(prop) + + conditions = {} + + for run_info, status in values: + prop_set = tuple((prop, run_info[prop]) for prop in include_props) + if prop_set in conditions: + continue + + expr = make_expr(prop_set, status, boolean_properties=boolean_properties) + conditions[prop_set] = (expr, status) + + return conditions.values() + + +def make_expr(prop_set, status, boolean_properties=None): + """Create an AST that returns the value ``status`` given all the + properties in prop_set match. + + :param prop_set: tuple of (property name, value) pairs for each + property in this expression and the value it must match + :param status: Status on RHS when all the given properties match + :param boolean_properties: Set of properties in property_order that should + be treated as boolean. + """ + root = ConditionalNode() + + assert len(prop_set) > 0 + + expressions = [] + for prop, value in prop_set: + number_types = (int, float, long) + value_cls = (NumberNode + if type(value) in number_types + else StringNode) + if prop not in boolean_properties: + expressions.append( + BinaryExpressionNode( + BinaryOperatorNode("=="), + VariableNode(prop), + value_cls(unicode(value)) + )) + else: + if value: + expressions.append(VariableNode(prop)) + else: + expressions.append( + UnaryExpressionNode( + UnaryOperatorNode("not"), + VariableNode(prop) + )) + if len(expressions) > 1: + prev = expressions[-1] + for curr in reversed(expressions[:-1]): + node = BinaryExpressionNode( + BinaryOperatorNode("and"), + curr, + prev) + prev = node + else: + node = expressions[0] + + root.append(node) + root.append(StringNode(status)) + + return root + + +def get_manifest(metadata_root, test_path, url_base, property_order=None, + boolean_properties=None): + """Get the ExpectedManifest for a particular test path, or None if there is no + metadata stored for that test path. + + :param metadata_root: Absolute path to the root of the metadata directory + :param test_path: Path to the test(s) relative to the test root + :param url_base: Base url for serving the tests in this manifest + :param property_order: List of properties to use in expectation metadata + from most to least significant. + :param boolean_properties: Set of properties in property_order that should + be treated as boolean.""" + manifest_path = expected.expected_path(metadata_root, test_path) + try: + with open(manifest_path) as f: + return compile(f, test_path, url_base, property_order=property_order, + boolean_properties=boolean_properties) + except IOError: + return None + + +def compile(manifest_file, test_path, url_base, property_order=None, + boolean_properties=None): + return conditional.compile(manifest_file, + data_cls_getter=data_cls_getter, + test_path=test_path, + url_base=url_base, + property_order=property_order, + boolean_properties=boolean_properties) diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/metadata.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/metadata.py new file mode 100644 index 00000000000..7f0e29b2190 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/metadata.py @@ -0,0 +1,351 @@ +import os +import shutil +import sys +import tempfile +import types +import uuid +from collections import defaultdict + +from mozlog import reader +from mozlog import structuredlog + +import expected +import manifestupdate +import testloader +import wptmanifest +import wpttest +from vcs import git +manifest = None # Module that will be imported relative to test_root +manifestitem = None + +logger = structuredlog.StructuredLogger("web-platform-tests") + + +def load_test_manifests(serve_root, test_paths): + do_delayed_imports(serve_root) + manifest_loader = testloader.ManifestLoader(test_paths, False) + return manifest_loader.load() + + +def update_expected(test_paths, serve_root, log_file_names, + rev_old=None, rev_new="HEAD", ignore_existing=False, + sync_root=None, property_order=None, boolean_properties=None): + """Update the metadata files for web-platform-tests based on + the results obtained in a previous run""" + + manifests = load_test_manifests(serve_root, test_paths) + + change_data = {} + + if sync_root is not None: + if rev_old is not None: + rev_old = git("rev-parse", rev_old, repo=sync_root).strip() + rev_new = git("rev-parse", rev_new, repo=sync_root).strip() + + if rev_old is not None: + change_data = load_change_data(rev_old, rev_new, repo=sync_root) + + + expected_map_by_manifest = update_from_logs(manifests, + *log_file_names, + ignore_existing=ignore_existing, + property_order=property_order, + boolean_properties=boolean_properties) + + for test_manifest, expected_map in expected_map_by_manifest.iteritems(): + url_base = manifests[test_manifest]["url_base"] + metadata_path = test_paths[url_base]["metadata_path"] + write_changes(metadata_path, expected_map) + + results_changed = [item.test_path for item in expected_map.itervalues() if item.modified] + + return unexpected_changes(manifests, change_data, results_changed) + + +def do_delayed_imports(serve_root): + global manifest, manifestitem + from manifest import manifest, item as manifestitem + + +def files_in_repo(repo_root): + return git("ls-tree", "-r", "--name-only", "HEAD").split("\n") + + +def rev_range(rev_old, rev_new, symmetric=False): + joiner = ".." if not symmetric else "..." + return "".join([rev_old, joiner, rev_new]) + + +def paths_changed(rev_old, rev_new, repo): + data = git("diff", "--name-status", rev_range(rev_old, rev_new), repo=repo) + lines = [tuple(item.strip() for item in line.strip().split("\t", 1)) + for line in data.split("\n") if line.strip()] + output = set(lines) + return output + + +def load_change_data(rev_old, rev_new, repo): + changes = paths_changed(rev_old, rev_new, repo) + rv = {} + status_keys = {"M": "modified", + "A": "new", + "D": "deleted"} + # TODO: deal with renames + for item in changes: + rv[item[1]] = status_keys[item[0]] + return rv + + +def unexpected_changes(manifests, change_data, files_changed): + files_changed = set(files_changed) + + root_manifest = None + for manifest, paths in manifests.iteritems(): + if paths["url_base"] == "/": + root_manifest = manifest + break + else: + return [] + + rv = [] + + return [fn for _, fn, _ in root_manifest if fn in files_changed and change_data.get(fn) != "M"] + +# For each testrun +# Load all files and scan for the suite_start entry +# Build a hash of filename: properties +# For each different set of properties, gather all chunks +# For each chunk in the set of chunks, go through all tests +# for each test, make a map of {conditionals: [(platform, new_value)]} +# Repeat for each platform +# For each test in the list of tests: +# for each conditional: +# If all the new values match (or there aren't any) retain that conditional +# If any new values mismatch mark the test as needing human attention +# Check if all the RHS values are the same; if so collapse the conditionals + + +def update_from_logs(manifests, *log_filenames, **kwargs): + ignore_existing = kwargs.get("ignore_existing", False) + property_order = kwargs.get("property_order") + boolean_properties = kwargs.get("boolean_properties") + + expected_map = {} + id_test_map = {} + + for test_manifest, paths in manifests.iteritems(): + expected_map_manifest, id_path_map_manifest = create_test_tree( + paths["metadata_path"], + test_manifest, + property_order=property_order, + boolean_properties=boolean_properties) + expected_map[test_manifest] = expected_map_manifest + id_test_map.update(id_path_map_manifest) + + updater = ExpectedUpdater(manifests, expected_map, id_test_map, + ignore_existing=ignore_existing) + for log_filename in log_filenames: + with open(log_filename) as f: + updater.update_from_log(f) + + for manifest_expected in expected_map.itervalues(): + for tree in manifest_expected.itervalues(): + for test in tree.iterchildren(): + for subtest in test.iterchildren(): + subtest.coalesce_expected() + test.coalesce_expected() + + return expected_map + +def directory_manifests(metadata_path): + rv = [] + for dirpath, dirname, filenames in os.walk(metadata_path): + if "__dir__.ini" in filenames: + rel_path = os.path.relpath(dirpath, metadata_path) + rv.append(os.path.join(rel_path, "__dir__.ini")) + return rv + +def write_changes(metadata_path, expected_map): + # First write the new manifest files to a temporary directory + temp_path = tempfile.mkdtemp(dir=os.path.split(metadata_path)[0]) + write_new_expected(temp_path, expected_map) + + # Keep all __dir__.ini files (these are not in expected_map because they + # aren't associated with a specific test) + keep_files = directory_manifests(metadata_path) + + # Copy all files in the root to the temporary location since + # these cannot be ini files + keep_files.extend(item for item in os.listdir(metadata_path) if + not os.path.isdir(os.path.join(metadata_path, item))) + + for item in keep_files: + dest_dir = os.path.dirname(os.path.join(temp_path, item)) + if not os.path.exists(dest_dir): + os.makedirs(dest_dir) + shutil.copyfile(os.path.join(metadata_path, item), + os.path.join(temp_path, item)) + + # Then move the old manifest files to a new location + temp_path_2 = metadata_path + str(uuid.uuid4()) + os.rename(metadata_path, temp_path_2) + # Move the new files to the destination location and remove the old files + os.rename(temp_path, metadata_path) + shutil.rmtree(temp_path_2) + + +def write_new_expected(metadata_path, expected_map): + # Serialize the data back to a file + for tree in expected_map.itervalues(): + if not tree.is_empty: + manifest_str = wptmanifest.serialize(tree.node, skip_empty_data=True) + assert manifest_str != "" + path = expected.expected_path(metadata_path, tree.test_path) + dir = os.path.split(path)[0] + if not os.path.exists(dir): + os.makedirs(dir) + with open(path, "w") as f: + f.write(manifest_str) + + +class ExpectedUpdater(object): + def __init__(self, test_manifests, expected_tree, id_path_map, ignore_existing=False): + self.test_manifests = test_manifests + self.expected_tree = expected_tree + self.id_path_map = id_path_map + self.ignore_existing = ignore_existing + self.run_info = None + self.action_map = {"suite_start": self.suite_start, + "test_start": self.test_start, + "test_status": self.test_status, + "test_end": self.test_end} + self.tests_visited = {} + + self.test_cache = {} + + def update_from_log(self, log_file): + self.run_info = None + log_reader = reader.read(log_file) + reader.each_log(log_reader, self.action_map) + + def suite_start(self, data): + self.run_info = data["run_info"] + + def test_id(self, id): + if type(id) in types.StringTypes: + return id + else: + return tuple(id) + + def test_start(self, data): + test_id = self.test_id(data["test"]) + try: + test_manifest, test = self.id_path_map[test_id] + expected_node = self.expected_tree[test_manifest][test].get_test(test_id) + except KeyError: + print "Test not found %s, skipping" % test_id + return + self.test_cache[test_id] = expected_node + + if test_id not in self.tests_visited: + if self.ignore_existing: + expected_node.clear_expected() + self.tests_visited[test_id] = set() + + def test_status(self, data): + test_id = self.test_id(data["test"]) + test = self.test_cache.get(test_id) + if test is None: + return + test_cls = wpttest.manifest_test_cls[test.test_type] + + subtest = test.get_subtest(data["subtest"]) + + self.tests_visited[test.id].add(data["subtest"]) + + result = test_cls.subtest_result_cls( + data["subtest"], + data["status"], + data.get("message")) + + subtest.set_result(self.run_info, result) + + def test_end(self, data): + test_id = self.test_id(data["test"]) + test = self.test_cache.get(test_id) + if test is None: + return + test_cls = wpttest.manifest_test_cls[test.test_type] + + if data["status"] == "SKIP": + return + + result = test_cls.result_cls( + data["status"], + data.get("message")) + + test.set_result(self.run_info, result) + del self.test_cache[test_id] + + +def create_test_tree(metadata_path, test_manifest, property_order=None, + boolean_properties=None): + expected_map = {} + id_test_map = {} + exclude_types = frozenset(["stub", "helper", "manual", "support", "conformancechecker"]) + all_types = [item.item_type for item in manifestitem.__dict__.itervalues() + if type(item) == type and + issubclass(item, manifestitem.ManifestItem) and + item.item_type is not None] + include_types = set(all_types) - exclude_types + for _, test_path, tests in test_manifest.itertypes(*include_types): + expected_data = load_expected(test_manifest, metadata_path, test_path, tests, + property_order=property_order, + boolean_properties=boolean_properties) + if expected_data is None: + expected_data = create_expected(test_manifest, + test_path, + tests, + property_order=property_order, + boolean_properties=boolean_properties) + + for test in tests: + id_test_map[test.id] = (test_manifest, test) + expected_map[test] = expected_data + + return expected_map, id_test_map + + +def create_expected(test_manifest, test_path, tests, property_order=None, + boolean_properties=None): + expected = manifestupdate.ExpectedManifest(None, test_path, test_manifest.url_base, + property_order=property_order, + boolean_properties=boolean_properties) + for test in tests: + expected.append(manifestupdate.TestNode.create(test.item_type, test.id)) + return expected + + +def load_expected(test_manifest, metadata_path, test_path, tests, property_order=None, + boolean_properties=None): + expected_manifest = manifestupdate.get_manifest(metadata_path, + test_path, + test_manifest.url_base, + property_order=property_order, + boolean_properties=boolean_properties) + if expected_manifest is None: + return + + tests_by_id = {item.id: item for item in tests} + + # Remove expected data for tests that no longer exist + for test in expected_manifest.iterchildren(): + if not test.id in tests_by_id: + test.remove() + + # Add tests that don't have expected data + for test in tests: + if not expected_manifest.has_test(test.id): + expected_manifest.append(manifestupdate.TestNode.create(test.item_type, test.id)) + + return expected_manifest diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/products.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/products.py new file mode 100644 index 00000000000..c077f95dfd9 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/products.py @@ -0,0 +1,69 @@ +import os +import importlib +import imp + +from .browsers import product_list + +def products_enabled(config): + names = config.get("products", {}).keys() + if not names: + return product_list + else: + return names + +def product_module(config, product): + here = os.path.join(os.path.split(__file__)[0]) + product_dir = os.path.join(here, "browsers") + + if product not in products_enabled(config): + raise ValueError("Unknown product %s" % product) + + path = config.get("products", {}).get(product, None) + if path: + module = imp.load_source('wptrunner.browsers.' + product, path) + else: + module = importlib.import_module("wptrunner.browsers." + product) + + if not hasattr(module, "__wptrunner__"): + raise ValueError("Product module does not define __wptrunner__ variable") + + return module + + +def load_product(config, product): + module = product_module(config, product) + data = module.__wptrunner__ + + check_args = getattr(module, data["check_args"]) + browser_cls = getattr(module, data["browser"]) + browser_kwargs = getattr(module, data["browser_kwargs"]) + executor_kwargs = getattr(module, data["executor_kwargs"]) + env_options = getattr(module, data["env_options"])() + env_extras = getattr(module, data["env_extras"]) + run_info_extras = (getattr(module, data["run_info_extras"]) + if "run_info_extras" in data else lambda **kwargs:{}) + + executor_classes = {} + for test_type, cls_name in data["executor"].iteritems(): + cls = getattr(module, cls_name) + executor_classes[test_type] = cls + + return (check_args, + browser_cls, browser_kwargs, + executor_classes, executor_kwargs, + env_options, env_extras, run_info_extras) + + +def load_product_update(config, product): + """Return tuple of (property_order, boolean_properties) indicating the + run_info properties to use when constructing the expectation data for + this product. None for either key indicates that the default keys + appropriate for distinguishing based on platform will be used.""" + + module = product_module(config, product) + data = module.__wptrunner__ + + update_properties = (getattr(module, data["update_properties"])() + if "update_properties" in data else (None, None)) + + return update_properties diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/reduce.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/reduce.py new file mode 100644 index 00000000000..d245ee3602b --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/reduce.py @@ -0,0 +1,193 @@ +import sys +import tempfile +from cStringIO import StringIO +from collections import defaultdict + +import wptrunner +import wpttest + +from mozlog import commandline, reader + +logger = None + + +def setup_logging(args, defaults): + global logger + logger = commandline.setup_logging("web-platform-tests-unstable", args, defaults) + wptrunner.setup_stdlib_logger() + + for name in args.keys(): + if name.startswith("log_"): + args.pop(name) + + return logger + + +def group(items, size): + rv = [] + i = 0 + while i < len(items): + rv.append(items[i:i + size]) + i += size + + return rv + + +def next_power_of_two(num): + rv = 1 + while rv < num: + rv = rv << 1 + return rv + + +class Reducer(object): + def __init__(self, target, **kwargs): + self.target = target + + self.test_type = kwargs["test_types"][0] + run_info = wpttest.get_run_info(kwargs["metadata_root"], + kwargs["product"], + debug=False) + test_filter = wptrunner.TestFilter(include=kwargs["include"]) + self.test_loader = wptrunner.TestLoader(kwargs["tests_root"], + kwargs["metadata_root"], + [self.test_type], + run_info, + manifest_filer=test_filter) + if kwargs["repeat"] == 1: + logger.critical("Need to specify --repeat with more than one repetition") + sys.exit(1) + self.kwargs = kwargs + + def run(self): + all_tests = self.get_initial_tests() + + tests = all_tests[:-1] + target_test = [all_tests[-1]] + + if self.unstable(target_test): + return target_test + + if not self.unstable(all_tests): + return [] + + chunk_size = next_power_of_two(int(len(tests) / 2)) + logger.debug("Using chunk size %i" % chunk_size) + + while chunk_size >= 1: + logger.debug("%i tests remain" % len(tests)) + chunks = group(tests, chunk_size) + chunk_results = [None] * len(chunks) + + for i, chunk in enumerate(chunks): + logger.debug("Running chunk %i/%i of size %i" % (i + 1, len(chunks), chunk_size)) + trial_tests = [] + chunk_str = "" + for j, inc_chunk in enumerate(chunks): + if i != j and chunk_results[j] in (None, False): + chunk_str += "+" + trial_tests.extend(inc_chunk) + else: + chunk_str += "-" + logger.debug("Using chunks %s" % chunk_str) + trial_tests.extend(target_test) + + chunk_results[i] = self.unstable(trial_tests) + + # if i == len(chunks) - 2 and all(item is False for item in chunk_results[:-1]): + # Dangerous? optimisation that if you got stability for 0..N-1 chunks + # it must be unstable with the Nth chunk + # chunk_results[i+1] = True + # continue + + new_tests = [] + keep_str = "" + for result, chunk in zip(chunk_results, chunks): + if not result: + keep_str += "+" + new_tests.extend(chunk) + else: + keep_str += "-" + + logger.debug("Keeping chunks %s" % keep_str) + + tests = new_tests + + chunk_size = int(chunk_size / 2) + + return tests + target_test + + def unstable(self, tests): + logger.debug("Running with %i tests" % len(tests)) + + self.test_loader.tests = {self.test_type: tests} + + stdout, stderr = sys.stdout, sys.stderr + sys.stdout = StringIO() + sys.stderr = StringIO() + + with tempfile.NamedTemporaryFile() as f: + args = self.kwargs.copy() + args["log_raw"] = [f] + args["capture_stdio"] = False + wptrunner.setup_logging(args, {}) + wptrunner.run_tests(test_loader=self.test_loader, **args) + wptrunner.logger.remove_handler(wptrunner.logger.handlers[0]) + is_unstable = self.log_is_unstable(f) + + sys.stdout, sys.stderr = stdout, stderr + + logger.debug("Result was unstable with chunk removed" + if is_unstable else "stable") + + return is_unstable + + def log_is_unstable(self, log_f): + log_f.seek(0) + + statuses = defaultdict(set) + + def handle_status(item): + if item["test"] == self.target: + statuses[item["subtest"]].add(item["status"]) + + def handle_end(item): + if item["test"] == self.target: + statuses[None].add(item["status"]) + + reader.each_log(reader.read(log_f), + {"test_status": handle_status, + "test_end": handle_end}) + + logger.debug(str(statuses)) + + if not statuses: + logger.error("Didn't get any useful output from wptrunner") + log_f.seek(0) + for item in reader.read(log_f): + logger.debug(item) + return None + + return any(len(item) > 1 for item in statuses.itervalues()) + + def get_initial_tests(self): + # Need to pass in arguments + + all_tests = self.test_loader.tests[self.test_type] + tests = [] + for item in all_tests: + tests.append(item) + if item.url == self.target: + break + + logger.debug("Starting with tests: %s" % ("\n".join(item.id for item in tests))) + + return tests + + +def do_reduce(**kwargs): + target = kwargs.pop("target") + reducer = Reducer(target, **kwargs) + + unstable_set = reducer.run() + return unstable_set diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testharness_runner.html b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testharness_runner.html new file mode 100644 index 00000000000..1cc80a270e2 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testharness_runner.html @@ -0,0 +1,6 @@ + + + diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testharnessreport-servo.js b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testharnessreport-servo.js new file mode 100644 index 00000000000..b672aea9a25 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testharnessreport-servo.js @@ -0,0 +1,17 @@ +var props = {output:%(output)d}; +var start_loc = document.createElement('a'); +start_loc.href = location.href; +setup(props); + +add_completion_callback(function (tests, harness_status) { + var id = start_loc.pathname + start_loc.search + start_loc.hash; + console.log("ALERT: RESULT: " + JSON.stringify([ + id, + harness_status.status, + harness_status.message, + harness_status.stack, + tests.map(function(t) { + return [t.name, t.status, t.message, t.stack] + }), + ])); +}); diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testharnessreport-servodriver.js b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testharnessreport-servodriver.js new file mode 100644 index 00000000000..c8884136047 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testharnessreport-servodriver.js @@ -0,0 +1,23 @@ +setup({output:%(output)d}); + +add_completion_callback(function() { + add_completion_callback(function (tests, status) { + var subtest_results = tests.map(function(x) { + return [x.name, x.status, x.message, x.stack] + }); + var id = location.pathname + location.search + location.hash; + var results = JSON.stringify([id, + status.status, + status.message, + status.stack, + subtest_results]); + (function done() { + if (window.__wd_results_callback__) { + clearTimeout(__wd_results_timer__); + __wd_results_callback__(results) + } else { + setTimeout(done, 20); + } + })() + }) +}); diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testharnessreport.js b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testharnessreport.js new file mode 100644 index 00000000000..62ddaffb443 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testharnessreport.js @@ -0,0 +1,13 @@ +var props = {output:%(output)d, + explicit_timeout: true, + message_events: ["completion"]}; + +if (window.opener && "timeout_multiplier" in window.opener) { + props["timeout_multiplier"] = window.opener.timeout_multiplier; +} + +if (window.opener && window.opener.explicit_timeout) { + props["explicit_timeout"] = window.opener.explicit_timeout; +} + +setup(props); diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testloader.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testloader.py new file mode 100644 index 00000000000..2b2033f3d21 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testloader.py @@ -0,0 +1,637 @@ +import hashlib +import json +import os +import urlparse +from abc import ABCMeta, abstractmethod +from Queue import Empty +from collections import defaultdict, OrderedDict, deque +from multiprocessing import Queue + +import manifestinclude +import manifestexpected +import wpttest +from mozlog import structured + +manifest = None +manifest_update = None + +def do_delayed_imports(): + # This relies on an already loaded module having set the sys.path correctly :( + global manifest, manifest_update + from manifest import manifest + from manifest import update as manifest_update + +class TestChunker(object): + def __init__(self, total_chunks, chunk_number): + self.total_chunks = total_chunks + self.chunk_number = chunk_number + assert self.chunk_number <= self.total_chunks + self.logger = structured.get_default_logger() + assert self.logger + + def __call__(self, manifest): + raise NotImplementedError + + +class Unchunked(TestChunker): + def __init__(self, *args, **kwargs): + TestChunker.__init__(self, *args, **kwargs) + assert self.total_chunks == 1 + + def __call__(self, manifest): + for item in manifest: + yield item + + +class HashChunker(TestChunker): + def __call__(self, manifest): + chunk_index = self.chunk_number - 1 + for test_type, test_path, tests in manifest: + h = int(hashlib.md5(test_path).hexdigest(), 16) + if h % self.total_chunks == chunk_index: + yield test_type, test_path, tests + + +class DirectoryHashChunker(TestChunker): + """Like HashChunker except the directory is hashed. + + This ensures that all tests in the same directory end up in the same + chunk. + """ + def __call__(self, manifest): + chunk_index = self.chunk_number - 1 + for test_type, test_path, tests in manifest: + h = int(hashlib.md5(os.path.dirname(test_path)).hexdigest(), 16) + if h % self.total_chunks == chunk_index: + yield test_type, test_path, tests + + +class EqualTimeChunker(TestChunker): + def _group_by_directory(self, manifest_items): + """Split the list of manifest items into a ordered dict that groups tests in + so that anything in the same subdirectory beyond a depth of 3 is in the same + group. So all tests in a/b/c, a/b/c/d and a/b/c/e will be grouped together + and separate to tests in a/b/f + + Returns: tuple (ordered dict of {test_dir: PathData}, total estimated runtime) + """ + + class PathData(object): + def __init__(self, path): + self.path = path + self.time = 0 + self.tests = [] + + by_dir = OrderedDict() + total_time = 0 + + for i, (test_type, test_path, tests) in enumerate(manifest_items): + test_dir = tuple(os.path.split(test_path)[0].split(os.path.sep)[:3]) + + if not test_dir in by_dir: + by_dir[test_dir] = PathData(test_dir) + + data = by_dir[test_dir] + time = sum(test.default_timeout if test.timeout != + "long" else test.long_timeout for test in tests) + data.time += time + total_time += time + data.tests.append((test_type, test_path, tests)) + + return by_dir, total_time + + def _maybe_remove(self, chunks, i, direction): + """Trial removing a chunk from one chunk to an adjacent one. + + :param chunks: - the list of all chunks + :param i: - the chunk index in the list of chunks to try removing from + :param direction: either "next" if we are going to move from the end to + the subsequent chunk, or "prev" if we are going to move + from the start into the previous chunk. + + :returns bool: Did a chunk get moved?""" + source_chunk = chunks[i] + if direction == "next": + target_chunk = chunks[i+1] + path_index = -1 + move_func = lambda: target_chunk.appendleft(source_chunk.pop()) + elif direction == "prev": + target_chunk = chunks[i-1] + path_index = 0 + move_func = lambda: target_chunk.append(source_chunk.popleft()) + else: + raise ValueError("Unexpected move direction %s" % direction) + + return self._maybe_move(source_chunk, target_chunk, path_index, move_func) + + def _maybe_add(self, chunks, i, direction): + """Trial adding a chunk from one chunk to an adjacent one. + + :param chunks: - the list of all chunks + :param i: - the chunk index in the list of chunks to try adding to + :param direction: either "next" if we are going to remove from the + the subsequent chunk, or "prev" if we are going to remove + from the the previous chunk. + + :returns bool: Did a chunk get moved?""" + target_chunk = chunks[i] + if direction == "next": + source_chunk = chunks[i+1] + path_index = 0 + move_func = lambda: target_chunk.append(source_chunk.popleft()) + elif direction == "prev": + source_chunk = chunks[i-1] + path_index = -1 + move_func = lambda: target_chunk.appendleft(source_chunk.pop()) + else: + raise ValueError("Unexpected move direction %s" % direction) + + return self._maybe_move(source_chunk, target_chunk, path_index, move_func) + + def _maybe_move(self, source_chunk, target_chunk, path_index, move_func): + """Move from one chunk to another, assess the change in badness, + and keep the move iff it decreases the badness score. + + :param source_chunk: chunk to move from + :param target_chunk: chunk to move to + :param path_index: 0 if we are moving from the start or -1 if we are moving from the + end + :param move_func: Function that actually moves between chunks""" + if len(source_chunk.paths) <= 1: + return False + + move_time = source_chunk.paths[path_index].time + + new_source_badness = self._badness(source_chunk.time - move_time) + new_target_badness = self._badness(target_chunk.time + move_time) + + delta_badness = ((new_source_badness + new_target_badness) - + (source_chunk.badness + target_chunk.badness)) + if delta_badness < 0: + move_func() + return True + + return False + + def _badness(self, time): + """Metric of badness for a specific chunk + + :param time: the time for a specific chunk""" + return (time - self.expected_time)**2 + + def _get_chunk(self, manifest_items): + by_dir, total_time = self._group_by_directory(manifest_items) + + if len(by_dir) < self.total_chunks: + raise ValueError("Tried to split into %i chunks, but only %i subdirectories included" % ( + self.total_chunks, len(by_dir))) + + self.expected_time = float(total_time) / self.total_chunks + + chunks = self._create_initial_chunks(by_dir) + + while True: + # Move a test from one chunk to the next until doing so no longer + # reduces the badness + got_improvement = self._update_chunks(chunks) + if not got_improvement: + break + + self.logger.debug(self.expected_time) + for i, chunk in chunks.iteritems(): + self.logger.debug("%i: %i, %i" % (i + 1, chunk.time, chunk.badness)) + + assert self._all_tests(by_dir) == self._chunked_tests(chunks) + + return self._get_tests(chunks) + + @staticmethod + def _all_tests(by_dir): + """Return a set of all tests in the manifest from a grouping by directory""" + return set(x[0] for item in by_dir.itervalues() + for x in item.tests) + + @staticmethod + def _chunked_tests(chunks): + """Return a set of all tests in the manifest from the chunk list""" + return set(x[0] for chunk in chunks.itervalues() + for path in chunk.paths + for x in path.tests) + + + def _create_initial_chunks(self, by_dir): + """Create an initial unbalanced list of chunks. + + :param by_dir: All tests in the manifest grouped by subdirectory + :returns list: A list of Chunk objects""" + + class Chunk(object): + def __init__(self, paths, index): + """List of PathData objects that together form a single chunk of + tests""" + self.paths = deque(paths) + self.time = sum(item.time for item in paths) + self.index = index + + def appendleft(self, path): + """Add a PathData object to the start of the chunk""" + self.paths.appendleft(path) + self.time += path.time + + def append(self, path): + """Add a PathData object to the end of the chunk""" + self.paths.append(path) + self.time += path.time + + def pop(self): + """Remove PathData object from the end of the chunk""" + assert len(self.paths) > 1 + self.time -= self.paths[-1].time + return self.paths.pop() + + def popleft(self): + """Remove PathData object from the start of the chunk""" + assert len(self.paths) > 1 + self.time -= self.paths[0].time + return self.paths.popleft() + + @property + def badness(self_): + """Badness metric for this chunk""" + return self._badness(self_.time) + + initial_size = len(by_dir) / self.total_chunks + chunk_boundaries = [initial_size * i + for i in xrange(self.total_chunks)] + [len(by_dir)] + + chunks = OrderedDict() + for i, lower in enumerate(chunk_boundaries[:-1]): + upper = chunk_boundaries[i + 1] + paths = by_dir.values()[lower:upper] + chunks[i] = Chunk(paths, i) + + assert self._all_tests(by_dir) == self._chunked_tests(chunks) + + return chunks + + def _update_chunks(self, chunks): + """Run a single iteration of the chunk update algorithm. + + :param chunks: - List of chunks + """ + #TODO: consider replacing this with a heap + sorted_chunks = sorted(chunks.values(), key=lambda x:-x.badness) + got_improvement = False + for chunk in sorted_chunks: + if chunk.time < self.expected_time: + f = self._maybe_add + else: + f = self._maybe_remove + + if chunk.index == 0: + order = ["next"] + elif chunk.index == self.total_chunks - 1: + order = ["prev"] + else: + if chunk.time < self.expected_time: + # First try to add a test from the neighboring chunk with the + # greatest total time + if chunks[chunk.index + 1].time > chunks[chunk.index - 1].time: + order = ["next", "prev"] + else: + order = ["prev", "next"] + else: + # First try to remove a test and add to the neighboring chunk with the + # lowest total time + if chunks[chunk.index + 1].time > chunks[chunk.index - 1].time: + order = ["prev", "next"] + else: + order = ["next", "prev"] + + for direction in order: + if f(chunks, chunk.index, direction): + got_improvement = True + break + + if got_improvement: + break + + return got_improvement + + def _get_tests(self, chunks): + """Return the list of tests corresponding to the chunk number we are running. + + :param chunks: List of chunks""" + tests = [] + for path in chunks[self.chunk_number - 1].paths: + tests.extend(path.tests) + + return tests + + def __call__(self, manifest_iter): + manifest = list(manifest_iter) + tests = self._get_chunk(manifest) + for item in tests: + yield item + + +class TestFilter(object): + def __init__(self, test_manifests, include=None, exclude=None, manifest_path=None): + if manifest_path is not None and include is None: + self.manifest = manifestinclude.get_manifest(manifest_path) + else: + self.manifest = manifestinclude.IncludeManifest.create() + + if include: + self.manifest.set("skip", "true") + for item in include: + self.manifest.add_include(test_manifests, item) + + if exclude: + for item in exclude: + self.manifest.add_exclude(test_manifests, item) + + def __call__(self, manifest_iter): + for test_type, test_path, tests in manifest_iter: + include_tests = set() + for test in tests: + if self.manifest.include(test): + include_tests.add(test) + + if include_tests: + yield test_type, test_path, include_tests + +class TagFilter(object): + def __init__(self, tags): + self.tags = set(tags) + + def __call__(self, test_iter): + for test in test_iter: + if test.tags & self.tags: + yield test + +class ManifestLoader(object): + def __init__(self, test_paths, force_manifest_update=False): + do_delayed_imports() + self.test_paths = test_paths + self.force_manifest_update = force_manifest_update + self.logger = structured.get_default_logger() + if self.logger is None: + self.logger = structured.structuredlog.StructuredLogger("ManifestLoader") + + def load(self): + rv = {} + for url_base, paths in self.test_paths.iteritems(): + manifest_file = self.load_manifest(url_base=url_base, + **paths) + path_data = {"url_base": url_base} + path_data.update(paths) + rv[manifest_file] = path_data + return rv + + def create_manifest(self, manifest_path, tests_path, url_base="/"): + self.update_manifest(manifest_path, tests_path, url_base, recreate=True) + + def update_manifest(self, manifest_path, tests_path, url_base="/", + recreate=False): + self.logger.info("Updating test manifest %s" % manifest_path) + + json_data = None + if not recreate: + try: + with open(manifest_path) as f: + json_data = json.load(f) + except IOError: + #If the existing file doesn't exist just create one from scratch + pass + + if not json_data: + manifest_file = manifest.Manifest(url_base) + else: + try: + manifest_file = manifest.Manifest.from_json(tests_path, json_data) + except manifest.ManifestVersionMismatch: + manifest_file = manifest.Manifest(url_base) + + manifest_update.update(tests_path, manifest_file, True) + + manifest.write(manifest_file, manifest_path) + + def load_manifest(self, tests_path, metadata_path, url_base="/"): + manifest_path = os.path.join(metadata_path, "MANIFEST.json") + if (not os.path.exists(manifest_path) or + self.force_manifest_update): + self.update_manifest(manifest_path, tests_path, url_base) + manifest_file = manifest.load(tests_path, manifest_path) + if manifest_file.url_base != url_base: + self.logger.info("Updating url_base in manifest from %s to %s" % (manifest_file.url_base, + url_base)) + manifest_file.url_base = url_base + manifest.write(manifest_file, manifest_path) + + return manifest_file + +def iterfilter(filters, iter): + for f in filters: + iter = f(iter) + for item in iter: + yield item + +class TestLoader(object): + def __init__(self, + test_manifests, + test_types, + run_info, + manifest_filters=None, + meta_filters=None, + chunk_type="none", + total_chunks=1, + chunk_number=1, + include_https=True): + + self.test_types = test_types + self.run_info = run_info + + self.manifest_filters = manifest_filters if manifest_filters is not None else [] + self.meta_filters = meta_filters if meta_filters is not None else [] + + self.manifests = test_manifests + self.tests = None + self.disabled_tests = None + self.include_https = include_https + + self.chunk_type = chunk_type + self.total_chunks = total_chunks + self.chunk_number = chunk_number + + self.chunker = {"none": Unchunked, + "hash": HashChunker, + "dir_hash": DirectoryHashChunker, + "equal_time": EqualTimeChunker}[chunk_type](total_chunks, + chunk_number) + + self._test_ids = None + + self.directory_manifests = {} + + self._load_tests() + + @property + def test_ids(self): + if self._test_ids is None: + self._test_ids = [] + for test_dict in [self.disabled_tests, self.tests]: + for test_type in self.test_types: + self._test_ids += [item.id for item in test_dict[test_type]] + return self._test_ids + + def get_test(self, manifest_test, inherit_metadata, test_metadata): + if test_metadata is not None: + inherit_metadata.append(test_metadata) + test_metadata = test_metadata.get_test(manifest_test.id) + + return wpttest.from_manifest(manifest_test, inherit_metadata, test_metadata) + + def load_dir_metadata(self, test_manifest, metadata_path, test_path): + rv = [] + path_parts = os.path.dirname(test_path).split(os.path.sep) + for i in xrange(1,len(path_parts) + 1): + path = os.path.join(metadata_path, os.path.sep.join(path_parts[:i]), "__dir__.ini") + if path not in self.directory_manifests: + self.directory_manifests[path] = manifestexpected.get_dir_manifest(path, + self.run_info) + manifest = self.directory_manifests[path] + if manifest is not None: + rv.append(manifest) + return rv + + def load_metadata(self, test_manifest, metadata_path, test_path): + inherit_metadata = self.load_dir_metadata(test_manifest, metadata_path, test_path) + test_metadata = manifestexpected.get_manifest( + metadata_path, test_path, test_manifest.url_base, self.run_info) + return inherit_metadata, test_metadata + + def iter_tests(self): + manifest_items = [] + + for manifest in sorted(self.manifests.keys(), key=lambda x:x.url_base): + manifest_iter = iterfilter(self.manifest_filters, + manifest.itertypes(*self.test_types)) + manifest_items.extend(manifest_iter) + + if self.chunker is not None: + manifest_items = self.chunker(manifest_items) + + for test_type, test_path, tests in manifest_items: + manifest_file = iter(tests).next().manifest + metadata_path = self.manifests[manifest_file]["metadata_path"] + inherit_metadata, test_metadata = self.load_metadata(manifest_file, metadata_path, test_path) + + for test in iterfilter(self.meta_filters, + self.iter_wpttest(inherit_metadata, test_metadata, tests)): + yield test_path, test_type, test + + def iter_wpttest(self, inherit_metadata, test_metadata, tests): + for manifest_test in tests: + yield self.get_test(manifest_test, inherit_metadata, test_metadata) + + def _load_tests(self): + """Read in the tests from the manifest file and add them to a queue""" + tests = {"enabled":defaultdict(list), + "disabled":defaultdict(list)} + + for test_path, test_type, test in self.iter_tests(): + enabled = not test.disabled() + if not self.include_https and test.environment["protocol"] == "https": + enabled = False + key = "enabled" if enabled else "disabled" + tests[key][test_type].append(test) + + self.tests = tests["enabled"] + self.disabled_tests = tests["disabled"] + + def groups(self, test_types, chunk_type="none", total_chunks=1, chunk_number=1): + groups = set() + + for test_type in test_types: + for test in self.tests[test_type]: + group = test.url.split("/")[1] + groups.add(group) + + return groups + + +class TestSource(object): + __metaclass__ = ABCMeta + + @abstractmethod + def queue_tests(self, test_queue): + pass + + @abstractmethod + def requeue_test(self, test): + pass + + def __enter__(self): + return self + + def __exit__(self, *args, **kwargs): + pass + + +class SingleTestSource(TestSource): + def __init__(self, test_queue): + self.test_queue = test_queue + + @classmethod + def queue_tests(cls, test_queue, test_type, tests): + for test in tests[test_type]: + test_queue.put(test) + + def get_queue(self): + if self.test_queue.empty(): + return None + return self.test_queue + + def requeue_test(self, test): + self.test_queue.put(test) + +class PathGroupedSource(TestSource): + def __init__(self, test_queue): + self.test_queue = test_queue + self.current_queue = None + + @classmethod + def queue_tests(cls, test_queue, test_type, tests, depth=None): + if depth is True: + depth = None + + prev_path = None + group = None + + for test in tests[test_type]: + path = urlparse.urlsplit(test.url).path.split("/")[1:-1][:depth] + if path != prev_path: + group = [] + test_queue.put(group) + prev_path = path + + group.append(test) + + def get_queue(self): + if not self.current_queue or self.current_queue.empty(): + try: + data = self.test_queue.get(block=True, timeout=1) + self.current_queue = Queue() + for item in data: + self.current_queue.put(item) + except Empty: + return None + return self.current_queue + + def requeue_test(self, test): + self.current_queue.put(test) + + def __exit__(self, *args, **kwargs): + if self.current_queue: + self.current_queue.close() diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testrunner.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testrunner.py new file mode 100644 index 00000000000..d494010a9f7 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testrunner.py @@ -0,0 +1,784 @@ +from __future__ import unicode_literals + +import multiprocessing +import sys +import threading +import traceback +from Queue import Empty +from collections import namedtuple +from multiprocessing import Process, current_process, Queue + +from mozlog import structuredlog + +# Special value used as a sentinal in various commands +Stop = object() + + +class MessageLogger(object): + def __init__(self, message_func): + self.send_message = message_func + + def _log_data(self, action, **kwargs): + self.send_message("log", action, kwargs) + + def process_output(self, process, data, command): + self._log_data("process_output", process=process, data=data, command=command) + + +def _log_func(level_name): + def log(self, message): + self._log_data(level_name.lower(), message=message) + log.__doc__ = """Log a message with level %s + +:param message: The string message to log +""" % level_name + log.__name__ = str(level_name).lower() + return log + +# Create all the methods on StructuredLog for debug levels +for level_name in structuredlog.log_levels: + setattr(MessageLogger, level_name.lower(), _log_func(level_name)) + + +class TestRunner(object): + def __init__(self, command_queue, result_queue, executor): + """Class implementing the main loop for running tests. + + This class delegates the job of actually running a test to the executor + that is passed in. + + :param command_queue: subprocess.Queue used to send commands to the + process + :param result_queue: subprocess.Queue used to send results to the + parent TestManager process + :param executor: TestExecutor object that will actually run a test. + """ + self.command_queue = command_queue + self.result_queue = result_queue + + self.executor = executor + self.name = current_process().name + self.logger = MessageLogger(self.send_message) + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_value, traceback): + self.teardown() + + def setup(self): + self.logger.debug("Executor setup") + self.executor.setup(self) + self.logger.debug("Executor setup done") + + def teardown(self): + self.executor.teardown() + self.send_message("runner_teardown") + self.result_queue = None + self.command_queue = None + self.browser = None + + def run(self): + """Main loop accepting commands over the pipe and triggering + the associated methods""" + self.setup() + commands = {"run_test": self.run_test, + "stop": self.stop, + "wait": self.wait} + while True: + command, args = self.command_queue.get() + try: + rv = commands[command](*args) + except Exception: + self.send_message("error", + "Error running command %s with arguments %r:\n%s" % + (command, args, traceback.format_exc())) + else: + if rv is Stop: + break + + def stop(self): + return Stop + + def run_test(self, test): + try: + return self.executor.run_test(test) + except Exception: + self.logger.critical(traceback.format_exc()) + raise + + def wait(self): + self.executor.protocol.wait() + self.send_message("wait_finished") + + def send_message(self, command, *args): + self.result_queue.put((command, args)) + + +def start_runner(runner_command_queue, runner_result_queue, + executor_cls, executor_kwargs, + executor_browser_cls, executor_browser_kwargs, + stop_flag): + """Launch a TestRunner in a new process""" + try: + browser = executor_browser_cls(**executor_browser_kwargs) + executor = executor_cls(browser, **executor_kwargs) + with TestRunner(runner_command_queue, runner_result_queue, executor) as runner: + try: + runner.run() + except KeyboardInterrupt: + stop_flag.set() + except Exception: + runner_result_queue.put(("log", ("critical", {"message": traceback.format_exc()}))) + print >> sys.stderr, traceback.format_exc() + stop_flag.set() + finally: + runner_command_queue = None + runner_result_queue = None + + +manager_count = 0 + + +def next_manager_number(): + global manager_count + local = manager_count = manager_count + 1 + return local + + +class BrowserManager(object): + init_lock = threading.Lock() + + def __init__(self, logger, browser, command_queue, no_timeout=False): + self.logger = logger + self.browser = browser + self.no_timeout = no_timeout + self.browser_settings = None + + self.started = False + + self.init_timer = None + + def update_settings(self, test): + browser_settings = self.browser.settings(test) + restart_required = ((self.browser_settings is not None and + self.browser_settings != browser_settings) or + test.expected() == "CRASH") + self.browser_settings = browser_settings + return restart_required + + def init(self): + """Launch the browser that is being tested, + and the TestRunner process that will run the tests.""" + # It seems that this lock is helpful to prevent some race that otherwise + # sometimes stops the spawned processes initalising correctly, and + # leaves this thread hung + if self.init_timer is not None: + self.init_timer.cancel() + + self.logger.debug("Init called, starting browser and runner") + + with self.init_lock: + # Guard against problems initialising the browser or the browser + # remote control method + if not self.no_timeout: + self.init_timer = threading.Timer(self.browser.init_timeout, + self.init_timeout) + try: + if self.init_timer is not None: + self.init_timer.start() + self.logger.debug("Starting browser with settings %r" % self.browser_settings) + self.browser.start(**self.browser_settings) + self.browser_pid = self.browser.pid() + except: + self.logger.warning("Failure during init %s" % traceback.format_exc()) + if self.init_timer is not None: + self.init_timer.cancel() + self.logger.error(traceback.format_exc()) + succeeded = False + else: + succeeded = True + self.started = True + + return succeeded + + def send_message(self, command, *args): + self.command_queue.put((command, args)) + + def init_timeout(self): + # This is called from a seperate thread, so we send a message to the + # main loop so we get back onto the manager thread + self.logger.debug("init_failed called from timer") + self.send_message("init_failed") + + def after_init(self): + """Callback when we have started the browser, started the remote + control connection, and we are ready to start testing.""" + if self.init_timer is not None: + self.init_timer.cancel() + + def stop(self, force=False): + self.browser.stop(force=force) + self.started = False + + def cleanup(self): + if self.init_timer is not None: + self.init_timer.cancel() + self.browser.cleanup() + + def log_crash(self, test_id): + self.browser.log_crash(process=self.browser_pid, test=test_id) + + def is_alive(self): + return self.browser.is_alive() + + +class _RunnerManagerState(object): + before_init = namedtuple("before_init", []) + initalizing = namedtuple("initalizing_browser", + ["test", "test_queue", "failure_count"]) + running = namedtuple("running", ["test", "test_queue"]) + restarting = namedtuple("restarting", ["test", "test_queue"]) + error = namedtuple("error", []) + stop = namedtuple("stop", []) + + +RunnerManagerState = _RunnerManagerState() + + +class TestRunnerManager(threading.Thread): + init_lock = threading.Lock() + + def __init__(self, suite_name, tests, test_source_cls, browser_cls, browser_kwargs, + executor_cls, executor_kwargs, stop_flag, pause_after_test=False, + pause_on_unexpected=False, restart_on_unexpected=True, debug_info=None): + """Thread that owns a single TestRunner process and any processes required + by the TestRunner (e.g. the Firefox binary). + + TestRunnerManagers are responsible for launching the browser process and the + runner process, and for logging the test progress. The actual test running + is done by the TestRunner. In particular they: + + * Start the binary of the program under test + * Start the TestRunner + * Tell the TestRunner to start a test, if any + * Log that the test started + * Log the test results + * Take any remedial action required e.g. restart crashed or hung + processes + """ + self.suite_name = suite_name + + self.tests = tests + self.test_source_cls = test_source_cls + self.test_queue = None + + self.browser_cls = browser_cls + self.browser_kwargs = browser_kwargs + + self.executor_cls = executor_cls + self.executor_kwargs = executor_kwargs + + self.test_source = None + + # Flags used to shut down this thread if we get a sigint + self.parent_stop_flag = stop_flag + self.child_stop_flag = multiprocessing.Event() + + self.pause_after_test = pause_after_test + self.pause_on_unexpected = pause_on_unexpected + self.restart_on_unexpected = restart_on_unexpected + self.debug_info = debug_info + + self.manager_number = next_manager_number() + + self.command_queue = Queue() + self.remote_queue = Queue() + + self.test_runner_proc = None + + threading.Thread.__init__(self, name="Thread-TestrunnerManager-%i" % self.manager_number) + # This is started in the actual new thread + self.logger = None + + self.unexpected_count = 0 + + # This may not really be what we want + self.daemon = True + + self.max_restarts = 5 + + self.browser = None + + def run(self): + """Main loop for the TestManager. + + TestManagers generally receive commands from their + TestRunner updating them on the status of a test. They + may also have a stop flag set by the main thread indicating + that the manager should shut down the next time the event loop + spins.""" + self.logger = structuredlog.StructuredLogger(self.suite_name) + with self.browser_cls(self.logger, **self.browser_kwargs) as browser, self.test_source_cls(self.tests) as test_source: + self.browser = BrowserManager(self.logger, + browser, + self.command_queue, + no_timeout=self.debug_info is not None) + self.test_source = test_source + dispatch = { + RunnerManagerState.before_init: self.start_init, + RunnerManagerState.initalizing: self.init, + RunnerManagerState.running: self.run_test, + RunnerManagerState.restarting: self.restart_runner + } + + self.state = RunnerManagerState.before_init() + end_states = (RunnerManagerState.stop, + RunnerManagerState.error) + + try: + while not isinstance(self.state, end_states): + f = dispatch.get(self.state.__class__) + while f: + self.logger.debug("Dispatch %s" % f.__name__) + if self.should_stop(): + return + new_state = f() + if new_state is None: + break + self.state = new_state + self.logger.debug("new state: %s" % self.state.__class__.__name__) + if isinstance(self.state, end_states): + return + f = dispatch.get(self.state.__class__) + + new_state = None + while new_state is None: + new_state = self.wait_event() + if self.should_stop(): + return + self.state = new_state + self.logger.debug("new state: %s" % self.state.__class__.__name__) + except Exception as e: + self.logger.error(traceback.format_exc(e)) + raise + finally: + self.logger.debug("TestRunnerManager main loop terminating, starting cleanup") + clean = isinstance(self.state, RunnerManagerState.stop) + self.stop_runner(force=not clean) + self.teardown() + self.logger.debug("TestRunnerManager main loop terminated") + + def wait_event(self): + dispatch = { + RunnerManagerState.before_init: {}, + RunnerManagerState.initalizing: + { + "init_succeeded": self.init_succeeded, + "init_failed": self.init_failed, + }, + RunnerManagerState.running: + { + "test_ended": self.test_ended, + "wait_finished": self.wait_finished, + }, + RunnerManagerState.restarting: {}, + RunnerManagerState.error: {}, + RunnerManagerState.stop: {}, + None: { + "runner_teardown": self.runner_teardown, + "log": self.log, + "error": self.error + } + } + try: + command, data = self.command_queue.get(True, 1) + except IOError: + self.logger.error("Got IOError from poll") + return RunnerManagerState.restarting(0) + except Empty: + if (self.debug_info and self.debug_info.interactive and + self.browser.started and not self.browser.is_alive()): + self.logger.debug("Debugger exited") + return RunnerManagerState.stop() + + if (isinstance(self.state, RunnerManagerState.running) and + not self.test_runner_proc.is_alive()): + if not self.command_queue.empty(): + # We got a new message so process that + return + + # If we got to here the runner presumably shut down + # unexpectedly + self.logger.info("Test runner process shut down") + + if self.state.test is not None: + # This could happen if the test runner crashed for some other + # reason + # Need to consider the unlikely case where one test causes the + # runner process to repeatedly die + self.logger.critical("Last test did not complete") + return RunnerManagerState.error() + self.logger.warning("More tests found, but runner process died, restarting") + return RunnerManagerState.restarting(0) + else: + f = (dispatch.get(self.state.__class__, {}).get(command) or + dispatch.get(None, {}).get(command)) + if not f: + self.logger.warning("Got command %s in state %s" % + (command, self.state.__class__.__name__)) + return + return f(*data) + + + def should_stop(self): + return self.child_stop_flag.is_set() or self.parent_stop_flag.is_set() + + def start_init(self): + test, test_queue = self.get_next_test() + if test is None: + return RunnerManagerState.stop() + else: + return RunnerManagerState.initalizing(test, test_queue, 0) + + def init(self): + assert isinstance(self.state, RunnerManagerState.initalizing) + if self.state.failure_count > self.max_restarts: + self.logger.error("Max restarts exceeded") + return RunnerManagerState.error() + + self.browser.update_settings(self.state.test) + + result = self.browser.init() + if result is Stop: + return RunnerManagerState.error() + elif not result: + return RunnerManagerState.initalizing(self.state.test, + self.state.test_queue, + self.state.failure_count + 1) + else: + self.start_test_runner() + + def start_test_runner(self): + # Note that we need to be careful to start the browser before the + # test runner to ensure that any state set when the browser is started + # can be passed in to the test runner. + assert isinstance(self.state, RunnerManagerState.initalizing) + assert self.command_queue is not None + assert self.remote_queue is not None + self.logger.info("Starting runner") + executor_browser_cls, executor_browser_kwargs = self.browser.browser.executor_browser() + + args = (self.remote_queue, + self.command_queue, + self.executor_cls, + self.executor_kwargs, + executor_browser_cls, + executor_browser_kwargs, + self.child_stop_flag) + self.test_runner_proc = Process(target=start_runner, + args=args, + name="Thread-TestRunner-%i" % self.manager_number) + self.test_runner_proc.start() + self.logger.debug("Test runner started") + # Now we wait for either an init_succeeded event or an init_failed event + + def init_succeeded(self): + assert isinstance(self.state, RunnerManagerState.initalizing) + self.browser.after_init() + return RunnerManagerState.running(self.state.test, + self.state.test_queue) + + def init_failed(self): + assert isinstance(self.state, RunnerManagerState.initalizing) + self.browser.after_init() + self.stop_runner(force=True) + return RunnerManagerState.initalizing(self.state.test, + self.state.test_queue, + self.state.failure_count + 1) + + def get_next_test(self, test_queue=None): + test = None + while test is None: + if test_queue is None: + test_queue = self.test_source.get_queue() + if test_queue is None: + self.logger.info("No more tests") + return None, None + try: + # Need to block here just to allow for contention with other processes + test = test_queue.get(block=True, timeout=2) + except Empty: + if test_queue.empty(): + test_queue = None + return test, test_queue + + def run_test(self): + assert isinstance(self.state, RunnerManagerState.running) + assert self.state.test is not None + + if self.browser.update_settings(self.state.test): + self.logger.info("Restarting browser for new test environment") + return RunnerManagerState.restarting(self.state.test, + self.state.test_queue) + + self.logger.test_start(self.state.test.id) + self.send_message("run_test", self.state.test) + + def test_ended(self, test, results): + """Handle the end of a test. + + Output the result of each subtest, and the result of the overall + harness to the logs. + """ + assert isinstance(self.state, RunnerManagerState.running) + assert test == self.state.test + # Write the result of each subtest + file_result, test_results = results + subtest_unexpected = False + for result in test_results: + if test.disabled(result.name): + continue + expected = test.expected(result.name) + is_unexpected = expected != result.status + + if is_unexpected: + self.unexpected_count += 1 + self.logger.debug("Unexpected count in this thread %i" % self.unexpected_count) + subtest_unexpected = True + self.logger.test_status(test.id, + result.name, + result.status, + message=result.message, + expected=expected, + stack=result.stack) + + # TODO: consider changing result if there is a crash dump file + + # Write the result of the test harness + expected = test.expected() + status = file_result.status if file_result.status != "EXTERNAL-TIMEOUT" else "TIMEOUT" + is_unexpected = expected != status + if is_unexpected: + self.unexpected_count += 1 + self.logger.debug("Unexpected count in this thread %i" % self.unexpected_count) + if status == "CRASH": + self.browser.log_crash(test.id) + + self.logger.test_end(test.id, + status, + message=file_result.message, + expected=expected, + extra=file_result.extra) + + restart_before_next = (test.restart_after or + file_result.status in ("CRASH", "EXTERNAL-TIMEOUT") or + ((subtest_unexpected or is_unexpected) + and self.restart_on_unexpected)) + + if (self.pause_after_test or + (self.pause_on_unexpected and (subtest_unexpected or is_unexpected))): + self.logger.info("Pausing until the browser exits") + self.send_message("wait") + else: + return self.after_test_end(restart_before_next) + + def wait_finished(self): + assert isinstance(self.state, RunnerManagerState.running) + # The browser should be stopped already, but this ensures we do any post-stop + # processing + self.logger.debug("Wait finished") + + return self.after_test_end(True) + + def after_test_end(self, restart): + assert isinstance(self.state, RunnerManagerState.running) + test, test_queue = self.get_next_test() + if test is None: + return RunnerManagerState.stop() + if test_queue != self.state.test_queue: + # We are starting a new group of tests, so force a restart + restart = True + if restart: + return RunnerManagerState.restarting(test, test_queue) + else: + return RunnerManagerState.running(test, test_queue) + + def restart_runner(self): + """Stop and restart the TestRunner""" + assert isinstance(self.state, RunnerManagerState.restarting) + self.stop_runner() + return RunnerManagerState.initalizing(self.state.test, self.state.test_queue, 0) + + def log(self, action, kwargs): + getattr(self.logger, action)(**kwargs) + + def error(self, message): + self.logger.error(message) + self.restart_runner() + + def stop_runner(self, force=False): + """Stop the TestRunner and the browser binary.""" + if self.test_runner_proc is None: + return + + if self.test_runner_proc.is_alive(): + self.send_message("stop") + try: + self.browser.stop(force=force) + self.ensure_runner_stopped() + finally: + self.cleanup() + + def teardown(self): + self.logger.debug("teardown in testrunnermanager") + self.test_runner_proc = None + self.command_queue.close() + self.remote_queue.close() + self.command_queue = None + self.remote_queue = None + + def ensure_runner_stopped(self): + self.logger.debug("ensure_runner_stopped") + if self.test_runner_proc is None: + return + + self.logger.debug("waiting for runner process to end") + self.test_runner_proc.join(10) + self.logger.debug("After join") + if self.test_runner_proc.is_alive(): + # This might leak a file handle from the queue + self.logger.warning("Forcibly terminating runner process") + self.test_runner_proc.terminate() + self.test_runner_proc.join(10) + else: + self.logger.debug("Testrunner exited with code %i" % self.test_runner_proc.exitcode) + + def runner_teardown(self): + self.ensure_runner_stopped() + return RunnerManagerState.stop() + + def send_message(self, command, *args): + self.remote_queue.put((command, args)) + + def cleanup(self): + self.logger.debug("TestManager cleanup") + if self.browser: + self.browser.cleanup() + while True: + try: + self.logger.warning(" ".join(map(repr, self.command_queue.get_nowait()))) + except Empty: + break + +class TestQueue(object): + def __init__(self, test_source_cls, test_type, tests, **kwargs): + self.queue = None + self.test_source_cls = test_source_cls + self.test_type = test_type + self.tests = tests + self.kwargs = kwargs + + def __enter__(self): + if not self.tests[self.test_type]: + return None + + self.queue = Queue() + has_tests = self.test_source_cls.queue_tests(self.queue, + self.test_type, + self.tests, + **self.kwargs) + # There is a race condition that means sometimes we continue + # before the tests have been written to the underlying pipe. + # Polling the pipe for data here avoids that + self.queue._reader.poll(10) + assert not self.queue.empty() + return self.queue + + def __exit__(self, *args, **kwargs): + if self.queue is not None: + self.queue.close() + self.queue = None + + +class ManagerGroup(object): + def __init__(self, suite_name, size, test_source_cls, test_source_kwargs, + browser_cls, browser_kwargs, + executor_cls, executor_kwargs, + pause_after_test=False, + pause_on_unexpected=False, + restart_on_unexpected=True, + debug_info=None): + """Main thread object that owns all the TestManager threads.""" + self.suite_name = suite_name + self.size = size + self.test_source_cls = test_source_cls + self.test_source_kwargs = test_source_kwargs + self.browser_cls = browser_cls + self.browser_kwargs = browser_kwargs + self.executor_cls = executor_cls + self.executor_kwargs = executor_kwargs + self.pause_after_test = pause_after_test + self.pause_on_unexpected = pause_on_unexpected + self.restart_on_unexpected = restart_on_unexpected + self.debug_info = debug_info + + self.pool = set() + # Event that is polled by threads so that they can gracefully exit in the face + # of sigint + self.stop_flag = threading.Event() + self.logger = structuredlog.StructuredLogger(suite_name) + self.test_queue = None + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_val, exc_tb): + self.stop() + + def run(self, test_type, tests): + """Start all managers in the group""" + self.logger.debug("Using %i processes" % self.size) + + self.test_queue = TestQueue(self.test_source_cls, + test_type, + tests, + **self.test_source_kwargs) + with self.test_queue as test_queue: + if test_queue is None: + self.logger.info("No %s tests to run" % test_type) + return + for _ in range(self.size): + manager = TestRunnerManager(self.suite_name, + test_queue, + self.test_source_cls, + self.browser_cls, + self.browser_kwargs, + self.executor_cls, + self.executor_kwargs, + self.stop_flag, + self.pause_after_test, + self.pause_on_unexpected, + self.restart_on_unexpected, + self.debug_info) + manager.start() + self.pool.add(manager) + self.wait() + + def is_alive(self): + """Boolean indicating whether any manager in the group is still alive""" + return any(manager.is_alive() for manager in self.pool) + + def wait(self): + """Wait for all the managers in the group to finish""" + for item in self.pool: + item.join() + + def stop(self): + """Set the stop flag so that all managers in the group stop as soon + as possible""" + self.stop_flag.set() + self.logger.debug("Stop flag set in ManagerGroup") + + def unexpected_count(self): + return sum(item.unexpected_count for item in self.pool) diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/__init__.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_chunker.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_chunker.py new file mode 100644 index 00000000000..062b687fab9 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_chunker.py @@ -0,0 +1,91 @@ +import unittest +import sys +from os.path import join, dirname +from mozlog import structured + +import pytest + +sys.path.insert(0, join(dirname(__file__), "..", "..")) + +from wptrunner.testloader import EqualTimeChunker + +structured.set_default_logger(structured.structuredlog.StructuredLogger("TestChunker")) + +class MockTest(object): + default_timeout = 10 + + def __init__(self, id, timeout=10): + self.id = id + self.item_type = "testharness" + self.timeout = timeout + + +def make_mock_manifest(*items): + rv = [] + for test_type, dir_path, num_tests in items: + for i in range(num_tests): + rv.append((test_type, + dir_path + "/%i.test" % i, + set([MockTest(i)]))) + return rv + + +class TestEqualTimeChunker(unittest.TestCase): + + def test_include_all(self): + tests = make_mock_manifest(("test", "a", 10), ("test", "a/b", 10), + ("test", "c", 10)) + + chunk_1 = list(EqualTimeChunker(3, 1)(tests)) + chunk_2 = list(EqualTimeChunker(3, 2)(tests)) + chunk_3 = list(EqualTimeChunker(3, 3)(tests)) + + self.assertEquals(tests[:10], chunk_1) + self.assertEquals(tests[10:20], chunk_2) + self.assertEquals(tests[20:], chunk_3) + + def test_include_all_1(self): + tests = make_mock_manifest(("test", "a", 5), ("test", "a/b", 5), + ("test", "c", 10), ("test", "d", 10)) + + chunk_1 = list(EqualTimeChunker(3, 1)(tests)) + chunk_2 = list(EqualTimeChunker(3, 2)(tests)) + chunk_3 = list(EqualTimeChunker(3, 3)(tests)) + + self.assertEquals(tests[:10], chunk_1) + self.assertEquals(tests[10:20], chunk_2) + self.assertEquals(tests[20:], chunk_3) + + def test_long(self): + tests = make_mock_manifest(("test", "a", 100), ("test", "a/b", 1), + ("test", "c", 1)) + + chunk_1 = list(EqualTimeChunker(3, 1)(tests)) + chunk_2 = list(EqualTimeChunker(3, 2)(tests)) + chunk_3 = list(EqualTimeChunker(3, 3)(tests)) + + self.assertEquals(tests[:100], chunk_1) + self.assertEquals(tests[100:101], chunk_2) + self.assertEquals(tests[101:102], chunk_3) + + def test_long_1(self): + tests = make_mock_manifest(("test", "a", 1), ("test", "a/b", 100), + ("test", "c", 1)) + + chunk_1 = list(EqualTimeChunker(3, 1)(tests)) + chunk_2 = list(EqualTimeChunker(3, 2)(tests)) + chunk_3 = list(EqualTimeChunker(3, 3)(tests)) + + self.assertEquals(tests[:1], chunk_1) + self.assertEquals(tests[1:101], chunk_2) + self.assertEquals(tests[101:102], chunk_3) + + def test_too_few_dirs(self): + with self.assertRaises(ValueError): + tests = make_mock_manifest(("test", "a", 1), ("test", "a/b", 100), + ("test", "c", 1)) + list(EqualTimeChunker(4, 1)(tests)) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_hosts.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_hosts.py new file mode 100644 index 00000000000..808b81606ae --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_hosts.py @@ -0,0 +1,56 @@ +import unittest +import sys +from os.path import join, dirname +from cStringIO import StringIO + +sys.path.insert(0, join(dirname(__file__), "..", "..")) + +from wptrunner import hosts + + +class HostsTest(unittest.TestCase): + def do_test(self, input, expected): + host_file = hosts.HostsFile.from_file(StringIO(input)) + self.assertEquals(host_file.to_string(), expected) + + def test_simple(self): + self.do_test("""127.0.0.1 \tlocalhost alias # comment +# Another comment""", + """127.0.0.1 localhost alias # comment +# Another comment +""") + + def test_blank_lines(self): + self.do_test("""127.0.0.1 \tlocalhost alias # comment + +\r + \t +# Another comment""", + """127.0.0.1 localhost alias # comment +# Another comment +""") + + def test_whitespace(self): + self.do_test(""" \t127.0.0.1 \tlocalhost alias # comment \r + \t# Another comment""", + """127.0.0.1 localhost alias # comment +# Another comment +""") + + def test_alignment(self): + self.do_test("""127.0.0.1 \tlocalhost alias +192.168.1.1 another_host another_alias +""","""127.0.0.1 localhost alias +192.168.1.1 another_host another_alias +""" +) + + def test_multiple_same_name(self): + # The semantics are that we overwrite earlier entries with the same name + self.do_test("""127.0.0.1 \tlocalhost alias +192.168.1.1 localhost another_alias""","""192.168.1.1 localhost another_alias +""" +) + +if __name__ == "__main__": + unittest.main() diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_testloader.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_testloader.py new file mode 100644 index 00000000000..0d967b051fd --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_testloader.py @@ -0,0 +1,29 @@ +from __future__ import unicode_literals + +import os +import sys +import tempfile + +sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "..")) + +from mozlog import structured +from wptrunner.testloader import TestFilter as Filter +from .test_chunker import make_mock_manifest + +structured.set_default_logger(structured.structuredlog.StructuredLogger("TestLoader")) + +include_ini = """\ +skip: true +[test_\u53F0] + skip: false +""" + +def test_filter_unicode(): + tests = make_mock_manifest(("test", "a", 10), ("test", "a/b", 10), + ("test", "c", 10)) + + with tempfile.NamedTemporaryFile("wb", suffix=".ini") as f: + f.write(include_ini.encode('utf-8')) + f.flush() + + Filter(manifest_path=f.name, test_manifests=tests) diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_update.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_update.py new file mode 100644 index 00000000000..e5eb4cf49c7 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_update.py @@ -0,0 +1,328 @@ +import unittest +import StringIO + +import pytest + +from .. import metadata, manifestupdate +from mozlog import structuredlog, handlers, formatters + + +class TestExpectedUpdater(unittest.TestCase): + def create_manifest(self, data, test_path="path/to/test.ini"): + f = StringIO.StringIO(data) + return manifestupdate.compile(f, test_path) + + def create_updater(self, data, **kwargs): + expected_tree = {} + id_path_map = {} + for test_path, test_ids, manifest_str in data: + if isinstance(test_ids, (str, unicode)): + test_ids = [test_ids] + expected_tree[test_path] = self.create_manifest(manifest_str, test_path) + for test_id in test_ids: + id_path_map[test_id] = test_path + + return metadata.ExpectedUpdater(expected_tree, id_path_map, **kwargs) + + def create_log(self, *args, **kwargs): + logger = structuredlog.StructuredLogger("expected_test") + data = StringIO.StringIO() + handler = handlers.StreamHandler(data, formatters.JSONFormatter()) + logger.add_handler(handler) + + log_entries = ([("suite_start", {"tests": [], "run_info": kwargs.get("run_info", {})})] + + list(args) + + [("suite_end", {})]) + + for item in log_entries: + action, kwargs = item + getattr(logger, action)(**kwargs) + logger.remove_handler(handler) + data.seek(0) + return data + + + def coalesce_results(self, trees): + for tree in trees: + for test in tree.iterchildren(): + for subtest in test.iterchildren(): + subtest.coalesce_expected() + test.coalesce_expected() + + @pytest.mark.xfail + def test_update_0(self): + prev_data = [("path/to/test.htm.ini", ["/path/to/test.htm"], """[test.htm] + type: testharness + [test1] + expected: FAIL""")] + + new_data = self.create_log(("test_start", {"test": "/path/to/test.htm"}), + ("test_status", {"test": "/path/to/test.htm", + "subtest": "test1", + "status": "PASS", + "expected": "FAIL"}), + ("test_end", {"test": "/path/to/test.htm", + "status": "OK"})) + updater = self.create_updater(prev_data) + updater.update_from_log(new_data) + + new_manifest = updater.expected_tree["path/to/test.htm.ini"] + self.coalesce_results([new_manifest]) + self.assertTrue(new_manifest.is_empty) + + @pytest.mark.xfail + def test_update_1(self): + test_id = "/path/to/test.htm" + prev_data = [("path/to/test.htm.ini", [test_id], """[test.htm] + type: testharness + [test1] + expected: ERROR""")] + + new_data = self.create_log(("test_start", {"test": test_id}), + ("test_status", {"test": test_id, + "subtest": "test1", + "status": "FAIL", + "expected": "ERROR"}), + ("test_end", {"test": test_id, + "status": "OK"})) + updater = self.create_updater(prev_data) + updater.update_from_log(new_data) + + new_manifest = updater.expected_tree["path/to/test.htm.ini"] + self.coalesce_results([new_manifest]) + self.assertFalse(new_manifest.is_empty) + self.assertEquals(new_manifest.get_test(test_id).children[0].get("expected"), "FAIL") + + @pytest.mark.xfail + def test_new_subtest(self): + test_id = "/path/to/test.htm" + prev_data = [("path/to/test.htm.ini", [test_id], """[test.htm] + type: testharness + [test1] + expected: FAIL""")] + + new_data = self.create_log(("test_start", {"test": test_id}), + ("test_status", {"test": test_id, + "subtest": "test1", + "status": "FAIL", + "expected": "FAIL"}), + ("test_status", {"test": test_id, + "subtest": "test2", + "status": "FAIL", + "expected": "PASS"}), + ("test_end", {"test": test_id, + "status": "OK"})) + updater = self.create_updater(prev_data) + updater.update_from_log(new_data) + + new_manifest = updater.expected_tree["path/to/test.htm.ini"] + self.coalesce_results([new_manifest]) + self.assertFalse(new_manifest.is_empty) + self.assertEquals(new_manifest.get_test(test_id).children[0].get("expected"), "FAIL") + self.assertEquals(new_manifest.get_test(test_id).children[1].get("expected"), "FAIL") + + @pytest.mark.xfail + def test_update_multiple_0(self): + test_id = "/path/to/test.htm" + prev_data = [("path/to/test.htm.ini", [test_id], """[test.htm] + type: testharness + [test1] + expected: FAIL""")] + + new_data_0 = self.create_log(("test_start", {"test": test_id}), + ("test_status", {"test": test_id, + "subtest": "test1", + "status": "FAIL", + "expected": "FAIL"}), + ("test_end", {"test": test_id, + "status": "OK"}), + run_info={"debug": False, "os": "osx"}) + + new_data_1 = self.create_log(("test_start", {"test": test_id}), + ("test_status", {"test": test_id, + "subtest": "test1", + "status": "TIMEOUT", + "expected": "FAIL"}), + ("test_end", {"test": test_id, + "status": "OK"}), + run_info={"debug": False, "os": "linux"}) + updater = self.create_updater(prev_data) + + updater.update_from_log(new_data_0) + updater.update_from_log(new_data_1) + + new_manifest = updater.expected_tree["path/to/test.htm.ini"] + + self.coalesce_results([new_manifest]) + + self.assertFalse(new_manifest.is_empty) + self.assertEquals(new_manifest.get_test(test_id).children[0].get( + "expected", {"debug": False, "os": "osx"}), "FAIL") + self.assertEquals(new_manifest.get_test(test_id).children[0].get( + "expected", {"debug": False, "os": "linux"}), "TIMEOUT") + + @pytest.mark.xfail + def test_update_multiple_1(self): + test_id = "/path/to/test.htm" + prev_data = [("path/to/test.htm.ini", [test_id], """[test.htm] + type: testharness + [test1] + expected: FAIL""")] + + new_data_0 = self.create_log(("test_start", {"test": test_id}), + ("test_status", {"test": test_id, + "subtest": "test1", + "status": "FAIL", + "expected": "FAIL"}), + ("test_end", {"test": test_id, + "status": "OK"}), + run_info={"debug": False, "os": "osx"}) + + new_data_1 = self.create_log(("test_start", {"test": test_id}), + ("test_status", {"test": test_id, + "subtest": "test1", + "status": "TIMEOUT", + "expected": "FAIL"}), + ("test_end", {"test": test_id, + "status": "OK"}), + run_info={"debug": False, "os": "linux"}) + updater = self.create_updater(prev_data) + + updater.update_from_log(new_data_0) + updater.update_from_log(new_data_1) + + new_manifest = updater.expected_tree["path/to/test.htm.ini"] + + self.coalesce_results([new_manifest]) + + self.assertFalse(new_manifest.is_empty) + self.assertEquals(new_manifest.get_test(test_id).children[0].get( + "expected", {"debug": False, "os": "osx"}), "FAIL") + self.assertEquals(new_manifest.get_test(test_id).children[0].get( + "expected", {"debug": False, "os": "linux"}), "TIMEOUT") + self.assertEquals(new_manifest.get_test(test_id).children[0].get( + "expected", {"debug": False, "os": "windows"}), "FAIL") + + @pytest.mark.xfail + def test_update_multiple_2(self): + test_id = "/path/to/test.htm" + prev_data = [("path/to/test.htm.ini", [test_id], """[test.htm] + type: testharness + [test1] + expected: FAIL""")] + + new_data_0 = self.create_log(("test_start", {"test": test_id}), + ("test_status", {"test": test_id, + "subtest": "test1", + "status": "FAIL", + "expected": "FAIL"}), + ("test_end", {"test": test_id, + "status": "OK"}), + run_info={"debug": False, "os": "osx"}) + + new_data_1 = self.create_log(("test_start", {"test": test_id}), + ("test_status", {"test": test_id, + "subtest": "test1", + "status": "TIMEOUT", + "expected": "FAIL"}), + ("test_end", {"test": test_id, + "status": "OK"}), + run_info={"debug": True, "os": "osx"}) + updater = self.create_updater(prev_data) + + updater.update_from_log(new_data_0) + updater.update_from_log(new_data_1) + + new_manifest = updater.expected_tree["path/to/test.htm.ini"] + + self.coalesce_results([new_manifest]) + + self.assertFalse(new_manifest.is_empty) + self.assertEquals(new_manifest.get_test(test_id).children[0].get( + "expected", {"debug": False, "os": "osx"}), "FAIL") + self.assertEquals(new_manifest.get_test(test_id).children[0].get( + "expected", {"debug": True, "os": "osx"}), "TIMEOUT") + + @pytest.mark.xfail + def test_update_multiple_3(self): + test_id = "/path/to/test.htm" + prev_data = [("path/to/test.htm.ini", [test_id], """[test.htm] + type: testharness + [test1] + expected: + if debug: FAIL + if not debug and os == "osx": TIMEOUT""")] + + new_data_0 = self.create_log(("test_start", {"test": test_id}), + ("test_status", {"test": test_id, + "subtest": "test1", + "status": "FAIL", + "expected": "FAIL"}), + ("test_end", {"test": test_id, + "status": "OK"}), + run_info={"debug": False, "os": "osx"}) + + new_data_1 = self.create_log(("test_start", {"test": test_id}), + ("test_status", {"test": test_id, + "subtest": "test1", + "status": "TIMEOUT", + "expected": "FAIL"}), + ("test_end", {"test": test_id, + "status": "OK"}), + run_info={"debug": True, "os": "osx"}) + updater = self.create_updater(prev_data) + + updater.update_from_log(new_data_0) + updater.update_from_log(new_data_1) + + new_manifest = updater.expected_tree["path/to/test.htm.ini"] + + self.coalesce_results([new_manifest]) + + self.assertFalse(new_manifest.is_empty) + self.assertEquals(new_manifest.get_test(test_id).children[0].get( + "expected", {"debug": False, "os": "osx"}), "FAIL") + self.assertEquals(new_manifest.get_test(test_id).children[0].get( + "expected", {"debug": True, "os": "osx"}), "TIMEOUT") + + @pytest.mark.xfail + def test_update_ignore_existing(self): + test_id = "/path/to/test.htm" + prev_data = [("path/to/test.htm.ini", [test_id], """[test.htm] + type: testharness + [test1] + expected: + if debug: TIMEOUT + if not debug and os == "osx": NOTRUN""")] + + new_data_0 = self.create_log(("test_start", {"test": test_id}), + ("test_status", {"test": test_id, + "subtest": "test1", + "status": "FAIL", + "expected": "PASS"}), + ("test_end", {"test": test_id, + "status": "OK"}), + run_info={"debug": False, "os": "linux"}) + + new_data_1 = self.create_log(("test_start", {"test": test_id}), + ("test_status", {"test": test_id, + "subtest": "test1", + "status": "FAIL", + "expected": "PASS"}), + ("test_end", {"test": test_id, + "status": "OK"}), + run_info={"debug": True, "os": "windows"}) + updater = self.create_updater(prev_data, ignore_existing=True) + + updater.update_from_log(new_data_0) + updater.update_from_log(new_data_1) + + new_manifest = updater.expected_tree["path/to/test.htm.ini"] + + self.coalesce_results([new_manifest]) + + self.assertFalse(new_manifest.is_empty) + self.assertEquals(new_manifest.get_test(test_id).children[0].get( + "expected", {"debug": True, "os": "osx"}), "FAIL") + self.assertEquals(new_manifest.get_test(test_id).children[0].get( + "expected", {"debug": False, "os": "osx"}), "FAIL") diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/update/__init__.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/update/__init__.py new file mode 100644 index 00000000000..497cb34ad0c --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/update/__init__.py @@ -0,0 +1,47 @@ +import os +import sys + +from mozlog.structured import structuredlog, commandline + +from .. import wptcommandline + +from update import WPTUpdate + +def remove_logging_args(args): + """Take logging args out of the dictionary of command line arguments so + they are not passed in as kwargs to the update code. This is particularly + necessary here because the arguments are often of type file, which cannot + be serialized. + + :param args: Dictionary of command line arguments. + """ + for name in args.keys(): + if name.startswith("log_"): + args.pop(name) + + +def setup_logging(args, defaults): + """Use the command line arguments to set up the logger. + + :param args: Dictionary of command line arguments. + :param defaults: Dictionary of {formatter_name: stream} to use if + no command line logging is specified""" + logger = commandline.setup_logging("web-platform-tests-update", args, defaults) + + remove_logging_args(args) + + return logger + + +def run_update(logger, **kwargs): + updater = WPTUpdate(logger, **kwargs) + return updater.run() + + +def main(): + args = wptcommandline.parse_args_update() + logger = setup_logging(args, {"mach": sys.stdout}) + assert structuredlog.get_default_logger() is not None + success = run_update(logger, **args) + sys.exit(0 if success else 1) + diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/update/base.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/update/base.py new file mode 100644 index 00000000000..547808e5293 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/update/base.py @@ -0,0 +1,65 @@ +exit_unclean = object() +exit_clean = object() + + +class Step(object): + provides = [] + + def __init__(self, logger): + self.logger = logger + + def run(self, step_index, state): + """Base class for state-creating steps. + + When a Step is run() the current state is checked to see + if the state from this step has already been created. If it + has the restore() method is invoked. Otherwise the create() + method is invoked with the state object. This is expected to + add items with all the keys in __class__.provides to the state + object. + """ + + name = self.__class__.__name__ + + try: + stored_step = state.steps[step_index] + except IndexError: + stored_step = None + + if stored_step == name: + self.restore(state) + elif stored_step is None: + self.create(state) + assert set(self.provides).issubset(set(state.keys())) + state.steps = state.steps + [name] + else: + raise ValueError("Expected a %s step, got a %s step" % (name, stored_step)) + + def create(self, data): + raise NotImplementedError + + def restore(self, state): + self.logger.debug("Step %s using stored state" % (self.__class__.__name__,)) + for key in self.provides: + assert key in state + + +class StepRunner(object): + steps = [] + + def __init__(self, logger, state): + """Class that runs a specified series of Steps with a common State""" + self.state = state + self.logger = logger + if "steps" not in state: + state.steps = [] + + def run(self): + rv = None + for step_index, step in enumerate(self.steps): + self.logger.debug("Starting step %s" % step.__name__) + rv = step(self.logger).run(step_index, self.state) + if rv in (exit_clean, exit_unclean): + break + + return rv diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/update/metadata.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/update/metadata.py new file mode 100644 index 00000000000..f596766578c --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/update/metadata.py @@ -0,0 +1,71 @@ +import os + +from .. import metadata, products + +from base import Step, StepRunner + +class GetUpdatePropertyList(Step): + provides = ["property_order", "boolean_properties"] + + + def create(self, state): + property_order, boolean_properties = products.load_product_update( + state.config, state.product) + state.property_order = property_order + state.boolean_properties = boolean_properties + + +class UpdateExpected(Step): + """Do the metadata update on the local checkout""" + + provides = ["needs_human"] + + def create(self, state): + if state.sync_tree is not None: + sync_root = state.sync_tree.root + else: + sync_root = None + + state.needs_human = metadata.update_expected(state.paths, + state.serve_root, + state.run_log, + rev_old=None, + ignore_existing=state.ignore_existing, + sync_root=sync_root, + property_order=state.property_order, + boolean_properties=state.boolean_properties) + + +class CreateMetadataPatch(Step): + """Create a patch/commit for the metadata checkout""" + + def create(self, state): + if state.no_patch: + return + + local_tree = state.local_tree + sync_tree = state.sync_tree + + if sync_tree is not None: + name = "web-platform-tests_update_%s_metadata" % sync_tree.rev + message = "Update %s expected data to revision %s" % (state.suite_name, sync_tree.rev) + else: + name = "web-platform-tests_update_metadata" + message = "Update %s expected data" % state.suite_name + + local_tree.create_patch(name, message) + + if not local_tree.is_clean: + metadata_paths = [manifest_path["metadata_path"] + for manifest_path in state.paths.itervalues()] + for path in metadata_paths: + local_tree.add_new(os.path.relpath(path, local_tree.root)) + local_tree.update_patch(include=metadata_paths) + local_tree.commit_patch() + + +class MetadataUpdateRunner(StepRunner): + """(Sub)Runner for updating metadata""" + steps = [GetUpdatePropertyList, + UpdateExpected, + CreateMetadataPatch] diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/update/state.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/update/state.py new file mode 100644 index 00000000000..9454414e640 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/update/state.py @@ -0,0 +1,133 @@ +import os +import cPickle as pickle + +here = os.path.abspath(os.path.split(__file__)[0]) + +class State(object): + filename = os.path.join(here, ".wpt-update.lock") + + def __new__(cls, logger): + rv = cls.load(logger) + if rv is not None: + logger.debug("Existing state found") + return rv + + logger.debug("No existing state found") + return object.__new__(cls, logger) + + def __init__(self, logger): + """Object containing state variables created when running Steps. + + On write the state is serialized to disk, such that it can be restored in + the event that the program is interrupted before all steps are complete. + Note that this only works well if the values are immutable; mutating an + existing value will not cause the data to be serialized. + + Variables are set and get as attributes e.g. state_obj.spam = "eggs". + + :param parent: Parent State object or None if this is the root object. + """ + + if hasattr(self, "_data"): + return + + self._data = [{}] + self._logger = logger + self._index = 0 + + def __getstate__(self): + rv = self.__dict__.copy() + del rv["_logger"] + return rv + + @classmethod + def load(cls, logger): + """Load saved state from a file""" + try: + with open(cls.filename) as f: + try: + rv = pickle.load(f) + logger.debug("Loading data %r" % (rv._data,)) + rv._logger = logger + rv._index = 0 + return rv + except EOFError: + logger.warning("Found empty state file") + except IOError: + logger.debug("IOError loading stored state") + + def push(self, init_values): + """Push a new clean state dictionary + + :param init_values: List of variable names in the current state dict to copy + into the new state dict.""" + + return StateContext(self, init_values) + + def save(self): + """Write the state to disk""" + with open(self.filename, "w") as f: + pickle.dump(self, f) + + def is_empty(self): + return len(self._data) == 1 and self._data[0] == {} + + def clear(self): + """Remove all state and delete the stored copy.""" + try: + os.unlink(self.filename) + except OSError: + pass + self._data = [{}] + + + def __setattr__(self, key, value): + if key.startswith("_"): + object.__setattr__(self, key, value) + else: + self._data[self._index][key] = value + self.save() + + def __getattr__(self, key): + if key.startswith("_"): + raise AttributeError + try: + return self._data[self._index][key] + except KeyError: + raise AttributeError + + def __contains__(self, key): + return key in self._data[self._index] + + def update(self, items): + """Add a dictionary of {name: value} pairs to the state""" + self._data[self._index].update(items) + self.save() + + def keys(self): + return self._data[self._index].keys() + +class StateContext(object): + def __init__(self, state, init_values): + self.state = state + self.init_values = init_values + + def __enter__(self): + if len(self.state._data) == self.state._index + 1: + # This is the case where there is no stored state + new_state = {} + for key in self.init_values: + new_state[key] = self.state._data[self.state._index][key] + self.state._data.append(new_state) + self.state._index += 1 + self.state._logger.debug("Incremented index to %s" % self.state._index) + + def __exit__(self, *args, **kwargs): + if len(self.state._data) > 1: + assert self.state._index == len(self.state._data) - 1 + self.state._data.pop() + self.state._index -= 1 + self.state._logger.debug("Decremented index to %s" % self.state._index) + assert self.state._index >= 0 + else: + raise ValueError("Tried to pop the top state") diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/update/sync.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/update/sync.py new file mode 100644 index 00000000000..fb7948874c4 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/update/sync.py @@ -0,0 +1,197 @@ +import fnmatch +import os +import re +import shutil +import sys +import uuid + +from .. import testloader + +from base import Step, StepRunner +from tree import Commit + +here = os.path.abspath(os.path.split(__file__)[0]) + +bsd_license = """W3C 3-clause BSD License + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of works must retain the original copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the original copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +* Neither the name of the W3C nor the names of its contributors may be + used to endorse or promote products derived from this work without + specific prior written permission. + + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +""" + + +def copy_wpt_tree(tree, dest, excludes=None, includes=None): + """Copy the working copy of a Tree to a destination directory. + + :param tree: The Tree to copy. + :param dest: The destination directory""" + if os.path.exists(dest): + assert os.path.isdir(dest) + + shutil.rmtree(dest) + + os.mkdir(dest) + + if excludes is None: + excludes = [] + + excludes = [re.compile(fnmatch.translate(item)) for item in excludes] + + if includes is None: + includes = [] + + includes = [re.compile(fnmatch.translate(item)) for item in includes] + + for tree_path in tree.paths(): + if (any(item.match(tree_path) for item in excludes) and + not any(item.match(tree_path) for item in includes)): + continue + + source_path = os.path.join(tree.root, tree_path) + dest_path = os.path.join(dest, tree_path) + + dest_dir = os.path.split(dest_path)[0] + if not os.path.isdir(source_path): + if not os.path.exists(dest_dir): + os.makedirs(dest_dir) + shutil.copy2(source_path, dest_path) + + for source, destination in [("testharness_runner.html", ""), + ("testharnessreport.js", "resources/")]: + source_path = os.path.join(here, os.pardir, source) + dest_path = os.path.join(dest, destination, os.path.split(source)[1]) + shutil.copy2(source_path, dest_path) + + add_license(dest) + + +def add_license(dest): + """Write the bsd license string to a LICENSE file. + + :param dest: Directory in which to place the LICENSE file.""" + with open(os.path.join(dest, "LICENSE"), "w") as f: + f.write(bsd_license) + + +class UpdateCheckout(Step): + """Pull changes from upstream into the local sync tree.""" + + provides = ["local_branch"] + + def create(self, state): + sync_tree = state.sync_tree + state.local_branch = uuid.uuid4().hex + sync_tree.update(state.sync["remote_url"], + state.sync["branch"], + state.local_branch) + sync_path = os.path.abspath(sync_tree.root) + if not sync_path in sys.path: + from update import setup_paths + setup_paths(sync_path) + + def restore(self, state): + assert os.path.abspath(state.sync_tree.root) in sys.path + Step.restore(self, state) + + +class GetSyncTargetCommit(Step): + """Find the commit that we will sync to.""" + + provides = ["sync_commit"] + + def create(self, state): + if state.target_rev is None: + #Use upstream branch HEAD as the base commit + state.sync_commit = state.sync_tree.get_remote_sha1(state.sync["remote_url"], + state.sync["branch"]) + else: + state.sync_commit = Commit(state.sync_tree, state.rev) + + state.sync_tree.checkout(state.sync_commit.sha1, state.local_branch, force=True) + self.logger.debug("New base commit is %s" % state.sync_commit.sha1) + + +class LoadManifest(Step): + """Load the test manifest""" + + provides = ["manifest_path", "test_manifest"] + + def create(self, state): + from manifest import manifest + state.manifest_path = os.path.join(state.metadata_path, "MANIFEST.json") + state.test_manifest = manifest.Manifest("/") + + +class UpdateManifest(Step): + """Update the manifest to match the tests in the sync tree checkout""" + + def create(self, state): + from manifest import manifest, update + update.update(state.sync["path"], state.test_manifest) + manifest.write(state.test_manifest, state.manifest_path) + + +class CopyWorkTree(Step): + """Copy the sync tree over to the destination in the local tree""" + + def create(self, state): + copy_wpt_tree(state.sync_tree, + state.tests_path, + excludes=state.path_excludes, + includes=state.path_includes) + + +class CreateSyncPatch(Step): + """Add the updated test files to a commit/patch in the local tree.""" + + def create(self, state): + if state.no_patch: + return + + local_tree = state.local_tree + sync_tree = state.sync_tree + + local_tree.create_patch("web-platform-tests_update_%s" % sync_tree.rev, + "Update %s to revision %s" % (state.suite_name, sync_tree.rev)) + local_tree.add_new(os.path.relpath(state.tests_path, + local_tree.root)) + updated = local_tree.update_patch(include=[state.tests_path, + state.metadata_path]) + local_tree.commit_patch() + + if not updated: + self.logger.info("Nothing to sync") + + +class SyncFromUpstreamRunner(StepRunner): + """(Sub)Runner for doing an upstream sync""" + steps = [UpdateCheckout, + GetSyncTargetCommit, + LoadManifest, + UpdateManifest, + CopyWorkTree, + CreateSyncPatch] diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/update/tree.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/update/tree.py new file mode 100644 index 00000000000..01df0b4f94a --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/update/tree.py @@ -0,0 +1,382 @@ +import os +import re +import subprocess + +from .. import vcs +from ..vcs import bind_to_repo, git, hg + + +def get_unique_name(existing, initial): + """Get a name either equal to initial or of the form initial_N, for some + integer N, that is not in the set existing. + + + :param existing: Set of names that must not be chosen. + :param initial: Name, or name prefix, to use""" + if initial not in existing: + return initial + for i in xrange(len(existing) + 1): + test = "%s_%s" % (initial, i + 1) + if test not in existing: + return test + assert False + +class NoVCSTree(object): + name = "non-vcs" + + def __init__(self, root=None): + if root is None: + root = os.path.abspath(os.curdir) + self.root = root + + @classmethod + def is_type(cls, path=None): + return True + + @property + def is_clean(self): + return True + + def add_new(self, prefix=None): + pass + + def create_patch(self, patch_name, message): + pass + + def update_patch(self, include=None): + pass + + def commit_patch(self): + pass + + +class HgTree(object): + name = "mercurial" + + def __init__(self, root=None): + if root is None: + root = hg("root").strip() + self.root = root + self.hg = vcs.bind_to_repo(hg, self.root) + + def __getstate__(self): + rv = self.__dict__.copy() + del rv['hg'] + return rv + + def __setstate__(self, dict): + self.__dict__.update(dict) + self.hg = vcs.bind_to_repo(vcs.hg, self.root) + + @classmethod + def is_type(cls, path=None): + kwargs = {"log_error": False} + if path is not None: + kwargs["repo"] = path + try: + hg("root", **kwargs) + except: + return False + return True + + @property + def is_clean(self): + return self.hg("status").strip() == "" + + def add_new(self, prefix=None): + if prefix is not None: + args = ("-I", prefix) + else: + args = () + self.hg("add", *args) + + def create_patch(self, patch_name, message): + try: + self.hg("qinit", log_error=False) + except subprocess.CalledProcessError: + pass + + patch_names = [item.strip() for item in self.hg("qseries").split("\n") if item.strip()] + + suffix = 0 + test_name = patch_name + while test_name in patch_names: + suffix += 1 + test_name = "%s-%i" % (patch_name, suffix) + + self.hg("qnew", test_name, "-X", self.root, "-m", message) + + def update_patch(self, include=None): + if include is not None: + args = [] + for item in include: + args.extend(["-I", item]) + else: + args = () + + self.hg("qrefresh", *args) + return True + + def commit_patch(self): + self.hg("qfinish") + + def contains_commit(self, commit): + try: + self.hg("identify", "-r", commit.sha1) + return True + except subprocess.CalledProcessError: + return False + + +class GitTree(object): + name = "git" + + def __init__(self, root=None): + if root is None: + root = git("rev-parse", "--show-toplevel").strip() + self.root = root + self.git = vcs.bind_to_repo(git, self.root) + self.message = None + self.commit_cls = Commit + + def __getstate__(self): + rv = self.__dict__.copy() + del rv['git'] + return rv + + def __setstate__(self, dict): + self.__dict__.update(dict) + self.git = vcs.bind_to_repo(vcs.git, self.root) + + @classmethod + def is_type(cls, path=None): + kwargs = {"log_error": False} + if path is not None: + kwargs["repo"] = path + try: + git("rev-parse", "--show-toplevel", **kwargs) + except: + return False + return True + + @property + def rev(self): + """Current HEAD revision""" + if vcs.is_git_root(self.root): + return self.git("rev-parse", "HEAD").strip() + else: + return None + + @property + def is_clean(self): + return self.git("status").strip() == "" + + def add_new(self, prefix=None): + """Add files to the staging area. + + :param prefix: None to include all files or a path prefix to + add all files under that path. + """ + if prefix is None: + args = ("-a",) + else: + args = ("--no-ignore-removal", prefix) + self.git("add", *args) + + def list_refs(self, ref_filter=None): + """Get a list of sha1, name tuples for references in a repository. + + :param ref_filter: Pattern that reference name must match (from the end, + matching whole /-delimited segments only + """ + args = [] + if ref_filter is not None: + args.append(ref_filter) + data = self.git("show-ref", *args) + rv = [] + for line in data.split("\n"): + if not line.strip(): + continue + sha1, ref = line.split() + rv.append((sha1, ref)) + return rv + + def list_remote(self, remote, ref_filter=None): + """Return a list of (sha1, name) tupes for references in a remote. + + :param remote: URL of the remote to list. + :param ref_filter: Pattern that the reference name must match. + """ + args = [] + if ref_filter is not None: + args.append(ref_filter) + data = self.git("ls-remote", remote, *args) + rv = [] + for line in data.split("\n"): + if not line.strip(): + continue + sha1, ref = line.split() + rv.append((sha1, ref)) + return rv + + def get_remote_sha1(self, remote, branch): + """Return the SHA1 of a particular branch in a remote. + + :param remote: the remote URL + :param branch: the branch name""" + for sha1, ref in self.list_remote(remote, branch): + if ref == "refs/heads/%s" % branch: + return self.commit_cls(self, sha1) + assert False + + def create_patch(self, patch_name, message): + # In git a patch is actually a commit + self.message = message + + def update_patch(self, include=None): + """Commit the staged changes, or changes to listed files. + + :param include: Either None, to commit staged changes, or a list + of filenames (which must already be in the repo) + to commit + """ + if include is not None: + args = tuple(include) + else: + args = () + + if self.git("status", "-uno", "-z", *args).strip(): + self.git("add", *args) + return True + return False + + def commit_patch(self): + assert self.message is not None + + if self.git("diff", "--name-only", "--staged", "-z").strip(): + self.git("commit", "-m", self.message) + return True + + return False + + def init(self): + self.git("init") + assert vcs.is_git_root(self.root) + + def checkout(self, rev, branch=None, force=False): + """Checkout a particular revision, optionally into a named branch. + + :param rev: Revision identifier (e.g. SHA1) to checkout + :param branch: Branch name to use + :param force: Force-checkout + """ + assert rev is not None + + args = [] + if branch: + branches = [ref[len("refs/heads/"):] for sha1, ref in self.list_refs() + if ref.startswith("refs/heads/")] + branch = get_unique_name(branches, branch) + + args += ["-b", branch] + + if force: + args.append("-f") + args.append(rev) + self.git("checkout", *args) + + def update(self, remote, remote_branch, local_branch): + """Fetch from the remote and checkout into a local branch. + + :param remote: URL to the remote repository + :param remote_branch: Branch on the remote repository to check out + :param local_branch: Local branch name to check out into + """ + if not vcs.is_git_root(self.root): + self.init() + self.git("clean", "-xdf") + self.git("fetch", remote, "%s:%s" % (remote_branch, local_branch)) + self.checkout(local_branch) + self.git("submodule", "update", "--init", "--recursive") + + def clean(self): + self.git("checkout", self.rev) + self.git("branch", "-D", self.local_branch) + + def paths(self): + """List paths in the tree""" + repo_paths = [self.root] + [os.path.join(self.root, path) + for path in self.submodules()] + + rv = [] + + for repo_path in repo_paths: + paths = vcs.git("ls-tree", "-r", "--name-only", "HEAD", repo=repo_path).split("\n") + rv.extend(os.path.relpath(os.path.join(repo_path, item), self.root) for item in paths + if item.strip()) + return rv + + def submodules(self): + """List submodule directories""" + output = self.git("submodule", "status", "--recursive") + rv = [] + for line in output.split("\n"): + line = line.strip() + if not line: + continue + parts = line.split(" ") + rv.append(parts[1]) + return rv + + def contains_commit(self, commit): + try: + self.git("rev-parse", "--verify", commit.sha1) + return True + except subprocess.CalledProcessError: + return False + + +class CommitMessage(object): + def __init__(self, text): + self.text = text + self._parse_message() + + def __str__(self): + return self.text + + def _parse_message(self): + lines = self.text.splitlines() + self.full_summary = lines[0] + self.body = "\n".join(lines[1:]) + + +class Commit(object): + msg_cls = CommitMessage + + _sha1_re = re.compile("^[0-9a-f]{40}$") + + def __init__(self, tree, sha1): + """Object representing a commit in a specific GitTree. + + :param tree: GitTree to which this commit belongs. + :param sha1: Full sha1 string for the commit + """ + assert self._sha1_re.match(sha1) + + self.tree = tree + self.git = tree.git + self.sha1 = sha1 + self.author, self.email, self.message = self._get_meta() + + def __getstate__(self): + rv = self.__dict__.copy() + del rv['git'] + return rv + + def __setstate__(self, dict): + self.__dict__.update(dict) + self.git = self.tree.git + + def _get_meta(self): + author, email, message = self.git("show", "-s", "--format=format:%an\n%ae\n%B", self.sha1).split("\n", 2) + return author, email, self.msg_cls(message) diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/update/update.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/update/update.py new file mode 100644 index 00000000000..4c0099e63bb --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/update/update.py @@ -0,0 +1,159 @@ +import os +import sys + +from metadata import MetadataUpdateRunner +from sync import SyncFromUpstreamRunner +from tree import GitTree, HgTree, NoVCSTree + +from .. import environment as env +from base import Step, StepRunner, exit_clean, exit_unclean +from state import State + +def setup_paths(sync_path): + sys.path.insert(0, os.path.abspath(sync_path)) + try: + from tools import localpaths + except ImportError: + from wpt_tools import localpaths + +class LoadConfig(Step): + """Step for loading configuration from the ini file and kwargs.""" + + provides = ["sync", "paths", "metadata_path", "tests_path"] + + def create(self, state): + state.sync = {"remote_url": state.kwargs["remote_url"], + "branch": state.kwargs["branch"], + "path": state.kwargs["sync_path"]} + + state.paths = state.kwargs["test_paths"] + state.tests_path = state.paths["/"]["tests_path"] + state.metadata_path = state.paths["/"]["metadata_path"] + + assert state.tests_path.startswith("/") + + +class LoadTrees(Step): + """Step for creating a Tree for the local copy and a GitTree for the + upstream sync.""" + + provides = ["local_tree", "sync_tree"] + + def create(self, state): + if os.path.exists(state.sync["path"]): + sync_tree = GitTree(root=state.sync["path"]) + else: + sync_tree = None + + if GitTree.is_type(): + local_tree = GitTree() + elif HgTree.is_type(): + local_tree = HgTree() + else: + local_tree = NoVCSTree() + + state.update({"local_tree": local_tree, + "sync_tree": sync_tree}) + + +class SyncFromUpstream(Step): + """Step that synchronises a local copy of the code with upstream.""" + + def create(self, state): + if not state.kwargs["sync"]: + return + + if not state.sync_tree: + os.mkdir(state.sync["path"]) + state.sync_tree = GitTree(root=state.sync["path"]) + + kwargs = state.kwargs + with state.push(["sync", "paths", "metadata_path", "tests_path", "local_tree", + "sync_tree"]): + state.target_rev = kwargs["rev"] + state.no_patch = kwargs["no_patch"] + state.suite_name = kwargs["suite_name"] + state.path_excludes = kwargs["exclude"] + state.path_includes = kwargs["include"] + runner = SyncFromUpstreamRunner(self.logger, state) + runner.run() + + +class UpdateMetadata(Step): + """Update the expectation metadata from a set of run logs""" + + def create(self, state): + if not state.kwargs["run_log"]: + return + + kwargs = state.kwargs + with state.push(["local_tree", "sync_tree", "paths", "serve_root"]): + state.run_log = kwargs["run_log"] + state.ignore_existing = kwargs["ignore_existing"] + state.no_patch = kwargs["no_patch"] + state.suite_name = kwargs["suite_name"] + state.product = kwargs["product"] + state.config = kwargs["config"] + runner = MetadataUpdateRunner(self.logger, state) + runner.run() + + +class UpdateRunner(StepRunner): + """Runner for doing an overall update.""" + steps = [LoadConfig, + LoadTrees, + SyncFromUpstream, + UpdateMetadata] + + +class WPTUpdate(object): + def __init__(self, logger, runner_cls=UpdateRunner, **kwargs): + """Object that controls the running of a whole wptupdate. + + :param runner_cls: Runner subclass holding the overall list of + steps to run. + :param kwargs: Command line arguments + """ + self.runner_cls = runner_cls + self.serve_root = kwargs["test_paths"]["/"]["tests_path"] + + if not kwargs["sync"]: + setup_paths(self.serve_root) + else: + if os.path.exists(kwargs["sync_path"]): + # If the sync path doesn't exist we defer this until it does + setup_paths(kwargs["sync_path"]) + + self.state = State(logger) + self.kwargs = kwargs + self.logger = logger + + def run(self, **kwargs): + if self.kwargs["abort"]: + self.abort() + return exit_clean + + if not self.kwargs["continue"] and not self.state.is_empty(): + self.logger.error("Found existing state. Run with --continue to resume or --abort to clear state") + return exit_unclean + + if self.kwargs["continue"]: + if self.state.is_empty(): + self.logger.error("No sync in progress?") + return exit_clean + + self.kwargs = self.state.kwargs + else: + self.state.kwargs = self.kwargs + + self.state.serve_root = self.serve_root + + update_runner = self.runner_cls(self.logger, self.state) + rv = update_runner.run() + if rv in (exit_clean, None): + self.state.clear() + + return rv + + def abort(self): + self.state.clear() diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/vcs.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/vcs.py new file mode 100644 index 00000000000..16d53afc8be --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/vcs.py @@ -0,0 +1,49 @@ +import subprocess +from functools import partial + +from mozlog import get_default_logger + +logger = None + +def vcs(bin_name): + def inner(command, *args, **kwargs): + global logger + + if logger is None: + logger = get_default_logger("vcs") + + repo = kwargs.pop("repo", None) + log_error = kwargs.pop("log_error", True) + if kwargs: + raise TypeError, kwargs + + args = list(args) + + proc_kwargs = {} + if repo is not None: + proc_kwargs["cwd"] = repo + + command_line = [bin_name, command] + args + logger.debug(" ".join(command_line)) + try: + return subprocess.check_output(command_line, stderr=subprocess.STDOUT, **proc_kwargs) + except subprocess.CalledProcessError as e: + if log_error: + logger.error(e.output) + raise + return inner + +git = vcs("git") +hg = vcs("hg") + + +def bind_to_repo(vcs_func, repo): + return partial(vcs_func, repo=repo) + + +def is_git_root(path): + try: + rv = git("rev-parse", "--show-cdup", repo=path) + except subprocess.CalledProcessError: + return False + return rv == "\n" diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/webdriver_server.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/webdriver_server.py new file mode 100644 index 00000000000..49d9c73b52e --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/webdriver_server.py @@ -0,0 +1,233 @@ +import abc +import errno +import os +import platform +import socket +import threading +import time +import traceback +import urlparse + +import mozprocess + + +__all__ = ["SeleniumServer", "ChromeDriverServer", + "GeckoDriverServer", "ServoDriverServer", + "WebDriverServer"] + + +class WebDriverServer(object): + __metaclass__ = abc.ABCMeta + + default_base_path = "/" + _used_ports = set() + + def __init__(self, logger, binary, host="127.0.0.1", port=None, + base_path="", env=None, args=None): + if binary is None: + raise ValueError("WebDriver server binary must be given " + "to --webdriver-binary argument") + + self.logger = logger + self.binary = binary + self.host = host + if base_path == "": + self.base_path = self.default_base_path + else: + self.base_path = base_path + self.env = os.environ.copy() if env is None else env + + self._port = port + self._cmd = None + self._args = args if args is not None else [] + self._proc = None + + @abc.abstractmethod + def make_command(self): + """Returns the full command for starting the server process as a list.""" + + def start(self, block=False): + try: + self._run(block) + except KeyboardInterrupt: + self.stop() + + def _run(self, block): + self._cmd = self.make_command() + self._proc = mozprocess.ProcessHandler( + self._cmd, + processOutputLine=self.on_output, + env=self.env, + storeOutput=False) + + try: + self._proc.run() + except OSError as e: + if e.errno == errno.ENOENT: + raise IOError( + "WebDriver HTTP server executable not found: %s" % self.binary) + raise + + self.logger.debug( + "Waiting for server to become accessible: %s" % self.url) + try: + wait_for_service((self.host, self.port)) + except: + self.logger.error( + "WebDriver HTTP server was not accessible " + "within the timeout:\n%s" % traceback.format_exc()) + raise + + if block: + self._proc.wait() + + def stop(self, force=False): + if self.is_alive: + return self._proc.kill() + return not self.is_alive + + @property + def is_alive(self): + return hasattr(self._proc, "proc") and self._proc.poll() is None + + def on_output(self, line): + self.logger.process_output(self.pid, + line.decode("utf8", "replace"), + command=" ".join(self._cmd)) + + @property + def pid(self): + if self._proc is not None: + return self._proc.pid + + @property + def url(self): + return "http://%s:%i%s" % (self.host, self.port, self.base_path) + + @property + def port(self): + if self._port is None: + self._port = self._find_next_free_port() + return self._port + + @staticmethod + def _find_next_free_port(): + port = get_free_port(4444, exclude=WebDriverServer._used_ports) + WebDriverServer._used_ports.add(port) + return port + + +class SeleniumServer(WebDriverServer): + default_base_path = "/wd/hub" + + def make_command(self): + return ["java", "-jar", self.binary, "-port", str(self.port)] + self._args + + +class ChromeDriverServer(WebDriverServer): + default_base_path = "/wd/hub" + + def __init__(self, logger, binary="chromedriver", port=None, + base_path="", args=None): + WebDriverServer.__init__( + self, logger, binary, port=port, base_path=base_path, args=args) + + def make_command(self): + return [self.binary, + cmd_arg("port", str(self.port)), + cmd_arg("url-base", self.base_path) if self.base_path else ""] + self._args + + +class EdgeDriverServer(WebDriverServer): + def __init__(self, logger, binary="MicrosoftWebDriver.exe", port=None, + base_path="", host="localhost", args=None): + WebDriverServer.__init__( + self, logger, binary, host=host, port=port, args=args) + + def make_command(self): + return [self.binary, + "--port=%s" % str(self.port)] + self._args + + +class GeckoDriverServer(WebDriverServer): + def __init__(self, logger, marionette_port=2828, binary="geckodriver", + host="127.0.0.1", port=None, args=None): + env = os.environ.copy() + env["RUST_BACKTRACE"] = "1" + WebDriverServer.__init__(self, logger, binary, host=host, port=port, env=env, args=args) + self.marionette_port = marionette_port + + def make_command(self): + return [self.binary, + "--marionette-port", str(self.marionette_port), + "--host", self.host, + "--port", str(self.port)] + self._args + + +class ServoDriverServer(WebDriverServer): + def __init__(self, logger, binary="servo", binary_args=None, host="127.0.0.1", port=None): + env = os.environ.copy() + env["RUST_BACKTRACE"] = "1" + WebDriverServer.__init__(self, logger, binary, host=host, port=port, env=env) + self.binary_args = binary_args + + def make_command(self): + command = [self.binary, + "--webdriver", str(self.port), + "--hard-fail", + "--headless"] + self._args + if self.binary_args: + command += self.binary_args + return command + + +def cmd_arg(name, value=None): + prefix = "-" if platform.system() == "Windows" else "--" + rv = prefix + name + if value is not None: + rv += "=" + value + return rv + + +def get_free_port(start_port, exclude=None): + """Get the first port number after start_port (inclusive) that is + not currently bound. + + :param start_port: Integer port number at which to start testing. + :param exclude: Set of port numbers to skip""" + port = start_port + while True: + if exclude and port in exclude: + port += 1 + continue + s = socket.socket() + try: + s.bind(("127.0.0.1", port)) + except socket.error: + port += 1 + else: + return port + finally: + s.close() + + +def wait_for_service(addr, timeout=15): + """Waits until network service given as a tuple of (host, port) becomes + available or the `timeout` duration is reached, at which point + ``socket.error`` is raised.""" + end = time.time() + timeout + while end > time.time(): + so = socket.socket() + try: + so.connect(addr) + except socket.timeout: + pass + except socket.error as e: + if e[0] != errno.ECONNREFUSED: + raise + else: + return True + finally: + so.close() + time.sleep(0.5) + raise socket.error("Service is unavailable: %s:%i" % addr) diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptcommandline.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptcommandline.py new file mode 100644 index 00000000000..5d44df2fad9 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptcommandline.py @@ -0,0 +1,464 @@ +import argparse +import ast +import os +import sys +from collections import OrderedDict +from distutils.spawn import find_executable + +import config +import wpttest + + +def abs_path(path): + return os.path.abspath(os.path.expanduser(path)) + + +def url_or_path(path): + import urlparse + + parsed = urlparse.urlparse(path) + if len(parsed.scheme) > 2: + return path + else: + return abs_path(path) + + +def require_arg(kwargs, name, value_func=None): + if value_func is None: + value_func = lambda x: x is not None + + if not name in kwargs or not value_func(kwargs[name]): + print >> sys.stderr, "Missing required argument %s" % name + sys.exit(1) + + +def create_parser(product_choices=None): + from mozlog import commandline + + import products + + if product_choices is None: + config_data = config.load() + product_choices = products.products_enabled(config_data) + + parser = argparse.ArgumentParser(description="""Runner for web-platform-tests tests.""", + usage="""%(prog)s [OPTION]... [TEST]... + +TEST is either the full path to a test file to run, or the URL of a test excluding +scheme host and port.""") + parser.add_argument("--manifest-update", action="store_true", default=False, + help="Regenerate the test manifest.") + + parser.add_argument("--timeout-multiplier", action="store", type=float, default=None, + help="Multiplier relative to standard test timeout to use") + parser.add_argument("--run-by-dir", type=int, nargs="?", default=False, + help="Split run into groups by directories. With a parameter," + "limit the depth of splits e.g. --run-by-dir=1 to split by top-level" + "directory") + parser.add_argument("--processes", action="store", type=int, default=None, + help="Number of simultaneous processes to use") + + parser.add_argument("--no-capture-stdio", action="store_true", default=False, + help="Don't capture stdio and write to logging") + + mode_group = parser.add_argument_group("Mode") + mode_group.add_argument("--list-test-groups", action="store_true", + default=False, + help="List the top level directories containing tests that will run.") + mode_group.add_argument("--list-disabled", action="store_true", + default=False, + help="List the tests that are disabled on the current platform") + + test_selection_group = parser.add_argument_group("Test Selection") + test_selection_group.add_argument("--test-types", action="store", + nargs="*", default=wpttest.enabled_tests, + choices=wpttest.enabled_tests, + help="Test types to run") + test_selection_group.add_argument("--include", action="append", + help="URL prefix to include") + test_selection_group.add_argument("--exclude", action="append", + help="URL prefix to exclude") + test_selection_group.add_argument("--include-manifest", type=abs_path, + help="Path to manifest listing tests to include") + test_selection_group.add_argument("--tag", action="append", dest="tags", + help="Labels applied to tests to include in the run. Labels starting dir: are equivalent to top-level directories.") + + debugging_group = parser.add_argument_group("Debugging") + debugging_group.add_argument('--debugger', const="__default__", nargs="?", + help="run under a debugger, e.g. gdb or valgrind") + debugging_group.add_argument('--debugger-args', help="arguments to the debugger") + debugging_group.add_argument("--repeat", action="store", type=int, default=1, + help="Number of times to run the tests") + debugging_group.add_argument("--repeat-until-unexpected", action="store_true", default=None, + help="Run tests in a loop until one returns an unexpected result") + debugging_group.add_argument('--pause-after-test', action="store_true", default=None, + help="Halt the test runner after each test (this happens by default if only a single test is run)") + debugging_group.add_argument('--no-pause-after-test', dest="pause_after_test", action="store_false", + help="Don't halt the test runner irrespective of the number of tests run") + + debugging_group.add_argument('--pause-on-unexpected', action="store_true", + help="Halt the test runner when an unexpected result is encountered") + debugging_group.add_argument('--no-restart-on-unexpected', dest="restart_on_unexpected", + default=True, action="store_false", + help="Don't restart on an unexpected result") + + debugging_group.add_argument("--symbols-path", action="store", type=url_or_path, + help="Path or url to symbols file used to analyse crash minidumps.") + debugging_group.add_argument("--stackwalk-binary", action="store", type=abs_path, + help="Path to stackwalker program used to analyse minidumps.") + + debugging_group.add_argument("--pdb", action="store_true", + help="Drop into pdb on python exception") + + config_group = parser.add_argument_group("Configuration") + config_group.add_argument("--binary", action="store", + type=abs_path, help="Binary to run tests against") + config_group.add_argument('--binary-arg', + default=[], action="append", dest="binary_args", + help="Extra argument for the binary") + config_group.add_argument("--webdriver-binary", action="store", metavar="BINARY", + type=abs_path, help="WebDriver server binary to use") + config_group.add_argument('--webdriver-arg', + default=[], action="append", dest="webdriver_args", + help="Extra argument for the WebDriver binary") + + config_group.add_argument("--metadata", action="store", type=abs_path, dest="metadata_root", + help="Path to root directory containing test metadata"), + config_group.add_argument("--tests", action="store", type=abs_path, dest="tests_root", + help="Path to root directory containing test files"), + config_group.add_argument("--run-info", action="store", type=abs_path, + help="Path to directory containing extra json files to add to run info") + config_group.add_argument("--product", action="store", choices=product_choices, + default=None, help="Browser against which to run tests") + config_group.add_argument("--config", action="store", type=abs_path, dest="config", + help="Path to config file") + + build_type = parser.add_mutually_exclusive_group() + build_type.add_argument("--debug-build", dest="debug", action="store_true", + default=None, + help="Build is a debug build (overrides any mozinfo file)") + build_type.add_argument("--release-build", dest="debug", action="store_false", + default=None, + help="Build is a release (overrides any mozinfo file)") + + + chunking_group = parser.add_argument_group("Test Chunking") + chunking_group.add_argument("--total-chunks", action="store", type=int, default=1, + help="Total number of chunks to use") + chunking_group.add_argument("--this-chunk", action="store", type=int, default=1, + help="Chunk number to run") + chunking_group.add_argument("--chunk-type", action="store", choices=["none", "equal_time", "hash", "dir_hash"], + default=None, help="Chunking type to use") + + ssl_group = parser.add_argument_group("SSL/TLS") + ssl_group.add_argument("--ssl-type", action="store", default=None, + choices=["openssl", "pregenerated", "none"], + help="Type of ssl support to enable (running without ssl may lead to spurious errors)") + + ssl_group.add_argument("--openssl-binary", action="store", + help="Path to openssl binary", default="openssl") + ssl_group.add_argument("--certutil-binary", action="store", + help="Path to certutil binary for use with Firefox + ssl") + + ssl_group.add_argument("--ca-cert-path", action="store", type=abs_path, + help="Path to ca certificate when using pregenerated ssl certificates") + ssl_group.add_argument("--host-key-path", action="store", type=abs_path, + help="Path to host private key when using pregenerated ssl certificates") + ssl_group.add_argument("--host-cert-path", action="store", type=abs_path, + help="Path to host certificate when using pregenerated ssl certificates") + + gecko_group = parser.add_argument_group("Gecko-specific") + gecko_group.add_argument("--prefs-root", dest="prefs_root", action="store", type=abs_path, + help="Path to the folder containing browser prefs") + gecko_group.add_argument("--disable-e10s", dest="gecko_e10s", action="store_false", default=True, + help="Run tests without electrolysis preferences") + gecko_group.add_argument("--stackfix-dir", dest="stackfix_dir", action="store", + help="Path to directory containing assertion stack fixing scripts") + gecko_group.add_argument("--setpref", dest="extra_prefs", action='append', + default=[], metavar="PREF=VALUE", + help="Defines an extra user preference (overrides those in prefs_root)") + gecko_group.add_argument("--leak-check", dest="leak_check", action="store_true", + help="Enable leak checking") + + servo_group = parser.add_argument_group("Servo-specific") + servo_group.add_argument("--user-stylesheet", + default=[], action="append", dest="user_stylesheets", + help="Inject a user CSS stylesheet into every test.") + + sauce_group = parser.add_argument_group("Sauce Labs-specific") + sauce_group.add_argument("--sauce-browser", dest="sauce_browser", + help="Sauce Labs browser name") + sauce_group.add_argument("--sauce-platform", dest="sauce_platform", + help="Sauce Labs OS platform") + sauce_group.add_argument("--sauce-version", dest="sauce_version", + help="Sauce Labs browser version") + sauce_group.add_argument("--sauce-build", dest="sauce_build", + help="Sauce Labs build identifier") + sauce_group.add_argument("--sauce-tags", dest="sauce_tags", nargs="*", + help="Sauce Labs identifying tag", default=[]) + sauce_group.add_argument("--sauce-tunnel-id", dest="sauce_tunnel_id", + help="Sauce Connect tunnel identifier") + sauce_group.add_argument("--sauce-user", dest="sauce_user", + help="Sauce Labs user name") + sauce_group.add_argument("--sauce-key", dest="sauce_key", + default=os.environ.get("SAUCE_ACCESS_KEY"), + help="Sauce Labs access key") + sauce_group.add_argument("--sauce-connect-binary", + dest="sauce_connect_binary", + help="Path to Sauce Connect binary") + + parser.add_argument("test_list", nargs="*", + help="List of URLs for tests to run, or paths including tests to run. " + "(equivalent to --include)") + + commandline.add_logging_group(parser) + return parser + + +def set_from_config(kwargs): + if kwargs["config"] is None: + config_path = config.path() + else: + config_path = kwargs["config"] + + kwargs["config_path"] = config_path + + kwargs["config"] = config.read(kwargs["config_path"]) + + keys = {"paths": [("prefs", "prefs_root", True), + ("run_info", "run_info", True)], + "web-platform-tests": [("remote_url", "remote_url", False), + ("branch", "branch", False), + ("sync_path", "sync_path", True)], + "SSL": [("openssl_binary", "openssl_binary", True), + ("certutil_binary", "certutil_binary", True), + ("ca_cert_path", "ca_cert_path", True), + ("host_cert_path", "host_cert_path", True), + ("host_key_path", "host_key_path", True)]} + + for section, values in keys.iteritems(): + for config_value, kw_value, is_path in values: + if kw_value in kwargs and kwargs[kw_value] is None: + if not is_path: + new_value = kwargs["config"].get(section, config.ConfigDict({})).get(config_value) + else: + new_value = kwargs["config"].get(section, config.ConfigDict({})).get_path(config_value) + kwargs[kw_value] = new_value + + kwargs["test_paths"] = get_test_paths(kwargs["config"]) + + if kwargs["tests_root"]: + if "/" not in kwargs["test_paths"]: + kwargs["test_paths"]["/"] = {} + kwargs["test_paths"]["/"]["tests_path"] = kwargs["tests_root"] + + if kwargs["metadata_root"]: + if "/" not in kwargs["test_paths"]: + kwargs["test_paths"]["/"] = {} + kwargs["test_paths"]["/"]["metadata_path"] = kwargs["metadata_root"] + + kwargs["suite_name"] = kwargs["config"].get("web-platform-tests", {}).get("name", "web-platform-tests") + + +def get_test_paths(config): + # Set up test_paths + test_paths = OrderedDict() + + for section in config.iterkeys(): + if section.startswith("manifest:"): + manifest_opts = config.get(section) + url_base = manifest_opts.get("url_base", "/") + test_paths[url_base] = { + "tests_path": manifest_opts.get_path("tests"), + "metadata_path": manifest_opts.get_path("metadata")} + + return test_paths + + +def exe_path(name): + if name is None: + return + + path = find_executable(name) + if os.access(path, os.X_OK): + return path + + +def check_args(kwargs): + set_from_config(kwargs) + + for test_paths in kwargs["test_paths"].itervalues(): + if not ("tests_path" in test_paths and + "metadata_path" in test_paths): + print "Fatal: must specify both a test path and metadata path" + sys.exit(1) + for key, path in test_paths.iteritems(): + name = key.split("_", 1)[0] + + if not os.path.exists(path): + print "Fatal: %s path %s does not exist" % (name, path) + sys.exit(1) + + if not os.path.isdir(path): + print "Fatal: %s path %s is not a directory" % (name, path) + sys.exit(1) + + if kwargs["product"] is None: + kwargs["product"] = "firefox" + + if "sauce" in kwargs["product"]: + kwargs["pause_after_test"] = False + + if kwargs["test_list"]: + if kwargs["include"] is not None: + kwargs["include"].extend(kwargs["test_list"]) + else: + kwargs["include"] = kwargs["test_list"] + + if kwargs["run_info"] is None: + kwargs["run_info"] = kwargs["config_path"] + + if kwargs["this_chunk"] > 1: + require_arg(kwargs, "total_chunks", lambda x: x >= kwargs["this_chunk"]) + + if kwargs["chunk_type"] is None: + if kwargs["total_chunks"] > 1: + kwargs["chunk_type"] = "dir_hash" + else: + kwargs["chunk_type"] = "none" + + if kwargs["processes"] is None: + kwargs["processes"] = 1 + + if kwargs["debugger"] is not None: + import mozdebug + if kwargs["debugger"] == "__default__": + kwargs["debugger"] = mozdebug.get_default_debugger_name() + debug_info = mozdebug.get_debugger_info(kwargs["debugger"], + kwargs["debugger_args"]) + if debug_info and debug_info.interactive: + if kwargs["processes"] != 1: + kwargs["processes"] = 1 + kwargs["no_capture_stdio"] = True + kwargs["debug_info"] = debug_info + else: + kwargs["debug_info"] = None + + if kwargs["binary"] is not None: + if not os.path.exists(kwargs["binary"]): + print >> sys.stderr, "Binary path %s does not exist" % kwargs["binary"] + sys.exit(1) + + if kwargs["ssl_type"] is None: + if None not in (kwargs["ca_cert_path"], kwargs["host_cert_path"], kwargs["host_key_path"]): + kwargs["ssl_type"] = "pregenerated" + elif exe_path(kwargs["openssl_binary"]) is not None: + kwargs["ssl_type"] = "openssl" + else: + kwargs["ssl_type"] = "none" + + if kwargs["ssl_type"] == "pregenerated": + require_arg(kwargs, "ca_cert_path", lambda x:os.path.exists(x)) + require_arg(kwargs, "host_cert_path", lambda x:os.path.exists(x)) + require_arg(kwargs, "host_key_path", lambda x:os.path.exists(x)) + + elif kwargs["ssl_type"] == "openssl": + path = exe_path(kwargs["openssl_binary"]) + if path is None: + print >> sys.stderr, "openssl-binary argument missing or not a valid executable" + sys.exit(1) + kwargs["openssl_binary"] = path + + if kwargs["ssl_type"] != "none" and kwargs["product"] == "firefox": + path = exe_path(kwargs["certutil_binary"]) + if path is None: + print >> sys.stderr, "certutil-binary argument missing or not a valid executable" + sys.exit(1) + kwargs["certutil_binary"] = path + + if kwargs['extra_prefs']: + missing = any('=' not in prefarg for prefarg in kwargs['extra_prefs']) + if missing: + print >> sys.stderr, "Preferences via --setpref must be in key=value format" + sys.exit(1) + kwargs['extra_prefs'] = [tuple(prefarg.split('=', 1)) for prefarg in + kwargs['extra_prefs']] + + return kwargs + + +def check_args_update(kwargs): + set_from_config(kwargs) + + if kwargs["product"] is None: + kwargs["product"] = "firefox" + + +def create_parser_update(product_choices=None): + from mozlog.structured import commandline + + import products + + if product_choices is None: + config_data = config.load() + product_choices = products.products_enabled(config_data) + + parser = argparse.ArgumentParser("web-platform-tests-update", + description="Update script for web-platform-tests tests.") + parser.add_argument("--product", action="store", choices=product_choices, + default=None, help="Browser for which metadata is being updated") + parser.add_argument("--config", action="store", type=abs_path, help="Path to config file") + parser.add_argument("--metadata", action="store", type=abs_path, dest="metadata_root", + help="Path to the folder containing test metadata"), + parser.add_argument("--tests", action="store", type=abs_path, dest="tests_root", + help="Path to web-platform-tests"), + parser.add_argument("--sync-path", action="store", type=abs_path, + help="Path to store git checkout of web-platform-tests during update"), + parser.add_argument("--remote_url", action="store", + help="URL of web-platfrom-tests repository to sync against"), + parser.add_argument("--branch", action="store", type=abs_path, + help="Remote branch to sync against") + parser.add_argument("--rev", action="store", help="Revision to sync to") + parser.add_argument("--no-patch", action="store_true", + help="Don't create an mq patch or git commit containing the changes.") + parser.add_argument("--sync", dest="sync", action="store_true", default=False, + help="Sync the tests with the latest from upstream") + parser.add_argument("--ignore-existing", action="store_true", help="When updating test results only consider results from the logfiles provided, not existing expectations.") + parser.add_argument("--continue", action="store_true", help="Continue a previously started run of the update script") + parser.add_argument("--abort", action="store_true", help="Clear state from a previous incomplete run of the update script") + parser.add_argument("--exclude", action="store", nargs="*", + help="List of glob-style paths to exclude when syncing tests") + parser.add_argument("--include", action="store", nargs="*", + help="List of glob-style paths to include which would otherwise be excluded when syncing tests") + # Should make this required iff run=logfile + parser.add_argument("run_log", nargs="*", type=abs_path, + help="Log file from run of tests") + commandline.add_logging_group(parser) + return parser + + +def create_parser_reduce(product_choices=None): + parser = create_parser(product_choices) + parser.add_argument("target", action="store", help="Test id that is unstable") + return parser + + +def parse_args(): + parser = create_parser() + rv = vars(parser.parse_args()) + check_args(rv) + return rv + + +def parse_args_update(): + parser = create_parser_update() + rv = vars(parser.parse_args()) + check_args_update(rv) + return rv + + +def parse_args_reduce(): + parser = create_parser_reduce() + rv = vars(parser.parse_args()) + check_args(rv) + return rv diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptlogging.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptlogging.py new file mode 100644 index 00000000000..1ab6755c435 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptlogging.py @@ -0,0 +1,121 @@ +import logging +import sys +import threading +from StringIO import StringIO +from multiprocessing import Queue + +from mozlog import commandline, stdadapter + +def setup(args, defaults): + logger = commandline.setup_logging("web-platform-tests", args, defaults) + setup_stdlib_logger() + + for name in args.keys(): + if name.startswith("log_"): + args.pop(name) + + return logger + + +def setup_stdlib_logger(): + logging.root.handlers = [] + logging.root = stdadapter.std_logging_adapter(logging.root) + + +class LogLevelRewriter(object): + """Filter that replaces log messages at specified levels with messages + at a different level. + + This can be used to e.g. downgrade log messages from ERROR to WARNING + in some component where ERRORs are not critical. + + :param inner: Handler to use for messages that pass this filter + :param from_levels: List of levels which should be affected + :param to_level: Log level to set for the affected messages + """ + def __init__(self, inner, from_levels, to_level): + self.inner = inner + self.from_levels = [item.upper() for item in from_levels] + self.to_level = to_level.upper() + + def __call__(self, data): + if data["action"] == "log" and data["level"].upper() in self.from_levels: + data = data.copy() + data["level"] = self.to_level + return self.inner(data) + + + +class LogThread(threading.Thread): + def __init__(self, queue, logger, level): + self.queue = queue + self.log_func = getattr(logger, level) + threading.Thread.__init__(self, name="Thread-Log") + self.daemon = True + + def run(self): + while True: + try: + msg = self.queue.get() + except (EOFError, IOError): + break + if msg is None: + break + else: + self.log_func(msg) + + +class LoggingWrapper(StringIO): + """Wrapper for file like objects to redirect output to logger + instead""" + + def __init__(self, queue, prefix=None): + StringIO.__init__(self) + self.queue = queue + self.prefix = prefix + + def write(self, data): + if isinstance(data, str): + data = data.decode("utf8") + + if data.endswith("\n"): + data = data[:-1] + if data.endswith("\r"): + data = data[:-1] + if not data: + return + if self.prefix is not None: + data = "%s: %s" % (self.prefix, data) + self.queue.put(data) + + def flush(self): + pass + + +class CaptureIO(object): + def __init__(self, logger, do_capture): + self.logger = logger + self.do_capture = do_capture + self.logging_queue = None + self.logging_thread = None + self.original_stdio = None + + def __enter__(self): + if self.do_capture: + self.original_stdio = (sys.stdout, sys.stderr) + self.logging_queue = Queue() + self.logging_thread = LogThread(self.logging_queue, self.logger, "info") + sys.stdout = LoggingWrapper(self.logging_queue, prefix="STDOUT") + sys.stderr = LoggingWrapper(self.logging_queue, prefix="STDERR") + self.logging_thread.start() + + def __exit__(self, *args, **kwargs): + if self.do_capture: + sys.stdout, sys.stderr = self.original_stdio + if self.logging_queue is not None: + self.logger.info("Closing logging queue") + self.logging_queue.put(None) + if self.logging_thread is not None: + self.logging_thread.join(10) + self.logging_queue.close() + self.logger.info("queue closed") diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/__init__.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/__init__.py new file mode 100644 index 00000000000..6b64784c7e6 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/__init__.py @@ -0,0 +1,4 @@ +from serializer import serialize +from parser import parse +from backends.static import compile as compile_static +from backends.conditional import compile as compile_condition diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/backends/__init__.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/backends/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/backends/conditional.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/backends/conditional.py new file mode 100644 index 00000000000..f0f4ecf335f --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/backends/conditional.py @@ -0,0 +1,330 @@ +import operator + +from ..node import NodeVisitor, DataNode, ConditionalNode, KeyValueNode, ListNode, ValueNode +from ..parser import parse + + +class ConditionalValue(object): + def __init__(self, node, condition_func): + self.node = node + self.condition_func = condition_func + if isinstance(node, ConditionalNode): + assert len(node.children) == 2 + self.condition_node = self.node.children[0] + self.value_node = self.node.children[1] + else: + assert isinstance(node, (ValueNode, ListNode)) + self.condition_node = None + self.value_node = self.node + + @property + def value(self): + if isinstance(self.value_node, ValueNode): + return self.value_node.data + else: + return [item.data for item in self.value_node.children] + + @value.setter + def value(self, value): + self.value_node.data = value + + def __call__(self, run_info): + return self.condition_func(run_info) + + def set_value(self, value): + self.value = value + + def remove(self): + if len(self.node.parent.children) == 1: + self.node.parent.remove() + self.node.remove() + + +class Compiler(NodeVisitor): + def compile(self, tree, data_cls_getter=None, **kwargs): + """Compile a raw AST into a form where conditional expressions + are represented by ConditionalValue objects that can be evaluated + at runtime. + + tree - The root node of the wptmanifest AST to compile + + data_cls_getter - A function taking two parameters; the previous + output node and the current ast node and returning + the class of the output node to use for the current + ast node + """ + if data_cls_getter is None: + self.data_cls_getter = lambda x, y: ManifestItem + else: + self.data_cls_getter = data_cls_getter + + self.tree = tree + self.output_node = self._initial_output_node(tree, **kwargs) + self.visit(tree) + assert self.output_node is not None + return self.output_node + + def compile_condition(self, condition): + """Compile a ConditionalNode into a ConditionalValue. + + condition: A ConditionalNode""" + data_node = DataNode() + key_value_node = KeyValueNode() + key_value_node.append(condition.copy()) + data_node.append(key_value_node) + manifest_item = self.compile(data_node) + return manifest_item._data[None][0] + + def _initial_output_node(self, node, **kwargs): + return self.data_cls_getter(None, None)(node, **kwargs) + + def visit_DataNode(self, node): + if node != self.tree: + output_parent = self.output_node + self.output_node = self.data_cls_getter(self.output_node, node)(node) + else: + output_parent = None + + assert self.output_node is not None + + for child in node.children: + self.visit(child) + + if output_parent is not None: + # Append to the parent *after* processing all the node data + output_parent.append(self.output_node) + self.output_node = self.output_node.parent + + assert self.output_node is not None + + def visit_KeyValueNode(self, node): + key_values = [] + for child in node.children: + condition, value = self.visit(child) + key_values.append(ConditionalValue(child, condition)) + + self.output_node._add_key_value(node, key_values) + + def visit_ListNode(self, node): + return (lambda x:True, [self.visit(child) for child in node.children]) + + def visit_ValueNode(self, node): + return (lambda x: True, node.data) + + def visit_AtomNode(self, node): + return (lambda x: True, node.data) + + def visit_ConditionalNode(self, node): + return self.visit(node.children[0]), self.visit(node.children[1]) + + def visit_StringNode(self, node): + indexes = [self.visit(child) for child in node.children] + + def value(x): + rv = node.data + for index in indexes: + rv = rv[index(x)] + return rv + return value + + def visit_NumberNode(self, node): + if "." in node.data: + return lambda x: float(node.data) + else: + return lambda x: int(node.data) + + def visit_VariableNode(self, node): + indexes = [self.visit(child) for child in node.children] + + def value(x): + data = x[node.data] + for index in indexes: + data = data[index(x)] + return data + return value + + def visit_IndexNode(self, node): + assert len(node.children) == 1 + return self.visit(node.children[0]) + + def visit_UnaryExpressionNode(self, node): + assert len(node.children) == 2 + operator = self.visit(node.children[0]) + operand = self.visit(node.children[1]) + + return lambda x: operator(operand(x)) + + def visit_BinaryExpressionNode(self, node): + assert len(node.children) == 3 + operator = self.visit(node.children[0]) + operand_0 = self.visit(node.children[1]) + operand_1 = self.visit(node.children[2]) + + assert operand_0 is not None + assert operand_1 is not None + + return lambda x: operator(operand_0(x), operand_1(x)) + + def visit_UnaryOperatorNode(self, node): + return {"not": operator.not_}[node.data] + + def visit_BinaryOperatorNode(self, node): + return {"and": operator.and_, + "or": operator.or_, + "==": operator.eq, + "!=": operator.ne}[node.data] + + +class ManifestItem(object): + def __init__(self, node=None, **kwargs): + self.node = node + self.parent = None + self.children = [] + self._data = {} + + def __repr__(self): + return "" % (self.node.data) + + def __str__(self): + rv = [repr(self)] + for item in self.children: + rv.extend(" %s" % line for line in str(item).split("\n")) + return "\n".join(rv) + + def __contains__(self, key): + return key in self._data + + @property + def is_empty(self): + if self._data: + return False + return all(child.is_empty for child in self.children) + + @property + def root(self): + node = self + while node.parent is not None: + node = node.parent + return node + + @property + def name(self): + return self.node.data + + def has_key(self, key): + for node in [self, self.root]: + if key in node._data: + return True + return False + + def get(self, key, run_info=None): + if run_info is None: + run_info = {} + + for node in [self, self.root]: + if key in node._data: + for cond_value in node._data[key]: + try: + matches = cond_value(run_info) + except KeyError: + matches = False + if matches: + return cond_value.value + raise KeyError + + def set(self, key, value, condition=None): + # First try to update the existing value + if key in self._data: + cond_values = self._data[key] + for cond_value in cond_values: + if cond_value.condition_node == condition: + cond_value.value = value + return + # If there isn't a conditional match reuse the existing KeyValueNode as the + # parent + node = None + for child in self.node.children: + if child.data == key: + node = child + break + assert node is not None + + else: + node = KeyValueNode(key) + self.node.append(node) + + value_node = ValueNode(value) + if condition is not None: + conditional_node = ConditionalNode() + conditional_node.append(condition) + conditional_node.append(value_node) + node.append(conditional_node) + cond_value = Compiler().compile_condition(conditional_node) + else: + node.append(value_node) + cond_value = ConditionalValue(value_node, lambda x: True) + + # Update the cache of child values. This is pretty annoying and maybe + # it should just work directly on the tree + if key not in self._data: + self._data[key] = [] + if self._data[key] and self._data[key][-1].condition_node is None: + self._data[key].insert(len(self._data[key]) - 1, cond_value) + else: + self._data[key].append(cond_value) + + def _add_key_value(self, node, values): + """Called during construction to set a key-value node""" + self._data[node.data] = values + + def append(self, child): + self.children.append(child) + child.parent = self + if child.node.parent != self.node: + self.node.append(child.node) + return child + + def remove(self): + if self.parent: + self.parent._remove_child(self) + + def _remove_child(self, child): + self.children.remove(child) + child.parent = None + + def iterchildren(self, name=None): + for item in self.children: + if item.name == name or name is None: + yield item + + def _flatten(self): + rv = {} + for node in [self, self.root]: + for name, value in node._data.iteritems(): + if name not in rv: + rv[name] = value + return rv + + def iteritems(self): + for item in self._flatten().iteritems(): + yield item + + def iterkeys(self): + for item in self._flatten().iterkeys(): + yield item + + def remove_value(self, key, value): + self._data[key].remove(value) + if not self._data[key]: + del self._data[key] + value.remove() + + +def compile_ast(ast, data_cls_getter=None, **kwargs): + return Compiler().compile(ast, data_cls_getter=data_cls_getter, **kwargs) + + +def compile(stream, data_cls_getter=None, **kwargs): + return compile_ast(parse(stream), + data_cls_getter=data_cls_getter, + **kwargs) diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/backends/static.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/backends/static.py new file mode 100644 index 00000000000..b2b9fbe9429 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/backends/static.py @@ -0,0 +1,220 @@ +import operator + +from ..node import NodeVisitor +from ..parser import parse + + +class Compiler(NodeVisitor): + """Compiler backend that evaluates conditional expressions + to give static output""" + + def compile(self, tree, expr_data, data_cls_getter=None, **kwargs): + """Compile a raw AST into a form with conditional expressions + evaluated. + + tree - The root node of the wptmanifest AST to compile + + expr_data - A dictionary of key / value pairs to use when + evaluating conditional expressions + + data_cls_getter - A function taking two parameters; the previous + output node and the current ast node and returning + the class of the output node to use for the current + ast node + """ + + self._kwargs = kwargs + self.expr_data = expr_data + + if data_cls_getter is None: + self.data_cls_getter = lambda x, y: ManifestItem + else: + self.data_cls_getter = data_cls_getter + + self.output_node = None + self.visit(tree) + return self.output_node + + def visit_DataNode(self, node): + output_parent = self.output_node + if self.output_node is None: + assert node.parent is None + self.output_node = self.data_cls_getter(None, None)(None, **self._kwargs) + else: + self.output_node = self.data_cls_getter(self.output_node, node)(node.data) + + for child in node.children: + self.visit(child) + + if output_parent is not None: + output_parent.append(self.output_node) + self.output_node = self.output_node.parent + + def visit_KeyValueNode(self, node): + key_name = node.data + key_value = None + for child in node.children: + value = self.visit(child) + if value is not None: + key_value = value + break + if key_value is not None: + self.output_node.set(key_name, key_value) + + def visit_ValueNode(self, node): + return node.data + + def visit_AtomNode(self, node): + return node.data + + def visit_ListNode(self, node): + return [self.visit(child) for child in node.children] + + def visit_ConditionalNode(self, node): + assert len(node.children) == 2 + if self.visit(node.children[0]): + return self.visit(node.children[1]) + + def visit_StringNode(self, node): + value = node.data + for child in node.children: + value = self.visit(child)(value) + return value + + def visit_NumberNode(self, node): + if "." in node.data: + return float(node.data) + else: + return int(node.data) + + def visit_VariableNode(self, node): + value = self.expr_data[node.data] + for child in node.children: + value = self.visit(child)(value) + return value + + def visit_IndexNode(self, node): + assert len(node.children) == 1 + index = self.visit(node.children[0]) + return lambda x: x[index] + + def visit_UnaryExpressionNode(self, node): + assert len(node.children) == 2 + operator = self.visit(node.children[0]) + operand = self.visit(node.children[1]) + + return operator(operand) + + def visit_BinaryExpressionNode(self, node): + assert len(node.children) == 3 + operator = self.visit(node.children[0]) + operand_0 = self.visit(node.children[1]) + operand_1 = self.visit(node.children[2]) + + return operator(operand_0, operand_1) + + def visit_UnaryOperatorNode(self, node): + return {"not": operator.not_}[node.data] + + def visit_BinaryOperatorNode(self, node): + return {"and": operator.and_, + "or": operator.or_, + "==": operator.eq, + "!=": operator.ne}[node.data] + + +class ManifestItem(object): + def __init__(self, name, **kwargs): + self.parent = None + self.name = name + self.children = [] + self._data = {} + + def __repr__(self): + return "" % (self.name) + + def __str__(self): + rv = [repr(self)] + for item in self.children: + rv.extend(" %s" % line for line in str(item).split("\n")) + return "\n".join(rv) + + @property + def is_empty(self): + if self._data: + return False + return all(child.is_empty for child in self.children) + + @property + def root(self): + node = self + while node.parent is not None: + node = node.parent + return node + + def has_key(self, key): + for node in [self, self.root]: + if key in node._data: + return True + return False + + def get(self, key): + for node in [self, self.root]: + if key in node._data: + return node._data[key] + raise KeyError + + def set(self, name, value): + self._data[name] = value + + def remove(self): + if self.parent: + self.parent._remove_child(self) + + def _remove_child(self, child): + self.children.remove(child) + child.parent = None + + def iterchildren(self, name=None): + for item in self.children: + if item.name == name or name is None: + yield item + + def _flatten(self): + rv = {} + for node in [self, self.root]: + for name, value in node._data.iteritems(): + if name not in rv: + rv[name] = value + return rv + + def iteritems(self): + for item in self._flatten().iteritems(): + yield item + + def iterkeys(self): + for item in self._flatten().iterkeys(): + yield item + + def itervalues(self): + for item in self._flatten().itervalues(): + yield item + + def append(self, child): + child.parent = self + self.children.append(child) + return child + + +def compile_ast(ast, expr_data, data_cls_getter=None, **kwargs): + return Compiler().compile(ast, + expr_data, + data_cls_getter=data_cls_getter, + **kwargs) + + +def compile(stream, expr_data, data_cls_getter=None, **kwargs): + return compile_ast(parse(stream), + expr_data, + data_cls_getter=data_cls_getter, + **kwargs) diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/node.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/node.py new file mode 100644 index 00000000000..33e9796c430 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/node.py @@ -0,0 +1,157 @@ +class NodeVisitor(object): + def visit(self, node): + # This is ugly as hell, but we don't have multimethods and + # they aren't trivial to fake without access to the class + # object from the class body + func = getattr(self, "visit_%s" % (node.__class__.__name__)) + return func(node) + + +class Node(object): + def __init__(self, data=None): + self.data = data + self.parent = None + self.children = [] + + def append(self, other): + other.parent = self + self.children.append(other) + + def remove(self): + self.parent.children.remove(self) + + def __repr__(self): + return "<%s %s>" % (self.__class__.__name__, self.data) + + def __str__(self): + rv = [repr(self)] + for item in self.children: + rv.extend(" %s" % line for line in str(item).split("\n")) + return "\n".join(rv) + + def __eq__(self, other): + if not (self.__class__ == other.__class__ and + self.data == other.data and + len(self.children) == len(other.children)): + return False + for child, other_child in zip(self.children, other.children): + if not child == other_child: + return False + return True + + def copy(self): + new = self.__class__(self.data) + for item in self.children: + new.append(item.copy()) + return new + + +class DataNode(Node): + def append(self, other): + # Append that retains the invariant that child data nodes + # come after child nodes of other types + other.parent = self + if isinstance(other, DataNode): + self.children.append(other) + else: + index = len(self.children) + while index > 0 and isinstance(self.children[index - 1], DataNode): + index -= 1 + for i in xrange(index): + assert other.data != self.children[i].data + self.children.insert(index, other) + + +class KeyValueNode(Node): + def append(self, other): + # Append that retains the invariant that conditional nodes + # come before unconditional nodes + other.parent = self + if isinstance(other, ValueNode): + if self.children: + assert not isinstance(self.children[-1], ValueNode) + self.children.append(other) + else: + if self.children and isinstance(self.children[-1], ValueNode): + self.children.insert(len(self.children) - 1, other) + else: + self.children.append(other) + + +class ListNode(Node): + def append(self, other): + other.parent = self + self.children.append(other) + + +class ValueNode(Node): + def append(self, other): + raise TypeError + + +class AtomNode(ValueNode): + pass + + +class ConditionalNode(Node): + pass + + +class UnaryExpressionNode(Node): + def __init__(self, operator, operand): + Node.__init__(self) + self.append(operator) + self.append(operand) + + def append(self, other): + Node.append(self, other) + assert len(self.children) <= 2 + + def copy(self): + new = self.__class__(self.children[0].copy(), + self.children[1].copy()) + return new + + +class BinaryExpressionNode(Node): + def __init__(self, operator, operand_0, operand_1): + Node.__init__(self) + self.append(operator) + self.append(operand_0) + self.append(operand_1) + + def append(self, other): + Node.append(self, other) + assert len(self.children) <= 3 + + def copy(self): + new = self.__class__(self.children[0].copy(), + self.children[1].copy(), + self.children[2].copy()) + return new + + +class UnaryOperatorNode(Node): + def append(self, other): + raise TypeError + + +class BinaryOperatorNode(Node): + def append(self, other): + raise TypeError + + +class IndexNode(Node): + pass + + +class VariableNode(Node): + pass + + +class StringNode(Node): + pass + + +class NumberNode(ValueNode): + pass diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/parser.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/parser.py new file mode 100644 index 00000000000..d84a9143fa6 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/parser.py @@ -0,0 +1,746 @@ +#default_value:foo +#include: other.manifest +# +#[test_name.js] +# expected: ERROR +# +# [subtest 1] +# expected: +# os == win: FAIL #This is a comment +# PASS +# + +# TODO: keep comments in the tree + +from __future__ import unicode_literals + +import types +from cStringIO import StringIO + +from node import * + + +class ParseError(Exception): + def __init__(self, filename, line, detail): + self.line = line + self.filename = filename + self.detail = detail + self.message = "%s: %s line %s" % (self.detail, self.filename, self.line) + Exception.__init__(self, self.message) + +eol = object +group_start = object +group_end = object +digits = "0123456789" +open_parens = "[(" +close_parens = "])" +parens = open_parens + close_parens +operator_chars = "=!" + +unary_operators = ["not"] +binary_operators = ["==", "!=", "and", "or"] + +operators = ["==", "!=", "not", "and", "or"] + +atoms = {"True": True, + "False": False, + "Reset": object()} + +def decode(s): + assert isinstance(s, unicode) + return s + + +def precedence(operator_node): + return len(operators) - operators.index(operator_node.data) + + +class TokenTypes(object): + def __init__(self): + for type in ["group_start", "group_end", "paren", "list_start", "list_end", "separator", "ident", "string", "number", "atom", "eof"]: + setattr(self, type, type) + +token_types = TokenTypes() + + +class Tokenizer(object): + def __init__(self): + self.reset() + + def reset(self): + self.indent_levels = [0] + self.state = self.line_start_state + self.next_state = self.data_line_state + self.line_number = 0 + + def tokenize(self, stream): + self.reset() + assert not isinstance(stream, unicode) + if isinstance(stream, str): + stream = StringIO(stream) + if not hasattr(stream, "name"): + self.filename = "" + else: + self.filename = stream.name + + self.next_line_state = self.line_start_state + for i, line in enumerate(stream): + assert isinstance(line, str) + self.state = self.next_line_state + assert self.state is not None + states = [] + self.next_line_state = None + self.line_number = i + 1 + self.index = 0 + self.line = line.decode('utf-8').rstrip() + assert isinstance(self.line, unicode) + while self.state != self.eol_state: + states.append(self.state) + tokens = self.state() + if tokens: + for token in tokens: + yield token + self.state() + while True: + yield (token_types.eof, None) + + def char(self): + if self.index == len(self.line): + return eol + return self.line[self.index] + + def consume(self): + if self.index < len(self.line): + self.index += 1 + + def peek(self, length): + return self.line[self.index:self.index + length] + + def skip_whitespace(self): + while self.char() == " ": + self.consume() + + def eol_state(self): + if self.next_line_state is None: + self.next_line_state = self.line_start_state + + def line_start_state(self): + self.skip_whitespace() + if self.char() == eol: + self.state = self.eol_state + return + if self.index > self.indent_levels[-1]: + self.indent_levels.append(self.index) + yield (token_types.group_start, None) + else: + while self.index < self.indent_levels[-1]: + self.indent_levels.pop() + yield (token_types.group_end, None) + # This is terrible; if we were parsing an expression + # then the next_state will be expr_or_value but when we deindent + # it must always be a heading or key next so we go back to data_line_state + self.next_state = self.data_line_state + if self.index != self.indent_levels[-1]: + raise ParseError(self.filename, self.line_number, "Unexpected indent") + + self.state = self.next_state + + def data_line_state(self): + if self.char() == "[": + yield (token_types.paren, self.char()) + self.consume() + self.state = self.heading_state + else: + self.state = self.key_state + + def heading_state(self): + rv = "" + while True: + c = self.char() + if c == "\\": + rv += self.consume_escape() + elif c == "]": + break + elif c == eol: + raise ParseError(self.filename, self.line_number, "EOL in heading") + else: + rv += c + self.consume() + + yield (token_types.string, decode(rv)) + yield (token_types.paren, "]") + self.consume() + self.state = self.line_end_state + self.next_state = self.data_line_state + + def key_state(self): + rv = "" + while True: + c = self.char() + if c == " ": + self.skip_whitespace() + if self.char() != ":": + raise ParseError(self.filename, self.line_number, "Space in key name") + break + elif c == ":": + break + elif c == eol: + raise ParseError(self.filename, self.line_number, "EOL in key name (missing ':'?)") + elif c == "\\": + rv += self.consume_escape() + else: + rv += c + self.consume() + yield (token_types.string, decode(rv)) + yield (token_types.separator, ":") + self.consume() + self.state = self.after_key_state + + def after_key_state(self): + self.skip_whitespace() + c = self.char() + if c == "#": + self.next_state = self.expr_or_value_state + self.state = self.comment_state + elif c == eol: + self.next_state = self.expr_or_value_state + self.state = self.eol_state + elif c == "[": + self.state = self.list_start_state + else: + self.state = self.value_state + + def list_start_state(self): + yield (token_types.list_start, "[") + self.consume() + self.state = self.list_value_start_state + + def list_value_start_state(self): + self.skip_whitespace() + if self.char() == "]": + self.state = self.list_end_state + elif self.char() in ("'", '"'): + quote_char = self.char() + self.consume() + yield (token_types.string, self.consume_string(quote_char)) + self.skip_whitespace() + if self.char() == "]": + self.state = self.list_end_state + elif self.char() != ",": + raise ParseError(self.filename, self.line_number, "Junk after quoted string") + self.consume() + elif self.char() == "#": + self.state = self.comment_state + self.next_line_state = self.list_value_start_state + elif self.char() == eol: + self.next_line_state = self.list_value_start_state + self.state = self.eol_state + elif self.char() == ",": + raise ParseError(self.filename, self.line_number, "List item started with separator") + elif self.char() == "@": + self.state = self.list_value_atom_state + else: + self.state = self.list_value_state + + def list_value_state(self): + rv = "" + spaces = 0 + while True: + c = self.char() + if c == "\\": + escape = self.consume_escape() + rv += escape + elif c == eol: + raise ParseError(self.filename, self.line_number, "EOL in list value") + elif c == "#": + raise ParseError(self.filename, self.line_number, "EOL in list value (comment)") + elif c == ",": + self.state = self.list_value_start_state + self.consume() + break + elif c == " ": + spaces += 1 + self.consume() + elif c == "]": + self.state = self.list_end_state + self.consume() + break + else: + rv += " " * spaces + spaces = 0 + rv += c + self.consume() + + if rv: + yield (token_types.string, decode(rv)) + + def list_value_atom_state(self): + self.consume() + for _, value in self.list_value_state(): + yield token_types.atom, value + + def list_end_state(self): + self.consume() + yield (token_types.list_end, "]") + self.state = self.line_end_state + + def value_state(self): + self.skip_whitespace() + if self.char() in ("'", '"'): + quote_char = self.char() + self.consume() + yield (token_types.string, self.consume_string(quote_char)) + if self.char() == "#": + self.state = self.comment_state + else: + self.state = self.line_end_state + elif self.char() == "@": + self.consume() + for _, value in self.value_inner_state(): + yield token_types.atom, value + else: + self.state = self.value_inner_state + + def value_inner_state(self): + rv = "" + spaces = 0 + while True: + c = self.char() + if c == "\\": + rv += self.consume_escape() + elif c == "#": + self.state = self.comment_state + break + elif c == " ": + # prevent whitespace before comments from being included in the value + spaces += 1 + self.consume() + elif c == eol: + self.state = self.line_end_state + break + else: + rv += " " * spaces + spaces = 0 + rv += c + self.consume() + yield (token_types.string, decode(rv)) + + def comment_state(self): + while self.char() is not eol: + self.consume() + self.state = self.eol_state + + def line_end_state(self): + self.skip_whitespace() + c = self.char() + if c == "#": + self.state = self.comment_state + elif c == eol: + self.state = self.eol_state + else: + raise ParseError(self.filename, self.line_number, "Junk before EOL %s" % c) + + def consume_string(self, quote_char): + rv = "" + while True: + c = self.char() + if c == "\\": + rv += self.consume_escape() + elif c == quote_char: + self.consume() + break + elif c == eol: + raise ParseError(self.filename, self.line_number, "EOL in quoted string") + else: + rv += c + self.consume() + + return decode(rv) + + def expr_or_value_state(self): + if self.peek(3) == "if ": + self.state = self.expr_state + else: + self.state = self.value_state + + def expr_state(self): + self.skip_whitespace() + c = self.char() + if c == eol: + raise ParseError(self.filename, self.line_number, "EOL in expression") + elif c in "'\"": + self.consume() + yield (token_types.string, self.consume_string(c)) + elif c == "#": + raise ParseError(self.filename, self.line_number, "Comment before end of expression") + elif c == ":": + yield (token_types.separator, c) + self.consume() + self.state = self.value_state + elif c in parens: + self.consume() + yield (token_types.paren, c) + elif c in ("!", "="): + self.state = self.operator_state + elif c in digits: + self.state = self.digit_state + else: + self.state = self.ident_state + + def operator_state(self): + # Only symbolic operators + index_0 = self.index + while True: + c = self.char() + if c == eol: + break + elif c in operator_chars: + self.consume() + else: + self.state = self.expr_state + break + yield (token_types.ident, self.line[index_0:self.index]) + + def digit_state(self): + index_0 = self.index + seen_dot = False + while True: + c = self.char() + if c == eol: + break + elif c in digits: + self.consume() + elif c == ".": + if seen_dot: + raise ParseError(self.filename, self.line_number, "Invalid number") + self.consume() + seen_dot = True + elif c in parens: + break + elif c in operator_chars: + break + elif c == " ": + break + elif c == ":": + break + else: + raise ParseError(self.filename, self.line_number, "Invalid character in number") + + self.state = self.expr_state + yield (token_types.number, self.line[index_0:self.index]) + + def ident_state(self): + index_0 = self.index + while True: + c = self.char() + if c == eol: + break + elif c == ".": + break + elif c in parens: + break + elif c in operator_chars: + break + elif c == " ": + break + elif c == ":": + break + else: + self.consume() + self.state = self.expr_state + yield (token_types.ident, self.line[index_0:self.index]) + + def consume_escape(self): + assert self.char() == "\\" + self.consume() + c = self.char() + self.consume() + if c == "x": + return self.decode_escape(2) + elif c == "u": + return self.decode_escape(4) + elif c == "U": + return self.decode_escape(6) + elif c in ["a", "b", "f", "n", "r", "t", "v"]: + return eval("'\%s'" % c) + elif c is eol: + raise ParseError(self.filename, self.line_number, "EOL in escape") + else: + return c + + def decode_escape(self, length): + value = 0 + for i in xrange(length): + c = self.char() + value *= 16 + value += self.escape_value(c) + self.consume() + + return unichr(value) + + def escape_value(self, c): + if '0' <= c <= '9': + return ord(c) - ord('0') + elif 'a' <= c <= 'f': + return ord(c) - ord('a') + 10 + elif 'A' <= c <= 'F': + return ord(c) - ord('A') + 10 + else: + raise ParseError(self.filename, self.line_number, "Invalid character escape") + + +class Parser(object): + def __init__(self): + self.reset() + + def reset(self): + self.token = None + self.unary_operators = "!" + self.binary_operators = frozenset(["&&", "||", "=="]) + self.tokenizer = Tokenizer() + self.token_generator = None + self.tree = Treebuilder(DataNode(None)) + self.expr_builder = None + self.expr_builders = [] + + def parse(self, input): + self.reset() + self.token_generator = self.tokenizer.tokenize(input) + self.consume() + self.manifest() + return self.tree.node + + def consume(self): + self.token = self.token_generator.next() + + def expect(self, type, value=None): + if self.token[0] != type: + raise ParseError + if value is not None: + if self.token[1] != value: + raise ParseError + + self.consume() + + def manifest(self): + self.data_block() + self.expect(token_types.eof) + + def data_block(self): + while self.token[0] == token_types.string: + self.tree.append(KeyValueNode(self.token[1])) + self.consume() + self.expect(token_types.separator) + self.value_block() + self.tree.pop() + + while self.token == (token_types.paren, "["): + self.consume() + if self.token[0] != token_types.string: + raise ParseError + self.tree.append(DataNode(self.token[1])) + self.consume() + self.expect(token_types.paren, "]") + if self.token[0] == token_types.group_start: + self.consume() + self.data_block() + self.eof_or_end_group() + self.tree.pop() + + def eof_or_end_group(self): + if self.token[0] != token_types.eof: + self.expect(token_types.group_end) + + def value_block(self): + if self.token[0] == token_types.list_start: + self.consume() + self.list_value() + elif self.token[0] == token_types.string: + self.value() + elif self.token[0] == token_types.group_start: + self.consume() + self.expression_values() + if self.token[0] == token_types.string: + self.value() + self.eof_or_end_group() + elif self.token[0] == token_types.atom: + self.atom() + else: + raise ParseError + + def list_value(self): + self.tree.append(ListNode()) + while self.token[0] in (token_types.atom, token_types.string): + if self.token[0] == token_types.atom: + self.atom() + else: + self.value() + self.expect(token_types.list_end) + self.tree.pop() + + def expression_values(self): + while self.token == (token_types.ident, "if"): + self.consume() + self.tree.append(ConditionalNode()) + self.expr_start() + self.expect(token_types.separator) + if self.token[0] == token_types.string: + self.value() + else: + raise ParseError + self.tree.pop() + + def value(self): + self.tree.append(ValueNode(self.token[1])) + self.consume() + self.tree.pop() + + def atom(self): + if self.token[1] not in atoms: + raise ParseError(self.tokenizer.filename, self.tokenizer.line_number, "Unrecognised symbol @%s" % self.token[1]) + self.tree.append(AtomNode(atoms[self.token[1]])) + self.consume() + self.tree.pop() + + def expr_start(self): + self.expr_builder = ExpressionBuilder(self.tokenizer) + self.expr_builders.append(self.expr_builder) + self.expr() + expression = self.expr_builder.finish() + self.expr_builders.pop() + self.expr_builder = self.expr_builders[-1] if self.expr_builders else None + if self.expr_builder: + self.expr_builder.operands[-1].children[-1].append(expression) + else: + self.tree.append(expression) + self.tree.pop() + + def expr(self): + self.expr_operand() + while (self.token[0] == token_types.ident and self.token[1] in binary_operators): + self.expr_bin_op() + self.expr_operand() + + def expr_operand(self): + if self.token == (token_types.paren, "("): + self.consume() + self.expr_builder.left_paren() + self.expr() + self.expect(token_types.paren, ")") + self.expr_builder.right_paren() + elif self.token[0] == token_types.ident and self.token[1] in unary_operators: + self.expr_unary_op() + self.expr_operand() + elif self.token[0] in [token_types.string, token_types.ident]: + self.expr_value() + elif self.token[0] == token_types.number: + self.expr_number() + else: + raise ParseError(self.tokenizer.filename, self.tokenizer.line_number, "Unrecognised operand") + + def expr_unary_op(self): + if self.token[1] in unary_operators: + self.expr_builder.push_operator(UnaryOperatorNode(self.token[1])) + self.consume() + else: + raise ParseError(self.tokenizer.filename, self.tokenizer.line_number, "Expected unary operator") + + def expr_bin_op(self): + if self.token[1] in binary_operators: + self.expr_builder.push_operator(BinaryOperatorNode(self.token[1])) + self.consume() + else: + raise ParseError(self.tokenizer.filename, self.tokenizer.line_number, "Expected binary operator") + + def expr_value(self): + node_type = {token_types.string: StringNode, + token_types.ident: VariableNode}[self.token[0]] + self.expr_builder.push_operand(node_type(self.token[1])) + self.consume() + if self.token == (token_types.paren, "["): + self.consume() + self.expr_builder.operands[-1].append(IndexNode()) + self.expr_start() + self.expect(token_types.paren, "]") + + def expr_number(self): + self.expr_builder.push_operand(NumberNode(self.token[1])) + self.consume() + + +class Treebuilder(object): + def __init__(self, root): + self.root = root + self.node = root + + def append(self, node): + self.node.append(node) + self.node = node + return node + + def pop(self): + node = self.node + self.node = self.node.parent + return node + + +class ExpressionBuilder(object): + def __init__(self, tokenizer): + self.operands = [] + self.operators = [None] + self.tokenizer = tokenizer + + def finish(self): + while self.operators[-1] is not None: + self.pop_operator() + rv = self.pop_operand() + assert self.is_empty() + return rv + + def left_paren(self): + self.operators.append(None) + + def right_paren(self): + while self.operators[-1] is not None: + self.pop_operator() + if not self.operators: + raise ParseError(self.tokenizer.filename, self.tokenizer.line, + "Unbalanced parens") + + assert self.operators.pop() is None + + def push_operator(self, operator): + assert operator is not None + while self.precedence(self.operators[-1]) > self.precedence(operator): + self.pop_operator() + + self.operators.append(operator) + + def pop_operator(self): + operator = self.operators.pop() + if isinstance(operator, BinaryOperatorNode): + operand_1 = self.operands.pop() + operand_0 = self.operands.pop() + self.operands.append(BinaryExpressionNode(operator, operand_0, operand_1)) + else: + operand_0 = self.operands.pop() + self.operands.append(UnaryExpressionNode(operator, operand_0)) + + def push_operand(self, node): + self.operands.append(node) + + def pop_operand(self): + return self.operands.pop() + + def is_empty(self): + return len(self.operands) == 0 and all(item is None for item in self.operators) + + def precedence(self, operator): + if operator is None: + return 0 + return precedence(operator) + + +def parse(stream): + p = Parser() + return p.parse(stream) diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/serializer.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/serializer.py new file mode 100644 index 00000000000..52203ab240a --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/serializer.py @@ -0,0 +1,136 @@ +from node import NodeVisitor, ValueNode, ListNode, BinaryExpressionNode +from parser import atoms, precedence + +atom_names = {v:"@%s" % k for (k,v) in atoms.iteritems()} + +named_escapes = set(["\a", "\b", "\f", "\n", "\r", "\t", "\v"]) + +def escape(string, extras=""): + rv = "" + for c in string: + if c in named_escapes: + rv += c.encode("unicode_escape") + elif c == "\\": + rv += "\\\\" + elif c < '\x20': + rv += "\\x%02x" % ord(c) + elif c in extras: + rv += "\\" + c + else: + rv += c + return rv.encode("utf8") + + +class ManifestSerializer(NodeVisitor): + def __init__(self, skip_empty_data=False): + self.skip_empty_data = skip_empty_data + + def serialize(self, root): + self.indent = 2 + rv = "\n".join(self.visit(root)) + if rv[-1] != "\n": + rv = rv + "\n" + return rv + + def visit_DataNode(self, node): + rv = [] + if not self.skip_empty_data or node.children: + if node.data: + rv.append("[%s]" % escape(node.data, extras="]")) + indent = self.indent * " " + else: + indent = "" + + for child in node.children: + rv.extend("%s%s" % (indent if item else "", item) for item in self.visit(child)) + + if node.parent: + rv.append("") + + return rv + + def visit_KeyValueNode(self, node): + rv = [escape(node.data, ":") + ":"] + indent = " " * self.indent + + if len(node.children) == 1 and isinstance(node.children[0], (ValueNode, ListNode)): + rv[0] += " %s" % self.visit(node.children[0])[0] + else: + for child in node.children: + rv.append(indent + self.visit(child)[0]) + + return rv + + def visit_ListNode(self, node): + rv = ["["] + rv.extend(", ".join(self.visit(child)[0] for child in node.children)) + rv.append("]") + return ["".join(rv)] + + def visit_ValueNode(self, node): + if "#" in node.data or (isinstance(node.parent, ListNode) and + ("," in node.data or "]" in node.data)): + if "\"" in node.data: + quote = "'" + else: + quote = "\"" + else: + quote = "" + return [quote + escape(node.data, extras=quote) + quote] + + def visit_AtomNode(self, node): + return [atom_names[node.data]] + + def visit_ConditionalNode(self, node): + return ["if %s: %s" % tuple(self.visit(item)[0] for item in node.children)] + + def visit_StringNode(self, node): + rv = ["\"%s\"" % escape(node.data, extras="\"")] + for child in node.children: + rv[0] += self.visit(child)[0] + return rv + + def visit_NumberNode(self, node): + return [str(node.data)] + + def visit_VariableNode(self, node): + rv = escape(node.data) + for child in node.children: + rv += self.visit(child) + return [rv] + + def visit_IndexNode(self, node): + assert len(node.children) == 1 + return ["[%s]" % self.visit(node.children[0])[0]] + + def visit_UnaryExpressionNode(self, node): + children = [] + for child in node.children: + child_str = self.visit(child)[0] + if isinstance(child, BinaryExpressionNode): + child_str = "(%s)" % child_str + children.append(child_str) + return [" ".join(children)] + + def visit_BinaryExpressionNode(self, node): + assert len(node.children) == 3 + children = [] + for child_index in [1, 0, 2]: + child = node.children[child_index] + child_str = self.visit(child)[0] + if (isinstance(child, BinaryExpressionNode) and + precedence(node.children[0]) < precedence(child.children[0])): + child_str = "(%s)" % child_str + children.append(child_str) + return [" ".join(children)] + + def visit_UnaryOperatorNode(self, node): + return [str(node.data)] + + def visit_BinaryOperatorNode(self, node): + return [str(node.data)] + + +def serialize(tree, *args, **kwargs): + s = ManifestSerializer(*args, **kwargs) + return s.serialize(tree) diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/tests/__init__.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/tests/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/tests/test_conditional.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/tests/test_conditional.py new file mode 100644 index 00000000000..d9ffdf25507 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/tests/test_conditional.py @@ -0,0 +1,143 @@ +import unittest + +from cStringIO import StringIO + +from ..backends import conditional +from ..node import BinaryExpressionNode, BinaryOperatorNode, VariableNode, NumberNode + + +class TestConditional(unittest.TestCase): + def compile(self, input_text): + return conditional.compile(input_text) + + def test_get_0(self): + data = """ +key: value + +[Heading 1] + other_key: + if a == 1: value_1 + if a == 2: value_2 + value_3 +""" + + manifest = self.compile(data) + + self.assertEquals(manifest.get("key"), "value") + children = list(item for item in manifest.iterchildren()) + self.assertEquals(len(children), 1) + section = children[0] + self.assertEquals(section.name, "Heading 1") + + self.assertEquals(section.get("other_key", {"a": 1}), "value_1") + self.assertEquals(section.get("other_key", {"a": 2}), "value_2") + self.assertEquals(section.get("other_key", {"a": 7}), "value_3") + self.assertEquals(section.get("key"), "value") + + def test_get_1(self): + data = """ +key: value + +[Heading 1] + other_key: + if a == "1": value_1 + if a == 2: value_2 + value_3 +""" + + manifest = self.compile(data) + + children = list(item for item in manifest.iterchildren()) + section = children[0] + + self.assertEquals(section.get("other_key", {"a": "1"}), "value_1") + self.assertEquals(section.get("other_key", {"a": 1}), "value_3") + + def test_get_2(self): + data = """ +key: + if a[1] == "b": value_1 + if a[1] == 2: value_2 + value_3 +""" + + manifest = self.compile(data) + + self.assertEquals(manifest.get("key", {"a": "ab"}), "value_1") + self.assertEquals(manifest.get("key", {"a": [1, 2]}), "value_2") + + def test_get_3(self): + data = """ +key: + if a[1] == "ab"[1]: value_1 + if a[1] == 2: value_2 + value_3 +""" + + manifest = self.compile(data) + + self.assertEquals(manifest.get("key", {"a": "ab"}), "value_1") + self.assertEquals(manifest.get("key", {"a": [1, 2]}), "value_2") + + def test_set_0(self): + data = """ +key: + if a == "a": value_1 + if a == "b": value_2 + value_3 +""" + manifest = self.compile(data) + + manifest.set("new_key", "value_new") + + self.assertEquals(manifest.get("new_key"), "value_new") + + def test_set_1(self): + data = """ +key: + if a == "a": value_1 + if a == "b": value_2 + value_3 +""" + + manifest = self.compile(data) + + manifest.set("key", "value_new") + + self.assertEquals(manifest.get("key"), "value_new") + self.assertEquals(manifest.get("key", {"a": "a"}), "value_1") + + def test_set_2(self): + data = """ +key: + if a == "a": value_1 + if a == "b": value_2 + value_3 +""" + + manifest = self.compile(data) + + expr = BinaryExpressionNode(BinaryOperatorNode("=="), + VariableNode("a"), + NumberNode("1")) + + manifest.set("key", "value_new", expr) + + self.assertEquals(manifest.get("key", {"a": 1}), "value_new") + self.assertEquals(manifest.get("key", {"a": "a"}), "value_1") + + def test_api_0(self): + data = """ +key: + if a == 1.5: value_1 + value_2 +key_1: other_value +""" + manifest = self.compile(data) + + self.assertFalse(manifest.is_empty) + self.assertEquals(manifest.root, manifest) + self.assertTrue(manifest.has_key("key_1")) + self.assertFalse(manifest.has_key("key_2")) + + self.assertEquals(set(manifest.iterkeys()), set(["key", "key_1"])) diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/tests/test_parser.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/tests/test_parser.py new file mode 100644 index 00000000000..765c984f42f --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/tests/test_parser.py @@ -0,0 +1,75 @@ +import unittest + +from cStringIO import StringIO + +from .. import parser + +# There aren't many tests here because it turns out to be way more convenient to +# use test_serializer for the majority of cases + + +class TestExpression(unittest.TestCase): + def setUp(self): + self.parser = parser.Parser() + + def parse(self, input_str): + return self.parser.parse(StringIO(input_str)) + + def compare(self, input_text, expected): + actual = self.parse(input_text) + self.match(expected, actual) + + def match(self, expected_node, actual_node): + self.assertEquals(expected_node[0], actual_node.__class__.__name__) + self.assertEquals(expected_node[1], actual_node.data) + self.assertEquals(len(expected_node[2]), len(actual_node.children)) + for expected_child, actual_child in zip(expected_node[2], actual_node.children): + self.match(expected_child, actual_child) + + def test_expr_0(self): + self.compare( + """ +key: + if x == 1 : value""", + ["DataNode", None, + [["KeyValueNode", "key", + [["ConditionalNode", None, + [["BinaryExpressionNode", None, + [["BinaryOperatorNode", "==", []], + ["VariableNode", "x", []], + ["NumberNode", "1", []] + ]], + ["ValueNode", "value", []], + ]]]]]] + ) + + def test_expr_1(self): + self.compare( + """ +key: + if not x and y : value""", + ["DataNode", None, + [["KeyValueNode", "key", + [["ConditionalNode", None, + [["BinaryExpressionNode", None, + [["BinaryOperatorNode", "and", []], + ["UnaryExpressionNode", None, + [["UnaryOperatorNode", "not", []], + ["VariableNode", "x", []] + ]], + ["VariableNode", "y", []] + ]], + ["ValueNode", "value", []], + ]]]]]] + ) + + def test_atom_0(self): + with self.assertRaises(parser.ParseError): + self.parse("key: @Unknown") + + def test_atom_1(self): + with self.assertRaises(parser.ParseError): + self.parse("key: @true") + +if __name__ == "__main__": + unittest.main() diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/tests/test_serializer.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/tests/test_serializer.py new file mode 100644 index 00000000000..6db2cbbbb47 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/tests/test_serializer.py @@ -0,0 +1,227 @@ +import sys +import unittest + +from cStringIO import StringIO + +import pytest + +from .. import parser, serializer + + +class TokenizerTest(unittest.TestCase): + def setUp(self): + self.serializer = serializer.ManifestSerializer() + self.parser = parser.Parser() + + def serialize(self, input_str): + return self.serializer.serialize(self.parser.parse(input_str)) + + def compare(self, input_str, expected=None): + if expected is None: + expected = input_str + expected = expected.encode("utf8") + actual = self.serialize(input_str) + self.assertEquals(actual, expected) + + def test_0(self): + self.compare("""key: value +[Heading 1] + other_key: other_value +""") + + def test_1(self): + self.compare("""key: value +[Heading 1] + other_key: + if a or b: other_value +""") + + def test_2(self): + self.compare("""key: value +[Heading 1] + other_key: + if a or b: other_value + fallback_value +""") + + def test_3(self): + self.compare("""key: value +[Heading 1] + other_key: + if a == 1: other_value + fallback_value +""") + + def test_4(self): + self.compare("""key: value +[Heading 1] + other_key: + if a == "1": other_value + fallback_value +""") + + def test_5(self): + self.compare("""key: value +[Heading 1] + other_key: + if a == "abc"[1]: other_value + fallback_value +""") + + def test_6(self): + self.compare("""key: value +[Heading 1] + other_key: + if a == "abc"[c]: other_value + fallback_value +""") + + def test_7(self): + self.compare("""key: value +[Heading 1] + other_key: + if (a or b) and c: other_value + fallback_value +""", +"""key: value +[Heading 1] + other_key: + if a or b and c: other_value + fallback_value +""") + + def test_8(self): + self.compare("""key: value +[Heading 1] + other_key: + if a or (b and c): other_value + fallback_value +""") + + def test_9(self): + self.compare("""key: value +[Heading 1] + other_key: + if not (a and b): other_value + fallback_value +""") + + def test_10(self): + self.compare("""key: value +[Heading 1] + some_key: some_value + +[Heading 2] + other_key: other_value +""") + + def test_11(self): + self.compare("""key: + if not a and b and c and d: true +""") + + def test_12(self): + self.compare("""[Heading 1] + key: [a:1, b:2] +""") + + def test_13(self): + self.compare("""key: [a:1, "b:#"] +""") + + def test_14(self): + self.compare("""key: [","] +""") + + def test_15(self): + self.compare("""key: , +""") + + def test_16(self): + self.compare("""key: ["]", b] +""") + + def test_17(self): + self.compare("""key: ] +""") + + def test_18(self): + self.compare("""key: \] + """, """key: ] +""") + + def test_escape_0(self): + self.compare(r"""k\t\:y: \a\b\f\n\r\t\v""", + r"""k\t\:y: \x07\x08\x0c\n\r\t\x0b +""") + + def test_escape_1(self): + self.compare(r"""k\x00: \x12A\x45""", + r"""k\x00: \x12AE +""") + + def test_escape_2(self): + self.compare(r"""k\u0045y: \u1234A\uABc6""", + u"""kEy: \u1234A\uabc6 +""") + + def test_escape_3(self): + self.compare(r"""k\u0045y: \u1234A\uABc6""", + u"""kEy: \u1234A\uabc6 +""") + + def test_escape_4(self): + self.compare(r"""key: '\u1234A\uABc6'""", + u"""key: \u1234A\uabc6 +""") + + def test_escape_5(self): + self.compare(r"""key: [\u1234A\uABc6]""", + u"""key: [\u1234A\uabc6] +""") + + def test_escape_6(self): + self.compare(r"""key: [\u1234A\uABc6\,]""", + u"""key: ["\u1234A\uabc6,"] +""") + + def test_escape_7(self): + self.compare(r"""key: [\,\]\#]""", + r"""key: [",]#"] +""") + + def test_escape_8(self): + self.compare(r"""key: \#""", + r"""key: "#" +""") + + @pytest.mark.xfail(sys.maxunicode == 0xFFFF, reason="narrow unicode") + def test_escape_9(self): + self.compare(r"""key: \U10FFFFabc""", + u"""key: \U0010FFFFabc +""") + + def test_escape_10(self): + self.compare(r"""key: \u10FFab""", + u"""key: \u10FFab +""") + + def test_escape_11(self): + self.compare(r"""key: \\ab +""") + + def test_atom_1(self): + self.compare(r"""key: @True +""") + + def test_atom_2(self): + self.compare(r"""key: @False +""") + + def test_atom_3(self): + self.compare(r"""key: @Reset +""") + + def test_atom_4(self): + self.compare(r"""key: [a, @Reset, b] +""") diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/tests/test_static.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/tests/test_static.py new file mode 100644 index 00000000000..ed28578d3bf --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/tests/test_static.py @@ -0,0 +1,98 @@ +import unittest + +from cStringIO import StringIO + +from ..backends import static + +# There aren't many tests here because it turns out to be way more convenient to +# use test_serializer for the majority of cases + + +class TestStatic(unittest.TestCase): + def compile(self, input_text, input_data): + return static.compile(input_text, input_data) + + def test_get_0(self): + data = """ +key: value + +[Heading 1] + other_key: + if a == 1: value_1 + if a == 2: value_2 + value_3 +""" + + manifest = self.compile(data, {"a": 2}) + + self.assertEquals(manifest.get("key"), "value") + children = list(item for item in manifest.iterchildren()) + self.assertEquals(len(children), 1) + section = children[0] + self.assertEquals(section.name, "Heading 1") + + self.assertEquals(section.get("other_key"), "value_2") + self.assertEquals(section.get("key"), "value") + + def test_get_1(self): + data = """ +key: value + +[Heading 1] + other_key: + if a == 1: value_1 + if a == 2: value_2 + value_3 +""" + manifest = self.compile(data, {"a": 3}) + + children = list(item for item in manifest.iterchildren()) + section = children[0] + self.assertEquals(section.get("other_key"), "value_3") + + def test_get_3(self): + data = """key: + if a == "1": value_1 + if a[0] == "ab"[0]: value_2 +""" + manifest = self.compile(data, {"a": "1"}) + self.assertEquals(manifest.get("key"), "value_1") + + manifest = self.compile(data, {"a": "ac"}) + self.assertEquals(manifest.get("key"), "value_2") + + def test_get_4(self): + data = """key: + if not a: value_1 + value_2 +""" + manifest = self.compile(data, {"a": True}) + self.assertEquals(manifest.get("key"), "value_2") + + manifest = self.compile(data, {"a": False}) + self.assertEquals(manifest.get("key"), "value_1") + + def test_api(self): + data = """key: + if a == 1.5: value_1 + value_2 +key_1: other_value +""" + manifest = self.compile(data, {"a": 1.5}) + + self.assertFalse(manifest.is_empty) + self.assertEquals(manifest.root, manifest) + self.assertTrue(manifest.has_key("key_1")) + self.assertFalse(manifest.has_key("key_2")) + + self.assertEquals(set(manifest.iterkeys()), set(["key", "key_1"])) + self.assertEquals(set(manifest.itervalues()), set(["value_1", "other_value"])) + + def test_is_empty_1(self): + data = """ +[Section] + [Subsection] +""" + manifest = self.compile(data, {}) + + self.assertTrue(manifest.is_empty) diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/tests/test_tokenizer.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/tests/test_tokenizer.py new file mode 100644 index 00000000000..88176c5a169 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/tests/test_tokenizer.py @@ -0,0 +1,357 @@ +import sys +import os +import unittest + +sys.path.insert(0, os.path.abspath("..")) +from cStringIO import StringIO + +from .. import parser +from ..parser import token_types + + +class TokenizerTest(unittest.TestCase): + def setUp(self): + self.tokenizer = parser.Tokenizer() + + def tokenize(self, input_str): + rv = [] + for item in self.tokenizer.tokenize(StringIO(input_str)): + rv.append(item) + if item[0] == token_types.eof: + break + return rv + + def compare(self, input_text, expected): + expected = expected + [(token_types.eof, None)] + actual = self.tokenize(input_text) + self.assertEquals(actual, expected) + + def test_heading_0(self): + self.compare("""[Heading text]""", + [(token_types.paren, "["), + (token_types.string, "Heading text"), + (token_types.paren, "]")]) + + def test_heading_1(self): + self.compare("""[Heading [text\]]""", + [(token_types.paren, "["), + (token_types.string, "Heading [text]"), + (token_types.paren, "]")]) + + def test_heading_2(self): + self.compare("""[Heading #text]""", + [(token_types.paren, "["), + (token_types.string, "Heading #text"), + (token_types.paren, "]")]) + + def test_heading_3(self): + self.compare("""[Heading [\]text]""", + [(token_types.paren, "["), + (token_types.string, "Heading []text"), + (token_types.paren, "]")]) + + def test_heading_4(self): + with self.assertRaises(parser.ParseError): + self.tokenize("[Heading") + + def test_heading_5(self): + self.compare("""[Heading [\]text] #comment""", + [(token_types.paren, "["), + (token_types.string, "Heading []text"), + (token_types.paren, "]")]) + + def test_heading_6(self): + self.compare(r"""[Heading \ttext]""", + [(token_types.paren, "["), + (token_types.string, "Heading \ttext"), + (token_types.paren, "]")]) + + def test_key_0(self): + self.compare("""key:value""", + [(token_types.string, "key"), + (token_types.separator, ":"), + (token_types.string, "value")]) + + def test_key_1(self): + self.compare("""key : value""", + [(token_types.string, "key"), + (token_types.separator, ":"), + (token_types.string, "value")]) + + def test_key_2(self): + self.compare("""key : val ue""", + [(token_types.string, "key"), + (token_types.separator, ":"), + (token_types.string, "val ue")]) + + def test_key_3(self): + self.compare("""key: value#comment""", + [(token_types.string, "key"), + (token_types.separator, ":"), + (token_types.string, "value")]) + + def test_key_4(self): + with self.assertRaises(parser.ParseError): + self.tokenize("""ke y: value""") + + def test_key_5(self): + with self.assertRaises(parser.ParseError): + self.tokenize("""key""") + + def test_key_6(self): + self.compare("""key: "value\"""", + [(token_types.string, "key"), + (token_types.separator, ":"), + (token_types.string, "value")]) + + def test_key_7(self): + self.compare("""key: 'value'""", + [(token_types.string, "key"), + (token_types.separator, ":"), + (token_types.string, "value")]) + + def test_key_8(self): + self.compare("""key: "#value\"""", + [(token_types.string, "key"), + (token_types.separator, ":"), + (token_types.string, "#value")]) + + def test_key_9(self): + self.compare("""key: '#value\'""", + [(token_types.string, "key"), + (token_types.separator, ":"), + (token_types.string, "#value")]) + + def test_key_10(self): + with self.assertRaises(parser.ParseError): + self.tokenize("""key: "value""") + + def test_key_11(self): + with self.assertRaises(parser.ParseError): + self.tokenize("""key: 'value""") + + def test_key_12(self): + with self.assertRaises(parser.ParseError): + self.tokenize("""key: 'value""") + + def test_key_13(self): + with self.assertRaises(parser.ParseError): + self.tokenize("""key: 'value' abc""") + + def test_key_14(self): + self.compare(r"""key: \\nb""", + [(token_types.string, "key"), + (token_types.separator, ":"), + (token_types.string, r"\nb")]) + + def test_list_0(self): + self.compare( +""" +key: []""", + [(token_types.string, "key"), + (token_types.separator, ":"), + (token_types.list_start, "["), + (token_types.list_end, "]")]) + + def test_list_1(self): + self.compare( +""" +key: [a, "b"]""", + [(token_types.string, "key"), + (token_types.separator, ":"), + (token_types.list_start, "["), + (token_types.string, "a"), + (token_types.string, "b"), + (token_types.list_end, "]")]) + + def test_list_2(self): + self.compare( +""" +key: [a, + b]""", + [(token_types.string, "key"), + (token_types.separator, ":"), + (token_types.list_start, "["), + (token_types.string, "a"), + (token_types.string, "b"), + (token_types.list_end, "]")]) + + def test_list_3(self): + self.compare( +""" +key: [a, #b] + c]""", + [(token_types.string, "key"), + (token_types.separator, ":"), + (token_types.list_start, "["), + (token_types.string, "a"), + (token_types.string, "c"), + (token_types.list_end, "]")]) + + def test_list_4(self): + with self.assertRaises(parser.ParseError): + self.tokenize("""key: [a #b] + c]""") + + def test_list_5(self): + with self.assertRaises(parser.ParseError): + self.tokenize("""key: [a \\ + c]""") + + def test_list_6(self): + self.compare( +"""key: [a , b]""", + [(token_types.string, "key"), + (token_types.separator, ":"), + (token_types.list_start, "["), + (token_types.string, "a"), + (token_types.string, "b"), + (token_types.list_end, "]")]) + + def test_expr_0(self): + self.compare( +""" +key: + if cond == 1: value""", + [(token_types.string, "key"), + (token_types.separator, ":"), + (token_types.group_start, None), + (token_types.ident, "if"), + (token_types.ident, "cond"), + (token_types.ident, "=="), + (token_types.number, "1"), + (token_types.separator, ":"), + (token_types.string, "value")]) + + def test_expr_1(self): + self.compare( +""" +key: + if cond == 1: value1 + value2""", + [(token_types.string, "key"), + (token_types.separator, ":"), + (token_types.group_start, None), + (token_types.ident, "if"), + (token_types.ident, "cond"), + (token_types.ident, "=="), + (token_types.number, "1"), + (token_types.separator, ":"), + (token_types.string, "value1"), + (token_types.string, "value2")]) + + def test_expr_2(self): + self.compare( +""" +key: + if cond=="1": value""", + [(token_types.string, "key"), + (token_types.separator, ":"), + (token_types.group_start, None), + (token_types.ident, "if"), + (token_types.ident, "cond"), + (token_types.ident, "=="), + (token_types.string, "1"), + (token_types.separator, ":"), + (token_types.string, "value")]) + + def test_expr_3(self): + self.compare( +""" +key: + if cond==1.1: value""", + [(token_types.string, "key"), + (token_types.separator, ":"), + (token_types.group_start, None), + (token_types.ident, "if"), + (token_types.ident, "cond"), + (token_types.ident, "=="), + (token_types.number, "1.1"), + (token_types.separator, ":"), + (token_types.string, "value")]) + + def test_expr_4(self): + self.compare( + """ +key: + if cond==1.1 and cond2 == "a": value""", + [(token_types.string, "key"), + (token_types.separator, ":"), + (token_types.group_start, None), + (token_types.ident, "if"), + (token_types.ident, "cond"), + (token_types.ident, "=="), + (token_types.number, "1.1"), + (token_types.ident, "and"), + (token_types.ident, "cond2"), + (token_types.ident, "=="), + (token_types.string, "a"), + (token_types.separator, ":"), + (token_types.string, "value")]) + + def test_expr_5(self): + self.compare( +""" +key: + if (cond==1.1 ): value""", + [(token_types.string, "key"), + (token_types.separator, ":"), + (token_types.group_start, None), + (token_types.ident, "if"), + (token_types.paren, "("), + (token_types.ident, "cond"), + (token_types.ident, "=="), + (token_types.number, "1.1"), + (token_types.paren, ")"), + (token_types.separator, ":"), + (token_types.string, "value")]) + + def test_expr_6(self): + self.compare( +""" +key: + if "\\ttest": value""", + [(token_types.string, "key"), + (token_types.separator, ":"), + (token_types.group_start, None), + (token_types.ident, "if"), + (token_types.string, "\ttest"), + (token_types.separator, ":"), + (token_types.string, "value")]) + + def test_expr_7(self): + with self.assertRaises(parser.ParseError): + self.tokenize( +""" +key: + if 1A: value""") + + def test_expr_8(self): + with self.assertRaises(parser.ParseError): + self.tokenize( +""" +key: + if 1a: value""") + + def test_expr_9(self): + with self.assertRaises(parser.ParseError): + self.tokenize( +""" +key: + if 1.1.1: value""") + + def test_expr_10(self): + self.compare( +""" +key: + if 1.: value""", + [(token_types.string, "key"), + (token_types.separator, ":"), + (token_types.group_start, None), + (token_types.ident, "if"), + (token_types.number, "1."), + (token_types.separator, ":"), + (token_types.string, "value")]) + +if __name__ == "__main__": + unittest.main() diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptrunner.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptrunner.py new file mode 100644 index 00000000000..65e5d7f7e0c --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptrunner.py @@ -0,0 +1,262 @@ +from __future__ import unicode_literals + +import json +import os +import sys + +import environment as env +import products +import testloader +import wptcommandline +import wptlogging +import wpttest +from testrunner import ManagerGroup +from browsers.base import NullBrowser + +here = os.path.split(__file__)[0] + +logger = None + +"""Runner for web-platform-tests + +The runner has several design goals: + +* Tests should run with no modification from upstream. + +* Tests should be regarded as "untrusted" so that errors, timeouts and even + crashes in the tests can be handled without failing the entire test run. + +* For performance tests can be run in multiple browsers in parallel. + +The upstream repository has the facility for creating a test manifest in JSON +format. This manifest is used directly to determine which tests exist. Local +metadata files are used to store the expected test results. +""" + +def setup_logging(*args, **kwargs): + global logger + logger = wptlogging.setup(*args, **kwargs) + +def get_loader(test_paths, product, ssl_env, debug=None, run_info_extras=None, **kwargs): + if run_info_extras is None: + run_info_extras = {} + + run_info = wpttest.get_run_info(kwargs["run_info"], product, debug=debug, + extras=run_info_extras) + + test_manifests = testloader.ManifestLoader(test_paths, force_manifest_update=kwargs["manifest_update"]).load() + + manifest_filters = [] + meta_filters = [] + + if kwargs["include"] or kwargs["exclude"] or kwargs["include_manifest"]: + manifest_filters.append(testloader.TestFilter(include=kwargs["include"], + exclude=kwargs["exclude"], + manifest_path=kwargs["include_manifest"], + test_manifests=test_manifests)) + if kwargs["tags"]: + meta_filters.append(testloader.TagFilter(tags=kwargs["tags"])) + + test_loader = testloader.TestLoader(test_manifests, + kwargs["test_types"], + run_info, + manifest_filters=manifest_filters, + meta_filters=meta_filters, + chunk_type=kwargs["chunk_type"], + total_chunks=kwargs["total_chunks"], + chunk_number=kwargs["this_chunk"], + include_https=ssl_env.ssl_enabled) + return run_info, test_loader + +def list_test_groups(test_paths, product, **kwargs): + env.do_delayed_imports(logger, test_paths) + + ssl_env = env.ssl_env(logger, **kwargs) + + run_info, test_loader = get_loader(test_paths, product, ssl_env, + **kwargs) + + for item in sorted(test_loader.groups(kwargs["test_types"])): + print item + + +def list_disabled(test_paths, product, **kwargs): + env.do_delayed_imports(logger, test_paths) + + rv = [] + + ssl_env = env.ssl_env(logger, **kwargs) + + run_info, test_loader = get_loader(test_paths, product, ssl_env, + **kwargs) + + for test_type, tests in test_loader.disabled_tests.iteritems(): + for test in tests: + rv.append({"test": test.id, "reason": test.disabled()}) + print json.dumps(rv, indent=2) + + +def get_pause_after_test(test_loader, **kwargs): + total_tests = sum(len(item) for item in test_loader.tests.itervalues()) + if kwargs["pause_after_test"] is None: + if kwargs["repeat_until_unexpected"]: + return False + if kwargs["repeat"] == 1 and total_tests == 1: + return True + return False + return kwargs["pause_after_test"] + + +def run_tests(config, test_paths, product, **kwargs): + with wptlogging.CaptureIO(logger, not kwargs["no_capture_stdio"]): + env.do_delayed_imports(logger, test_paths) + + (check_args, + target_browser_cls, get_browser_kwargs, + executor_classes, get_executor_kwargs, + env_options, get_env_extras, run_info_extras) = products.load_product(config, product) + + ssl_env = env.ssl_env(logger, **kwargs) + env_extras = get_env_extras(**kwargs) + + check_args(**kwargs) + + if "test_loader" in kwargs: + run_info = wpttest.get_run_info(kwargs["run_info"], product, debug=None, + extras=run_info_extras(**kwargs)) + test_loader = kwargs["test_loader"] + else: + run_info, test_loader = get_loader(test_paths, + product, + ssl_env, + run_info_extras=run_info_extras(**kwargs), + **kwargs) + + if kwargs["run_by_dir"] is False: + test_source_cls = testloader.SingleTestSource + test_source_kwargs = {} + else: + # A value of None indicates infinite depth + test_source_cls = testloader.PathGroupedSource + test_source_kwargs = {"depth": kwargs["run_by_dir"]} + + logger.info("Using %i client processes" % kwargs["processes"]) + + unexpected_total = 0 + + kwargs["pause_after_test"] = get_pause_after_test(test_loader, **kwargs) + + with env.TestEnvironment(test_paths, + ssl_env, + kwargs["pause_after_test"], + kwargs["debug_info"], + env_options, + env_extras) as test_environment: + try: + test_environment.ensure_started() + except env.TestEnvironmentError as e: + logger.critical("Error starting test environment: %s" % e.message) + raise + + repeat = kwargs["repeat"] + repeat_count = 0 + repeat_until_unexpected = kwargs["repeat_until_unexpected"] + + while repeat_count < repeat or repeat_until_unexpected: + repeat_count += 1 + if repeat_until_unexpected: + logger.info("Repetition %i" % (repeat_count)) + elif repeat > 1: + logger.info("Repetition %i / %i" % (repeat_count, repeat)) + + unexpected_count = 0 + logger.suite_start(test_loader.test_ids, run_info) + for test_type in kwargs["test_types"]: + logger.info("Running %s tests" % test_type) + + # WebDriver tests may create and destroy multiple browser + # processes as part of their expected behavior. These + # processes are managed by a WebDriver server binary. This + # obviates the need for wptrunner to provide a browser, so + # the NullBrowser is used in place of the "target" browser + if test_type == "wdspec": + browser_cls = NullBrowser + else: + browser_cls = target_browser_cls + + browser_kwargs = get_browser_kwargs(test_type, + run_info, + ssl_env=ssl_env, + **kwargs) + + + executor_cls = executor_classes.get(test_type) + executor_kwargs = get_executor_kwargs(test_type, + test_environment.external_config, + test_environment.cache_manager, + run_info, + **kwargs) + + if executor_cls is None: + logger.error("Unsupported test type %s for product %s" % + (test_type, product)) + continue + + for test in test_loader.disabled_tests[test_type]: + logger.test_start(test.id) + logger.test_end(test.id, status="SKIP") + + with ManagerGroup("web-platform-tests", + kwargs["processes"], + test_source_cls, + test_source_kwargs, + browser_cls, + browser_kwargs, + executor_cls, + executor_kwargs, + kwargs["pause_after_test"], + kwargs["pause_on_unexpected"], + kwargs["restart_on_unexpected"], + kwargs["debug_info"]) as manager_group: + try: + manager_group.run(test_type, test_loader.tests) + except KeyboardInterrupt: + logger.critical("Main thread got signal") + manager_group.stop() + raise + unexpected_count += manager_group.unexpected_count() + + unexpected_total += unexpected_count + logger.info("Got %i unexpected results" % unexpected_count) + if repeat_until_unexpected and unexpected_total > 0: + break + logger.suite_end() + + return unexpected_total == 0 + +def start(**kwargs): + if kwargs["list_test_groups"]: + list_test_groups(**kwargs) + elif kwargs["list_disabled"]: + list_disabled(**kwargs) + else: + return not run_tests(**kwargs) + +def main(): + """Main entry point when calling from the command line""" + kwargs = wptcommandline.parse_args() + + try: + if kwargs["prefs_root"] is None: + kwargs["prefs_root"] = os.path.abspath(os.path.join(here, "prefs")) + + setup_logging(kwargs, {"raw": sys.stdout}) + + return start(**kwargs) + except Exception: + if kwargs["pdb"]: + import pdb, traceback + print traceback.format_exc() + pdb.post_mortem() + else: + raise diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wpttest.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wpttest.py new file mode 100644 index 00000000000..12701f61117 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wpttest.py @@ -0,0 +1,350 @@ +import os + +import mozinfo + +from wptmanifest.parser import atoms + +atom_reset = atoms["Reset"] +enabled_tests = set(["testharness", "reftest", "wdspec"]) + + +class Result(object): + def __init__(self, status, message, expected=None, extra=None): + if status not in self.statuses: + raise ValueError("Unrecognised status %s" % status) + self.status = status + self.message = message + self.expected = expected + self.extra = extra + + def __repr__(self): + return "<%s.%s %s>" % (self.__module__, self.__class__.__name__, self.status) + + +class SubtestResult(object): + def __init__(self, name, status, message, stack=None, expected=None): + self.name = name + if status not in self.statuses: + raise ValueError("Unrecognised status %s" % status) + self.status = status + self.message = message + self.stack = stack + self.expected = expected + + def __repr__(self): + return "<%s.%s %s %s>" % (self.__module__, self.__class__.__name__, self.name, self.status) + + +class TestharnessResult(Result): + default_expected = "OK" + statuses = set(["OK", "ERROR", "TIMEOUT", "EXTERNAL-TIMEOUT", "CRASH"]) + + +class TestharnessSubtestResult(SubtestResult): + default_expected = "PASS" + statuses = set(["PASS", "FAIL", "TIMEOUT", "NOTRUN"]) + + +class ReftestResult(Result): + default_expected = "PASS" + statuses = set(["PASS", "FAIL", "ERROR", "TIMEOUT", "EXTERNAL-TIMEOUT", "CRASH"]) + + +class WdspecResult(Result): + default_expected = "OK" + statuses = set(["OK", "ERROR", "TIMEOUT", "EXTERNAL-TIMEOUT", "CRASH"]) + + +class WdspecSubtestResult(SubtestResult): + default_expected = "PASS" + statuses = set(["PASS", "FAIL", "ERROR"]) + + +def get_run_info(metadata_root, product, **kwargs): + return RunInfo(metadata_root, product, **kwargs) + + +class RunInfo(dict): + def __init__(self, metadata_root, product, debug, extras=None): + self._update_mozinfo(metadata_root) + self.update(mozinfo.info) + self["product"] = product + if debug is not None: + self["debug"] = debug + elif "debug" not in self: + # Default to release + self["debug"] = False + if extras is not None: + self.update(extras) + + def _update_mozinfo(self, metadata_root): + """Add extra build information from a mozinfo.json file in a parent + directory""" + path = metadata_root + dirs = set() + while path != os.path.expanduser('~'): + if path in dirs: + break + dirs.add(str(path)) + path = os.path.split(path)[0] + + mozinfo.find_and_update_from_json(*dirs) + + +class Test(object): + + result_cls = None + subtest_result_cls = None + test_type = None + + default_timeout = 10 # seconds + long_timeout = 60 # seconds + + def __init__(self, tests_root, url, inherit_metadata, test_metadata, + timeout=None, path=None, protocol="http"): + self.tests_root = tests_root + self.url = url + self._inherit_metadata = inherit_metadata + self._test_metadata = test_metadata + self.timeout = timeout if timeout is not None else self.default_timeout + self.path = path + self.environment = {"protocol": protocol, "prefs": self.prefs} + + def __eq__(self, other): + return self.id == other.id + + @classmethod + def from_manifest(cls, manifest_item, inherit_metadata, test_metadata): + timeout = cls.long_timeout if manifest_item.timeout == "long" else cls.default_timeout + protocol = "https" if hasattr(manifest_item, "https") and manifest_item.https else "http" + return cls(manifest_item.source_file.tests_root, + manifest_item.url, + inherit_metadata, + test_metadata, + timeout=timeout, + path=manifest_item.source_file.path, + protocol=protocol) + + @property + def id(self): + return self.url + + @property + def keys(self): + return tuple() + + @property + def abs_path(self): + return os.path.join(self.tests_root, self.path) + + def _get_metadata(self, subtest=None): + if self._test_metadata is not None and subtest is not None: + return self._test_metadata.get_subtest(subtest) + else: + return self._test_metadata + + def itermeta(self, subtest=None): + for metadata in self._inherit_metadata: + yield metadata + + if self._test_metadata is not None: + yield self._get_metadata() + if subtest is not None: + subtest_meta = self._get_metadata(subtest) + if subtest_meta is not None: + yield subtest_meta + + def disabled(self, subtest=None): + for meta in self.itermeta(subtest): + disabled = meta.disabled + if disabled is not None: + return disabled + return None + + @property + def restart_after(self): + for meta in self.itermeta(None): + restart_after = meta.restart_after + if restart_after is not None: + return True + return False + + @property + def leaks(self): + for meta in self.itermeta(None): + leaks = meta.leaks + if leaks is not None: + return leaks + return False + + @property + def tags(self): + tags = set() + for meta in self.itermeta(): + meta_tags = meta.tags + if atom_reset in meta_tags: + tags = meta_tags.copy() + tags.remove(atom_reset) + else: + tags |= meta_tags + + tags.add("dir:%s" % self.id.lstrip("/").split("/")[0]) + + return tags + + @property + def prefs(self): + prefs = {} + for meta in self.itermeta(): + meta_prefs = meta.prefs + if atom_reset in prefs: + prefs = meta_prefs.copy() + del prefs[atom_reset] + else: + prefs.update(meta_prefs) + return prefs + + def expected(self, subtest=None): + if subtest is None: + default = self.result_cls.default_expected + else: + default = self.subtest_result_cls.default_expected + + metadata = self._get_metadata(subtest) + if metadata is None: + return default + + try: + return metadata.get("expected") + except KeyError: + return default + + def __repr__(self): + return "<%s.%s %s>" % (self.__module__, self.__class__.__name__, self.id) + + +class TestharnessTest(Test): + result_cls = TestharnessResult + subtest_result_cls = TestharnessSubtestResult + test_type = "testharness" + + @property + def id(self): + return self.url + + +class ManualTest(Test): + test_type = "manual" + + @property + def id(self): + return self.url + + +class ReftestTest(Test): + result_cls = ReftestResult + test_type = "reftest" + + def __init__(self, tests_root, url, inherit_metadata, test_metadata, references, + timeout=None, path=None, viewport_size=None, dpi=None, protocol="http"): + Test.__init__(self, tests_root, url, inherit_metadata, test_metadata, timeout, + path, protocol) + + for _, ref_type in references: + if ref_type not in ("==", "!="): + raise ValueError + + self.references = references + self.viewport_size = viewport_size + self.dpi = dpi + + @classmethod + def from_manifest(cls, + manifest_test, + inherit_metadata, + test_metadata, + nodes=None, + references_seen=None): + + timeout = cls.long_timeout if manifest_test.timeout == "long" else cls.default_timeout + + if nodes is None: + nodes = {} + if references_seen is None: + references_seen = set() + + url = manifest_test.url + + node = cls(manifest_test.source_file.tests_root, + manifest_test.url, + inherit_metadata, + test_metadata, + [], + timeout=timeout, + path=manifest_test.path, + viewport_size=manifest_test.viewport_size, + dpi=manifest_test.dpi, + protocol="https" if hasattr(manifest_test, "https") and manifest_test.https else "http") + + nodes[url] = node + + for ref_url, ref_type in manifest_test.references: + comparison_key = (ref_type,) + tuple(sorted([url, ref_url])) + if ref_url in nodes: + manifest_node = ref_url + if comparison_key in references_seen: + # We have reached a cycle so stop here + # Note that just seeing a node for the second time is not + # enough to detect a cycle because + # A != B != C != A must include C != A + # but A == B == A should not include the redundant B == A. + continue + + references_seen.add(comparison_key) + + manifest_node = manifest_test.manifest.get_reference(ref_url) + if manifest_node: + reference = ReftestTest.from_manifest(manifest_node, + [], + None, + nodes, + references_seen) + else: + reference = ReftestTest(manifest_test.source_file.tests_root, + ref_url, + [], + None, + []) + + node.references.append((reference, ref_type)) + + return node + + @property + def id(self): + return self.url + + @property + def keys(self): + return ("reftype", "refurl") + + +class WdspecTest(Test): + + result_cls = WdspecResult + subtest_result_cls = WdspecSubtestResult + test_type = "wdspec" + + default_timeout = 25 + long_timeout = 120 + + +manifest_test_cls = {"reftest": ReftestTest, + "testharness": TestharnessTest, + "manual": ManualTest, + "wdspec": WdspecTest} + + +def from_manifest(manifest_test, inherit_metadata, test_metadata): + test_cls = manifest_test_cls[manifest_test.item_type] + return test_cls.from_manifest(manifest_test, inherit_metadata, test_metadata) diff --git a/tests/wpt/web-platform-tests/tools/wptserve/setup.py b/tests/wpt/web-platform-tests/tools/wptserve/setup.py index 956e209221c..c71f60af868 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/setup.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/setup.py @@ -1,7 +1,7 @@ from setuptools import setup PACKAGE_VERSION = '1.4.0' -deps = [] +deps = ["six>=1.8"] setup(name='wptserve', version=PACKAGE_VERSION, diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/base.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/base.py index 62d5e3253e6..9b0cb50179f 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/base.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/base.py @@ -3,13 +3,14 @@ from __future__ import print_function import base64 import logging import os +import pytest import unittest from six.moves.urllib.parse import urlencode, urlunsplit from six.moves.urllib.request import Request as BaseRequest from six.moves.urllib.request import urlopen -import wptserve +wptserve = pytest.importorskip("wptserve") logging.basicConfig() @@ -18,6 +19,7 @@ wptserve.logger.set_logger(logging.getLogger()) here = os.path.split(__file__)[0] doc_root = os.path.join(here, "docroot") + class Request(BaseRequest): def __init__(self, *args, **kwargs): BaseRequest.__init__(self, *args, **kwargs) @@ -33,6 +35,7 @@ class Request(BaseRequest): self.add_header("Content-Length", str(len(data))) BaseRequest.add_data(self, data) + class TestUsingServer(unittest.TestCase): def setUp(self): self.server = wptserve.server.WebTestHttpd(host="localhost", 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 d1080b4bf15..2e2d0d6771b 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,8 +1,11 @@ import unittest -import wptserve +import pytest + +wptserve = pytest.importorskip("wptserve") from .base import TestUsingServer + class TestResponseSetCookie(TestUsingServer): def test_name_value(self): @wptserve.handlers.handler 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 f99597a43f0..67119d2cfbd 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 @@ -1,14 +1,15 @@ import json import os -import pytest import unittest import uuid +import pytest from six.moves.urllib.error import HTTPError -import wptserve +wptserve = pytest.importorskip("wptserve") from .base import TestUsingServer, doc_root + class TestFileHandler(TestUsingServer): def test_GET(self): resp = self.request("/document.txt") 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 af5068108c8..95da70faea9 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 @@ -2,8 +2,11 @@ import os import unittest import time +import pytest + from .base import TestUsingServer, doc_root + class TestStatus(TestUsingServer): def test_status(self): resp = self.request("/document.txt", query="pipe=status(202)") 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 40dfe7703d1..d0d8213cfdd 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,8 +1,11 @@ import unittest -import wptserve +import pytest + +wptserve = pytest.importorskip("wptserve") from .base import TestUsingServer + class TestInputFile(TestUsingServer): def test_seek(self): @wptserve.handlers.handler 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 e9808b54ef1..d60127560f6 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,9 +1,12 @@ import unittest from types import MethodType -import wptserve +import pytest + +wptserve = pytest.importorskip("wptserve") from .base import TestUsingServer + def send_body_as_header(self): if self._response.add_required_headers: self.write_default_headers() 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 2646beda374..26c34c31002 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,10 +1,12 @@ import unittest +import pytest from six.moves.urllib.error import HTTPError -import wptserve +wptserve = pytest.importorskip("wptserve") from .base import TestUsingServer + class TestFileHandler(TestUsingServer): def test_not_handled(self): with self.assertRaises(HTTPError) as cm: 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 134293d3468..97591cbb007 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,11 +1,14 @@ import unittest import uuid -import wptserve +import pytest + +wptserve = pytest.importorskip("wptserve") from wptserve.router import any_method from wptserve.stash import StashServer from .base import TestUsingServer + class TestResponseSetCookie(TestUsingServer): def run(self, result=None): with StashServer(None, authkey=str(uuid.uuid4())): diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tox.ini b/tests/wpt/web-platform-tests/tools/wptserve/tox.ini deleted file mode 100644 index 0026f56e957..00000000000 --- a/tests/wpt/web-platform-tests/tools/wptserve/tox.ini +++ /dev/null @@ -1,18 +0,0 @@ -[tox] -envlist = py27,pypy - -[testenv] -deps = - coverage - flake8 - pytest - six - -commands = - coverage run -m pytest tests/functional - flake8 - -[flake8] -ignore = E128,E129,E221,E226,E231,E251,E265,E302,E303,E305,E402,E901,F821,F841 -max-line-length = 141 -exclude=docs,.git,__pycache__,.tox,.eggs,*.egg,tests/functional/docroot/ diff --git a/tests/wpt/web-platform-tests/auxclick/auxclick_event-manual.html b/tests/wpt/web-platform-tests/uievents/auxclick/auxclick_event-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/auxclick/auxclick_event-manual.html rename to tests/wpt/web-platform-tests/uievents/auxclick/auxclick_event-manual.html diff --git a/tests/wpt/web-platform-tests/uievents/mouse/mouseevent_move_button-manual.html b/tests/wpt/web-platform-tests/uievents/mouse/mouseevent_move_button-manual.html new file mode 100644 index 00000000000..ff5eaba6983 --- /dev/null +++ b/tests/wpt/web-platform-tests/uievents/mouse/mouseevent_move_button-manual.html @@ -0,0 +1,85 @@ + + + + Mouse Events with button depressed + + + + + + +

        Mouse Events

        +

        Test Description: This test checks if mouse events set button property correctly +
          +
        1. Put your mouse over the green rectangle
        2. +
        3. Press a non-primary button and hold it
        4. +
        5. Drag mouse to blue rectangle
        6. +
        7. Release mouse button
        8. +
        +

        +
        +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/update-built-tests.sh b/tests/wpt/web-platform-tests/update-built-tests.sh index 970a930dc9c..90da26247be 100755 --- a/tests/wpt/web-platform-tests/update-built-tests.sh +++ b/tests/wpt/web-platform-tests/update-built-tests.sh @@ -2,5 +2,6 @@ set -ex 2dcontext/tools/build.sh +assumptions/tools/build.sh html/tools/build.sh offscreen-canvas/tools/build.sh diff --git a/tests/wpt/web-platform-tests/url/OWNERS b/tests/wpt/web-platform-tests/url/OWNERS index 34afaead3e3..a3828440539 100644 --- a/tests/wpt/web-platform-tests/url/OWNERS +++ b/tests/wpt/web-platform-tests/url/OWNERS @@ -7,3 +7,4 @@ @domenic @Sebmaster @annevk +@GPHemsley diff --git a/tests/wpt/web-platform-tests/url/README.md b/tests/wpt/web-platform-tests/url/README.md index 77965cc43df..4cb3c00d61c 100644 --- a/tests/wpt/web-platform-tests/url/README.md +++ b/tests/wpt/web-platform-tests/url/README.md @@ -21,15 +21,3 @@ The keys for each test case are: [parsing]: https://url.spec.whatwg.org/#concept-basic-url-parser [API]: https://url.spec.whatwg.org/#api - -[`annevk/url`](https://github.com/annevk/url) hosts some other files that might be of -interest if you want to create additional tests. - -Similar to `a-element.html` it would be trivial to add more tests for other objects that -expose links (e.g. URL and ``). There's also room for enhancement and bits that -require independent tests: - -* The encoding part of the URL parser -* The state override part of the URL parser (setting individual properties of a URL) -* Origin serialization -* `application/x-www-form-urlencoded` diff --git a/tests/wpt/web-platform-tests/url/failure.html b/tests/wpt/web-platform-tests/url/failure.html index 7ffb3cbe28c..d097d4e3510 100644 --- a/tests/wpt/web-platform-tests/url/failure.html +++ b/tests/wpt/web-platform-tests/url/failure.html @@ -33,6 +33,10 @@ function runTests(testData) { self.test(() => { assert_throws(new TypeError, () => self[0].location = test.input) }, "Location's href: " + name) + + self.test(() => { + assert_throws("SyntaxError", () => self.open(test.input).close()) + }, "window.open(): " + name) } } diff --git a/tests/wpt/web-platform-tests/url/historical.worker.js b/tests/wpt/web-platform-tests/url/historical.any.js similarity index 74% rename from tests/wpt/web-platform-tests/url/historical.worker.js rename to tests/wpt/web-platform-tests/url/historical.any.js index ccee73d2ec4..c3797ad2638 100644 --- a/tests/wpt/web-platform-tests/url/historical.worker.js +++ b/tests/wpt/web-platform-tests/url/historical.any.js @@ -1,10 +1,15 @@ -importScripts("/resources/testharness.js"); - test(function() { assert_false("searchParams" in self.location, "location object should not have a searchParams attribute"); }, "searchParams on location object"); +if(self.GLOBAL.isWindow()) { + test(() => { + assert_false("searchParams" in document.createElement("a")) + assert_false("searchParams" in document.createElement("area")) + }, " and .searchParams should be undefined"); +} + test(function() { var url = new URL("./foo", "http://www.example.org"); assert_equals(url.href, "http://www.example.org/foo"); diff --git a/tests/wpt/web-platform-tests/url/historical.html b/tests/wpt/web-platform-tests/url/historical.html deleted file mode 100644 index fe35b062250..00000000000 --- a/tests/wpt/web-platform-tests/url/historical.html +++ /dev/null @@ -1,37 +0,0 @@ - - -URL historical tests - - -
        - diff --git a/tests/wpt/web-platform-tests/url/interfaces.any.js b/tests/wpt/web-platform-tests/url/interfaces.any.js new file mode 100644 index 00000000000..aa5d5c835fb --- /dev/null +++ b/tests/wpt/web-platform-tests/url/interfaces.any.js @@ -0,0 +1,51 @@ +// META: script=/resources/WebIDLParser.js +// META: script=/resources/idlharness.js + +let idlArray, + idl = `[Constructor(USVString url, optional USVString base), + Exposed=(Window,Worker), + LegacyWindowAlias=webkitURL] +interface URL { + stringifier attribute USVString href; + readonly attribute USVString origin; + attribute USVString protocol; + attribute USVString username; + attribute USVString password; + attribute USVString host; + attribute USVString hostname; + attribute USVString port; + attribute USVString pathname; + attribute USVString search; + [SameObject] readonly attribute URLSearchParams searchParams; + attribute USVString hash; + + USVString toJSON(); +}; + +[Constructor(optional (sequence> or record or USVString) init = ""), + Exposed=(Window,Worker)] +interface URLSearchParams { + void append(USVString name, USVString value); + void delete(USVString name); + USVString? get(USVString name); + sequence getAll(USVString name); + boolean has(USVString name); + void set(USVString name, USVString value); + + void sort(); + + iterable; + stringifier; +};`; +setup(function() { + idlArray = new IdlArray(); + idlArray.add_idls(idl); +}, {explicit_done:true}); + +idlArray.add_objects({ + URL: ['new URL("http://foo")'], + URLSearchParams: ['new URLSearchParams("hi=there&thank=you")'] +}); +idlArray.test(); + +done(); diff --git a/tests/wpt/web-platform-tests/url/interfaces.html b/tests/wpt/web-platform-tests/url/interfaces.html deleted file mode 100644 index 0daf3f58c97..00000000000 --- a/tests/wpt/web-platform-tests/url/interfaces.html +++ /dev/null @@ -1,64 +0,0 @@ - -URL IDL tests - - - - - -

        URL IDL tests

        -
        - - - diff --git a/tests/wpt/web-platform-tests/url/toascii.json b/tests/wpt/web-platform-tests/url/toascii.json new file mode 100644 index 00000000000..814f06e7948 --- /dev/null +++ b/tests/wpt/web-platform-tests/url/toascii.json @@ -0,0 +1,149 @@ +[ + "This resource is focused on highlighting issues with UTS #46 ToASCII", + { + "comment": "Label with hyphens in 3rd and 4th position", + "input": "aa--", + "output": "aa--" + }, + { + "input": "a†--", + "output": "xn--a---kp0a" + }, + { + "input": "ab--c", + "output": "ab--c" + }, + { + "comment": "Label with leading hyphen", + "input": "-x", + "output": "-x" + }, + { + "input": "-†", + "output": "xn----xhn" + }, + { + "input": "-x.xn--nxa", + "output": "-x.xn--nxa" + }, + { + "input": "-x.β", + "output": "-x.xn--nxa" + }, + { + "comment": "Label with trailing hyphen", + "input": "x-.xn--nxa", + "output": "x-.xn--nxa" + }, + { + "input": "x-.β", + "output": "x-.xn--nxa" + }, + { + "comment": "Empty labels", + "input": "x..xn--nxa", + "output": "x..xn--nxa" + }, + { + "input": "x..β", + "output": "x..xn--nxa" + }, + { + "comment": "Invalid Punycode", + "input": "xn--a", + "output": null + }, + { + "input": "xn--a.xn--nxa", + "output": null + }, + { + "input": "xn--a.β", + "output": null + }, + { + "comment": "Valid Punycode", + "input": "xn--nxa.xn--nxa", + "output": "xn--nxa.xn--nxa" + }, + { + "comment": "Mixed", + "input": "xn--nxa.β", + "output": "xn--nxa.xn--nxa" + }, + { + "input": "ab--c.xn--nxa", + "output": "ab--c.xn--nxa" + }, + { + "input": "ab--c.β", + "output": "ab--c.xn--nxa" + }, + { + "comment": "CheckJoiners is true", + "input": "\u200D.example", + "output": null + }, + { + "input": "xn--1ug.example", + "output": null + }, + { + "comment": "CheckBidi is true", + "input": "يa", + "output": null + }, + { + "input": "xn--a-yoc", + "output": null + }, + { + "comment": "processing_option is Nontransitional_Processing", + "input": "ශ්‍රී", + "output": "xn--10cl1a0b660p" + }, + { + "input": "نامه‌ای", + "output": "xn--mgba3gch31f060k" + }, + { + "comment": "U+FFFD", + "input": "\uFFFD.com", + "output": null + }, + { + "comment": "U+FFFD character encoded in Punycode", + "input": "xn--zn7c.com", + "output": null + }, + { + "comment": "Label longer than 63 code points", + "input": "x01234567890123456789012345678901234567890123456789012345678901x", + "output": "x01234567890123456789012345678901234567890123456789012345678901x" + }, + { + "input": "x01234567890123456789012345678901234567890123456789012345678901†", + "output": "xn--x01234567890123456789012345678901234567890123456789012345678901-6963b" + }, + { + "input": "x01234567890123456789012345678901234567890123456789012345678901x.xn--nxa", + "output": "x01234567890123456789012345678901234567890123456789012345678901x.xn--nxa" + }, + { + "input": "x01234567890123456789012345678901234567890123456789012345678901x.β", + "output": "x01234567890123456789012345678901234567890123456789012345678901x.xn--nxa" + }, + { + "comment": "Domain excluding TLD longer than 253 code points", + "input": "01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.0123456789012345678901234567890123456789012345678.x", + "output": "01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.0123456789012345678901234567890123456789012345678.x" + }, + { + "input": "01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.0123456789012345678901234567890123456789012345678.xn--nxa", + "output": "01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.0123456789012345678901234567890123456789012345678.xn--nxa" + }, + { + "input": "01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.0123456789012345678901234567890123456789012345678.β", + "output": "01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.0123456789012345678901234567890123456789012345678.xn--nxa" + } +] diff --git a/tests/wpt/web-platform-tests/url/toascii.window.js b/tests/wpt/web-platform-tests/url/toascii.window.js new file mode 100644 index 00000000000..b49ef20b771 --- /dev/null +++ b/tests/wpt/web-platform-tests/url/toascii.window.js @@ -0,0 +1,62 @@ +async_test(t => { + const request = new XMLHttpRequest() + request.open("GET", "toascii.json") + request.send() + request.responseType = "json" + request.onload = t.step_func_done(() => { + runTests(request.response) + }) +}, "Loading data…") + +function makeURL(type, input) { + input = "https://" + input + "/x" + if(type === "url") { + return new URL(input) + } else { + const url = document.createElement(type) + url.href = input + return url + } +} + +function runTests(tests) { + for(var i = 0, l = tests.length; i < l; i++) { + let hostTest = tests[i] + if (typeof hostTest === "string") { + continue // skip comments + } + const typeName = { "url": "URL", "a": "
        ", "area": "" } + ;["url", "a", "area"].forEach((type) => { + test(() => { + if(hostTest.output !== null) { + const url = makeURL("url", hostTest.input) + assert_equals(url.host, hostTest.output) + assert_equals(url.hostname, hostTest.output) + assert_equals(url.pathname, "/x") + assert_equals(url.href, "https://" + hostTest.output + "/x") + } else { + if(type === "url") { + assert_throws(new TypeError, () => makeURL("url", hostTest.input)) + } else { + const url = makeURL(type, hostTest.input) + assert_equals(url.host, "") + assert_equals(url.hostname, "") + assert_equals(url.pathname, "") + assert_equals(url.href, "https://" + hostTest.input + "/x") + } + } + }, hostTest.input + " (using " + typeName[type] + ")") + ;["host", "hostname"].forEach((val) => { + test(() => { + const url = makeURL(type, "x") + url[val] = hostTest.input + if(hostTest.output !== null) { + assert_equals(url[val], hostTest.output) + } else { + assert_equals(url[val], "x") + } + }, hostTest.input + " (using " + typeName[type] + "." + val + ")") + }) + }) + } +} diff --git a/tests/wpt/web-platform-tests/url/urlsearchparams-constructor.html b/tests/wpt/web-platform-tests/url/urlsearchparams-constructor.html index 7be244087aa..1e214e04266 100644 --- a/tests/wpt/web-platform-tests/url/urlsearchparams-constructor.html +++ b/tests/wpt/web-platform-tests/url/urlsearchparams-constructor.html @@ -79,6 +79,17 @@ test(function() { assert_equals(params.get('a b'), 'c'); }, 'Parse +'); +test(function() { + const testValue = '+15555555555'; + const params = new URLSearchParams(); + params.set('query', testValue); + var newParams = new URLSearchParams(params.toString()); + + assert_equals(params.toString(), 'query=%2B15555555555'); + assert_equals(params.get('query'), testValue); + assert_equals(newParams.get('query'), testValue); +}, 'Parse encoded +'); + test(function() { var params = new URLSearchParams('a=b c'); assert_equals(params.get('a'), 'b c'); @@ -148,7 +159,8 @@ test(function() { [ { "input": {"+": "%C2"}, "output": [["+", "%C2"]], "name": "object with +" }, { "input": {c: "x", a: "?"}, "output": [["c", "x"], ["a", "?"]], "name": "object with two keys" }, - { "input": [["c", "x"], ["a", "?"]], "output": [["c", "x"], ["a", "?"]], "name": "array with two keys" } + { "input": [["c", "x"], ["a", "?"]], "output": [["c", "x"], ["a", "?"]], "name": "array with two keys" }, + { "input": {"a\0b": "42", "c\uD83D": "23", "d\u1234": "foo"}, "output": [["a\0b", "42"], ["c\uFFFD", "23"], ["d\u1234", "foo"]], "name": "object with NULL, non-ASCII, and surrogate keys" } ].forEach((val) => { test(() => { let params = new URLSearchParams(val.input), diff --git a/tests/wpt/web-platform-tests/url/urltestdata.json b/tests/wpt/web-platform-tests/url/urltestdata.json index 47e86181617..974b4084931 100644 --- a/tests/wpt/web-platform-tests/url/urltestdata.json +++ b/tests/wpt/web-platform-tests/url/urltestdata.json @@ -3559,6 +3559,22 @@ "search": "", "hash": "" }, + "Leading and trailing C0 control or space", + { + "input": "\u0000\u001b\u0004\u0012 http://example.com/\u001f \u000d ", + "base": "about:blank", + "href": "http://example.com/", + "origin": "http://example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, "Ideographic full stop (full-width period for Chinese, etc.) should be treated as a dot. U+3002 is mapped to U+002E (dot)", { "input": "http://www.foo。bar.com", @@ -3656,7 +3672,7 @@ "input": "http://你好你好", "base": "http://other.com/", "href": "http://xn--6qqa088eba/", - "origin": "http://你好你好", + "origin": "http://xn--6qqa088eba", "protocol": "http:", "username": "", "password": "", @@ -3671,7 +3687,7 @@ "input": "https://faß.ExAmPlE/", "base": "about:blank", "href": "https://xn--fa-hia.example/", - "origin": "https://faß.example", + "origin": "https://xn--fa-hia.example", "protocol": "https:", "username": "", "password": "", @@ -3686,6 +3702,7 @@ "input": "sc://faß.ExAmPlE/", "base": "about:blank", "href": "sc://fa%C3%9F.ExAmPlE/", + "origin": "null", "protocol": "sc:", "username": "", "password": "", @@ -3782,6 +3799,52 @@ "search": "", "hash": "" }, + "Domains with empty labels", + { + "input": "http://./", + "base": "about:blank", + "href": "http://./", + "origin": "http://.", + "protocol": "http:", + "username": "", + "password": "", + "host": ".", + "hostname": ".", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http://../", + "base": "about:blank", + "href": "http://../", + "origin": "http://..", + "protocol": "http:", + "username": "", + "password": "", + "host": "..", + "hostname": "..", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http://0..0x300/", + "base": "about:blank", + "href": "http://0..0x300/", + "origin": "http://0..0x300", + "protocol": "http:", + "username": "", + "password": "", + "host": "0..0x300", + "hostname": "0..0x300", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, "Broken IPv6", { "input": "http://[www.google.com]/", @@ -4548,7 +4611,7 @@ "input": "ftp://%e2%98%83", "base": "about:blank", "href": "ftp://xn--n3h/", - "origin": "ftp://☃", + "origin": "ftp://xn--n3h", "protocol": "ftp:", "username": "", "password": "", @@ -4563,7 +4626,7 @@ "input": "https://%e2%98%83", "base": "about:blank", "href": "https://xn--n3h/", - "origin": "https://☃", + "origin": "https://xn--n3h", "protocol": "https:", "username": "", "password": "", @@ -4910,6 +4973,17 @@ "search": "", "hash": "" }, + "More IPv4 parsing (via https://github.com/jsdom/whatwg-url/issues/92)", + { + "input": "https://0x100000000/test", + "base": "about:blank", + "failure": true + }, + { + "input": "https://256.0.0.1/test", + "base": "about:blank", + "failure": true + }, "# file URLs containing percent-encoded Windows drive letters (shouldn't work)", { "input": "file:///C%3A/", @@ -5377,6 +5451,119 @@ "search": "?chai", "hash": "" }, + "# Windows drive letter handling with the 'file:' base URL", + { + "input": "C|", + "base": "file://host/dir/file", + "href": "file:///C:", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/C:", + "search": "", + "hash": "" + }, + { + "input": "C|#", + "base": "file://host/dir/file", + "href": "file:///C:#", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/C:", + "search": "", + "hash": "" + }, + { + "input": "C|?", + "base": "file://host/dir/file", + "href": "file:///C:?", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/C:", + "search": "", + "hash": "" + }, + { + "input": "C|/", + "base": "file://host/dir/file", + "href": "file:///C:/", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/C:/", + "search": "", + "hash": "" + }, + { + "input": "C|\n/", + "base": "file://host/dir/file", + "href": "file:///C:/", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/C:/", + "search": "", + "hash": "" + }, + { + "input": "C|\\", + "base": "file://host/dir/file", + "href": "file:///C:/", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/C:/", + "search": "", + "hash": "" + }, + { + "input": "C", + "base": "file://host/dir/file", + "href": "file://host/dir/C", + "protocol": "file:", + "username": "", + "password": "", + "host": "host", + "hostname": "host", + "port": "", + "pathname": "/dir/C", + "search": "", + "hash": "" + }, + { + "input": "C|a", + "base": "file://host/dir/file", + "href": "file://host/dir/C|a", + "protocol": "file:", + "username": "", + "password": "", + "host": "host", + "hostname": "host", + "port": "", + "pathname": "/dir/C|a", + "search": "", + "hash": "" + }, "# Windows drive letter quirk with not empty host", { "input": "file://example.net/C:/", @@ -5989,5 +6176,225 @@ "pathname": "d3958f5c-0777-0845-9dcf-2cb28783acaf", "search": "", "hash": "" + }, + "Invalid IPv4 radix digits", + { + "input": "http://0177.0.0.0189", + "base": "about:blank", + "href": "http://0177.0.0.0189/", + "protocol": "http:", + "username": "", + "password": "", + "host": "0177.0.0.0189", + "hostname": "0177.0.0.0189", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http://0x7f.0.0.0x7g", + "base": "about:blank", + "href": "http://0x7f.0.0.0x7g/", + "protocol": "http:", + "username": "", + "password": "", + "host": "0x7f.0.0.0x7g", + "hostname": "0x7f.0.0.0x7g", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http://0X7F.0.0.0X7G", + "base": "about:blank", + "href": "http://0x7f.0.0.0x7g/", + "protocol": "http:", + "username": "", + "password": "", + "host": "0x7f.0.0.0x7g", + "hostname": "0x7f.0.0.0x7g", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + "Invalid IPv4 portion of IPv6 address", + { + "input": "http://[::127.0.0.0.1]", + "base": "about:blank", + "failure": true + }, + "Uncompressed IPv6 addresses with 0", + { + "input": "http://[0:1:0:1:0:1:0:1]", + "base": "about:blank", + "href": "http://[0:1:0:1:0:1:0:1]/", + "protocol": "http:", + "username": "", + "password": "", + "host": "[0:1:0:1:0:1:0:1]", + "hostname": "[0:1:0:1:0:1:0:1]", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http://[1:0:1:0:1:0:1:0]", + "base": "about:blank", + "href": "http://[1:0:1:0:1:0:1:0]/", + "protocol": "http:", + "username": "", + "password": "", + "host": "[1:0:1:0:1:0:1:0]", + "hostname": "[1:0:1:0:1:0:1:0]", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + "Percent-encoded query and fragment", + { + "input": "http://example.org/test?\u0022", + "base": "about:blank", + "href": "http://example.org/test?%22", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/test", + "search": "?%22", + "hash": "" + }, + { + "input": "http://example.org/test?\u0023", + "base": "about:blank", + "href": "http://example.org/test?#", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/test", + "search": "", + "hash": "" + }, + { + "input": "http://example.org/test?\u003C", + "base": "about:blank", + "href": "http://example.org/test?%3C", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/test", + "search": "?%3C", + "hash": "" + }, + { + "input": "http://example.org/test?\u003E", + "base": "about:blank", + "href": "http://example.org/test?%3E", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/test", + "search": "?%3E", + "hash": "" + }, + { + "input": "http://example.org/test?\u2323", + "base": "about:blank", + "href": "http://example.org/test?%E2%8C%A3", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/test", + "search": "?%E2%8C%A3", + "hash": "" + }, + { + "input": "http://example.org/test?%23%23", + "base": "about:blank", + "href": "http://example.org/test?%23%23", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/test", + "search": "?%23%23", + "hash": "" + }, + { + "input": "http://example.org/test?%GH", + "base": "about:blank", + "href": "http://example.org/test?%GH", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/test", + "search": "?%GH", + "hash": "" + }, + { + "input": "http://example.org/test?a#%EF", + "base": "about:blank", + "href": "http://example.org/test?a#%EF", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/test", + "search": "?a", + "hash": "#%EF" + }, + { + "input": "http://example.org/test?a#%GH", + "base": "about:blank", + "href": "http://example.org/test?a#%GH", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/test", + "search": "?a", + "hash": "#%GH" + }, + "Null code point in fragment", + { + "input": "http://example.org/test?a#b\u0000c", + "base": "about:blank", + "href": "http://example.org/test?a#bc", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/test", + "search": "?a", + "hash": "#bc" } ] diff --git a/tests/wpt/web-platform-tests/user-timing/measure.html b/tests/wpt/web-platform-tests/user-timing/measure.html index 4356c0abb20..4175dbb49da 100644 --- a/tests/wpt/web-platform-tests/user-timing/measure.html +++ b/tests/wpt/web-platform-tests/user-timing/measure.html @@ -8,6 +8,7 @@ + + + + + + + + +

        Viewport: Dimensions with custom scrollbars

        +

        + Test Description: Tests the viewport dimensions correctly account for + custom scrollbars +

        +

        THIS IS A MANUAL TEST

        +

        + +

        + Skip this test if your browser doesn't support custom scrollbars or + browser-zoom (Ctrl+/-). +

        +

        +

        + +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/viewport/viewport-dimensions-scrollbars-manual.html b/tests/wpt/web-platform-tests/viewport/viewport-dimensions-scrollbars-manual.html new file mode 100644 index 00000000000..078efc75fbb --- /dev/null +++ b/tests/wpt/web-platform-tests/viewport/viewport-dimensions-scrollbars-manual.html @@ -0,0 +1,132 @@ + + + + Viewport: Dimensions with scrollbars + + + + + + + + + +

        Viewport: Dimensions with scrollbars

        +

        + Test Description: Tests the viewport dimensions correctly account for + scrollbars +

        +

        THIS IS A MANUAL TEST

        +

        + +

        + If your browser doesn't support browser-zoom (Ctrl+/-, e.g. Mobile + Browsers) please skip. +

        +

        +

        + +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/viewport/viewport-no-resize-event-on-overflow-recalc.html b/tests/wpt/web-platform-tests/viewport/viewport-no-resize-event-on-overflow-recalc.html new file mode 100644 index 00000000000..eb5eecadd90 --- /dev/null +++ b/tests/wpt/web-platform-tests/viewport/viewport-no-resize-event-on-overflow-recalc.html @@ -0,0 +1,49 @@ + + + + Viewport: No Resize Event Fired on Overflow Recalc + + + + + + + + +

        No Resize Event Fired on Overflow Recalc

        +

        + Test Description: This test ensures we don't fire spurrious resize + events when overflow is recalculated. +

        + +
        + + + diff --git a/tests/wpt/web-platform-tests/viewport/viewport-offset-manual.html b/tests/wpt/web-platform-tests/viewport/viewport-offset-manual.html new file mode 100644 index 00000000000..67d41d6975b --- /dev/null +++ b/tests/wpt/web-platform-tests/viewport/viewport-offset-manual.html @@ -0,0 +1,151 @@ + + + + Viewport: Offset + + + + + + + + + +

        Viewport: Offset

        +

        + Test Description: Tests the offset scrolling properties on an + unscrollable page. +

        +

        THIS IS A MANUAL TEST

        +

        + +

        +

        Instruction

        +

        + +
        +
        + +
        + + + diff --git a/tests/wpt/web-platform-tests/viewport/viewport-page-manual.html b/tests/wpt/web-platform-tests/viewport/viewport-page-manual.html new file mode 100644 index 00000000000..00f8cca094d --- /dev/null +++ b/tests/wpt/web-platform-tests/viewport/viewport-page-manual.html @@ -0,0 +1,108 @@ + + + + Viewport: Page + + + + + + + + + +

        Viewport: Page

        +

        + Test Description: Tests the page scrolling properties. +

        +

        THIS IS A MANUAL TEST

        +

        + +

        +

        Instruction

        +

        + +
        + + + diff --git a/tests/wpt/web-platform-tests/viewport/viewport-read-size-causes-layout.html b/tests/wpt/web-platform-tests/viewport/viewport-read-size-causes-layout.html new file mode 100644 index 00000000000..f28231429cf --- /dev/null +++ b/tests/wpt/web-platform-tests/viewport/viewport-read-size-causes-layout.html @@ -0,0 +1,35 @@ + + + + + + + +

        This test checks that requesting the viewport size causes any pending layout to occur.

        + diff --git a/tests/wpt/web-platform-tests/viewport/viewport-read-size-in-iframe-causes-layout.html b/tests/wpt/web-platform-tests/viewport/viewport-read-size-in-iframe-causes-layout.html new file mode 100644 index 00000000000..2f4b7341329 --- /dev/null +++ b/tests/wpt/web-platform-tests/viewport/viewport-read-size-in-iframe-causes-layout.html @@ -0,0 +1,36 @@ + + + + + + +

        This test checks that requesting the viewport size in an iframe causes any pending layout to occur.

        + + diff --git a/tests/wpt/web-platform-tests/viewport/viewport-resize-event-manual.html b/tests/wpt/web-platform-tests/viewport/viewport-resize-event-manual.html new file mode 100644 index 00000000000..ba02e93e29a --- /dev/null +++ b/tests/wpt/web-platform-tests/viewport/viewport-resize-event-manual.html @@ -0,0 +1,92 @@ + + + + Viewport: Window Resize Fires Event + + + + + + + + +

        Viewport: Window Resize Fires Event

        +

        + Test Description: This test checks that a resize event is fired against + the window.view object when the browser window is resized. +

        +

        THIS IS A MANUAL TEST

        +

        + +

        +

        + +
        + + + diff --git a/tests/wpt/web-platform-tests/viewport/viewport-resize-event-on-load-overflowing-page.html b/tests/wpt/web-platform-tests/viewport/viewport-resize-event-on-load-overflowing-page.html new file mode 100644 index 00000000000..4f08b66c6fc --- /dev/null +++ b/tests/wpt/web-platform-tests/viewport/viewport-resize-event-on-load-overflowing-page.html @@ -0,0 +1,60 @@ + + + + Viewport: Resize Event On Load Overflowing Page + + + + + + + + + +

        Viewport: Resize Event On Load Overflowing Page

        +

        + Test Description: This test ensures that we fire a resize event against + window.view if the page has overflow (since this creates a scrollbar + and thus changes the viewport size). +

        +
        + + + diff --git a/tests/wpt/web-platform-tests/viewport/viewport-scale-iframe-manual.html b/tests/wpt/web-platform-tests/viewport/viewport-scale-iframe-manual.html new file mode 100644 index 00000000000..29f12906edf --- /dev/null +++ b/tests/wpt/web-platform-tests/viewport/viewport-scale-iframe-manual.html @@ -0,0 +1,77 @@ + + + + Viewport: Scale iframe + + + + + + + + + +

        Viewport: Scale iframe

        +

        Test Description: Tests the view.scale property inside an iframe

        +

        THIS IS A MANUAL TEST

        +

        + +

        +

        + +

        + +

        +
        + + + diff --git a/tests/wpt/web-platform-tests/viewport/viewport-scale-manual.html b/tests/wpt/web-platform-tests/viewport/viewport-scale-manual.html new file mode 100644 index 00000000000..6aaffcc03a3 --- /dev/null +++ b/tests/wpt/web-platform-tests/viewport/viewport-scale-manual.html @@ -0,0 +1,81 @@ + + + + Viewport: Scale + + + + + + + + +

        Viewport: Scale

        +

        Test Description: Tests the view.scale property

        +

        THIS IS A MANUAL TEST

        +

        + +

        +

        + +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/viewport/viewport-scroll-event-manual.html b/tests/wpt/web-platform-tests/viewport/viewport-scroll-event-manual.html new file mode 100644 index 00000000000..3e286a6acff --- /dev/null +++ b/tests/wpt/web-platform-tests/viewport/viewport-scroll-event-manual.html @@ -0,0 +1,182 @@ + + + + Viewport: Scroll Event + + + + + + + + + +

        Viewport: Scroll Event

        +

        + Test Description: This test checks that a scroll event is fired against + the window.view object when the viewport is scrolled. +

        +

        THIS IS A MANUAL TEST

        +

        + +

        +

        Instruction

        +

        + +
        + + + diff --git a/tests/wpt/web-platform-tests/viewport/viewport-scrollbars-cause-resize.html b/tests/wpt/web-platform-tests/viewport/viewport-scrollbars-cause-resize.html new file mode 100644 index 00000000000..ec3e9ee8df2 --- /dev/null +++ b/tests/wpt/web-platform-tests/viewport/viewport-scrollbars-cause-resize.html @@ -0,0 +1,66 @@ + + + + Viewport: Scrollbars Cause Resize + + + + + + + +

        Viewport: Scrollbars Cause Resize

        +

        + Test Description: This test checks that the appearance of classic + scrollbars will cause a resize event to be fired at window.view. +

        + +
        + + diff --git a/tests/wpt/web-platform-tests/viewport/viewport-type.html b/tests/wpt/web-platform-tests/viewport/viewport-type.html new file mode 100644 index 00000000000..77e43547e1a --- /dev/null +++ b/tests/wpt/web-platform-tests/viewport/viewport-type.html @@ -0,0 +1,31 @@ + + + + Viewport: window.view type + + + + + + +

        Viewport: window.view type

        +

        Test Description: This test checks that window.view is an object of type VisualViewport.

        + +
        +

        window.view is of type: .

        +
        +
        + + diff --git a/tests/wpt/web-platform-tests/viewport/viewport-unscaled-scale-iframe.html b/tests/wpt/web-platform-tests/viewport/viewport-unscaled-scale-iframe.html new file mode 100644 index 00000000000..72835d725e7 --- /dev/null +++ b/tests/wpt/web-platform-tests/viewport/viewport-unscaled-scale-iframe.html @@ -0,0 +1,33 @@ + + + + Viewport: Unscaled scale iframe + + + + + + + + +

        Viewport: Unscaled scale iframe

        +

        Test Description: This test checks that the default value for scale inside an iframe is 1.

        + +
        +

        iframe's window.view.scale is .

        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/viewport/viewport-unscaled-scale.html b/tests/wpt/web-platform-tests/viewport/viewport-unscaled-scale.html new file mode 100644 index 00000000000..41e7928c20f --- /dev/null +++ b/tests/wpt/web-platform-tests/viewport/viewport-unscaled-scale.html @@ -0,0 +1,26 @@ + + + + Viewport: Unscaled scale + + + + + + + +

        Viewport: Unscaled scale

        +

        Test Description: This test checks that the default value for scale is 1.

        +
        +

        window.view.scale is .

        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/viewport/viewport-unscaled-scroll-iframe.html b/tests/wpt/web-platform-tests/viewport/viewport-unscaled-scroll-iframe.html new file mode 100644 index 00000000000..c7f7b2c99b0 --- /dev/null +++ b/tests/wpt/web-platform-tests/viewport/viewport-unscaled-scroll-iframe.html @@ -0,0 +1,54 @@ + + + + Viewport: Scroll in iframe - no page scale + + + + + + + + +

        Viewport: Scroll in iframe - no page scale

        +

        Test Description: This test checks that window.view returns correct offset and scroll values without any pinch-zoom page scale applied.

        + +
        +

        frames[0].window.view's offsetLeft and offsetTop is ().

        +

        frames[0].window.view's pageLeft and pageTop is ().

        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/viewport/viewport-unscaled-scroll.html b/tests/wpt/web-platform-tests/viewport/viewport-unscaled-scroll.html new file mode 100644 index 00000000000..359713df7a8 --- /dev/null +++ b/tests/wpt/web-platform-tests/viewport/viewport-unscaled-scroll.html @@ -0,0 +1,45 @@ + + + + Viewport: Scroll - no page scale + + + + + + + +

        Viewport: Scroll - no page scale

        +

        Test Description: This test checks that window.view returns correct offset and scroll values without any pinch-zoom page scale applied.

        +
        +

        window.view's offsetLeft and offsetTop is ().

        +

        window.view's pageLeft and pageTop is ().

        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/viewport/viewport-unscaled-size-iframe.html b/tests/wpt/web-platform-tests/viewport/viewport-unscaled-size-iframe.html new file mode 100644 index 00000000000..de7a591a195 --- /dev/null +++ b/tests/wpt/web-platform-tests/viewport/viewport-unscaled-size-iframe.html @@ -0,0 +1,53 @@ + + + + Viewport: Size in iframe - no page scale + + + + + + + + +

        Viewport: Size in iframe - no page scale

        +

        Test Description: This test checks that window.view returns correct sizes without any pinch-zoom page scale applied but with scrollbars.

        + +
        +

        frames[0].window.view width and height is ().

        +

        frames[0].window.view width and height when scrollbars are present is ().

        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/viewport/viewport-unscaled-size.html b/tests/wpt/web-platform-tests/viewport/viewport-unscaled-size.html new file mode 100644 index 00000000000..4100995c06d --- /dev/null +++ b/tests/wpt/web-platform-tests/viewport/viewport-unscaled-size.html @@ -0,0 +1,51 @@ + + + + Viewport: Size unscaled + + + + + + + + +

        Viewport: Size unscaled

        +

        Test Description: This test checks that window.view returns correct sizes without any pinch-zoom page scale applied.

        +
        +

        window.view width and height is ().

        +

        window.view width and height when scrollbars are present is ().

        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/viewport/viewport_support.js b/tests/wpt/web-platform-tests/viewport/viewport_support.js new file mode 100644 index 00000000000..5cea91a0155 --- /dev/null +++ b/tests/wpt/web-platform-tests/viewport/viewport_support.js @@ -0,0 +1,153 @@ +// If scrollbars affect layout (i.e. what the CSS Overflow spec calls "classic +// scrollbars", as opposed to overlay scrollbars), return the scrollbar +// thickness in CSS pixels. Returns 0 otherwise. +function calculateScrollbarThickness() { + var container = document.createElement("div"); + container.style.width = "100px"; + container.style.height = "100px"; + container.style.position = "absolute"; + container.style.visibility = "hidden"; + container.style.overflow = "auto"; + + document.body.appendChild(container); + + var widthBefore = container.clientWidth; + var longContent = document.createElement("div"); + longContent.style.height = "1000px"; + container.appendChild(longContent); + + var widthAfter = container.clientWidth; + + container.remove(); + + return widthBefore - widthAfter; +} + +// Puts up a widget on screen instructing the user to pinch-zoom in to the +// given scale. The widget is sized such that the given scale is achieved. The +// widget is placed at (x, y) on the page. A button on the widget is used by +// the user to let the widget know that the user has finished. If a callback is +// provided, it will be called when the user dismisses the widget. +function showPinchWidget(scale, x, y, callback) { + var border = 10; + var width = window.innerWidth / scale - border; + var height = window.innerHeight / scale - border; + + var box = document.createElement("div"); + box.style.width = width + "px"; + box.style.height = height + "px"; + + // Adjust the x/y coordinates by the border width. We want the box to + // appear in a place such that if the user gets the window edges exactly on + // the half-point of the border they end up at x/y + box.style.left = x - border/2 + "px"; + box.style.top = y - border/2 + "px"; + + box.style.position = "absolute"; + box.style.backgroundColor = "coral"; + box.style.border = border + "px solid blue"; + box.style.borderBottom = "0"; + box.style.overflow = "auto"; + + var oldDocumentOverflow = document.documentElement.style.overflow; + + var instructions = document.createElement("p"); + instructions.innerText = + "Pinch-zoom and align this box so that the left, right, and top " + + "window edges are over the border on each side. When done, click the " + + "'DONE' button above"; + instructions.style.textAlign = "center"; + instructions.style.fontSize = "medium"; + + var button = document.createElement("button"); + button.innerText = "DONE"; + button.style.width = "50%"; + button.style.height = "20%"; + button.style.fontSize = "medium"; + button.style.marginLeft = "25%"; + button.addEventListener("click", function() { + box.remove(); + document.documentElement.style.overflow = oldDocumentOverflow; + if (callback) + callback(); + }); + + box.appendChild(button); + box.appendChild(instructions); + + document.documentElement.style.overflow = "hidden"; + + document.body.appendChild(box); +} + +// Ends a manual test. Must be called before any async tests are started. +function skipManualTest() { + test(function() { assert_true(false); }, "Manual Test Skipped"); + done(); +} + +var stepInstructions = []; +var testNames = []; +var stepFunctions = []; +var steps; +var curStep = 0; + +// Adds a manual test step to the test. A test will add a series of steps, +// along with instructions. Once all the tests steps are added, the test can +// be run by continually running the nextStep() function. All manual test steps +// must be added before calling nextStep. +// +// |func| A function to be executed at the given step. This function can include +// testharness assertions if |testName| is provided. If this is the last +// step, the |done()| function (used for manual testharness.js tests) +// will be called after |func| is executed. +// |testName| If provided, the |func| will be wrapped in a testharness.js +// async_test with this name. If null, |func| will be executed as a +// free function. +// |instructions| The text to display to the user. Note, these are shown after +// step is executed so these should be instructions to setup the +// checks in the next step. +function addManualTestStep(func, testName, instructions) { + stepFunctions.push(func); + testNames.push(testName); + stepInstructions.push(instructions); +} + +// Runs the next step of the test. This must be called only after all test steps +// have been added using |addManualTestStep|. +// +// |callbackFunc| If provided, will be called with a single argument being the +// instruction string for the current step. Use this to update +// any necessary UI. +function nextStep(callbackFunc) { + if (curStep == 0) + _startManualTest(); + + if (typeof(callbackFunc) === 'function') + callbackFunc(stepInstructions[curStep]); + + steps[curStep](); + curStep++; +} + +function _startManualTest() { + steps = []; + for (let i = 0; i < stepFunctions.length; ++i) { + var stepFunc = stepFunctions[i]; + var testName = testNames[i]; + if (testName) { + steps.push(async_test(testName).step_func(function() { + stepFunctions[i](); + this.done(); + if (i == stepFunctions.length - 1) + done(); + })); + } else { + steps.push(function() { + stepFunctions[i](); + if (i == stepFunctions.length - 1) + done(); + }); + } + } +} diff --git a/tests/wpt/web-platform-tests/wai-aria/OWNERS b/tests/wpt/web-platform-tests/wai-aria/OWNERS index 35ae0f6c00b..2a4c47ed4df 100644 --- a/tests/wpt/web-platform-tests/wai-aria/OWNERS +++ b/tests/wpt/web-platform-tests/wai-aria/OWNERS @@ -1 +1,2 @@ @halindrome +@joanmarie diff --git a/tests/wpt/web-platform-tests/wai-aria/alertdialog_modal_false-manual.html b/tests/wpt/web-platform-tests/wai-aria/alertdialog_modal_false-manual.html new file mode 100644 index 00000000000..b4be8c6e5f6 --- /dev/null +++ b/tests/wpt/web-platform-tests/wai-aria/alertdialog_modal_false-manual.html @@ -0,0 +1,123 @@ + + + + alertdialog modal false + + + + + + + + +

        This test examines the ARIA properties for alertdialog modal false.

        +

        Modal Dialog Box Test

        +
        + You have an error. + +
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/wai-aria/alertdialog_modal_true-manual.html b/tests/wpt/web-platform-tests/wai-aria/alertdialog_modal_true-manual.html new file mode 100644 index 00000000000..07f33ca0e7a --- /dev/null +++ b/tests/wpt/web-platform-tests/wai-aria/alertdialog_modal_true-manual.html @@ -0,0 +1,123 @@ + + + + alertdialog modal true + + + + + + + + +

        This test examines the ARIA properties for alertdialog modal true.

        +

        Modal Dialog Box Test

        +
        + You have an error. + +
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/wai-aria/application_activedescendant-manual.html b/tests/wpt/web-platform-tests/wai-aria/application_activedescendant-manual.html new file mode 100644 index 00000000000..1a0a616fc0f --- /dev/null +++ b/tests/wpt/web-platform-tests/wai-aria/application_activedescendant-manual.html @@ -0,0 +1,209 @@ + + + + application activedescendant + + + + + + + + +

        This test examines the ARIA properties for application activedescendant.

        +
        +
        Hello world
        +
        + then role:application, aria-activedescendant: bob + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/wai-aria/application_activedescendant_value_changes-manual.html b/tests/wpt/web-platform-tests/wai-aria/application_activedescendant_value_changes-manual.html new file mode 100644 index 00000000000..319f0ed8051 --- /dev/null +++ b/tests/wpt/web-platform-tests/wai-aria/application_activedescendant_value_changes-manual.html @@ -0,0 +1,266 @@ + + + + application activedescendant value changes + + + + + + + + +

        This test examines the ARIA properties for application activedescendant value changes.

        +
        +
        Hello world
        +
        + then role:application, aria-activedescendant: bob generates a state change event + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/wai-aria/aria-current_not_declared-manual.html b/tests/wpt/web-platform-tests/wai-aria/aria-current_not_declared-manual.html new file mode 100644 index 00000000000..2698002c19f --- /dev/null +++ b/tests/wpt/web-platform-tests/wai-aria/aria-current_not_declared-manual.html @@ -0,0 +1,117 @@ + + + + aria-current not declared + + + + + + + + +

        This test examines the ARIA properties for aria-current not declared.

        +
          +
        • 2
        • +
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/wai-aria/aria-current_with_value_changes-manual.html b/tests/wpt/web-platform-tests/wai-aria/aria-current_with_value_changes-manual.html new file mode 100644 index 00000000000..5ae92b517fb --- /dev/null +++ b/tests/wpt/web-platform-tests/wai-aria/aria-current_with_value_changes-manual.html @@ -0,0 +1,111 @@ + + + + aria-current with value changes + + + + + + + + +

        This test examines the ARIA properties for aria-current with value changes.

        +
          +
        • 1
        • +
        • 2
        • +
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/wai-aria/aria-current_with_value_date-manual.html b/tests/wpt/web-platform-tests/wai-aria/aria-current_with_value_date-manual.html new file mode 100644 index 00000000000..631c542b47d --- /dev/null +++ b/tests/wpt/web-platform-tests/wai-aria/aria-current_with_value_date-manual.html @@ -0,0 +1,119 @@ + + + + aria-current with value date + + + + + + + + +

        This test examines the ARIA properties for aria-current with value date.

        +
        + + + +
        1
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/wai-aria/aria-current_with_value_location-manual.html b/tests/wpt/web-platform-tests/wai-aria/aria-current_with_value_location-manual.html new file mode 100644 index 00000000000..eaadd0721bd --- /dev/null +++ b/tests/wpt/web-platform-tests/wai-aria/aria-current_with_value_location-manual.html @@ -0,0 +1,115 @@ + + + + aria-current with value location + + + + + + + + +

        This test examines the ARIA properties for aria-current with value location.

        + + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/wai-aria/aria-current_with_value_page-manual.html b/tests/wpt/web-platform-tests/wai-aria/aria-current_with_value_page-manual.html new file mode 100644 index 00000000000..c3e17b066ea --- /dev/null +++ b/tests/wpt/web-platform-tests/wai-aria/aria-current_with_value_page-manual.html @@ -0,0 +1,115 @@ + + + + aria-current with value page + + + + + + + + +

        This test examines the ARIA properties for aria-current with value page.

        +
        1
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/wai-aria/aria-current_with_value_step-manual.html b/tests/wpt/web-platform-tests/wai-aria/aria-current_with_value_step-manual.html new file mode 100644 index 00000000000..a6c4238029e --- /dev/null +++ b/tests/wpt/web-platform-tests/wai-aria/aria-current_with_value_step-manual.html @@ -0,0 +1,115 @@ + + + + aria-current with value step + + + + + + + + +

        This test examines the ARIA properties for aria-current with value step.

        +
        1
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/wai-aria/aria-current_with_value_time-manual.html b/tests/wpt/web-platform-tests/wai-aria/aria-current_with_value_time-manual.html new file mode 100644 index 00000000000..9e9583e736c --- /dev/null +++ b/tests/wpt/web-platform-tests/wai-aria/aria-current_with_value_time-manual.html @@ -0,0 +1,119 @@ + + + + aria-current with value time + + + + + + + + +

        This test examines the ARIA properties for aria-current with value time.

        + + + + +
        1
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/wai-aria/aria-current_with_value_true-manual.html b/tests/wpt/web-platform-tests/wai-aria/aria-current_with_value_true-manual.html new file mode 100644 index 00000000000..3438a757a0d --- /dev/null +++ b/tests/wpt/web-platform-tests/wai-aria/aria-current_with_value_true-manual.html @@ -0,0 +1,111 @@ + + + + aria-current with value true + + + + + + + + +

        This test examines the ARIA properties for aria-current with value true.

        +
          +
        • 1
        • +
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/wai-aria/aria-current_with_value_unspecified-manual.html b/tests/wpt/web-platform-tests/wai-aria/aria-current_with_value_unspecified-manual.html new file mode 100644 index 00000000000..8377d6d1a07 --- /dev/null +++ b/tests/wpt/web-platform-tests/wai-aria/aria-current_with_value_unspecified-manual.html @@ -0,0 +1,111 @@ + + + + aria-current with value unspecified + + + + + + + + +

        This test examines the ARIA properties for aria-current with value unspecified.

        +
          +
        • 1
        • +
        + +
        +
        +
        + + + diff --git a/tests/wpt/web-platform-tests/wai-aria/aria-details_pointing_to_details_element-manual.html b/tests/wpt/web-platform-tests/wai-aria/aria-details_pointing_to_details_element-manual.html new file mode 100644 index 00000000000..9c6318fc547 --- /dev/null +++ b/tests/wpt/web-platform-tests/wai-aria/aria-details_pointing_to_details_element-manual.html @@ -0,0 +1,100 @@ + + + + aria-details pointing to details element + + + + + + + + +

        This test examines the ARIA properties for aria-details pointing to details element.

        + +
        + More information at W3.org + + diff --git a/tests/wpt/web-platform-tests/wasm/wasm_serialization_tests.html b/tests/wpt/web-platform-tests/wasm/wasm_serialization_tests.html new file mode 100644 index 00000000000..49766c77052 --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/wasm_serialization_tests.html @@ -0,0 +1,8 @@ + + + + + + diff --git a/tests/wpt/web-platform-tests/wasm/wasm_serialization_tests.js b/tests/wpt/web-platform-tests/wasm/wasm_serialization_tests.js new file mode 100644 index 00000000000..3cc4166168b --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/wasm_serialization_tests.js @@ -0,0 +1,18 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +function TestInstantiateInWorker() { + return createWasmModule() + .then((mod) => { + var worker = new Worker("wasm_serialization_worker.js"); + return new Promise((resolve, reject) => { + worker.postMessage(mod); + worker.onmessage = function(event) { + resolve(event.data); + } + }); + }) + .then(data => assert_equals(data, 43)) + .catch(error => assert_unreached(error)); +} diff --git a/tests/wpt/web-platform-tests/wasm/wasm_serialization_worker.js b/tests/wpt/web-platform-tests/wasm/wasm_serialization_worker.js new file mode 100644 index 00000000000..3361ed73951 --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/wasm_serialization_worker.js @@ -0,0 +1,21 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +onmessage = function(e) { + var compiled_module = e.data; + var instance = new WebAssembly.Instance(compiled_module); + if (instance === undefined) { + postMessage("error!"); + return; + } + var entrypoint = instance.exports["increment"]; + + if (typeof entrypoint !== "function") { + postMessage("error!"); + return; + } + + var ret = entrypoint(42); + postMessage(ret); +} diff --git a/tests/wpt/web-platform-tests/wasm/wasm_service_worker_test.html b/tests/wpt/web-platform-tests/wasm/wasm_service_worker_test.html new file mode 100644 index 00000000000..9d4afb81766 --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/wasm_service_worker_test.html @@ -0,0 +1,20 @@ + +Service Worker: postMessage with wasm + + + + diff --git a/tests/wpt/web-platform-tests/web-animations/animation-model/animation-types/accumulation-per-property.html b/tests/wpt/web-platform-tests/web-animations/animation-model/animation-types/accumulation-per-property.html new file mode 100644 index 00000000000..c4439dd3c94 --- /dev/null +++ b/tests/wpt/web-platform-tests/web-animations/animation-model/animation-types/accumulation-per-property.html @@ -0,0 +1,58 @@ + + +Tests for animation type of accumulation + + + + + + + + +
        + 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 72a42e80946..acf80787a33 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 @@ -259,8 +259,7 @@ var gCSSProperties = { }, 'border-spacing': { // https://drafts.csswg.org/css-tables/#propdef-border-spacing - types: [ - ] + types: [ 'lengthPair' ] }, 'border-top-color': { // https://drafts.csswg.org/css-backgrounds-3/#border-top-color @@ -318,6 +317,10 @@ var gCSSProperties = { { type: 'discrete', options: [ [ 'top', 'bottom' ] ] } ] }, + 'caret-color': { + // https://drafts.csswg.org/css-ui/#propdef-caret-color + types: [ 'color' ] + }, 'clear': { // https://drafts.csswg.org/css-page-floats/#propdef-clear types: [ @@ -327,6 +330,11 @@ var gCSSProperties = { 'clip': { // https://drafts.fxtf.org/css-masking-1/#propdef-clip types: [ + 'rect', + { type: 'discrete', options: [ [ 'rect(10px, 10px, 10px, 10px)', + 'auto' ], + [ 'rect(10px, 10px, 10px, 10px)', + 'rect(10px, 10px, 10px, auto)'] ] } ] }, 'clip-path': { @@ -364,12 +372,15 @@ var gCSSProperties = { }, 'column-count': { // https://drafts.csswg.org/css-multicol/#propdef-column-count - types: [ + types: [ 'positiveInteger', + { type: 'discrete', options: [ [ 'auto', '10' ] ] } ] }, 'column-gap': { // https://drafts.csswg.org/css-multicol/#propdef-column-gap - types: [ 'length' ] + types: [ 'length', + { type: 'discrete', options: [ [ 'normal', '200px' ] ] } + ] }, 'column-rule-color': { // https://drafts.csswg.org/css-multicol/#propdef-column-rule-color @@ -1130,8 +1141,7 @@ var gCSSProperties = { }, 'perspective-origin': { // https://drafts.csswg.org/css-transforms-1/#propdef-perspective-origin - types: [ - ] + types: [ 'position' ] }, 'pointer-events': { // https://svgwg.org/svg2-draft/interact.html#PointerEventsProperty @@ -1225,8 +1235,7 @@ var gCSSProperties = { }, 'stroke-dasharray': { // https://svgwg.org/svg2-draft/painting.html#StrokeDasharrayProperty - types: [ - ] + types: [ 'dasharray' ] }, 'stroke-dashoffset': { // https://svgwg.org/svg2-draft/painting.html#StrokeDashoffsetProperty @@ -1250,13 +1259,11 @@ var gCSSProperties = { }, 'stroke-miterlimit': { // https://svgwg.org/svg2-draft/painting.html#StrokeMiterlimitProperty - types: [ - ] + types: [ 'positiveNumber' ] }, 'stroke-opacity': { // https://svgwg.org/svg2-draft/painting.html#StrokeOpacityProperty - types: [ - ] + types: [ 'opacity' ] }, 'stroke-width': { // https://svgwg.org/svg2-draft/painting.html#StrokeWidthProperty @@ -1435,8 +1442,7 @@ var gCSSProperties = { }, 'word-spacing': { // https://drafts.csswg.org/css-text-3/#propdef-word-spacing - types: [ - ] + types: [ 'lengthPercentageOrCalc' ] }, 'will-change': { // http://dev.w3.org/csswg/css-will-change/#propdef-will-change @@ -1520,4 +1526,13 @@ function propertyToIDL(property) { function (str) { return str.substr(1).toUpperCase(); }); } +function calcFromPercentage(idlName, percentageValue) { + var examElem = document.createElement('div'); + document.body.appendChild(examElem); + examElem.style[idlName] = percentageValue; + var calcValue = getComputedStyle(examElem)[idlName]; + document.body.removeChild(examElem); + + return calcValue; +} diff --git a/tests/wpt/web-platform-tests/web-animations/animation-model/animation-types/property-types.js b/tests/wpt/web-platform-tests/web-animations/animation-model/animation-types/property-types.js index 14c8f27c951..1fa1a2df7ec 100644 --- a/tests/wpt/web-platform-tests/web-animations/animation-model/animation-types/property-types.js +++ b/tests/wpt/web-platform-tests/web-animations/animation-model/animation-types/property-types.js @@ -50,7 +50,7 @@ const discreteType = { }); }, - testAddition: function(property, setup, options) { + testAdditionOrAccumulation: function(property, setup, options, composite) { options.forEach(function(keyframes) { var [ from, to ] = keyframes; test(function(t) { @@ -58,7 +58,7 @@ const discreteType = { var target = createTestElement(t, setup); target.animate({ [idlName]: [from, from] }, 1000); var animation = target.animate({ [idlName]: [to, to] }, - { duration: 1000, composite: 'add' }); + { duration: 1000, composite: composite }); testAnimationSamples(animation, idlName, [{ time: 0, expected: to.toLowerCase() }]); }, property + ': "' + to + '" onto "' + from + '"'); @@ -68,13 +68,20 @@ const discreteType = { var target = createTestElement(t, setup); target.animate({ [idlName]: [to, to] }, 1000); var animation = target.animate({ [idlName]: [from, from] }, - { duration: 1000, composite: 'add' }); + { duration: 1000, composite: composite }); testAnimationSamples(animation, idlName, [{ time: 0, expected: from.toLowerCase() }]); }, property + ': "' + from + '" onto "' + to + '"'); }); }, + testAddition: function(property, setup, options) { + this.testAdditionOrAccumulation(property, setup, options, 'add'); + }, + + testAccumulation: function(property, setup, options) { + this.testAdditionOrAccumulation(property, setup, options, 'accumulate'); + }, }; const lengthType = { @@ -85,9 +92,7 @@ const lengthType = { var animation = target.animate({ [idlName]: ['10px', '50px'] }, { duration: 1000, fill: 'both' }); testAnimationSamples(animation, idlName, - [{ time: 0, expected: '10px' }, - { time: 500, expected: '30px' }, - { time: 1000, expected: '50px' }]); + [{ time: 500, expected: '30px' }]); }, property + ' supports animating as a length'); test(function(t) { @@ -96,19 +101,17 @@ const lengthType = { var animation = target.animate({ [idlName]: ['1rem', '5rem'] }, { duration: 1000, fill: 'both' }); testAnimationSamples(animation, idlName, - [{ time: 0, expected: '10px' }, - { time: 500, expected: '30px' }, - { time: 1000, expected: '50px' }]); + [{ time: 500, expected: '30px' }]); }, property + ' supports animating as a length of rem'); }, - testAddition: function(property, setup) { + testAdditionOrAccumulation: function(property, setup, composite) { test(function(t) { var idlName = propertyToIDL(property); var target = createTestElement(t, setup); target.style[idlName] = '10px'; var animation = target.animate({ [idlName]: ['10px', '50px'] }, - { duration: 1000, composite: 'add' }); + { duration: 1000, composite: composite}); testAnimationSamples(animation, idlName, [{ time: 0, expected: '20px' }]); }, property + ': length'); @@ -117,11 +120,68 @@ const lengthType = { var target = createTestElement(t, setup); target.style[idlName] = '1rem'; var animation = target.animate({ [idlName]: ['1rem', '5rem'] }, - { duration: 1000, composite: 'add' }); + { duration: 1000, composite: composite }); testAnimationSamples(animation, idlName, [{ time: 0, expected: '20px' }]); }, property + ': length of rem'); }, + testAddition: function(property, setup) { + this.testAdditionOrAccumulation(property, setup, 'add'); + }, + + testAccumulation: function(property, setup) { + this.testAdditionOrAccumulation(property, setup, 'accumulate'); + }, +}; + +const lengthPairType = { + testInterpolation: function(property, setup) { + test(function(t) { + var idlName = propertyToIDL(property); + var target = createTestElement(t, setup); + var animation = target.animate({ [idlName]: ['10px 10px', '50px 50px'] }, + { duration: 1000, fill: 'both' }); + testAnimationSamples(animation, idlName, + [{ time: 500, expected: '30px 30px' }]); + }, property + ' supports animating as a length pair'); + + test(function(t) { + var idlName = propertyToIDL(property); + var target = createTestElement(t, setup); + var animation = target.animate({ [idlName]: ['1rem 1rem', '5rem 5rem'] }, + { duration: 1000, fill: 'both' }); + testAnimationSamples(animation, idlName, + [{ time: 500, expected: '30px 30px' }]); + }, property + ' supports animating as a length pair of rem'); + }, + + testAdditionOrAccumulation: function(property, setup, composite) { + test(function(t) { + var idlName = propertyToIDL(property); + var target = createTestElement(t, setup); + target.style[idlName] = '10px 10px'; + var animation = target.animate({ [idlName]: ['10px 10px', '50px 50px'] }, + { duration: 1000, composite: composite }); + testAnimationSamples(animation, idlName, [{ time: 0, expected: '20px 20px' }]); + }, property + ': length pair'); + + test(function(t) { + var idlName = propertyToIDL(property); + var target = createTestElement(t, setup); + target.style[idlName] = '1rem 1rem'; + var animation = target.animate({ [idlName]: ['1rem 1rem', '5rem 5rem'] }, + { duration: 1000, composite: composite }); + testAnimationSamples(animation, idlName, [{ time: 0, expected: '20px 20px' }]); + }, property + ': length pair of rem'); + }, + + testAddition: function(property, setup) { + this.testAdditionOrAccumulation(property, setup, 'add'); + }, + + testAccumulation: function(property, setup) { + this.testAdditionOrAccumulation(property, setup, 'accumulate'); + }, }; const percentageType = { @@ -132,23 +192,28 @@ const percentageType = { var animation = target.animate({ [idlName]: ['10%', '50%'] }, { duration: 1000, fill: 'both' }); testAnimationSamples(animation, idlName, - [{ time: 0, expected: '10%' }, - { time: 500, expected: '30%' }, - { time: 1000, expected: '50%' }]); + [{ time: 500, expected: '30%' }]); }, property + ' supports animating as a percentage'); }, - testAddition: function(property, setup) { + testAdditionOrAccumulation: function(property, setup, composite) { test(function(t) { var idlName = propertyToIDL(property); var target = createTestElement(t, setup); target.style[idlName] = '60%'; var animation = target.animate({ [idlName]: ['70%', '100%'] }, - { duration: 1000, composite: 'add' }); + { duration: 1000, composite: composite }); testAnimationSamples(animation, idlName, [{ time: 0, expected: '130%' }]); }, property + ': percentage'); }, + testAddition: function(property, setup) { + this.testAdditionOrAccumulation(property, setup, 'add'); + }, + + testAccumulation: function(property, setup) { + this.testAdditionOrAccumulation(property, setup, 'accumulate'); + }, }; const integerType = { @@ -159,24 +224,62 @@ const integerType = { var animation = target.animate({ [idlName]: [-2, 2] }, { duration: 1000, fill: 'both' }); testAnimationSamples(animation, idlName, - [{ time: 0, expected: '-2' }, - { time: 500, expected: '0' }, - { time: 1000, expected: '2' }]); + [{ time: 500, expected: '0' }]); }, property + ' supports animating as an integer'); }, - testAddition: function(property, setup) { + testAdditionOrAccumulation: function(property, setup, composite) { test(function(t) { var idlName = propertyToIDL(property); var target = createTestElement(t, setup); target.style[idlName] = -1; var animation = target.animate({ [idlName]: [-2, 2] }, - { duration: 1000, composite: 'add' }); + { duration: 1000, composite: composite }); testAnimationSamples(animation, idlName, [{ time: 0, expected: '-3' }]); }, property + ': integer'); }, + testAddition: function(property, setup) { + this.testAdditionOrAccumulation(property, setup, 'add'); + }, + + testAccumulation: function(property, setup) { + this.testAdditionOrAccumulation(property, setup, 'accumulate'); + }, +}; + +const positiveIntegerType = { + testInterpolation: function(property, setup) { + test(function(t) { + var idlName = propertyToIDL(property); + var target = createTestElement(t, setup); + var animation = target.animate({ [idlName]: [1, 3] }, + { duration: 1000, fill: 'both' }); + testAnimationSamples(animation, idlName, + [ { time: 500, expected: '2' } ]); + }, property + ' supports animating as a positive integer'); + }, + + testAdditionOrAccumulation: function(property, setup, composite) { + test(function(t) { + var idlName = propertyToIDL(property); + var target = createTestElement(t, setup); + target.style[idlName] = 1; + var animation = target.animate({ [idlName]: [2, 5] }, + { duration: 1000, composite: composite }); + testAnimationSamples(animation, idlName, + [{ time: 0, expected: '3' }]); + }, property + ': positive integer'); + }, + + testAddition: function(property, setup) { + this.testAdditionOrAccumulation(property, setup, 'add'); + }, + + testAccumulation: function(property, setup) { + this.testAdditionOrAccumulation(property, setup, 'accumulate'); + }, }; const lengthPercentageOrCalcType = { @@ -190,9 +293,7 @@ const lengthPercentageOrCalcType = { var animation = target.animate({ [idlName]: ['10px', '20%'] }, { duration: 1000, fill: 'both' }); testAnimationSamples(animation, idlName, - [{ time: 0, expected: '10px' }, - { time: 500, expected: 'calc(5px + 10%)' }, - { time: 1000, expected: '20%' }]); + [{ time: 500, expected: 'calc(5px + 10%)' }]); }, property + ' supports animating as combination units "px" and "%"'); test(function(t) { @@ -201,9 +302,7 @@ const lengthPercentageOrCalcType = { var animation = target.animate({ [idlName]: ['10%', '2em'] }, { duration: 1000, fill: 'both' }); testAnimationSamples(animation, idlName, - [{ time: 0, expected: '10%' }, - { time: 500, expected: 'calc(10px + 5%)' }, - { time: 1000, expected: '20px' }]); + [{ time: 500, expected: 'calc(10px + 5%)' }]); }, property + ' supports animating as combination units "%" and "em"'); test(function(t) { @@ -212,9 +311,7 @@ const lengthPercentageOrCalcType = { var animation = target.animate({ [idlName]: ['1em', '2rem'] }, { duration: 1000, fill: 'both' }); testAnimationSamples(animation, idlName, - [{ time: 0, expected: '10px' }, - { time: 500, expected: '15px' }, - { time: 1000, expected: '20px' }]); + [{ time: 500, expected: '15px' }]); }, property + ' supports animating as combination units "em" and "rem"'); test(function(t) { @@ -223,9 +320,7 @@ const lengthPercentageOrCalcType = { var animation = target.animate({ [idlName]: ['10px', 'calc(1em + 20%)'] }, { duration: 1000, fill: 'both' }); testAnimationSamples(animation, idlName, - [{ time: 0, expected: '10px' }, - { time: 500, expected: 'calc(10px + 10%)' }, - { time: 1000, expected: 'calc(10px + 20%)' }]); + [{ time: 500, expected: 'calc(10px + 10%)' }]); }, property + ' supports animating as combination units "px" and "calc"'); test(function(t) { @@ -235,16 +330,12 @@ const lengthPercentageOrCalcType = { { [idlName]: ['calc(10px + 10%)', 'calc(1em + 1rem + 20%)'] }, { duration: 1000, fill: 'both' }); testAnimationSamples(animation, idlName, - [{ time: 0, - expected: 'calc(10px + 10%)' }, - { time: 500, - expected: 'calc(15px + 15%)' }, - { time: 1000, - expected: 'calc(20px + 20%)' }]); + [{ time: 500, + expected: 'calc(15px + 15%)' }]); }, property + ' supports animating as a calc'); }, - testAddition: function(property, setup) { + testAdditionOrAccumulation: function(property, setup, composite) { lengthType.testAddition(property, setup); percentageType.testAddition(property, setup); @@ -253,7 +344,7 @@ const lengthPercentageOrCalcType = { var target = createTestElement(t, setup); target.style[idlName] = '10px'; var animation = target.animate({ [idlName]: ['10%', '50%'] }, - { duration: 1000, composite: 'add' }); + { duration: 1000, composite: composite }); testAnimationSamples(animation, idlName, [{ time: 0, expected: 'calc(10px + 10%)' }]); }, property + ': units "%" onto "px"'); @@ -263,7 +354,7 @@ const lengthPercentageOrCalcType = { var target = createTestElement(t, setup); target.style[idlName] = '10%'; var animation = target.animate({ [idlName]: ['10px', '50px'] }, - { duration: 1000, composite: 'add' }); + { duration: 1000, composite: composite }); testAnimationSamples(animation, idlName, [{ time: 0, expected: 'calc(10px + 10%)' }]); }, property + ': units "px" onto "%"'); @@ -273,7 +364,7 @@ const lengthPercentageOrCalcType = { var target = createTestElement(t, setup); target.style[idlName] = '10%'; var animation = target.animate({ [idlName]: ['2rem', '5rem'] }, - { duration: 1000, composite: 'add' }); + { duration: 1000, composite: composite }); testAnimationSamples(animation, idlName, [{ time: 0, expected: 'calc(20px + 10%)' }]); }, property + ': units "rem" onto "%"'); @@ -283,7 +374,7 @@ const lengthPercentageOrCalcType = { var target = createTestElement(t, setup); target.style[idlName] = '2rem'; var animation = target.animate({ [idlName]: ['10%', '50%'] }, - { duration: 1000, composite: 'add' }); + { duration: 1000, composite: composite }); testAnimationSamples(animation, idlName, [{ time: 0, expected: 'calc(20px + 10%)' }]); }, property + ': units "%" onto "rem"'); @@ -293,7 +384,7 @@ const lengthPercentageOrCalcType = { var target = createTestElement(t, setup); target.style[idlName] = '2em'; var animation = target.animate({ [idlName]: ['2rem', '5rem'] }, - { duration: 1000, composite: 'add' }); + { duration: 1000, composite: composite }); testAnimationSamples(animation, idlName, [{ time: 0, expected: '40px' }]); }, property + ': units "rem" onto "em"'); @@ -302,7 +393,7 @@ const lengthPercentageOrCalcType = { var target = createTestElement(t, setup); target.style[idlName] = '2rem'; var animation = target.animate({ [idlName]: ['2em', '5em'] }, - { duration: 1000, composite: 'add' }); + { duration: 1000, composite: composite }); testAnimationSamples(animation, idlName, [{ time: 0, expected: '40px' }]); }, property + ': units "em" onto "rem"'); @@ -312,7 +403,7 @@ const lengthPercentageOrCalcType = { target.style[idlName] = '10px'; var animation = target.animate({ [idlName]: ['calc(2em + 20%)', 'calc(5rem + 50%)'] }, - { duration: 1000, composite: 'add' }); + { duration: 1000, composite: composite }); testAnimationSamples(animation, idlName, [{ time: 0, expected: 'calc(30px + 20%)' }]); }, property + ': units "calc" onto "px"'); @@ -323,12 +414,19 @@ const lengthPercentageOrCalcType = { target.style[idlName] = 'calc(10px + 10%)'; var animation = target.animate({ [idlName]: ['calc(20px + 20%)', 'calc(2em + 3rem + 40%)'] }, - { duration: 1000, composite: 'add' }); + { duration: 1000, composite: composite }); testAnimationSamples(animation, idlName, [{ time: 0, expected: 'calc(30px + 30%)' }]); }, property + ': calc'); }, + testAddition: function(property, setup) { + this.testAdditionOrAccumulation(property, setup, 'add'); + }, + + testAccumulation: function(property, setup) { + this.testAdditionOrAccumulation(property, setup, 'accumulate'); + }, }; const positiveNumberType = { @@ -339,23 +437,70 @@ const positiveNumberType = { var animation = target.animate({ [idlName]: [1.1, 1.5] }, { duration: 1000, fill: 'both' }); testAnimationSamples(animation, idlName, - [{ time: 0, expected: '1.1' }, - { time: 500, expected: '1.3' }, - { time: 1000, expected: '1.5' }]); + [{ time: 500, expected: '1.3' }]); }, property + ' supports animating as a positive number'); }, - testAddition: function(property, setup) { + testAdditionOrAccumulation: function(property, setup, composite) { test(function(t) { var idlName = propertyToIDL(property); var target = createTestElement(t, setup); target.style[idlName] = 1.1; var animation = target.animate({ [idlName]: [1.1, 1.5] }, - { duration: 1000, composite: 'add' }); + { duration: 1000, composite: composite }); testAnimationSamples(animation, idlName, [{ time: 0, expected: '2.2' }]); }, property + ': positive number'); }, + testAddition: function(property, setup) { + this.testAdditionOrAccumulation(property, setup, 'add'); + }, + + testAccumulation: function(property, setup) { + this.testAdditionOrAccumulation(property, setup, 'accumulate'); + }, +}; + +// Test using float values in the range [0, 1] +const opacityType = { + testInterpolation: function(property, setup) { + test(function(t) { + var idlName = propertyToIDL(property); + var target = createTestElement(t, setup); + var animation = target.animate({ [idlName]: [0.3, 0.8] }, + { duration: 1000, fill: 'both' }); + testAnimationSamples(animation, idlName, + [{ time: 500, expected: '0.55' }]); + }, property + ' supports animating as a [0, 1] number'); + }, + + testAdditionOrAccumulation: function(property, setup, composite) { + test(function(t) { + var idlName = propertyToIDL(property); + var target = createTestElement(t, setup); + target.style[idlName] = 0.3; + var animation = target.animate({ [idlName]: [0.3, 0.8] }, + { duration: 1000, composite: composite }); + testAnimationSamples(animation, idlName, [{ time: 0, expected: '0.6' }]); + }, property + ': [0, 1] number'); + + test(function(t) { + var idlName = propertyToIDL(property); + var target = createTestElement(t, setup); + target.style[idlName] = 0.8; + var animation = target.animate({ [idlName]: [0.3, 0.8] }, + { duration: 1000, composite: composite }); + testAnimationSamples(animation, idlName, [{ time: 0, expected: '1' }]); + }, property + ': [0, 1] number (clamped)'); + }, + + testAddition: function(property, setup) { + this.testAdditionOrAccumulation(property, setup, 'add'); + }, + + testAccumulation: function(property, setup) { + this.testAdditionOrAccumulation(property, setup, 'accumulate'); + }, }; const visibilityType = { @@ -419,14 +564,14 @@ const visibilityType = { + 'from "visible" to "hidden" with easeInOutBack easing'); }, - testAddition: function(property, setup) { + testAdditionOrAccumulation: function(property, setup, composite) { test(function(t) { var idlName = propertyToIDL(property); var target = createTestElement(t, setup); target.style[idlName] = 'visible'; var animation = target.animate({ [idlName]: ['visible', 'hidden'] }, { duration: 1000, fill: 'both', - composite: 'add' }); + composite: composite }); testAnimationSamples(animation, idlName, [{ time: 0, expected: 'visible' }, { time: 1000, expected: 'visible' }]); @@ -438,13 +583,20 @@ const visibilityType = { target.style[idlName] = 'hidden'; var animation = target.animate({ [idlName]: ['hidden', 'visible'] }, { duration: 1000, fill: 'both', - composite: 'add' }); + composite: composite }); testAnimationSamples(animation, idlName, [{ time: 0, expected: 'hidden' }, { time: 1000, expected: 'visible' }]); }, property + ': onto "hidden"'); }, + testAddition: function(property, setup) { + this.testAdditionOrAccumulation(property, setup, 'add'); + }, + + testAccumulation: function(property, setup) { + this.testAdditionOrAccumulation(property, setup, 'accumulate'); + }, }; const colorType = { @@ -510,14 +662,14 @@ const colorType = { }, property + ' supports animating as color of hsla()'); }, - testAddition: function(property, setup) { + testAdditionOrAccumulation: function(property, setup, composite) { test(function(t) { var idlName = propertyToIDL(property); var target = createTestElement(t, setup); target.style[idlName] = 'rgb(128, 128, 128)'; var animation = target.animate({ [idlName]: ['rgb(255, 0, 0)', 'rgb(0, 0, 255)'] }, - { duration: 1000, composite: 'add' }); + { duration: 1000, composite: composite }); testAnimationSamples(animation, idlName, [{ time: 0, expected: 'rgb(255, 128, 128)' }, // The value at 50% is interpolated @@ -532,7 +684,7 @@ const colorType = { var target = createTestElement(t, setup); target.style[idlName] = 'rgb(128, 128, 128)'; var animation = target.animate({ [idlName]: ['#ff0000', '#0000ff'] }, - { duration: 1000, composite: 'add' }); + { duration: 1000, composite: composite }); testAnimationSamples(animation, idlName, [{ time: 0, expected: 'rgb(255, 128, 128)' }]); }, property + ' supports animating as color of #RGB'); @@ -543,7 +695,7 @@ const colorType = { target.style[idlName] = 'rgb(128, 128, 128)'; var animation = target.animate({ [idlName]: ['hsl(0, 100%, 50%)', 'hsl(240, 100%, 50%)'] }, - { duration: 1000, composite: 'add' }); + { duration: 1000, composite: composite }); testAnimationSamples(animation, idlName, [{ time: 0, expected: 'rgb(255, 128, 128)' }]); }, property + ' supports animating as color of hsl()'); @@ -553,7 +705,7 @@ const colorType = { var target = createTestElement(t, setup); target.style[idlName] = 'rgb(128, 128, 128)'; var animation = target.animate({ [idlName]: ['#ff000066', '#0000ffcc'] }, - { duration: 1000, composite: 'add' }); + { duration: 1000, composite: composite }); testAnimationSamples(animation, idlName, [{ time: 0, expected: 'rgb(230, 128, 128)' }]); }, property + ' supports animating as color of #RGBa'); @@ -564,7 +716,7 @@ const colorType = { target.style[idlName] = 'rgb(128, 128, 128)'; var animation = target.animate({ [idlName]: ['rgba(255, 0, 0, 0.4)', 'rgba(0, 0, 255, 0.8)'] }, - { duration: 1000, composite: 'add' }); + { duration: 1000, composite: composite }); testAnimationSamples(animation, idlName, // Same as above. [{ time: 0, expected: 'rgb(230, 128, 128)' }]); }, property + ' supports animating as color of rgba()'); @@ -575,12 +727,19 @@ const colorType = { target.style[idlName] = 'rgb(128, 128, 128)'; var animation = target.animate({ [idlName]: ['hsla(0, 100%, 50%, 0.4)', 'hsla(240, 100%, 50%, 0.8)'] }, - { duration: 1000, composite: 'add' }); + { duration: 1000, composite: composite }); testAnimationSamples(animation, idlName, // Same as above. [{ time: 0, expected: 'rgb(230, 128, 128)' }]); }, property + ' supports animating as color of hsla()'); }, + testAddition: function(property, setup) { + this.testAdditionOrAccumulation(property, setup, 'add'); + }, + + testAccumulation: function(property, setup) { + this.testAdditionOrAccumulation(property, setup, 'accumulate'); + }, }; const transformListType = { @@ -892,6 +1051,154 @@ const transformListType = { }, property + ': matrix3d'); }, + testAccumulation: function(property, setup) { + test(function(t) { + var idlName = propertyToIDL(property); + var target = createTestElement(t, setup); + target.style[idlName] = 'translateX(100px)'; + var animation = target.animate({ [idlName]: ['translateX(-200px)', + 'translateX(500px)'] }, + { duration: 1000, fill: 'both', + composite: 'accumulate' }); + testAnimationSampleMatrices(animation, idlName, + [ { time: 0, expected: [ 1, 0, 0, 1, -100, 0 ] }, + { time: 1000, expected: [ 1, 0, 0, 1, 600, 0 ] }]); + }, property + ': translate'); + + test(function(t) { + var idlName = propertyToIDL(property); + var target = createTestElement(t, setup); + target.style[idlName] = 'rotate(45deg)'; + var animation = target.animate({ [idlName]: ['rotate(-90deg)', + 'rotate(90deg)'] }, + { duration: 1000, fill: 'both', + composite: 'accumulate' }); + + testAnimationSampleMatrices(animation, idlName, + [{ time: 0, expected: [ Math.cos(-Math.PI / 4), + Math.sin(-Math.PI / 4), + -Math.sin(-Math.PI / 4), + Math.cos(-Math.PI / 4), + 0, 0] }, + { time: 1000, expected: [ Math.cos(Math.PI * 3 / 4), + Math.sin(Math.PI * 3 / 4), + -Math.sin(Math.PI * 3 / 4), + Math.cos(Math.PI * 3 / 4), + 0, 0] }]); + }, property + ': rotate'); + + test(function(t) { + var idlName = propertyToIDL(property); + var target = createTestElement(t, setup); + target.style[idlName] = 'scale(2)'; + var animation = target.animate({ [idlName]: ['scale(-3)', 'scale(5)'] }, + { duration: 1000, fill: 'both', + composite: 'accumulate' }); + + testAnimationSampleMatrices(animation, idlName, + // scale((2 - 1) + (-3 - 1) + 1) + [{ time: 0, expected: [ -2, 0, 0, -2, 0, 0 ] }, + // scale((2 - 1) + (5 - 1) + 1) + { time: 1000, expected: [ 6, 0, 0, 6, 0, 0 ] }]); + }, property + ': scale'); + + test(function(t) { + var idlName = propertyToIDL(property); + var target = createTestElement(t, setup); + // matrix(1, tan(10deg), tan(10deg), 1) + target.style[idlName] = 'skew(10deg, 10deg)'; + var animation = // matrix(1, tan(20deg), tan(-30deg), 1) + target.animate({ [idlName]: ['skew(-30deg, 20deg)', + // matrix(1, tan(-30deg), tan(20deg), 1) + 'skew(20deg, -30deg)'] }, + { duration: 1000, fill: 'both', composite: 'accumulate' }); + + testAnimationSampleMatrices(animation, idlName, + [{ time: 0, expected: [ 1, Math.tan(Math.PI/6), + Math.tan(-Math.PI/9), 1, + 0, 0] }, + { time: 1000, expected: [ 1, Math.tan(-Math.PI/9), + Math.tan(Math.PI/6), 1, + 0, 0] }]); + }, property + ': skew'); + + test(function(t) { + var idlName = propertyToIDL(property); + var target = createTestElement(t, setup); + // matrix(1, 0, 0, 1, 100, 0) + target.style[idlName] = 'translateX(100px)'; + var animation = // matrix(0, 1, -1, 0, 0, 0) + target.animate({ [idlName]: ['rotate(90deg)', + // matrix(-1, 0, 0, -1, 0, 0) + 'rotate(180deg)'] }, + { duration: 1000, fill: 'both', composite: 'accumulate' }); + + testAnimationSampleMatrices(animation, idlName, + [{ time: 0, expected: [ 0, 1, -1, 0, 100, 0 ] }, + { time: 1000, expected: [ -1, 0, 0, -1, 100, 0 ] }]); + }, property + ': rotate on translate'); + + test(function(t) { + var idlName = propertyToIDL(property); + var target = createTestElement(t, setup); + // matrix(0, 1, -1, 0, 0, 0) + target.style[idlName] = 'rotate(90deg)'; + var animation = // matrix(1, 0, 0, 1, 100, 0) + target.animate({ [idlName]: ['translateX(100px)', + // matrix(1, 0, 0, 1, 200, 0) + 'translateX(200px)'] }, + { duration: 1000, fill: 'both', composite: 'accumulate' }); + + testAnimationSampleMatrices(animation, idlName, + [{ time: 0, expected: [ 0, 1, -1, 0, 100, 0 ] }, + { time: 1000, expected: [ 0, 1, -1, 0, 200, 0 ] }]); + }, property + ': translate on rotate'); + + test(function(t) { + var idlName = propertyToIDL(property); + var target = createTestElement(t, setup); + target.style[idlName] = 'matrix(0, 1, -1, 0, 0, 0)'; + var animation = // Same matrices as above. + target.animate({ [idlName]: [ 'matrix(1, 0, 0, 1, 100, 0)', + 'matrix(1, 0, 0, 1, 200, 0)' ] }, + { duration: 1000, fill: 'both', composite: 'accumulate' }); + + testAnimationSampleMatrices(animation, idlName, + [{ time: 0, expected: [ 0, 1, -1, 0, 100, 0 ] }, + { time: 1000, expected: [ 0, 1, -1, 0, 200, 0 ] }]); + }, property + ': matrix'); + + test(function(t) { + var idlName = propertyToIDL(property); + var target = createTestElement(t, setup); + target.style[idlName] = 'rotate3d(1, 1, 0, 45deg)'; + var animation = + target.animate({ [idlName]: [ 'rotate3d(1, 1, 0, -90deg)', + 'rotate3d(1, 1, 0, 90deg)'] }, + { duration: 1000, fill: 'both', composite: 'accumulate' }); + + testAnimationSampleMatrices(animation, idlName, + [{ time: 0, expected: rotate3dToMatrix(1, 1, 0, -Math.PI / 4) }, + { time: 1000, expected: rotate3dToMatrix(1, 1, 0, 3 * Math.PI / 4) }]); + }, property + ': rotate3d'); + + test(function(t) { + var idlName = propertyToIDL(property); + var target = createTestElement(t, setup); + // To calculate expected matrices easily, generate input matrices from + // rotate3d. + target.style[idlName] = rotate3dToMatrix3d(1, 1, 0, Math.PI / 4); + var from = rotate3dToMatrix3d(1, 1, 0, -Math.PI / 2); + var to = rotate3dToMatrix3d(1, 1, 0, Math.PI / 2); + var animation = + target.animate({ [idlName]: [ from, to ] }, + { duration: 1000, fill: 'both', composite: 'accumulate' }); + + testAnimationSampleMatrices(animation, idlName, + [{ time: 0, expected: rotate3dToMatrix(1, 1, 0, -Math.PI / 4) }, + { time: 1000, expected: rotate3dToMatrix(1, 1, 0, 3 * Math.PI / 4) }]); + }, property + ': matrix3d'); + }, }; const filterListType = { @@ -918,9 +1225,114 @@ const filterListType = { [ { time: 0, expected: 'blur(10px) brightness(0.8)' }]); }, property + ': different filter functions'); }, + + testAccumulation: function(property, setup) { + test(function(t) { + var idlName = propertyToIDL(property); + var target = createTestElement(t, setup); + target.style[idlName] = 'blur(10px) brightness(0.3)'; + var animation = target.animate({ [idlName]: ['blur(20px) brightness(0.1)', + 'blur(20px) brightness(0.1)'] }, + { duration: 1000, composite: 'accumulate' }); + // brightness(0.1) onto brightness(0.3) means + // brightness((0.1 - 1.0) + (0.3 - 1.0) + 1.0). The result of this formula + // is brightness(-0.6) that means brightness(0.0). + testAnimationSamples(animation, idlName, + [ { time: 0, expected: 'blur(30px) brightness(0)' }]); + }, property + ': same ordered filter functions'); + + test(function(t) { + var idlName = propertyToIDL(property); + var target = createTestElement(t, setup); + target.style[idlName] = 'blur(10px) brightness(1.3)'; + var animation = target.animate({ [idlName]: ['brightness(1.2) blur(20px)', + 'brightness(1.2) blur(20px)'] }, + { duration: 1000, composite: 'accumulate' }); + // Mismatched ordered functions can't be accumulated. + testAnimationSamples(animation, idlName, + [ { time: 0, expected: 'brightness(1.2) blur(20px)' }]); + }, property + ': mismatched ordered filter functions'); + }, }; const textShadowListType = { + testInterpolation: function(property, setup) { + test(function(t) { + var idlName = propertyToIDL(property); + var target = createTestElement(t, setup); + var animation = + target.animate({ [idlName]: [ 'none', + 'rgb(100, 100, 100) 10px 10px 10px'] }, + { duration: 1000, fill: 'both' }); + testAnimationSamples(animation, idlName, + // Premultiplied + [{ time: 500, expected: 'rgba(100, 100, 100, 0.5) 5px 5px 5px' }]); + }, property + ': from none to other'); + + test(function(t) { + var idlName = propertyToIDL(property); + var target = createTestElement(t, setup); + var animation = + target.animate({ [idlName]: [ 'rgb(100, 100, 100) 10px 10px 10px', + 'none' ] }, + { duration: 1000, fill: 'both' }); + testAnimationSamples(animation, idlName, + // Premultiplied + [{ time: 500, expected: 'rgba(100, 100, 100, 0.5) 5px 5px 5px' }]); + }, property + ': from other to none'); + + test(function(t) { + var idlName = propertyToIDL(property); + var target = createTestElement(t, setup); + var animation = + target.animate({ [idlName]: [ 'rgb(0, 0, 0) 0px 0px 0px', + 'rgb(100, 100, 100) 10px 10px 10px'] }, + { duration: 1000, fill: 'both' }); + testAnimationSamples(animation, idlName, + [{ time: 500, expected: 'rgb(50, 50, 50) 5px 5px 5px' }]); + }, property + ': single shadow'); + + test(function(t) { + var idlName = propertyToIDL(property); + var target = createTestElement(t, setup); + var animation = + target.animate({ [idlName]: [ 'rgb(0, 0, 0) 0px 0px 0px, ' + + 'rgb(200, 200, 200) 20px 20px 20px', + 'rgb(100, 100, 100) 10px 10px 10px, ' + + 'rgb(100, 100, 100) 10px 10px 10px'] }, + { duration: 1000, fill: 'both' }); + testAnimationSamples(animation, idlName, + [{ time: 500, expected: 'rgb(50, 50, 50) 5px 5px 5px, ' + + 'rgb(150, 150, 150) 15px 15px 15px' }]); + }, property + ': shadow list'); + + test(function(t) { + var idlName = propertyToIDL(property); + var target = createTestElement(t, setup); + var animation = + target.animate({ [idlName]: [ 'rgb(200, 200, 200) 20px 20px 20px', + 'rgb(100, 100, 100) 10px 10px 10px, ' + + 'rgb(100, 100, 100) 10px 10px 10px'] }, + { duration: 1000, fill: 'both' }); + testAnimationSamples(animation, idlName, + [{ time: 500, expected: 'rgb(150, 150, 150) 15px 15px 15px, ' + + 'rgba(100, 100, 100, 0.5) 5px 5px 5px' }]); + }, property + ': mismatched list length (from longer to shorter)'); + + test(function(t) { + var idlName = propertyToIDL(property); + var target = createTestElement(t, setup); + var animation = + target.animate({ [idlName]: [ 'rgb(100, 100, 100) 10px 10px 10px, ' + + 'rgb(100, 100, 100) 10px 10px 10px', + 'rgb(200, 200, 200) 20px 20px 20px'] }, + { duration: 1000, fill: 'both' }); + testAnimationSamples(animation, idlName, + [{ time: 500, expected: 'rgb(150, 150, 150) 15px 15px 15px, ' + + 'rgba(100, 100, 100, 0.5) 5px 5px 5px' }]); + }, property + ': mismatched list length (from shorter to longer)'); + }, + testAddition: function(property, setup) { test(function(t) { var idlName = propertyToIDL(property); @@ -935,10 +1347,101 @@ const textShadowListType = { 'rgb(120, 120, 120) 10px 10px 10px' }]); }, property + ': shadow'); }, + + testAccumulation: function(property, setup) { + test(function(t) { + var idlName = propertyToIDL(property); + var target = createTestElement(t, setup); + target.style[idlName] = 'rgb(120, 120, 120) 10px 10px 10px'; + var animation = + target.animate({ [idlName]: [ 'rgb(120, 120, 120) 10px 10px 10px', + 'rgb(120, 120, 120) 10px 10px 10px'] }, + { duration: 1000, composite: 'accumulate' }); + testAnimationSamples(animation, idlName, + [ { time: 0, expected: 'rgb(240, 240, 240) 20px 20px 20px' }]); + }, property + ': shadow'); + }, }; const boxShadowListType = { + testInterpolation: function(property, setup) { + test(function(t) { + var idlName = propertyToIDL(property); + var target = createTestElement(t, setup); + var animation = + target.animate({ [idlName]: [ 'none', + 'rgb(100, 100, 100) 10px 10px 10px 0px'] }, + { duration: 1000, fill: 'both' }); + testAnimationSamples(animation, idlName, + // Premultiplied + [{ time: 500, expected: 'rgba(100, 100, 100, 0.5) 5px 5px 5px 0px' }]); + }, property + ': from none to other'); + + test(function(t) { + var idlName = propertyToIDL(property); + var target = createTestElement(t, setup); + var animation = + target.animate({ [idlName]: [ 'rgb(100, 100, 100) 10px 10px 10px 0px', + 'none' ] }, + { duration: 1000, fill: 'both' }); + testAnimationSamples(animation, idlName, + // Premultiplied + [{ time: 500, expected: 'rgba(100, 100, 100, 0.5) 5px 5px 5px 0px' }]); + }, property + ': from other to none'); + + test(function(t) { + var idlName = propertyToIDL(property); + var target = createTestElement(t, setup); + var animation = + target.animate({ [idlName]: [ 'rgb(0, 0, 0) 0px 0px 0px 0px', + 'rgb(100, 100, 100) 10px 10px 10px 0px'] }, + { duration: 1000, fill: 'both' }); + testAnimationSamples(animation, idlName, + [{ time: 500, expected: 'rgb(50, 50, 50) 5px 5px 5px 0px' }]); + }, property + ': single shadow'); + + test(function(t) { + var idlName = propertyToIDL(property); + var target = createTestElement(t, setup); + var animation = + target.animate({ [idlName]: [ 'rgb(0, 0, 0) 0px 0px 0px 0px, ' + + 'rgb(200, 200, 200) 20px 20px 20px 20px', + 'rgb(100, 100, 100) 10px 10px 10px 0px, ' + + 'rgb(100, 100, 100) 10px 10px 10px 0px'] }, + { duration: 1000, fill: 'both' }); + testAnimationSamples(animation, idlName, + [{ time: 500, expected: 'rgb(50, 50, 50) 5px 5px 5px 0px, ' + + 'rgb(150, 150, 150) 15px 15px 15px 10px' }]); + }, property + ': shadow list'); + + test(function(t) { + var idlName = propertyToIDL(property); + var target = createTestElement(t, setup); + var animation = + target.animate({ [idlName]: [ 'rgb(200, 200, 200) 20px 20px 20px 20px', + 'rgb(100, 100, 100) 10px 10px 10px 0px, ' + + 'rgb(100, 100, 100) 10px 10px 10px 0px'] }, + { duration: 1000, fill: 'both' }); + testAnimationSamples(animation, idlName, + [{ time: 500, expected: 'rgb(150, 150, 150) 15px 15px 15px 10px, ' + + 'rgba(100, 100, 100, 0.5) 5px 5px 5px 0px' }]); + }, property + ': mismatched list length (from shorter to longer)'); + + test(function(t) { + var idlName = propertyToIDL(property); + var target = createTestElement(t, setup); + var animation = + target.animate({ [idlName]: [ 'rgb(100, 100, 100) 10px 10px 10px 0px, ' + + 'rgb(100, 100, 100) 10px 10px 10px 0px', + 'rgb(200, 200, 200) 20px 20px 20px 20px']}, + { duration: 1000, fill: 'both' }); + testAnimationSamples(animation, idlName, + [{ time: 500, expected: 'rgb(150, 150, 150) 15px 15px 15px 10px, ' + + 'rgba(100, 100, 100, 0.5) 5px 5px 5px 0px' }]); + }, property + ': mismatched list length (from longer to shorter)'); + }, + testAddition: function(property, setup) { test(function(t) { var idlName = propertyToIDL(property); @@ -953,20 +1456,178 @@ const boxShadowListType = { 'rgb(120, 120, 120) 10px 10px 10px 0px' }]); }, property + ': shadow'); }, + + testAccumulation: function(property, setup) { + test(function(t) { + var idlName = propertyToIDL(property); + var target = createTestElement(t, setup); + target.style[idlName] = 'rgb(120, 120, 120) 10px 10px 10px 10px'; + var animation = + target.animate({ [idlName]: [ 'rgb(120, 120, 120) 10px 10px 10px 10px', + 'rgb(120, 120, 120) 10px 10px 10px 10px'] }, + { duration: 1000, composite: 'accumulate' }); + testAnimationSamples(animation, idlName, + [ { time: 0, expected: 'rgb(240, 240, 240) 20px 20px 20px 20px' }]); + }, property + ': shadow'); + }, }; +const positionType = { + testInterpolation: function(property, setup) { + lengthPairType.testInterpolation(property, setup); + + test(function(t) { + var idlName = propertyToIDL(property); + var target = createTestElement(t, setup); + var animation = target.animate({ [idlName]: ['10% 10%', '50% 50%'] }, + { duration: 1000, fill: 'both' }); + testAnimationSamples( + animation, idlName, + [{ time: 500, expected: calcFromPercentage(idlName, '30% 30%') }]); + }, property + ' supports animating as a position of percent'); + }, + + testAdditionOrAccumulation: function(property, setup, composite) { + lengthPairType.testAddition(property, setup); + + test(function(t) { + var idlName = propertyToIDL(property); + var target = createTestElement(t, setup); + target.style[idlName] = '60% 60%'; + var animation = target.animate({ [idlName]: ['70% 70%', '100% 100%'] }, + { duration: 1000, composite: composite }); + testAnimationSamples( + animation, idlName, + [{ time: 0, expected: calcFromPercentage(idlName, '130% 130%') }]); + }, property + ': position of percentage'); + }, + + testAddition: function(property, setup) { + this.testAdditionOrAccumulation(property, setup, 'add'); + }, + + testAccumulation: function(property, setup) { + this.testAdditionOrAccumulation(property, setup, 'accumulate'); + }, +}; + +const rectType = { + testInterpolation: function(property, setup) { + test(function(t) { + var idlName = propertyToIDL(property); + var target = createTestElement(t, setup); + var animation = target.animate({ [idlName]: + ['rect(10px, 10px, 10px, 10px)', + 'rect(50px, 50px, 50px, 50px)'] }, + { duration: 1000, fill: 'both' }); + testAnimationSamples( + animation, idlName, + [{ time: 500, expected: 'rect(30px, 30px, 30px, 30px)' }]); + }, property + ' supports animating as a rect'); + }, + + testAdditionOrAccumulation: function(property, setup, composite) { + test(function(t) { + var idlName = propertyToIDL(property); + var target = createTestElement(t, setup); + target.style[idlName] = 'rect(100px, 100px, 100px, 100px)'; + var animation = target.animate({ [idlName]: + ['rect(10px, 10px, 10px, 10px)', + 'rect(10px, 10px, 10px, 10px)'] }, + { duration: 1000, composite: composite }); + testAnimationSamples( + animation, idlName, + [{ time: 0, expected: 'rect(110px, 110px, 110px, 110px)' }]); + }, property + ': rect'); + }, + + testAddition: function(property, setup) { + this.testAdditionOrAccumulation(property, setup, 'add'); + }, + + testAccumulation: function(property, setup) { + this.testAdditionOrAccumulation(property, setup, 'accumulate'); + }, +} + +// stroke-dasharray: none | [ | | ]* +const dasharrayType = { + testInterpolation: function(property, setup) { + percentageType.testInterpolation(property, setup); + positiveNumberType.testInterpolation(property, setup); + + test(function(t) { + var idlName = propertyToIDL(property); + var target = createTestElement(t, setup); + var animation = target.animate({ [idlName]: + ['8, 16, 4', + '4, 8, 12, 16'] }, + { duration: 1000, fill: 'both' }); + testAnimationSamples( + animation, idlName, + [{ time: 500, expected: '6, 12, 8, 12, 10, 6, 10, 16, 4, 8, 14, 10' }]); + }, property + ' supports animating as a dasharray (mismatched length)'); + + test(function(t) { + var idlName = propertyToIDL(property); + var target = createTestElement(t, setup); + var animation = target.animate({ [idlName]: + ['2, 50%, 6, 10', + '6, 30%, 2, 2'] }, + { duration: 1000, fill: 'both' }); + testAnimationSamples( + animation, idlName, + [{ time: 500, expected: '4, 40%, 4, 6' }]); + }, property + ' supports animating as a dasharray (mixed number and percentage)'); + + }, + + // Note that stroke-dasharray is neither additive nor cumulative, so we should + // write this additive test case that animating value replaces underlying + // values. + // See https://www.w3.org/TR/SVG2/painting.html#StrokeDashing. + testAdditionOrAccumulation: function(property, setup, composite) { + test(function(t) { + var idlName = propertyToIDL(property); + var target = createTestElement(t, setup); + target.style[idlName] = '6, 30%, 2px'; + var animation = target.animate({ [idlName]: + ['1, 2, 3, 4, 5', + '6, 7, 8, 9, 10'] }, + { duration: 1000, composite: composite }); + testAnimationSamples( + animation, idlName, + [{ time: 0, expected: '1, 2, 3, 4, 5' }]); + }, property + ': dasharray'); + }, + + testAddition: function(property, setup) { + this.testAdditionOrAccumulation(property, setup, 'add'); + }, + + testAccumulation: function(property, setup) { + this.testAdditionOrAccumulation(property, setup, 'accumulate'); + }, +} + const types = { color: colorType, discrete: discreteType, filterList: filterListType, integer: integerType, + positiveInteger: positiveIntegerType, length: lengthType, percentage: percentageType, lengthPercentageOrCalc: lengthPercentageOrCalcType, + lengthPair: lengthPairType, positiveNumber: positiveNumberType, + opacity: opacityType, transformList: transformListType, visibility: visibilityType, boxShadowList: boxShadowListType, textShadowList: textShadowListType, + rect: rectType, + position: positionType, + dasharray: dasharrayType, }; diff --git a/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationTimeline/document-timeline.html b/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationTimeline/document-timeline.html index 55f90b66b8f..94d8de00093 100644 --- a/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationTimeline/document-timeline.html +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationTimeline/document-timeline.html @@ -4,6 +4,7 @@ +
        diff --git a/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/reverse.html b/tests/wpt/web-platform-tests/web-animations/timing-model/animations/reversing-an-animation.html similarity index 59% rename from tests/wpt/web-platform-tests/web-animations/interfaces/Animation/reverse.html rename to tests/wpt/web-platform-tests/web-animations/timing-model/animations/reversing-an-animation.html index 5552261119c..42093c9c98d 100644 --- a/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/reverse.html +++ b/tests/wpt/web-platform-tests/web-animations/timing-model/animations/reversing-an-animation.html @@ -1,7 +1,8 @@ -Animation.reverse() - +Reversing an animation + @@ -26,7 +27,7 @@ promise_test(function(t) { assert_equals(animation.playbackRate, -previousPlaybackRate, 'playbackRate should be inverted'); }); -}, 'reverse() inverts playbackRate'); +}, 'Reversing an animation inverts the playback rate'); promise_test(function(t) { var div = createDiv(t); @@ -42,7 +43,7 @@ promise_test(function(t) { assert_equals(animation.playState, 'running', 'Animation.playState should be "running" after reverse()'); }); -}, 'reverse() starts to play when pausing animation'); +}, 'Reversing an animation plays a pausing animation'); test(function(t) { var div = createDiv(t); @@ -51,9 +52,37 @@ test(function(t) { animation.reverse(); assert_equals(animation.currentTime, 50 * MS_PER_SEC, - 'reverse() should not change the currentTime ' + - 'if the currentTime is in the middle of animation duration'); -}, 'reverse() maintains the same currentTime'); + 'The current time should not change it is in the middle of ' + + 'the animation duration'); +}, 'Reversing an animation maintains the same current time'); + +test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, { duration: 200 * MS_PER_SEC, + delay: -100 * MS_PER_SEC }); + assert_equals(animation.playState, 'pending', + 'The playState is pending before we call reverse'); + + animation.reverse(); + + assert_equals(animation.playState, 'pending', + 'The playState is still pending after calling reverse'); +}, 'Reversing an animation does not cause it to leave the pending state'); + +promise_test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, { duration: 200 * MS_PER_SEC, + delay: -100 * MS_PER_SEC }); + var readyResolved = false; + animation.ready.then(() => { readyResolved = true; }); + + animation.reverse(); + + return Promise.resolve(() => { + assert_false(readyResolved, + 'ready promise should not have been resolved yet'); + }); +}, 'Reversing an animation does not cause it to resolve the ready promise'); test(function(t) { var div = createDiv(t); @@ -64,7 +93,8 @@ test(function(t) { assert_equals(animation.currentTime, 100 * MS_PER_SEC, 'reverse() should start playing from the animation effect end ' + 'if the playbackRate > 0 and the currentTime > effect end'); -}, 'reverse() when playbackRate > 0 and currentTime > effect end'); +}, 'Reversing an animation when playbackRate > 0 and currentTime > ' + + 'effect end should make it play from the end'); test(function(t) { var div = createDiv(t); @@ -76,7 +106,8 @@ test(function(t) { assert_equals(animation.currentTime, 100 * MS_PER_SEC, 'reverse() should start playing from the animation effect end ' + 'if the playbackRate > 0 and the currentTime < 0'); -}, 'reverse() when playbackRate > 0 and currentTime < 0'); +}, 'Reversing an animation when playbackRate > 0 and currentTime < 0 ' + + 'should make it play from the end'); test(function(t) { var div = createDiv(t); @@ -88,7 +119,8 @@ test(function(t) { assert_equals(animation.currentTime, 0, 'reverse() should start playing from the start of animation time ' + 'if the playbackRate < 0 and the currentTime < 0'); -}, 'reverse() when playbackRate < 0 and currentTime < 0'); +}, 'Reversing an animation when playbackRate < 0 and currentTime < 0 ' + + 'should make it play from the start'); test(function(t) { var div = createDiv(t); @@ -100,7 +132,8 @@ test(function(t) { assert_equals(animation.currentTime, 0, 'reverse() should start playing from the start of animation time ' + 'if the playbackRate < 0 and the currentTime > effect end'); -}, 'reverse() when playbackRate < 0 and currentTime > effect end'); +}, 'Reversing an animation when playbackRate < 0 and currentTime > effect ' + + 'end should make it play from the start'); test(function(t) { var div = createDiv(t); @@ -113,8 +146,34 @@ test(function(t) { 'reverse() should throw InvalidStateError ' + 'if the playbackRate > 0 and the currentTime < 0 ' + 'and the target effect is positive infinity'); -}, 'reverse() when playbackRate > 0 and currentTime < 0 ' + - 'and the target effect end is positive infinity'); +}, 'Reversing an animation when playbackRate > 0 and currentTime < 0 ' + + 'and the target effect end is positive infinity should throw an exception'); + +test(function(t) { + var animation = createDiv(t).animate({}, { duration: 100 * MS_PER_SEC, + iterations: Infinity }); + animation.currentTime = -200 * MS_PER_SEC; + + try { animation.reverse(); } catch(e) { } + + assert_equals(animation.playbackRate, 1, 'playbackRate remains unchanged'); +}, 'When reversing throws an exception, the playback rate remains unchanged'); + +test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, {duration: 100 * MS_PER_SEC, + iterations: Infinity}); + animation.currentTime = -200 * MS_PER_SEC; + animation.playbackRate = 0; + + try { + animation.reverse(); + } catch (e) { + assert_unreached(`Unexpected exception when calling reverse(): ${e}`); + } +}, 'Reversing animation when playbackRate = 0 and currentTime < 0 ' + + 'and the target effect end is positive infinity should NOT throw an ' + + 'exception'); test(function(t) { var div = createDiv(t); @@ -128,8 +187,9 @@ test(function(t) { 'reverse() should start playing from the start of animation time ' + 'if the playbackRate < 0 and the currentTime < 0 ' + 'and the target effect is positive infinity'); -}, 'reverse() when playbackRate < 0 and currentTime < 0 ' + - 'and the target effect end is positive infinity'); +}, 'Reversing an animation when playbackRate < 0 and currentTime < 0 ' + + 'and the target effect end is positive infinity should make it play ' + + 'from the start'); test(function(t) { var div = createDiv(t); @@ -143,7 +203,8 @@ test(function(t) { assert_equals(animation.currentTime, 50 * MS_PER_SEC, 'reverse() should not affect the currentTime if the playbackRate == 0'); t.done(); -}, 'reverse() when playbackRate == 0'); +}, 'Reversing when when playbackRate == 0 should preserve the current ' + + 'time and playback rate'); test(function(t) { var div = createDiv(t); diff --git a/tests/wpt/web-platform-tests/web-nfc/OWNERS b/tests/wpt/web-platform-tests/web-nfc/OWNERS index 84e375b2e71..38b95416d03 100644 --- a/tests/wpt/web-platform-tests/web-nfc/OWNERS +++ b/tests/wpt/web-platform-tests/web-nfc/OWNERS @@ -1 +1,4 @@ @Honry +@kenchris +@zolkis +@alexshalamov diff --git a/tests/wpt/web-platform-tests/web-nfc/idlharness.https.html b/tests/wpt/web-platform-tests/web-nfc/idlharness.https.html index 58144852f92..68de00797d7 100644 --- a/tests/wpt/web-platform-tests/web-nfc/idlharness.https.html +++ b/tests/wpt/web-platform-tests/web-nfc/idlharness.https.html @@ -20,12 +20,9 @@ interface Navigator {
        -enum NFCRecordType {
        -    "empty",
        -    "text",
        -    "url",
        -    "json",
        -    "opaque"
        +dictionary NFCMessage {
        +    sequence records;
        +    USVString           url;
         };
         
         typedef (DOMString or unrestricted double or ArrayBuffer or Dictionary) NFCRecordData;
        @@ -36,9 +33,12 @@ dictionary NFCRecord {
             NFCRecordData data;
         };
         
        -dictionary NFCMessage {
        -    sequence data;
        -    USVString           url;
        +enum NFCRecordType {
        +    "empty",
        +    "text",
        +    "url",
        +    "json",
        +    "opaque"
         };
         
         partial interface Navigator {
        @@ -57,20 +57,15 @@ interface NFC {
         
         callback MessageCallback = void (NFCMessage message);
         
        -enum NFCPushTarget {
        -    "tag",
        -    "peer",
        -    "any"
        -};
        -
         dictionary NFCPushOptions {
             NFCPushTarget       target = "any";
             unrestricted double timeout = Infinity;
             boolean             ignoreRead = true;
         };
         
        -enum NFCWatchMode {
        -    "web-nfc-only",
        +enum NFCPushTarget {
        +    "tag",
        +    "peer",
             "any"
         };
         
        @@ -80,6 +75,11 @@ dictionary NFCWatchOptions {
             USVString      mediaType = "";
             NFCWatchMode   mode = "web-nfc-only";
         };
        +
        +enum NFCWatchMode {
        +    "web-nfc-only",
        +    "any"
        +};
         
        -
        +

        KeyReporter

        ClickReporter

        -
        +
        +
        +
        +
        +

        DragReporter

        +
        +
        diff --git a/tests/wpt/web-platform-tests/webdriver/conftest.py b/tests/wpt/web-platform-tests/webdriver/conftest.py index 6dbcfea203e..ff4b229c12f 100644 --- a/tests/wpt/web-platform-tests/webdriver/conftest.py +++ b/tests/wpt/web-platform-tests/webdriver/conftest.py @@ -1,12 +1,14 @@ import pytest from support.fixtures import ( - create_frame, create_session, create_window, http, server_config, session, - url) + configuration, create_dialog, create_frame, create_window, http, + new_session, server_config, session, url) +pytest.fixture(scope="session")(configuration) +pytest.fixture()(create_dialog) pytest.fixture()(create_frame) -pytest.fixture()(create_session) pytest.fixture()(create_window) pytest.fixture()(http) +pytest.fixture(scope="function")(new_session) pytest.fixture()(server_config) pytest.fixture(scope="function")(session) pytest.fixture()(url) diff --git a/tests/wpt/web-platform-tests/webdriver/contexts.py b/tests/wpt/web-platform-tests/webdriver/contexts.py index 88657e2e6c6..4d54adf39c8 100644 --- a/tests/wpt/web-platform-tests/webdriver/contexts.py +++ b/tests/wpt/web-platform-tests/webdriver/contexts.py @@ -2,6 +2,7 @@ import json import pytest import webdriver + def window_size_supported(session): try: session.window.size = ("a", "b") diff --git a/tests/wpt/web-platform-tests/webdriver/elements/active.py b/tests/wpt/web-platform-tests/webdriver/elements/active.py new file mode 100644 index 00000000000..f639725fe22 --- /dev/null +++ b/tests/wpt/web-platform-tests/webdriver/elements/active.py @@ -0,0 +1,252 @@ +import pytest + +from support.asserts import assert_error, assert_success, assert_dialog_handled, assert_same_element +from support.fixtures import create_dialog +from support.inline import inline + +def assert_result_is_active_element(session, result): + """Ensure that the provided object is a successful WebDriver response + describing an element reference and that the referenced element matches the + element returned by the `activeElement` attribute of the current browsing + context's active document.""" + assert result.status == 200 + + from_js = session.execute_script("return document.activeElement;") + + if result.body["value"] is None: + assert from_js == None + else: + assert_same_element(session, result.body["value"], from_js) + +# > 1. If the current browsing context is no longer open, return error with +# > error code no such window. +def test_closed_context(session, create_window): + new_window = create_window() + session.window_handle = new_window + session.close() + + result = session.transport.send("GET", + "session/%s/element/active" % session.session_id) + + assert_error(result, "no such window") + +# [...] +# 2. Handle any user prompts and return its value if it is an error. +# [...] +# In order to handle any user prompts a remote end must take the following +# steps: +# 2. Run the substeps of the first matching user prompt handler: +# +# [...] +# - dismiss state +# 1. Dismiss the current user prompt. +# [...] +# +# 3. Return success. +def test_handle_prompt_dismiss(new_session): + _, session = new_session({"alwaysMatch": {"unhandledPromptBehavior": "dismiss"}}) + session.url = inline("

        Hello, World!

        ") + + create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1") + + result = session.transport.send("GET", + "session/%s/element/active" % session.session_id) + + assert_result_is_active_element(session, result) + assert_dialog_handled(session, "dismiss #1") + assert session.execute_script("return dismiss1;") == None + + create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2") + + result = session.transport.send("GET", + "session/%s/element/active" % session.session_id) + + assert_result_is_active_element(session, result) + assert_dialog_handled(session, "dismiss #2") + assert read_global(session, "dismiss2") == None + + create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3") + + result = session.transport.send("GET", + "session/%s/element/active" % session.session_id) + + assert_result_is_active_element(session, result) + assert_dialog_handled(session, "dismiss #3") + assert read_global(session, "dismiss3") == None + +# [...] +# 2. Handle any user prompts and return its value if it is an error. +# [...] +# In order to handle any user prompts a remote end must take the following +# steps: +# 2. Run the substeps of the first matching user prompt handler: +# +# [...] +# - accept state +# 1. Accept the current user prompt. +# [...] +# +# 3. Return success. +def test_handle_prompt_accept(new_session): + _, session = new_session({"alwaysMatch": {"unhandledPromptBehavior": "accept"}}) + session.url = inline("

        Hello, World!

        ") + create_dialog(session)("alert", text="accept #1", result_var="accept1") + + result = session.transport.send("GET", + "session/%s/element/active" % session.session_id) + + assert_result_is_active_element(session, result) + assert_dialog_handled(session, "accept #1") + assert read_global(session, "accept1") == None + + create_dialog(session)("confirm", text="accept #2", result_var="accept2") + + result = session.transport.send("GET", + "session/%s/element/active" % session.session_id) + + assert_result_is_active_element(session, result) + assert_dialog_handled(session, "accept #2") + assert read_global(session, "accept2"), True + + create_dialog(session)("prompt", text="accept #3", result_var="accept3") + + result = session.transport.send("GET", + "session/%s/element/active" % session.session_id) + + assert_result_is_active_element(session, result) + assert_dialog_handled(session, "accept #3") + assert read_global(session, "accept3") == "" + +# [...] +# 2. Handle any user prompts and return its value if it is an error. +# [...] +# In order to handle any user prompts a remote end must take the following +# steps: +# 2. Run the substeps of the first matching user prompt handler: +# +# [...] +# - missing value default state +# - not in the table of simple dialogs +# 1. Dismiss the current user prompt. +# 2. Return error with error code unexpected alert open. +def test_handle_prompt_missing_value(session, create_dialog): + session.url = inline("

        Hello, World!

        ") + + create_dialog("alert", text="dismiss #1", result_var="dismiss1") + + result = session.transport.send("GET", + "session/%s/element/active" % session.session_id) + + assert_error(result, "unexpected alert open") + assert_dialog_handled(session, "dismiss #1") + assert session.execute_script("return accept1;") == None + + create_dialog("confirm", text="dismiss #2", result_var="dismiss2") + + result = session.transport.send("GET", + "session/%s/element/active" % session.session_id) + + assert_error(result, "unexpected alert open") + assert_dialog_handled(session, "dismiss #2") + assert session.execute_script("return dismiss2;") == False + + create_dialog("prompt", text="dismiss #3", result_var="dismiss3") + + result = session.transport.send("GET", + "session/%s/element/active" % session.session_id) + + assert_error(result, "unexpected alert open") + assert_dialog_handled(session, "dismiss #3") + assert session.execute_script("return dismiss3;") == None + +# > [...] +# > 3. Let active element be the active element of the current browsing +# > context's document element. +# > 4. Let active web element be the JSON Serialization of active element. +# > 5. Return success with data active web element. +def test_success_document(session): + session.url = inline(""" + +

        Heading

        + + + +

        Another element

        + """) + result = session.transport.send("GET", "session/%s/element/active" % session.session_id) + + assert_result_is_active_element(session, result) + +def test_sucess_input(session): + session.url = inline(""" + +

        Heading

        + + +

        Another element

        + """) + result = session.transport.send("GET", "session/%s/element/active" % session.session_id) + + assert_result_is_active_element(session, result) + +def test_sucess_input_non_interactable(session): + session.url = inline(""" + +

        Heading

        + + +

        Another element

        + """) + result = session.transport.send("GET", "session/%s/element/active" % session.session_id) + + assert_result_is_active_element(session, result) + +def test_success_explicit_focus(session): + session.url = inline(""" + +

        Heading

        + + + """) + + session.execute_script("document.body.getElementsByTagName('h1')[0].focus();") + result = session.transport.send("GET", "session/%s/element/active" % session.session_id) + assert_result_is_active_element(session, result) + + session.execute_script("document.body.getElementsByTagName('input')[0].focus();") + result = session.transport.send("GET", "session/%s/element/active" % session.session_id) + assert_result_is_active_element(session, result) + + session.execute_script("document.body.getElementsByTagName('iframe')[0].focus();") + result = session.transport.send("GET", "session/%s/element/active" % session.session_id) + assert_result_is_active_element(session, result) + + session.execute_script("document.body.getElementsByTagName('iframe')[0].focus();") + session.execute_script("document.body.getElementsByTagName('iframe')[0].remove();") + result = session.transport.send("GET", "session/%s/element/active" % session.session_id) + assert_result_is_active_element(session, result) + + session.execute_script("document.body.appendChild(document.createElement('textarea'));") + result = session.transport.send("GET", "session/%s/element/active" % session.session_id) + assert_result_is_active_element(session, result) + +def test_success_iframe_content(session): + session.url = inline("") + session.execute_script(""" + var iframe = document.createElement('iframe'); + document.body.appendChild(iframe); + var input = iframe.contentDocument.createElement('input'); + iframe.contentDocument.body.appendChild(input); + input.focus();""") + + result = session.transport.send("GET", "session/%s/element/active" % session.session_id) + + assert_result_is_active_element(session, result) + +def test_sucess_without_body(session): + session.url = inline("") + session.execute_script("document.body.remove();") + + result = session.transport.send("GET", "session/%s/element/active"% session.session_id) + + assert_result_is_active_element(session, result) diff --git a/tests/wpt/web-platform-tests/webdriver/get_title.py b/tests/wpt/web-platform-tests/webdriver/get_title.py new file mode 100644 index 00000000000..53001a1ea9f --- /dev/null +++ b/tests/wpt/web-platform-tests/webdriver/get_title.py @@ -0,0 +1,282 @@ +import pytest +import time + +from support.asserts import assert_error, assert_success, assert_dialog_handled +from support.fixtures import create_dialog +from support.inline import inline + +def read_global(session, name): + return session.execute_script("return %s;" % name) + +# 1. If the current top-level browsing context is no longer open, return error +# with error code no such window. +def test_title_from_closed_context(session, create_window): + new_window = create_window() + session.window_handle = new_window + session.close() + + result = session.transport.send("GET", + "session/%s/title" % session.session_id) + + assert_error(result, "no such window") + +# [...] +# 2. Handle any user prompts and return its value if it is an error. +# [...] +# In order to handle any user prompts a remote end must take the following +# steps: +# 2. Run the substeps of the first matching user prompt handler: +# +# [...] +# - dismiss state +# 1. Dismiss the current user prompt. +# [...] +# +# 3. Return success. +def test_title_handle_prompt_dismiss(new_session): + _, session = new_session({"alwaysMatch": {"unhandledPromptBehavior": "dismiss"}}) + session.url = inline("WD doc title") + + expected_title = read_global(session, "document.title") + create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1") + + result = session.transport.send("GET", + "session/%s/title" % session.session_id) + + assert_success(result, expected_title) + assert_dialog_handled(session, "dismiss #1") + assert read_global(session, "dismiss1") == None + + expected_title = read_global(session, "document.title") + create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2") + + result = session.transport.send("GET", + "session/%s/title" % session.session_id) + + assert_success(result, expected_title) + assert_dialog_handled(session, "dismiss #2") + assert read_global(session, "dismiss2") == None + + expected_title = read_global(session, "document.title") + create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3") + + result = session.transport.send("GET", + "session/%s/title" % session.session_id) + + assert_success(result, expected_title) + assert_dialog_handled(session, "dismiss #3") + assert read_global(session, "dismiss3") == None + +# [...] +# 2. Handle any user prompts and return its value if it is an error. +# [...] +# In order to handle any user prompts a remote end must take the following +# steps: +# 2. Run the substeps of the first matching user prompt handler: +# +# [...] +# - accept state +# 1. Accept the current user prompt. +# [...] +# +# 3. Return success. +def test_title_handle_prompt_accept(new_session): + _, session = new_session({"alwaysMatch": {"unhandledPromptBehavior": "accept"}}) + session.url = inline("WD doc title") + create_dialog(session)("alert", text="accept #1", result_var="accept1") + + expected_title = read_global(session, "document.title") + result = session.transport.send("GET", + "session/%s/title" % session.session_id) + + assert_success(result, expected_title) + assert_dialog_handled(session, "accept #1") + assert read_global(session, "accept1") == None + + expected_title = read_global(session, "document.title") + create_dialog(session)("confirm", text="accept #2", result_var="accept2") + + result = session.transport.send("GET", + "session/%s/title" % session.session_id) + + assert_success(result, expected_title) + assert_dialog_handled(session, "accept #2") + assert read_global(session, "accept2"), True + + expected_title = read_global(session, "document.title") + create_dialog(session)("prompt", text="accept #3", result_var="accept3") + + result = session.transport.send("GET", + "session/%s/title" % session.session_id) + + assert_success(result, expected_title) + assert_dialog_handled(session, "accept #3") + assert read_global(session, "accept3") == "" + +# [...] +# 2. Handle any user prompts and return its value if it is an error. +# [...] +# In order to handle any user prompts a remote end must take the following +# steps: +# 2. Run the substeps of the first matching user prompt handler: +# +# [...] +# - missing value default state +# - not in the table of simple dialogs +# 1. Dismiss the current user prompt. +# 2. Return error with error code unexpected alert open. +def test_title_handle_prompt_missing_value(session, create_dialog): + session.url = inline("WD doc title") + create_dialog("alert", text="dismiss #1", result_var="dismiss1") + + result = session.transport.send("GET", + "session/%s/title" % session.session_id) + + assert_error(result, "unexpected alert open") + assert_dialog_handled(session, "dismiss #1") + assert read_global(session, "accept1") == None + + create_dialog("confirm", text="dismiss #2", result_var="dismiss2") + + result = session.transport.send("GET", + "session/%s/title" % session.session_id) + + assert_error(result, "unexpected alert open") + assert_dialog_handled(session, "dismiss #2") + assert read_global(session, "dismiss2") == False + + create_dialog("prompt", text="dismiss #3", result_var="dismiss3") + + result = session.transport.send("GET", + "session/%s/title" % session.session_id) + + assert_error(result, "unexpected alert open") + assert_dialog_handled(session, "dismiss #3") + assert read_global(session, "dismiss3") == None + +# The behavior of the `window.print` function is platform-dependent and may not +# trigger the creation of a dialog at all. Therefore, this test should only be +# run in contexts that support the dialog (a condition that may not be +# determined automatically). +#def test_title_with_non_simple_dialog(session): +# document = "With non-simple dialog

        Hello

        " +# spawn = """ +# var done = arguments[0]; +# setTimeout(function() { +# done(); +# }, 0); +# setTimeout(function() { +# window['print'](); +# }, 0); +# """ +# session.url = inline(document) +# session.execute_async_script(spawn) +# +# result = session.transport.send("GET", +# "session/%s/title" % session.session_id) +# assert_error(result, "unexpected alert open") + +# [...] +# 3. Let title be the initial value of the title IDL attribute of the current +# top-level browsing context's active document. +# 4. Return success with data title. +# [...] +# The title attribute must, on getting, run the following algorithm: +# [...] +# 2. Otherwise, let value be the child text content of the title element [...] +# [...] +# 4. Return value. +def test_title_from_top_context(session): + session.url = inline("Foobar

        Hello

        ") + + result = session.transport.send("GET", + "session/%s/title" % session.session_id) + assert_success(result, read_global(session, "document.title")) + +# [...] +# 3. Let title be the initial value of the title IDL attribute of the current +# top-level browsing context's active document. +# 4. Return success with data title. +# [...] +# The title attribute must, on getting, run the following algorithm: +# [...] +# 2. Otherwise, let value be the child text content of the title element [...] +# +# The title element of a document is the first title element in the document +# (in tree order), if there is one, or null otherwise. +# +# [...] +# 4. Return value. +def test_title_with_duplicate_element(session): + session.url = inline("FirstSecond") + + result = session.transport.send("GET", + "session/%s/title" % session.session_id) + + assert_success(result, read_global(session, "document.title")) + +# [...] +# 3. Let title be the initial value of the title IDL attribute of the current +# top-level browsing context's active document. +# 4. Return success with data title. +# [...] +# The title attribute must, on getting, run the following algorithm: +# [...] +# 2. Otherwise, let value be the child text content of the title element, or +# the empty string if the title element is null. +# [...] +# 4. Return value. +def test_title_without_element(session): + session.url = inline("

        Hello

        ") + + result = session.transport.send("GET", + "session/%s/title" % session.session_id) + + assert_success(result, read_global(session, "document.title")) + +# [...] +# 3. Let title be the initial value of the title IDL attribute of the current +# top-level browsing context's active document. +# 4. Return success with data title. +def test_title_after_modification(session): + session.url = inline("Initial

        Hello

        ") + session.execute_script("document.title = 'updated'") + + result = session.transport.send("GET", + "session/%s/title" % session.session_id) + + assert_success(result, read_global(session, "document.title")) + +# [...] +# 3. Let title be the initial value of the title IDL attribute of the current +# top-level browsing context's active document. +# 4. Return success with data title. +# [...] +# The title attribute must, on getting, run the following algorithm: +# [...] +# 2. Otherwise, let value be the child text content of the title element [...] +# 3. Strip and collapse ASCII whitespace in value. +# 4. Return value. +def test_title_strip_and_collapse(session): + document = " a b\tc\nd\t \n e\t\n

        Hello

        " + session.url = inline(document) + + result = session.transport.send("GET", + "session/%s/title" % session.session_id) + + assert_success(result, read_global(session, "document.title")) + +# [...] +# 3. Let title be the initial value of the title IDL attribute of the current +# top-level browsing context's active document. +# 4. Return success with data title. +def test_title_from_frame(session, create_frame): + session.url = inline("Parentparent") + + session.switch_frame(create_frame()) + session.switch_frame(create_frame()) + + result = session.transport.send("GET", + "session/%s/title" % session.session_id) + + assert_success(result, read_global(session, "document.title")) diff --git a/tests/wpt/web-platform-tests/webdriver/support/asserts.py b/tests/wpt/web-platform-tests/webdriver/support/asserts.py index f7ad713575c..a90934078fb 100644 --- a/tests/wpt/web-platform-tests/webdriver/support/asserts.py +++ b/tests/wpt/web-platform-tests/webdriver/support/asserts.py @@ -1,3 +1,6 @@ +from webdriver.client import Element, element_key +from webdriver.error import WebDriverException + # WebDriver specification ID: dfn-error-response-data errors = { "element click intercepted": 400, @@ -75,3 +78,42 @@ def assert_success(response, value): assert response.status == 200 assert response.body["value"] == value + +def assert_dialog_handled(session, expected_text): + result = session.transport.send("GET", + "session/%s/alert/text" % session.session_id) + + # If there were any existing dialogs prior to the creation of this + # fixture's dialog, then the "Get Alert Text" command will return + # successfully. In that case, the text must be different than that + # of this fixture's dialog. + try: + assert_error(result, "no such alert") + except: + assert (result.status == 200 and + result.body["value"] != expected_text), ( + "Dialog with text '%s' was not handled." % expected_text) + +def assert_same_element(session, a, b): + """Verify that two element references describe the same element.""" + assert isinstance(a, dict), "Actual value is not a dictionary" + assert isinstance(b, dict), "Expected value is not a dictionary" + assert element_key in a, "Actual value does not describe an element" + assert element_key in b, "Expected value does not describe an element" + + if a[element_key] == b[element_key]: + return + + message = ("Expected element references to describe the same element, " + + "but they did not.") + + # Attempt to provide more information, accounting for possible errors such + # as stale element references or not visible elements. + try: + a_markup = session.execute_script("return arguments[0].outerHTML;", args=[a]) + b_markup = session.execute_script("return arguments[0].outerHTML;", args=[b]) + message += " Actual: `%s`. Expected: `%s`." % (a_markup, b_markup) + except WebDriverException: + pass + + raise AssertionError(message) diff --git a/tests/wpt/web-platform-tests/webdriver/support/fixtures.py b/tests/wpt/web-platform-tests/webdriver/support/fixtures.py index 91b93757cbc..bd0daee03f9 100644 --- a/tests/wpt/web-platform-tests/webdriver/support/fixtures.py +++ b/tests/wpt/web-platform-tests/webdriver/support/fixtures.py @@ -1,9 +1,11 @@ import json import os import urlparse +import re import webdriver +from support.asserts import assert_error from support.http_request import HTTPRequest from support import merge_dictionaries @@ -31,6 +33,7 @@ def _dismiss_user_prompts(session): session.window_handle = current_window + def _restore_windows(session): """Closes superfluous windows opened by the test without ending the session implicitly by closing the last window. @@ -39,11 +42,12 @@ def _restore_windows(session): for window in _windows(session, exclude=[current_window]): session.window_handle = window - if len(session.window_handles) > 1: + if len(session.handles) > 1: session.close() session.window_handle = current_window + def _switch_to_top_level_browsing_context(session): """If the current browsing context selected by WebDriver is a `` or an `